Million Song Dataset

あけましておめでとうございます.今年もよろしくお願いいたします.

Rでbigmemoryffなどを使用して大規模なデータを扱うときのサンプルデータとして,Data Expo 2009のフライトデータが用いられることが多いようです.しかし,このデータのサイズは約12GBであり,最近のコンピュータではメモリに載ってしまうという指摘もよく受けるようになって来ました.

そこで,より大規模なデータセットを探してみました.次のようなデータセットが手軽に利用できます.

この中から,"Million Song Dataset"を選んでみましょう.

HDF5とは

Million Song Datasetは,HDF5というデータ形式で提供されています.HDF5は,Hierarchical Data Format 5の略で,データを階層的に保持するデータ形式で,衛星データなどでよく用いられているようです.
HDF5のデータ形式のモチベーションについては,id:salondunordさんの「HDF5フォーマットに関するメモ書き」CSVとの対比の説明が分かりやすいです.

データのダウンロード

Million Song Datasetは,infochimpsおよびAWSで提供されています.

今回は10,000レコードに限定したMillion Song Subsetを利用してみましょう.まずファイルをダウンロードして解凍します.

$ wget http://static.echonest.com/millionsongsubset_full.tar.gz
$ tar xzvf millionsongsubset_full.tar.gz

作成されたMillionSongSubsetディレクトリのdataディレクトリにデータが入っています.階層的にデータが格納されていることを確認できます.

$ ls 
MillionSongSubset millionsongsubset_full.tar.gz
$ tree MillionSongSubset/ | head -n 35
MillionSongSubset/
├── AdditionalFiles
│   ├── LICENSE
│   ├── README
│   ├── subset_artist_location.txt
│   ├── subset_artist_similarity.db
│   ├── subset_artist_term.db
│   ├── subset_msd_summary_file.h5
│   ├── subset_track_metadata.db
│   ├── subset_tracks_per_year.txt
│   ├── subset_unique_artists.txt
│   ├── subset_unique_mbtags.txt
│   ├── subset_unique_terms.txt
│   └── subset_unique_tracks.txt
└── data
     └── A
        ├── A
        │   ├── A
        │   │   ├── TRAAAAW128F429D538.h5
        │   │   ├── TRAAABD128F429CF47.h5
        │   │   ├── TRAAADZ128F9348C2E.h5
        │   │   ├── TRAAAEF128F4273421.h5
        │   │   ├── TRAAAFD128F92F423A.h5
        │   │   ├── TRAAAMO128F1481E7F.h5
        │   │   ├── TRAAAMQ128F1460CD3.h5
        │   │   ├── TRAAAPK128E0786D96.h5
        │   │   ├── TRAAARJ128F9320760.h5
        │   │   ├── TRAAAVG12903CFA543.h5
        │   │   └── TRAAAVO128F93133D4.h5
        │   ├── B
        │   │   ├── TRAABCL128F4286650.h5
        │   │   ├── TRAABDL12903CAABBA.h5
        │   │   ├── TRAABJL12903CDCF1A.h5
        │   │   ├── TRAABJV128F1460C49.h5
        │   │   ├── TRAABLR128F423B7E3.h5

HDF5は,C++, R, Pythonなど様々なアプリケーションで使用できます.ここでは,Million Song Datasetの説明に従って,Pythonを使用してみます.

PythonでHDF5を扱う

PythonでHDF5形式のデータを扱うためのパッケージはPyTablesh5pyの2つです.データ解析パッケージのpandasはPyTablesへのインタフェースを提供しています.

import pandas as pd

def readHDF5(fn):
  store = HDFStore(fn)
  print(store)


参考文献

Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython

Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython