裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia の IterableTables

2021年01月31日 | ブログラミング

== IterableTables.jl

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)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村