DataFrames.jl は Julia でデータフレームを扱うためのパッケージである。データフレームとは2次元のデータである。行列 (Base.Matrix) とは異なり、複数のデータ型を格納できる。リレーショナル・データベースのテーブルがデータフレームに相当する。
Julia から Dataframes.jl パッケージを使うには、Julia に Dataframes.jl パッケージをインストール(追加)する必要がある。Dataframes.jl パッケージをインストールせずに Dataframes.jl パッケージを使用しようとすると、エラーが発生する。
julia> using DataFrames
│ Package DataFrames not found, but a package named DataFrames is available from a registry.
│ Install package?
│ (@v1.9) pkg> add DataFrames
└ (y/n/o) [y]:
ここで「y」のキーを押せば、Dataframes.jl パッケージが追加される。
パッケージの追加は、Julia のインストール後に一度だけ行えばよい。パッケージを使う度に追加する必要はない。
Dataframes.jl パッケージを使うには、using または import で Dataframes.jl パッケージの使用を宣言する必要がある。Dataframes.jl パッケージの使用を宣言せずに Dataframes.jl パッケージを使用すると、エラーが発生する。
julia> df = DataFrames.DataFrame(No = 1:3, Name = ["井上和", "小川彩", "菅原咲月"])
ERROR: UndefVarError: `DataFrames` not defined
import キーワードを使ってパッケージの使用を宣言すると、そのパッケージに含まれる定数、型、関数及びメソッド等を使用できる。定数、型、関数及びメソッド等を使用するときは、パッケージ名で修飾する必要がある。
julia> import DataFrames
julia> df = DataFrame(No = 1:3, Name = ["井上和", "小川彩", "菅原咲月"])
ERROR: UndefVarError: `DataFrame` not defined
julia> df = DataFrames.DataFrame(No = 1:3, Name = ["井上和", "小川彩", "菅原咲月"])
3×2 DataFrame
Row │ No Name
│ Int64 String
─────┼─────────────────
1 │ 1 井上和
2 │ 2 小川彩
3 │ 3 菅原咲月
using キーワードを使ってパッケージの使用を宣言すると、そのパッケージに含まれる定数、型、関数及びメソッド等はエクスポートされるため、パッケージ名で修飾せずに定数、型、関数及びメソッド等を使用できる。
julia> using DataFrames
julia> df = DataFrame(No = 1:3, Name = ["井上和", "小川彩", "菅原咲月"])
3×2 DataFrame
Row │ No Name
│ Int64 String
─────┼─────────────────
1 │ 1 井上和
2 │ 2 小川彩
3 │ 3 菅原咲月
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 │
Base.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