Juliaで行こう! 〜データ読み込み編〜
ツナパスタ。どうしても、ひと味足りない。どの調味料なのだろう。。。
前口上
前回の結果、Dataが準備できましたので、軽めの実践を行います。
Manualやあちこちをクロールしていますと、Juliaは、本当に、Peakyな機体だな、と(笑)
Python界で言うところのpandas的なDataを準備するまでをPythonで、その後の実行をJuliaでなんていうのが、(個人的にはPythonに慣れている手前)一番効率がいいのかな、と思っていたりします。
実行環境
- Fedora 28
- Julia 0.6.3
Ubuntuでもなく、Macでもなく。慣れた機体っていうのはいいものです(笑)
Juliaは標準ReposにてInstallしているものです。JuliaのSiteを見ると、coprにてのInstallが記載されていますが、1.00相当が見当たらなかった(2018-08初頭。つまり、1.0が出てすぐの頃)ので、ひとまず0.6.3で行こうかと思っています。
tarballからbuildしてもいいのだけど、本論ではないので。まあ、そのうちUpgradeされるだろう、と。
まずはHello World
鉄板ネタでHelloWorldであろう、と。
$ ./hello.jl
Hello Wolrd on Julia!!
と実行することで、標準出力に、Hello Worldが出力されます。 Pointと言うほどではないですが、Shellモードにて実行しています。そのため、Scriptの中身は以下のようになっています。
#!/usr/bin/env julia
println("Hello Wolrd on Julia!!")
1行目は、言ってしまえばおまじないみたいなものですね。
Codeは、ここにあります。
すっぴんで読み込んでみる
Fileを開いて、読み込ませて、必要なDataを、配列に格納してみる、ということを行ってみます。
Pythonで言うところのArgumentParserを探しきれなかったので、最低限の引数を制御できる予約語ARGSを用いて、実装を行っています。
例えば、
$ ./hoge.jl abc.txt def.txt
と実行すると仮定すると、
- hoge.jl : ARGS[0]
- abc.txt : ARGS[1]
- def.txt : ARGS[2]
となります。(今、ふと思ったのは、これは0からなんだ、と)
次に、定義したreadfile関数の説明をします。Codeは以下のようになっています。一部を抜粋します。
function readfile(filename)
L = []
open(filename, "r" ) do fi
for line in eachline( fi )
line = rstrip(line)
if line[1] != '#'
cols = split(line, ',')
push!(L, cols)
end
end
end
L
end
読み込んだDataをLという配列に格納します。
まず、open()関数にて、fileを開き、eachline()関数で、1行ずつ読み込ませつつ、rstrip()関数で、改行を削除し、当該行の1文字目が#でない行をデリミタをカンマとして、分割します。
これを一旦cols変数で受けた後、push!関数で、配列Lに格納を行っています。配列の各要素も配列となっています。Python的には、NestしたList(List in List)のようなものでしょうか。
function printout(L)
for n in L
println(n[1], " ", n[6])
end
end
printout()関数では、単純に、格納されたDataの第1要素と第6要素を出力させているものになっています。
全体のCodeは、ここにあります。
終わりに
当初(というか直近まで)、push関数ではなく、append関数を使用しており、配列Lがflatな配列となっていました。
大体、flatな配列に、単純に、String要素などを追加する説明が多く、この両関数の差異がよくわからなかったのと、Pythonのappend関数だと、ある意味OKだったのが念頭にあったため、単純な問題を複雑化させていました。
コメント
コメントを投稿