Juliaで行こう! 〜少し簡単に編〜

ペッパーミルが欲しくなってきました!

口上

前回、Dataを標準関数を用いて、読み込んでみました。他言語と同じように、csv的なものは追加libraryが潜んでいるもので、Juliaもご多分に漏れず存在しています。
では、何故最初から使用しないか?という疑問が湧きます。いずれ訪れるであろう大量(破壊)Dataを目の当たりにした時、太刀打ちできない可能性がでてくるかもしれません。
つまり、通常装備(標準関数)のみで凌がなければならないかもしれないのです。便利すぎるのは身体に毒です(笑)

csvread関数

しかし、Juliaは標準だったりします。(笑)Pythonも今は標準なのかもしれません。(基本的に、いつも自家製関数なので…)
準備したDataは、csvread関数が想定している範囲内になっているので問題なく使用が可能となっているようです。
ただ、0.7以降は、関数名が変更されています。以下、説明致します。

では解説(Header無し編)

0.6.3での、お試しの実行方法は以下。

$ ./practice_01.jl ./data/elements.csv

readfile()関数部分は以下のようになっています。

function readfile(filename)
    L = readcsv(filename, comments=true, comment_char='#')
    (rnum, cnum) = size(L)
    @printf("(row,col)=(%d,%d)\n\n",rnum,cnum)
    for i = 1:rnum
        println(L[i,:])
    end
end

readcsv()関数では、コメントの有無とコメント示す開始文字を設定しています。
size()関数の返り値はタプルで、行数と列数を返しています。
@printfは、format付きの出力を行う際に使用する関数になります。
諸々の処理がreadcsv()関数にて実現できているので、Code自体はスッキリです。 Codeは、ここにあります。

@printfは、以下でも問題はありません。

    @printf "(row,col)=(%d,%d)\n\n" rnum cnum

変更点(Header無し編)

お試しの実行方法は以下。

$ ./practice_01b.jl ./data/elements.csv

変更部分は以下になります。

using DelimitedFiles
using Printf
...
    L = readdlm(filename,','; comments=true, comment_char='#')

DelimitedFilesというModuleを読み込ませつつ、readdlmという関数名に変更となっています。
デリミタが何であるか?を明示的に示す必要があります。また、可変的な設定は「;」(セミコロン)以降で行うようになっています。
合わせて、Format付きのprint文もPrintfというModuleを読み込ませる必要が発生しています。
Codeは、ここにあります。

続いて(Header有り編)

前々項と同じように、Juliaは0.6.3ベースにて。

$ $ ./practice_02.jl ./data/elements_with_header.csv

readfile()関数は、

function readfile(filename)
    (L,H) = readcsv(filename, header=true, comments=true, comment_char='#')
    (rnum, cnum) = size(L)
    @printf("(row,col)=(%d,%d)\n",rnum,cnum)
    println(H)
    println()
    for i = 1:rnum
        println(L[i,:])
    end
end

readcsv()関数に、Header有りの指定を行った結果、出力には、Header情報が配列として追加で出力されるようになっている点が先程と異なる部分です。返り値がタプルで、変数HがHeader情報を持っています。それ以外の部分に差はありません。
Codeは、ここにあります。

変更点(Header有り編)

Header有りの場合は、どうなるでしょうか?

$ $ ./practice_02b.jl ./data/elements_with_header.csv

変更部分は、

    (L,H) = readdlm(filename,','; header=true, comments=true, comment_char='#')

「;」(セミコロン)以降に、「header=true」と行うことで、1行目の扱いを変更することができます。 Codeは、ここにあります。

終わりに

Data Science的にData処理を云々というのであれば、csvread()関数やreaddlm()関数を使用して、バシバシDataFramesをゴリゴリやるのがよいのでしょうね、と思います。

コメント

このブログの人気の投稿

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

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

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