oniwan111’s blog

学生が少しでも社会の役に立てればいいなと思って始めたブログです

xtensorでcsvファイル読み込み

学生です、バイトしたいです

C++ でデータ分析の勉強中です 今日はxtensorでcsvファイルを読み込む方法を一応メモ

#include <iostream>
#include<string>
#include<fstream>
#include "xtensor/xarray.hpp"
#include "xtensor/xio.hpp"
#include "xtensor/xview.hpp"
#include "xtensor/xcsv.hpp"


std::ifstream ifs("datasets/mysample.csv");
xt::xcsv_tensor<double> arr = xt::load_csv<double>(ifs);
std::cout << arr;
{{      0.,    8306.,  418971.},
 {      1.,    6502.,  398123.},
 {      2.,    9984.,  314188.},
 {      3.,    3661.,  294206.},
 {      4.,    8604.,  227276.},
 {      5.,    8308.,  216597.},
 {      6.,    4597.,  213376.},
 {      7.,    7974.,  211277.},
 {      8.,    4188.,  205661.},
 {      9.,    5020.,  204065.},
 {     10.,    7203.,  195476.},
 {     11.,    3436.,  193099.},
 {     12.,    3793.,  192359.},
 {     13.,    8411.,  190834.},
 {     14.,    6758.,  188650.},
 {     15.,    6301.,  186052.},
 {     16.,    8750.,  173517.},
 {     17.,    4755.,  159607.},
 {     18.,    7270.,  157577.},
 {     19.,    8058.,  156567.},
 {     20.,    8316.,  155541.},
 {     21.,    3656.,  148888.},
 {     22.,    7940.,  147352.},
 {     23.,    3402.,  146399.},
 {     24.,    4503.,  146365.},
 {     25.,    2914.,  146003.},
 {     26.,    7267.,  141316.},
 {     27.,    6752.,  140374.},
 {     28.,    7261.,  139152.},
 {     29.,    7186.,  138668.},
 {     30.,    3825.,  137742.},
 {     31.,    3810.,  137667.},
 {     32.,    1570.,  136399.},
 {     33.,    8802.,  136213.},
 {     34.,    6503.,  136019.},
 {     35.,    5401.,  135692.},
 {     36.,    5411.,  132910.},
 {     37.,    9432.,  131192.},
 {     38.,    8002.,  130224.},
 {     39.,    8801.,  128881.},
 {     40.,    3667.,  124909.},
 {     41.,    2432.,  122169.},
 {     42.,    8001.,  122088.},
 {     43.,    7201.,  120819.},
 {     44.,    6326.,  119779.},
 {     45.,    6501.,  119476.},
 {     46.,    9437.,  117868.},
 {     47.,    1605.,  117667.},
 {     48.,    7269.,  115749.},
 {     49.,    8031.,  114572.},
 {     50.,    4528.,  114312.},
 {     51.,    6702.,  114261.},
 {     52.,    2503.,  111533.},
 {     53.,    8591.,  111404.},
 {     54.,    7202.,  110461.},
 {     55.,    4452.,  109186.},
 {     56.,    8795.,  107823.},
 {     57.,    3092.,  106870.},
 {     58.,    7751.,  106361.},
 {     59.,    8035.,  102908.},
 {     60.,    3853.,  102540.},
 {     61.,    6479.,  100873.},
 {     62.,    8309.,   97120.},
 {     63.,    8766.,   97103.},
 {     64.,    2802.,   96490.},
 {     65.,    6857.,   96436.},
 {     66.,    9433.,   95839.},
 {     67.,    5802.,   94884.},
 {     68.,    8725.,   94555.},
 {     69.,    4502.,   93994.},
 {     70.,    8630.,   93890.},
 {     71.,    9064.,   93290.},
 {     72.,    9201.,   93022.},
 {     73.,    4004.,   92159.},
 {     74.,    9503.,   91625.},
 {     75.,    6471.,   91009.},
 {     76.,    8732.,   90398.},
 {     77.,    4579.,   89816.},
 {     78.,    4063.,   89395.},
 {     79.,    7717.,   89215.},
 {     80.,    3672.,   87644.},
 {     81.,    4288.,   87455.},
 {     82.,    8053.,   86120.},
 {     83.,    1357.,   85734.},
 {     84.,    8113.,   84550.},
 {     85.,    7211.,   83858.},
 {     86.,    4568.,   83360.},
 {     87.,    5108.,   82943.},
 {     88.,    2351.,   82526.},
 {     89.,    7011.,   81585.},
 {     90.,    6723.,   81403.},
 {     91.,    1928.,   81236.},
 {     92.,    7272.,   79201.},
 {     93.,    3382.,   78057.},
 {     94.,    6976.,   77774.},
 {     95.,    9024.,   77145.},
 {     96.,    4911.,   76910.},
 {     97.,    3401.,   75623.},
 {     98.,    4507.,   75543.},
 {     99.,    6971.,   75266.},
 {    100.,    2181.,   75221.},
 {    101.,    5406.,   74887.},
 {    102.,    4578.,   74312.},
 {    103.,    1925.,   73744.},
 {    104.,    6902.,   73557.},
 {    105.,    4927.,   72828.},
 {    106.,    9702.,   72699.},
 {    107.,    2502.,   71234.},
 {    108.,    7575.,   71160.},
 {    109.,    3758.,   70947.},
 {    110.,    5334.,   70655.},
 {    111.,    1963.,   70627.},
 {    112.,    2371.,   70454.},
 {    113.,    3099.,   70345.},
 {    114.,    6988.,   68846.},
 {    115.,    5938.,   68775.},
 {    116.,    3807.,   68246.},
 {    117.,    3231.,   66996.},
 {    118.,    6770.,   66788.},
 {    119.,    9502.,   66381.},
 {    120.,    4661.,   66170.},
 {    121.,    6141.,   66117.},
 {    122.,    6506.,   65454.},
 {    123.,    6724.,   65378.},
 {    124.,    5105.,   64293.},
 {    125.,    7752.,   64108.},
 {    126.,    8086.,   63896.},
 {    127.,    3659.,   63832.},
 {    128.,    4689.,   63326.},
 {    129.,    5817.,   63184.},
 {    130.,    6952.,   63045.},
 {    131.,    6460.,   62679.},
 {    132.,    3632.,   62673.},
 {    133.,    6981.,   62513.},
 {    134.,    7741.,   62196.},
 {    135.,    9202.,   62099.},
 {    136.,    3782.,   62093.},
 {    137.,    6098.,   61109.},
 {    138.,    4508.,   60812.},
 {    139.,    8601.,   60744.},
 {    140.,    4536.,   60715.},
 {    141.,    9142.,   60609.},
 {    142.,    4182.,   60399.},
 {    143.,    6954.,   60326.},
 {    144.,    8729.,   60277.},
 {    145.,    4901.,   60178.},
 {    146.,    3405.,   60171.},
 {    147.,    1808.,   59736.},
 {    148.,    8252.,   59305.},
 {    149.,    9531.,   59279.},
 {    150.,    7731.,   59051.},
 {    151.,    6753.,   59012.},
 {    152.,    9962.,   58430.},
 {    153.,    6448.,   58362.},
 {    154.,    6481.,   57342.},
 {    155.,    4321.,   57112.},
 {    156.,    4202.,   56506.},
 {    157.,    4523.,   56416.},
 {    158.,    4062.,   56340.},
 {    159.,    9532.,   56244.},
 {    160.,    6594.,   56104.},
 {    161.,    6315.,   56091.},
 {    162.,    3981.,   55942.},
 {    163.,    2413.,   55272.},
 {    164.,    3668.,   55228.},
 {    165.,    5333.,   55166.},
 {    166.,    5110.,   55091.},
 {    167.,    3639.,   54906.},
 {    168.,    6367.,   54439.},
 {    169.,    6305.,   54376.},
 {    170.,    9508.,   53851.},
 {    171.,    9513.,   53705.},
 {    172.,    8267.,   53591.},
 {    173.,    2379.,   53533.},
 {    174.,    6619.,   53422.},
 {    175.,    3903.,   53348.},
 {    176.,    7205.,   52743.},
 {    177.,    3932.,   52461.},
 {    178.,    7707.,   52243.},
 {    179.,    6875.,   52226.},
 {    180.,    9501.,   52214.},
 {    181.,    6841.,   52177.},
 {    182.,    4912.,   52117.},
 {    183.,    4151.,   51715.},
 {    184.,    9021.,   51465.},
 {    185.,    3197.,   51262.},
 {    186.,    1802.,   50640.},
 {    187.,    6804.,   50065.},
 {    188.,    4902.,   49891.},
 {    189.,    4185.,   49887.},
 {    190.,    9603.,   49797.},
 {    191.,    6787.,   49147.},
 {    192.,    6473.,   49133.},
 {    193.,    2871.,   48941.},
 {    194.,    4355.,   48913.},
 {    195.,    4204.,   48870.},
 {    196.,    9697.,   48697.},
 {    197.,    8697.,   48305.},
 {    198.,    9449.,   47960.},
 {    199.,    9735.,   47597.}}

ソースコードを読んでくれば数分で終わる話ですが、僕はテンプレートを使い慣れていなくてハマってしまったのでメモ

Xtensor を使いたい

色々あって、アウトプットをしていこうと思いました

現在、無職学生です バイトしたいです

Xtensorについては

github.com

を見ていただければわかると思います

C++ で書かれた行列計算ライブラリらしいです

みんな大好きAnacondaを使うことによって簡単にinstallすることができるらしいです

ついでに、このチーム(QuantStack)が開発しているらしい xeus-clingも導入していきたいと思います

Anaconda の導入

www.anaconda.com

ここからファイルをダウンロードしてきます

ダウンロードディレクトリからファイルを移動させてきて

bash

bash Anaconda3-5.2.0-Linux-x86_64.sh

して面倒なので全部デフォルトでYesにしました

conda create -n cilng
source activate cling

したあとに

conda install xeus-cling notebook -c QuantStack -c conda-forge

でしばらく待ちます(僕の回線が遅いためかめっちゃ時間かかった...)

jupyter notebook

をすると、C++14のカーネルが追加されているのでそれを起動


#include<iostream>
std::cout << "Hamutarou" << std::endl;

Hamutarou

xtensorのinstall

とっても簡単ですね

conda install -c conda-forge xtensor

するだけです

そしてJupyter 上で

#include <iostream>
#include "xtensor/xarray.hpp"
#include "xtensor/xio.hpp"
#include "xtensor/xview.hpp"

xt::xarray<double> arr1
  {{1.0, 2.0, 3.0},
   {2.0, 5.0, 7.0},
   {2.0, 5.0, 7.0}};

xt::xarray<double> arr2
  {5.0, 6.0, 7.0};

xt::xarray<double> res = xt::view(arr1, 1) + arr2;

std::cout << res;
{  7.,  11.,  14.}

と出ました

Xframeをinstall

実は僕のメインはこのXframeを使うことです

適当に

git clone https://github.com/QuantStack/xframe.git

してcmakeしたら動きました

以下結果になります

#include <string>
#include <iostream>

#include "xtl/xbasic_fixed_string.hpp"

#include "xtensor/xio.hpp"

#include "xframe/xvariable.hpp"
#include "xframe/xvariable_view.hpp"
using fstring = xtl::xfixed_string<55>;

using data_type = xt::xoptional_assembly<xt::xarray<double>, xt::xarray<bool>>;
using coordinate_type = xf::xcoordinate<fstring, data_type::size_type>;

using variable_type = xf::xvariable<coordinate_type, data_type>;
// Creation of an axis with `int` labels, given the size
std::cout << xf::axis(15);
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, )
// `int` labels, given the start and stop
std::cout << xf::axis(5, 15);
(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, )
// `char` labels, given the start and stop
std::cout << xf::axis('d', 'r', char(2));
(d, f, h, j, l, n, p, )
data_type data1 = {{ 1., 2., 3.},
                  { 4., 5., 6.},
                  { 7., 8., 9.}};
data1(0, 2).has_value() = false;
data1(1, 0).has_value() = false;
auto var1 = variable_type(
    data1,
    {
        {"abscissa", xf::axis({'a', 'c', 'd'})},
        {"ordinate", xf::axis({1, 2, 4})}
    }
);
std::cout << var1.select({{"abscissa", 'a'}, {"ordinate", 1}});
1
std::cout << var1.locate('c', 2);
5
std::cout << var1;
{{  1,   2, N/A},
 {N/A,   5,   6},
 {  7,   8,   9}}
Coordinates:
abscissa: (a, c, d, )
ordinate: (1, 2, 4, )
auto var2 = variable_type(
    data1, 
    {
        {"abscissa", xf::axis({'a', 'c', 'e'})},
        {"ordinate", xf::axis({1, 3, 4})}
    }
);
variable_type res1 = var1 + var2;
std::cout << res1;
{{  2, N/A},
 {N/A,  12}}
Coordinates:
abscissa: (a, c, )
ordinate: (1, 4, )
std::cout << var2;
{{  1,   2, N/A},
 {N/A,   5,   6},
 {  7,   8,   9}}
Coordinates:
abscissa: (a, c, e, )
ordinate: (1, 3, 4, )

Pandasで逐次処理していくと何日間かかかってしまうので、C++でDataFrameないかなーとか考えてたらXframeにたどり着きました

このXframe、まだ開発途中みたいなのですが、僕が利用してユーザーの意見を届けようと思っています

次からは、XtensorやXframeをもう少し詳しく記事にしていこうかと思います

xtensorでcsvファイルを読み込む方法を追加しました

oniwan111.hatenablog.com

np.nanやnp.inf,-np.infのsortの挙動について

import numpy as np
h = np.array([1,2,np.nan,np.inf,np.nan,5,np.nan,np.inf,-np.inf])
s = np.argsort(h)
s
array([8, 0, 1, 5, 3, 7, 2, 4, 6])
np.sort(h)
array([-inf,   1.,   2.,   5.,  inf,  inf,  nan,  nan,  nan])

MySQLでdatadirを増設したHDDにしたかった話

以下を参考にさせていただきました

hackmylife.net

 

シンボリックリンク!!!

MySQL

CREATE hoge と mkdir hoge

が一緒だなんて知りませんでした

 

この技便利なので是非!!!

MySQLでCan't change dir [errno13]が出た話

備忘録として

 

MySQLで新しいデータベースを新しいHDDにつくろうとしてもできない

しかも、

chmod -R 777 hoge

しても全然ダメ

 

fstabでオプションいじっても全然ダメ...

 

 

「結論」

僕はUbuntuを使っているのですが、

Apparmorが原因でした

 

以下のページのようにAppAromorをオフにすると出来ました

eset-support.canon-its.jp

UbuntuSELinuxではなくて、AppAromorなんですね

知りませんでした

 

 

AtCoder Beginner Contest 047 in Python A-C

ABC 047 A-Cまで解いてみました
最初からと最後からを解いてみています

これ、後ろに行けば行くほど難しくありませんか???笑
最初の方の問題だったらC問題もスラスラ解けるのに、B問題から結構つまずきました...

以下、解答です

A.

#prepare
f = True
List = []
#input
List = map(int,raw_input().split())

#evaluate
List.sort()

if not List[0]+List[1] == List[2]:
    f = False

#output
if f:
    print 'Yes'
else:
    print 'No'

B.

#prepare
L = []
Q = []

#input
W, H, N, = map(int,raw_input().split())
for i in range(N):
    L.append(map(int,raw_input().split()))
x1=0
x2=W
y1=0
y2=H

#calculate
Q = [row[2] for row in L]


for k in range(N):
    if Q[k] == 1:
        x1 = max(x1,L[k][0])
    elif Q[k] == 2:
        x2 = min(x2,L[k][0])
    elif Q[k] == 3:
        y1 = max(y1,L[k][1])
    elif Q[k] == 4:
        y2 = min(y2,L[k][1])

print max(0,x2-x1) * max(0,y2-y1)

C.

#prepare
cnt = 0
#input
S = raw_input()

#change to list
for i in range(len(S)-1):
    if S[i] != S[i+1]:
        cnt += 1
print cnt

今回学んだことは、Bのリスト内包表記です
これによって、二次元配列の列が取得出来ました
以下を参考にしました
qiita.com


(でも、AtCoderってnumpy使ってもいいのかも...?)
numpyだったら検索にだいぶ引っかかるのでそれでやったほうがいいかもしれません

C問題は完全にわかりませんでした笑
この解答は参考にさせていただきました、ありがとうございました

だいぶ実装は、早くできるようになってきました
あとは、考えられる頭があれば...笑

TOEFL Writing Independent template

TOEFL Independent のテンプレートを書いておきます

僕はこのテンプレートを使用して、W25を取ることができました

 

テンプレート

 

 Recently in modern society, people’s sense of values has been more diverse and they have various opinions as to [...............]. Some people believe that [....................]. Others think that [................]. If asked, both groups would present compelling arguments to corroborate their assertions. As far as I’m concerned, I adopt a firm position that [....................]. I would like to give two reasons below to explain why I came to conclusion.

    First, [...................]. For example, [.................]. [......................]. I think that this is the case for many other people as well. In fact, I believe that [...................]. 

    Second, [......................]. Take a case of [.................], [.............................].

    In conclusion, I’m definitely for the idea that [..............................]. I know that there are a lot of people who disagree with my opinion. However, considering two reasons in paragraphs I mentioned above, I believe that [............................].

 

 

[............]の部分には題意に沿って、入れてください

僕のテンプレートの味噌は、第一段落と最終段落で語数を稼ぐことです

特に第一段落で、難しい語彙や言い回しを多用することで、ボキャブラリー力をアピールします

本番当日は、まず第一段落、最終段落を書いてしまうことで時間を節約して、第二、第三段落を考えることが出来ました

(ついてでに家では、これを高速でタイピングできるように練習しました)

 

TOEFLのIndependentはこのテンプレートを覚えてしまえば、だれでも簡単に点数を取ることができると思います

留学を考えてる千葉大生!がんばりましょう!!