Julia の CSV パッケージ

JuliaからCSV形式のデータを扱うには、CSVパッケージとDataFramesパッケージが必要になる。

パッケージのインストール

JuliaのREPLでCSVパッケージとDataFramesパッケージを追加する。

julia> using Pkg

julia> Pkg.add("CSV")

julia> Pkg.add("DataFrames")

パッケージの追加は、Juliaのインストール後に一度だけ行えばよい。プログラムを実行するたびに追加する必要はない。

CSV.read()

CSVファイルからデータを読み込むには、read関数を使う。特定の列を抽出するには、1から始まる列番号を指定する。

using CSV
using DataFrames

df = CSV.read("/home/tsuka/quotes.csv", DataFrame)

dates = df[!,1]
names = df[!,2]

println(dates)
println(names)

CSVファイルにヘッダ行があれば、抽出する列を列名で指定することもできる。

using CSV
using DataFrames

df = CSV.read("/home/tsuka/quotes.csv", DataFrame)

println(df.Date)
println(df.Name)

CSV.write()

Julia言語でデータフレームをCSV形式でファイルへ書き込む例を次に示す。

using CSV
using DataFrames

df = DataFrame(Name = ["Sana","Kokona","Neo"], Age = [16,15,14])
CSV.write("C:\\Users\\tsuka\\Documents\\example.csv", df)

パイピング演算子を使って、次のように記述することもできる。

using CSV
using DataFrames

df = DataFrame(Name = ["Sana","Kokona","Neo"], Age = [16,15,14])
df |> CSV.write("C:\\Users\\tsuka\\Documents\\example.csv")

CSV.write()には、次に示すオプション引数を指定できる。

append
既存のCSVファイルが存在したときに、そのファイルへ追加するかどうか。append引数を省略したときのデフォルト値はfalseである。

append引数にtrueを指定すると、既存のCSVファイルにデータが追加される。このとき、ヘッダ行があらためて追加されることはない。

既存のCSVファイルにデータを追加する例を次に示す。

using CSV
using DataFrames
df = DataFrame(Name = ["Sana","Kokona","Neo"], Age = [16,15,14])
CSV.write("C:\\Users\\tsuka\\Documents\\example.csv", df, append=true)
bom
UTF-8 BOMヘッダ(0xEF 0xBB 0xBF)を書き込むかどうか。bom引数の指定を省略したときにデフォルト値はfalseである。
using CSV
using DataFrames
df = DataFrame(Name = ["Sana","Kokona","Neo"], Age = [16,15,14])
CSV.write("C:\\Users\\tsuka\\Documents\\example.csv", df, bom=true)
delim
区切り文字をdelim引数で指定することができる。delim引数を省略したときのデフォルト値はカンマである。

区切り文字をタブにする例を次に示す。

using CSV
using DataFrames
df = DataFrame(Name = ["Sana","Kokona","Neo"], Age = [16,15,14])
CSV.write("C:\\Users\\tsuka\\Documents\\example.csv", df, delim="\t")

※タブで区切ったデータ形式はTSV (Tab Separated Values) と呼ばれる。

escapechar
テキストフィールドのクォート文字をエスケープするために使用するascii文字を指定する。escapechar引数の指定を省略したときのデフォルト値は '"' である。
missingstring
欠落した値を表示する文字列を指定する。missingstring引数の指定を省略したときのデフォルト値は "" である。
newline
行の区切り文字または区切り文字列を指定する。newline引数の指定を省略したときのデフォルト値は "\n" である。

CSVファイルの改行コードをCRLFにする例を次に示す。

using CSV
using DataFrames
df = DataFrame(Name = ["Sana","Kokona","Neo"], Age = [16,15,14])
CSV.write("C:\\Users\\tsuka\\Documents\\example.csv", df, newline="\r\n")

Microsoft Excelの制約

Microsoft Excelが読み込めるCSVは、Shift JISまたはBOM (byte order mark) ヘッダ付きUTF-8でエンコードする必要がある。BOMヘッダが無いUTF-8でエンコーディングされたCSVをMicrosoft Excelで読み込むと文字化けする。

参考文献

Quinn, Jacob. (2015) JuliaData / CSV.jl

Quinn, Jacob. (2015) CSV.jl Documentation

IETF (2005) "Common Format and MIME Type for Comma-Separated Values (CSV) Files" RFC 4180