を使うのに、今一度
で使い方を整理する。
注意
参照文献はかなり古い(2019年)ため、現在のバージョンでは動作しない関数などが多いとの評判がある。そこでそういった齟齬があった場合は随時コメントする。なお筆者の環境は、
アプリケーション | バージョン |
---|---|
である。
2. Juliaによるデータエンジニアリング
2.9 Featherデータを扱う
は、バイナリの列指向データシリアライズファイル形式である。この形式はもともと
と
間のデータ交換のために開発された。
### ### ### using Feather using DataFrames using Random Random.seed!(0) # df = DataFrame(x1=[1:3..., missing], x2 = rand(4), x3 = rand(1:10, 4)) # Feather.write("df.dat", df) df2 = Feather.read("df.dat") # 2つが等価なのかを確認 println(isequal(df, df2)) println(" ") println(describe(df)) println(" ") println(describe(df2))
2.10 csvファイルとfwfファイルを読み込む
ファイルを読み込むには
モジュールの
関数を2つのオプションを指定して呼び出せばよい。
ファイルを読み込むには独自のパーサを作成しなければならない。ここでは以下に注意しなければならない。
は、
関数を
に対してブロードキャストし、その結果を...を用いて
の位置引数として展開する。
関数の引数
の型として指定している
{<
}は、
の要素として
型の任意の具象型を利用できるようにするためである。
- 全データを
yomiオブジェクトから読み出すと、オブジェクトは空になる。
関数の最後の行は、配列の配列を簡単に多次元配列に変換できることを意味する。
# IOBufferオブジェクトの生成 csv = """a,b,c 11,2,3 4,555,6 7,8,9999""" iocsv = IOBuffer(csv) fwf = """a b c 11 2 3 4 555 66 7 8 9999""" # c列は文字数を揃えている→たとえば1行目は「c」ではなく「c 」(半角空欄3文字分) iofwf = IOBuffer(fwf) using DelimitedFiles # csvの読み込み datacsv, headercsv = readdlm(iocsv,',', header = true) println("ヘッダー:",headercsv) println(datacsv) # fwfの読み込み:組み込み関数は無いので自作 function getsubstring(s::AbstractString, charfrom::Int, charto::Int) SubString(s, nextind.(s,0,(charfrom, charto))...) end # パーサ function readfwf(io, ranges::AbstractVector{<:Pair}) datafwf = [] starts = first.(ranges) ends = last.(ranges) while !eof(io) line = readline(io) push!(datafwf, getsubstring.(line, starts, ends)) end [datafwf[i][j] for i in 1:length(datafwf), j in 1:length(ranges)] end datafwf = readfwf(iofwf, [1=>3, 4=>7, 8=>11])