まずはdownload関数でサンプルデータファイルをインターネットからダウンロードして,データフレームに読み込みます.以下の例では,インターネット上のCSVデータを読み込んでいます.
julia> download("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data", "iris.csv")
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 4551 100 4551 0 0 3003 0 0:00:01 0:00:01 --:--:-- 3003
"iris.csv"
julia> isfile("iris.csv")
true
readline関数で1行目を表示します.
julia> readline("iris.csv")
"5.1,3.5,1.4,0.2,Iris-setosa"
readline関数による表示で,1行目がカンマで区切られていて,ピリオドは小数点でヘッダ行がないことがわかります.
CSV.read関数でデータを読み込み,データフレームを確認する.CSV.read関数はCSV形式のファイルを読み込んで,内容をDataFrameに書き込む関数.
julia> using CSV, DataFrames
julia> df = CSV.read("iris.csv",
header = ["PetalLength", "PetalWidth", "SepalLength", "SepalWidth", "Class"]);
thread = 1 warning: only found 1 / 5 columns on data row: 151. Filling remaining columns with `missing`
julia> describe(df)
5×8 DataFrame. Omitted printing of 1 columns
│ Row │ variable │ mean │ min │ median │ max │ nunique │ nmissing │
│ │ Symbol │ Union… │ Any │ Union… │ Any │ Union… │ Int64 │
├─────┼─────────────┼─────────┼─────────────┼────────┼────────────────┼─────────┼──────────┤
│ 1 │ PetalLength │ 5.84333 │ 4.3 │ 5.8 │ 7.9 │ │ 1 │
│ 2 │ PetalWidth │ 3.054 │ 2.0 │ 3.0 │ 4.4 │ │ 1 │
│ 3 │ SepalLength │ 3.75867 │ 1.0 │ 4.35 │ 6.9 │ │ 1 │
│ 4 │ SepalWidth │ 1.19867 │ 0.1 │ 1.3 │ 2.5 │ │ 1 │
│ 5 │ Class │ │ Iris-setosa │ │ Iris-virginica │ 3 │ 1 │
データフレームの最後の6行を見てみます.
julia> last(df, 6)
6×5 DataFrame
│ Row │ PetalLength │ PetalWidth │ SepalLength │ SepalWidth │ Class │
│ │ Float64⍰ │ Float64⍰ │ Float64⍰ │ Float64⍰ │ String⍰ │
├─────┼─────────────┼────────────┼─────────────┼────────────┼────────────────┤
│ 1 │ 6.7 │ 3.0 │ 5.2 │ 2.3 │ Iris-virginica │
│ 2 │ 6.3 │ 2.5 │ 5.0 │ 1.9 │ Iris-virginica │
│ 3 │ 6.5 │ 3.0 │ 5.2 │ 2.0 │ Iris-virginica │
│ 4 │ 6.2 │ 3.4 │ 5.4 │ 2.3 │ Iris-virginica │
│ 5 │ 5.9 │ 3.0 │ 5.1 │ 1.8 │ Iris-virginica │
│ 6 │ missing │ missing │ missing │ missing │ missing │
julia> eltypes(df)
┌ Warning: `eltypes(df::AbstractDataFrame)` is deprecated, use `eltype.(eachcol(df))` instead.
│ caller = top-level scope at none:0
└ @ Core none:0
5-element Array{Union,1}:
Union{Missing, Float64}
Union{Missing, Float64}
Union{Missing, Float64}
Union{Missing, Float64}
Union{Missing, String}
データ中の最後の行には,missingしかありません(ファイルの末尾に余計な改行が入っていたため).この問題を回避するために,最後の行を切り捨てて,行の型をmissing値を許さない方に変換し,データフレーム中にmissing値がないようにします.
julia> df = disallowmissing!(df[1:end-1, :]);
julia> eltype(df)
Any
データを整理できたので,CSVファイルに書き出します.
0 件のコメント :
コメントを投稿