Tips: MathematicaでExcelデータをデータセットとして読むこむ

Key関数:Import, DataSet
カレントディレクトリに以下のような Excel ファイルがあるとします。
In[]:=
SetDirectory[NotebookDirectory[]]
Out[]=
/Users/skybird/Desktop/work/Programs/Mathematica
従来は Import でリスト形式で読んでいましたが
In[]:=
Import["fruits.xlsx"]
Out[]=
種類,単価,個数,リンゴ,200.,120.,みかん,100.,200.,バナナ,250.,100.,ぶどう,400.,150.
Mathematica ver10.0 以降は DataSet 形式で読めるようになりました。DataSet 形式は Python でいうところの DataFrame に似てます。なお、最後の 〚1〛 は複数想定される Excel シートの1枚目を指します。
In[]:=
fruits=Import["fruits.xlsx","Dataset","HeaderLines"->1][[1]]
Out[]=
種類
単価
個数
リンゴ
200.0
120.0
みかん
100.0
200.0
バナナ
250.0
100.0
ぶどう
400.0
150.0

検索

みかんの値段を調べてみます。
In[]:=
fruits[[2,2]]
Out[]=
100.
果物の値段の平均を計算します。
In[]:=
fruits[Mean,"単価"]
Out[]=
237.5
全果物の売上総数を計算します。
In[]:=
fruits[Total,"個数"]
Out[]=
570.
最大売上個数を求めます。
In[]:=
fruits[Max,"個数"]
Out[]=
200.
データを単価の小さい順に並び替えます。
In[]:=
fruits[SortBy["単価"]]
Out[]=
種類
単価
個数
みかん
100.0
200.0
リンゴ
200.0
120.0
バナナ
250.0
100.0
ぶどう
400.0
150.0
データを単価の大きい順に並び替えます。
In[]:=
fruits[SortBy["単価"]][Reverse]
Out[]=
種類
単価
個数
ぶどう
400.0
150.0
バナナ
250.0
100.0
リンゴ
200.0
120.0
みかん
100.0
200.0
単価が200円を超えるデータのみを取り出します。
In[]:=
fruits[Select[#単価>200&]]
Out[]=
種類
単価
個数
バナナ
250.0
100.0
ぶどう
400.0
150.0

加工

Dataset は高速にデータを処理できる一方、加工に弱いという誤解が広まっていて、加工したいときは、いったん Association に変換し、その上で加工し、再度 Dataset に戻すという習慣が広まっているようです。たとえば、以下のような要請「DataSet fruits に合計(= 単価 * 個数)欄を追加する」にも、新規カラムの追加で簡単に対応できます。
In[]:=
fruits=​​fruits[All,Append[#,"合計"->#単価*#個数]&]
Out[]=
種類
単価
個数
合計
リンゴ
200.0
120.0
24000.0
みかん
100.0
200.0
20000.0
バナナ
250.0
100.0
25000.0
ぶどう
400.0
150.0
60000.0
このとき、全売上総計は次のようになります。
In[]:=
fruits[Total,"合計"]
Out[]=
129000.
一方、Mathematica のヘルプには、たとえば、guide/DatabaseLikeOperationsOnDatasets のようなページはあっても Dataset に対する具体的な操作例は紹介されていません。対策は簡単で、Association に対する操作から連想します。次は JoinAcross の例で、月 moon をキーに2つの Dataset を 結合します。
In[]:=
planets=​​ <|"Planet""Earth","Moon""Luna"|>,​​ <|"Planet""Mars","Moon""Phobos"|>,​​ <|"Planet""Mars","Moon""Deimos"|>,​​ <|"Planet""Jupiter","Moon""Calipso"|>​​;​​planetsDS=Dataset[planets]
Out[]=
Planet
Moon
Earth
Luna
Mars
Phobos
Mars
Deimos
Jupiter
Calipso
In[]:=
moons=​​ <|"Moon""Luna","Mass"3|>,​​ <|"Moon""Phobos","Mass"1|>,​​ <|"Moon""Deimos","Mass"2|>,​​ <|"Moon""X","Mass"100|>​​;​​moonsDS=Dataset[moons]
Out[]=
Moon
Mass
Luna
3
Phobos
1
Deimos
2
X
100
いったん Association 上で結合し、Dataset に変換しています。
In[]:=
JoinAcross[planets,moons,"Moon","Inner"]//Dataset
Out[]=
Planet
Moon
Mass
Earth
Luna
3
Mars
Phobos
1
Mars
Deimos
2
Dataset に対し、直接、結合しています。

Datasetのリストへの変換

DataSet を 連想形式 Association に変換します。
DataSet をリスト形式に変換します。
DataSet を {key, value} 形式のリストに変換します( は :> で入力)。