2
6

More than 1 year has passed since last update.

Julia早引きノート[24]CSVFiles(DataFrameとの連携)

Last updated at Posted at 2021-02-04

CSVFiles(DataFrameとの連携)(書き方例)

note24
◆パッケージ読み込み
 using CSVFiles, DataFrames


DataFrameの読み込み

 # CSVファイルの読み込み、DataFrameに格納
 df = DataFrame(load("data.csv"))

 # gzipファイルを読み込み、DataFrameに格納
 df = DataFrame(load(File(format"CSV", "iris_data.csv.gz")))


◆読み込み時オプション設定

 ・区切り記号(delim)
 ・クォート文字(quotechar) (デフォルトはダブルクォーテーション)
 ・ヘッダー有無(header_exists) (デフォルトはheader_exists=true)

 # オプション設定例
 df = DataFrame(load(File(format"CSV", "data2.csv"); delim=';', quotechar='"', header_exists=false))


DataFrameの書き込み

 # DataFrameをCSVファイルへ書き出し
 save("df_output.csv", df)

 # gzipで圧縮されたCSVファイルを書き出す
 save(File(format"CSV", "output2.csv.gz"), df)


◆書き込み時オプション設定

 ・区切り記号(delim)
 ・クォート文字(quotechar) (デフォルトはダブルクォーテーション)
 ・ヘッダー有無(header_exists) (デフォルトはheader_exists=true)
 ・欠損値の設定(nastring) (デフォルトは"NA")

 # オプション設定例
 save(File(format"CSV", "output3.csv"), df; delim=',', quotechar='"', nastring="NA", header=true)


pipe記法による読み込み、書き込み

 # 読み込みの記載方法
 df = load("data2.csv") |> DataFrame

 # 書き込みの記載方法
 df |> save("output.csv")


Matrix型への変換

 # DataFrameをMatrixへ変換
 data_matrix = Matrix(df)


◆配列からのDataFrame作成

 # 配列(Vector型)をDataFrameに変換する
 # [1, 2, 3, 4, 5]
 # 方法(1)
 df = DataFrame()
 df.a = [1, 2, 3, 4, 5]
 # 方法(2)
 df = DataFrame(b = [1, 2, 3, 4, 5])

解説

Juliaでは、CSVファイルを読み込み、DataFrameにデータをセットすることができます。
これを行う際には、CSVFilesパッケージをインストールします。
CSVファイルからの読み込みだけでなく、CSVファイルへの出力もできます。

(1)CSVFiles.jl及びDataFrames.jlのインストール

以下の手順でCSVFiles及びDataFramesパッケージをインストールします。
パッケージ管理モードでインストールを行います。

Juliaの対話型実行環境で角括弧文字の ] を押下してパッケージモードにします。
add "CSVFiles"
と入力してCSVFilesパッケージをインストールします。
(ダブルクォーテーションは無くても良いです)

以下のようにインストールが実行されます。
image.png

もしDataFramesパッケージをインストールしていない場合は、合わせてインストールを行います。
add "DataFrames"
と入力してDataFramesパッケージをインストールして下さい。

(2)CSVFilesの使い方

CSVFilesで使用できる機能や使い方を説明します。

①CSVファイルを読み取り、DataFrameに格納する

CSVファイルの読み込みを行い、取得データをDataFrameに格納します。
以下のようにloadメソッドで実行します。

note24
using CSVFiles, DataFrames

# CSVファイルの読み込み、DataFrameに格納
df = DataFrame(load("data.csv"))

実行結果です(ここではiris_data.csvを読み込みました)。
image.png

②gzipファイルを読み込み、DataFrameに格納する

CSVファイルが.gzに圧縮されたファイルの場合、以下のメソッドで読み込みを実行できます。format属性でCSV形式であることを指定しています。

note24
using CSVFiles, DataFrames

# gzipファイルを読み込み、DataFrameに格納
df = DataFrame(load(File(format"CSV", "iris_data.csv.gz")))

実行結果
image.png

③読み込み時オプション設定

様々なオプションを設定することができます。

:small_blue_diamond: 拡張子指定
拡張子が.csvでないCSVファイルを読み込む場合は、その拡張子を含むファイル名を指定できます。
load(File(format"CSV", "csv_file.txt"))

:small_blue_diamond: 区切り記号(delim)
区切り記号を指定する場合は、delimを使用して指定します。

note24
df = DataFrame(load(File(format"CSV", "data2.csv"); delim=';'))

:small_blue_diamond: クォート文字(quotechar)
CSVデータのクォート文字を指定することができます。
クォート文字とは、各データの前後を括っている記号です。
デフォルトでは["]ダブルクォーテーションです。

note24
df = DataFrame(load(File(format"CSV", "data2.csv"); quotechar='"'))

CSVデータ
image.png
実行例
image.png

CSVデータがシングルクォーテーションの場合は、以下のように設定します。

note24
df = DataFrame(load(File(format"CSV", "data3.csv"); quotechar='''))

CSVデータ
image.png
実行例
image.png

:small_blue_diamond: ヘッダー有無(header_exists)
CSVデータの先頭行がヘッダー行であるか、そうでないかを指定します。
ヘッダー行である場合は、header_exists=trueです。デフォルトではこちらが採用されます。
ヘッダー行のない場合は、header_exists=falseと指定します。

note24
df = DataFrame(load(File(format"CSV", "data4.csv"); header_exists=false))

CSVデータ
image.png
実行例
image.png

④DataFrameをCSVファイルに書き出す(保存する)

DataFrameをファイルに保存する場合は、以下のように実行します。

note24
using CSVFiles, DataFrames

# DataFrameのデータ
df = DataFrame(num = [1, 2, 3], fruit = ["apple","orange","lemmon"], price = [100, 200, 150])

# DataFrameをCSVファイルへ書き出し
save("df_output.csv", df)

⑤gzipで圧縮されたCSVファイルを書き出す

DataFrameを書き出したCSVファイルをgzip形式で圧縮し生成するには、以下のように実行します。

note24
using CSVFiles, DataFrames

df = DataFrame(num = [1, 2, 3], fruit = ["apple","orange","lemmon"], price = [100, 200, 150])

# gzipで圧縮されたCSVファイルを書き出す
save(File(format"CSV", "output2.csv.gz"), df)

⑥書き込み時オプション設定

読み込みと同様に、書き込み処理でも様々なオプションを設定することができます。
以下はオプションを同時に設定した際のコーティング例です。

note24
save(File(format"CSV", "output3.csv"), df; delim=',', quotechar='"', nastring="NA", header=true)

:small_blue_diamond: 欠損値の設定(nastring)

欠損値取り扱いについて、これをどのような文字列で保持するかを設定します。
デフォルトでは"NA"です。

上記以外の設定項目は、読み込みの説明項目をご参照下さい。

(3)pipe記法による読み込み、書き込みの記載方法

pipe(パイプ)記法(記号:[|>])により、より簡潔な記述ができます。
読み込み、書き込みそれぞれで以下のように記述します。

①読み込みの記載方法

CSVファイルからデータを読み込み、DataFrameに変換します。

note24
using CSVFiles, DataFrames

df = load("data2.csv") |> DataFrame

実行結果例
image.png

②書き込みの記載方法

DataFrameのデータをファイルに書き出すには、以下のように実行します。

note24
using CSVFiles, DataFrames

df = DataFrame(num = [1, 2, 3], fruit = ["apple","orange","lemmon"], price = [100, 200, 150])

df |> save("output.csv")

実行結果例
image.png

(4)Matrix型への変換

取得したDataFrame型のデータをMatrix型へ変換する場合は、Matrix関数を使用できます。

note24
df = DataFrame(load(File(format"CSV", "test.csv"); delim=',', header_exists=false))

data_matrix = Matrix(df)

実行例
image.png

(5)配列からのDataFrame作成

配列(Vector型)の配列をDataFrameに変換する方法は以下のような例がありますが、その他にも方法がありますので、詳細は下記のJuliaのDataFrames.jlドキュメントをご参照頂ければと思います。

方法(1)

note24
# DataFrameを宣言
df = DataFrame()
# dfの列名"a"に配列をセットする
df.a = [1, 2, 3, 4, 5]

方法(2)

note24
# DataFrame宣言と列"b"のセットを同時に実行する
df = DaraFrame(b = [1, 2, 3, 4, 5])

以上、CSVFilesを使用したCSVファイルの取扱方法を解説しました。
JuliaのCSVFiles及びDataFrameパッケージの機能はこれ以外にもありますので、さらなる詳細は以下のマニュアルなどをご参照下さい。

 :paperclip: CSVFiles.jlのドキュメント(Github)
 https://github.com/queryverse/CSVFiles.jl

 :paperclip: DataFrames.jlのドキュメント
 https://dataframes.juliadata.org/stable/

もくじ

Julia早引きノート[01]変数・定数の使い方
Julia早引きノート[02]算術式、演算子
Julia早引きノート[03]複素数
Julia早引きノート[04]正規表現
....

もくじを開く

Julia早引きノート[05]if文
Julia早引きノート[06]ループ処理
Julia早引きノート[07]try, catch, finally
Julia早引きノート[08]変数の型(Int, Float, Bool, Char, String)
Julia早引きノート[09]関数 (1)基本編
Julia早引きノート[10]関数 (2)応用編
Julia早引きノート[11]Nothing型
Julia早引きノート[12]複合型(Composite Type)型
Julia早引きノート[13]タプル
Julia早引きノート[14]リスト(Array型一次元配列)
Julia早引きノート[15]辞書(dictionary)
Julia早引きノート[16]集合
Julia早引きノート[17]多次元配列 (1)初期化
Julia早引きノート[18]多次元配列 (2)様々な演算や関数
Julia早引きノート[19]多次元配列 (3)サブ配列
Julia早引きノート[20]ファイル入出力
Julia早引きノート[21]JSON、XMLファイルの入出力
Julia早引きノート[22]Python関数やPythonモジュールの呼び出し
Julia早引きノート[23]JuliaでのMatplotlibによるグラフ描画
Julia早引きノート[24]CSVFiles(DataFrameとの連携)
Julia早引きノート[25]線形代数演算(ベクトル・行列計算)
(※引き続きコンテンツを増やしていきます)

関連情報

:paperclip: CSVFiles.jlのドキュメント(Github)
https://github.com/queryverse/CSVFiles.jl

:paperclip: Julia - 公式ページ
https://julialang.org/

:paperclip: Julia - 日本語公式ドキュメント
https://julia-doc-ja.readthedocs.io/ja/latest/index.html

:paperclip: 初めてのJuliaとインストール (Windows & Linux)
https://qiita.com/ttlabo/items/b05bb43d06239f968035

:paperclip: Julia - Mathematics
https://docs.julialang.org/en/v1/base/math/

ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6