DataFrames.jl

DataFrames.jlはJulia言語でデータフレームを扱うためのパッケージである。

データフレームとは2次元のデータである。行列とは異なり、複数のデータ型を格納できる。リレーショナル・データベースのテーブルがデータフレームに相当する。

DataFramesパッケージはJuliaパッケージ・システムから入手でき、次のコマンドを使用してインストールできる。

julia> using Pkg

julia> Pkg.add("DataFrames")

DataFrame型のオブジェクトは、データテーブルを一連のベクトルとして表し、それぞれが列または変数に対応する。DataFrameを構築する最も簡単な方法は、キーワード引数またはペアを使用してカラムベクトルを渡すことである。

julia> using DataFrames

julia> df = DataFrame(No = 1:3, Name = ["Sana", "Kokona", "Neo"])
3×2 DataFrame
│ Row │ No    │ Name   │
│     │ Int64 │ String │
├─────┼───────┼────────┤
│ 1   │ 1     │ Sana   │
│ 2   │ 2     │ Kokona │
│ 3   │ 3     │ Neo    │

カラムはデータフレーム経由で直接アクセスできる。

julia> df.Name
3-element Array{String,1}:
"Sana"
"Kokona"
"Neo"

julia> df."Name"
3-element Array{String,1}:
"Sana"
"Kokona"
"Neo"

リテラル名ではなく、カラムの名前を保持する変数を渡すこともできる。

julia> col = "Name"
"Name"

julia> df[!, col]
3-element Array{String,1}:
"Sana"
"Kokona"
"Neo"

julia> df[:, col]
3-element Array{String,1}:
"Sana"
"Kokona"
"Neo"

julia>

カラム名は、names関数を使用して文字列として取得できる。

julia> names(df)
2-element Array{String,1}:
"No"
"Name"

空のデータフレームから開始して、1つずつ列を追加することもできる。

julia> df = DataFrame()
0×0 DataFrame


julia> df.No = 1:3
1:3

julia> df.Name = ["Sana", "Kokona", "Neo"]
3-element Array{String,1}:
"Sana"
"Kokona"
"Neo"

julia> df
3×2 DataFrame
│ Row │ No    │ Name   │
│     │ Int64 │ String │
├─────┼───────┼────────┤
│ 1   │ 1     │ Sana   │
│ 2   │ 2     │ Kokona │
│ 3   │ 3     │ Neo    │

size()

データフレームの行と列の数は、size関数を使用して確認できる。

julia> size(df)
(3, 2)

julia> size(df, 1)
3

julia> size(df, 2)
2

内部結合

内部結合とは、結合条件を満たす行のみを結合することである。

Julia言語でデータフレームを内部結合するには、innerjoin() を使う。

julia> emp = DataFrame(Ename = ["白鳥沙南", "佐藤愛桜", "野崎結愛"], Deptno = [1, 2, 3])
3×2 DataFrame
 Row │ Ename     Deptno
     │ String    Int64
─────┼──────────────────
   1 │ 白鳥沙南       1
   2 │ 佐藤愛桜       2
   3 │ 野崎結愛       3

julia> dept = DataFrame(Deptno = [1, 3], Dname = ["中等部3年", "中等部2年"])
2×2 DataFrame
 Row │ Deptno  Dname
     │ Int64   String
─────┼───────────────────
   1 │      1  中等部3年
   2 │      3  中等部2年

julia> innerjoin(emp, dept, on = :Deptno)
2×3 DataFrame
 Row │ Ename     Deptno  Dname
     │ String    Int64   String
─────┼─────────────────────────────
   1 │ 白鳥沙南       1  中等部3年
   2 │ 野崎結愛       3  中等部2年

外部結合

外部結合とは、結合条件を満たす行に加えて、結合条件を満たさない行も結合することである。

Julia言語でデータフレームを外部結合するには、outerjoin() を使う。

julia> emp = DataFrame(Ename = ["白鳥沙南", "佐藤愛桜", "野崎結愛"], Deptno = [1, 2, 3])
3×2 DataFrame
 Row │ Ename     Deptno
     │ String    Int64
─────┼──────────────────
   1 │ 白鳥沙南       1
   2 │ 佐藤愛桜       2
   3 │ 野崎結愛       3

julia> dept = DataFrame(Deptno = [1, 3], Dname = ["中等部3年", "中等部2年"])
2×2 DataFrame
 Row │ Deptno  Dname
     │ Int64   String
─────┼───────────────────
   1 │      1  中等部3年
   2 │      3  中等部2年

julia> outerjoin(emp, dept, on = :Deptno)
3×3 DataFrame
 Row │ Ename     Deptno  Dname
     │ String    Int64   String
─────┼─────────────────────────────
   1 │ 白鳥沙南       1  中等部3年
   2 │ 野崎結愛       3  中等部2年
   3 │ 佐藤愛桜       2  missing