Oh! Yummy!!

プログラミングとか投資のこととかご飯のこととかを書きます。

weka csv読み込み シェル上からエラー特定ワンライナー

筆者が研究中にcsv形式のデータをwekaに読みこませるとエラーが出たので,原因部分を特定するために書いたワンライナーをメモ

pythonのpandasなどでは統計量をまとめて取得できる.

import pandas as pd
data = pd.read_csv("sample.csv")
a = data.describe()

これによりaには

count
mean
std
min
25%
50%
75%
max

が格納されている.
各統計量の説明は本筋ではないので省く.
このような処理によって以下の様なデータができたとして

,count,mean,std,min,25%,50%,75%,max
file1,46,5.0,9.0,0.0,3.0,5.5,7.2,11.0
file2,65,6.7,8.0,0.0,3.2,6.5,8.8,12.1
...

筆者の場合,約9000行,650列ほどデータがあるのでエラーがあると特定するのが困難である.
そこで,シェル上で以下を実行し,その都度wekaに読み込ませて原因を特定する手法をとった.

$cat filename.csv | grep count | awk -F, '{printf("%s,",$1);{for(i=n;i<m;i++)printf("%s,",$i)}printf("%s\n",$m)}' > newfile.csv
$cat filename.csv | grep file | awk -F, '{printf("%s,",$1);{for(i=n;i<m;i++)printf(%lf,",$i)}printf("%lf\n",$m)}' >> newfile.csv

いわゆるシェル芸(ワンライナー)というものである.
2行になっているのは許して下さい(こんなのシェル芸じゃないという意見は受け入れます.)
nとmの値を書き換えてエラーが出たら範囲を半分,さらにその半分と、エラーの位置を特定していく.

結果的には % という文字が原因だった
wekaでは%が読み込めないようだ(設定によるだろうか?)
%をperに書き換えてwekaに読み込ませることに成功した.

結構な時間を原因特定にかけてしまった...(もう同じミスはしないだろう)
同じミスをした人が早くこの記事を見つけることを願うばかりである.