https://archive.ics.uci.edu/ml/datasets/water+treatment+plant
にある,water-treatment.data を読んで,データの様子を見る,というところまでやってみるというのを,
Julia だったらこうやるというところで...
using CSV, DataFrames
ヘッダーがないので,header=false を指定する。
欠損値は "?" ではいっているので,missingstring="?" とする。
日付データが dateformat="D-dd/mm/yy" の形で入っている(読み込んだ後は,年は 0090 とかになる。本当は 1990 年なんだろうけど),
df = CSV.read("water-treatment.data", DataFrame, header=false, missingstring="?", dateformat="D-dd/mm/yy");
先頭を見てみる。
first(df, 5)
5 rows × 39 columns (omitted printing of 30 columns)
Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8 Column9
Date… Int64? Float64? Float64 Int64? Int64? Int64? Float64? Float64?
1 0090-03-01 44101 1.5 7.8 missing 407 166 66.3 4.5
2 0090-03-02 39024 3.0 7.7 missing 443 214 69.2 6.5
3 0090-03-04 32229 5.0 7.6 missing 528 186 69.9 3.4
4 0090-03-05 35023 3.5 7.9 205 588 192 65.6 4.5
5 0090-03-06 36924 1.5 8.0 242 496 176 64.8 4.0
行数,列数を確認する。
size(df) # (527, 39)
第1列目(日付)でソートする(df は直接書き換えられるので,代入しなくてよい)。
sort!(df, :Column1)
527 rows × 39 columns (omitted printing of 30 columns)
先頭を見てみる。
first(df, 5)
Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8 Column9
Date… Int64? Float64? Float64 Int64? Int64? Int64? Float64? Float64?
1 0090-01-01 41230 0.35 7.6 120 344 136 54.4 4.5
2 0090-01-02 37386 1.4 7.9 165 470 170 76.5 4.0
3 0090-01-03 34535 1.0 7.8 232 518 220 65.5 5.5
4 0090-01-04 32527 3.0 7.8 187 460 180 67.8 5.2
5 0090-01-07 27760 1.2 7.6 199 466 186 74.2 4.5
using Plots
データが取られている日付の間隔をみるのだが,間隔は diff() だけで求まる。それをヒストグラムで表す。
histogram(diff(df[:, 1]))
縦軸を対数表示にしたいということなので,yaxis=:log を指定する。
histogram(diff(df[:, 1]), yaxis=:log)
各項目(各列)で欠損値がどれくらいあるかということで,まずは,項目名と欠損値率を表示する。
hcat(names(df), describe(df)[:, :nmissing] ./ size(df,1))
39×2 Array{Any,2}:
"Column1" 0.0
"Column2" 0.0341556
"Column3" 0.0056926
"Column4" 0.0
"Column5" 0.0436433
⋮
"Column38" 0.0151803
"Column39" 0.0588235
棒グラフで見てもよいが。
bar(describe(df)[:, :nmissing] ./ size(df,1))