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だったのが念頭にあったため、単純な問題を複雑化させていました。

コメント

このブログの人気の投稿

Tabulatorで行こう! 〜ダイバー編〜

Tabulatorで行こう! 〜違うじゃん編〜

Fedoraで行こう! 〜音声合成pyttsx3編〜