https://www.queryverse.org/IterableTables.jl/stable/
IterableTables.jl は,Julia のテーブル型データに包括的なインターフェースを定義する。
現在のところ,以下のデータソースをサポートしている。
- DataFrames
- DataStreams (CSV, Feather, SQLite, ODBC も含む)
- DataTables
- IndexedTables
- TimeSeries
- TypedTables
- DifferentialEquations(あらゆる DESolution も)
- および NamedTuple 型の要素を生成するあらゆるイテレータ
現在のところ,以下のデータシンクがサポートされている。
- DataFrames(ModelFrame なども含む)
- DataStreams (CSV, Feather も含む)
- DataTables
- IndexedTables
- TimeSeries
- TypedTables
- StatsModels
- Gadfly(currently not working)
- VegaLite
このパッケージは Query.jl と緊密に統合されている。最後の @select 文で名前付きタプルを生成する(クエリーの結果をデータ構造に @collect しない)ような,あらゆるクエリーは自動的にイテラブルなテーブルデータソースになり,上に述べたようなデータソースは Query.jl を使って,クエリーの対象になる。
== さあ始めよう
IterableTables はJulia の異なるテーブル型の間で相互に容易に変換できる。
using IterableTables
using DataFrames
df = DataFrame(Name=["John", "Sally", "Jim"],
Age=[34.,25.,67.],
Children=[2,0,3])
3×3 DataFrame
Row │ Name Age Children
│ String Float64 Int64
─────┼───────────────────────────
1 │ John 34.0 2
2 │ Sally 25.0 0
3 │ Jim 67.0 3
using DataTables, TypedTables, IndexedTables
# DataFrame を DataTable に変換する
dt = DataTable(df)
3x3 DataTable
Name │ Age │ Children
──────┼──────┼─────────
John │ 34.0 │ 2
Sally │ 25.0 │ 0
Jim │ 67.0 │ 3
# DataFrame を TypedTable に変換する
tt = Table(df)
Table with 3 columns and 3 rows:
Name Age Children
┌──────────────────────
1 │ John 34.0 2
2 │ Sally 25.0 0
3 │ Jim 67.0 3
# TypedTable を DataFrame に変換する
new_df = DataFrame(tt)
3×3 DataFrame
Row │ Name Age Children
│ String Float64 Int64
─────┼───────────────────────────
1 │ John 34.0 2
2 │ Sally 25.0 0
3 │ Jim 67.0 3
# TypedTable を DataTable に変換する
new_dt = DataTable(tt)
3x3 DataTable
Name │ Age │ Children
──────┼──────┼─────────
John │ 34.0 │ 2
Sally │ 25.0 │ 0
Jim │ 67.0 │ 3
伝統的には DataFrame が期待されるような場合でも,どのようなデータ型も使えるようにする。
using GLM, DataFrames
# 回帰分析で TypedTable を使う
lm(@formula(Children~Age), tt)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}
Children ~ 1 + Age
Coefficients:
───────────────────────────────────────────────────────────────────────────
Coef. Std. Error t Pr(>|t|) Lower 95% Upper 95%
───────────────────────────────────────────────────────────────────────────
(Intercept) -0.867076 1.53833 -0.56 0.6732 -20.4134 18.6792
Age 0.0603272 0.0336492 1.79 0.3239 -0.367227 0.487881
───────────────────────────────────────────────────────────────────────────
# 回帰分析で DataTable を使う
lm(@formula(Children~Age),dt)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}
Children ~ 1 + Age
Coefficients:
───────────────────────────────────────────────────────────────────────────
Coef. Std. Error t Pr(>|t|) Lower 95% Upper 95%
───────────────────────────────────────────────────────────────────────────
(Intercept) -0.867076 1.53833 -0.56 0.6732 -20.4134 18.6792
Age 0.0603272 0.0336492 1.79 0.3239 -0.367227 0.487881
───────────────────────────────────────────────────────────────────────────
これらのデータソースのどれでも VegaLite でプロットできる。
using VegaLite
# TypedTable をプロットする
tt |> @vlplot(:point, x=:Age, y=:Children)
# DataTable をプロットする
dt |> @vlplot(:point, x=:Age, y=:Children)