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

はじめに

Excel データを Mathematica に取り込む際、もしかしたら Import 関数を使いリスト形式で読み、そこから必要なデータを取り出していませんか。あるいは Dataset 形式で読むのは知っていても、カラムの追加、複数の Dataset 同士の結合等が直接行えず、諦めた経験はないでしょうか。本ブログはそうした誤解を解くために書かれました。

カレントディレクトリに以下のような Excel ファイルがあるとします。

従来は Import 関数を使ってリスト形式として読んでいましたが

Mathematica ver10.0 以降は Dataset 形式で読めるようになりました。Dataset 形式は Python でいうところの DataFrame に似てます。なお、最後の [[1]] は複数想定される Excel シートの1枚目を指します。

複数シートからなる Excel データの特定のシートにヘッダ行を指定する場合は、"Dataset" の部分で取り込むシートを指定してください。
fruits = Import["fruits.xlsx", {"Dataset", 1},"HeaderLines" -> 1]

検索

みかんの値段を調べてみます。

果物の値段の平均を計算します。

全果物の売上総数を計算します。

最大売上個数を求めます。

データを単価の小さい順に並び替えます。

データを単価の大きい順に並び替えます。

単価が200円を超えるデータのみを取り出します。

加工

Dataset は高速にデータを処理できる一方、加工に弱いという誤解が広まっていて、加工したいときは、いったん Association に変換し、その上で加工し、再度 Dataset に戻すという習慣が広まっているようです。たとえば、以下のような要請「Dataset fruits に合計 (= 単価 * 個数) 欄を追加する」にも、新規カラムの追加で簡単に対応できます。

このとき、全売上総計は次のようになります。

一方、Mathematica のヘルプには、たとえば、guide/DatabaseLikeOperationsOnDatasets のようなページはあっても Dataset に対する具体的な操作例は紹介されていません。対策は簡単で、Association に対する操作から連想します。次は JoinAcross の例で、月 moon をキーに2つの Dataset を結合します。

いったん Association 上で結合し、Dataset に変換しています。

Dataset に対し、直接、結合しています。

Dataset のリストへの変換

Dataset を 連想形式 Association に変換します。

Dataset をリスト形式に変換します。

Dataset を {key, value} 形式のリストに変換します(:> で入力)。