もた日記

くだらないことを真面目にやる

Pythonメモ : データパッケージマネージャQuiltを使ってみる

インストー



quiltdata.com

Quiltはデータセットを管理するデータパッケージマネージャ。データセットをパッケージ化することで再利用しやすくし、バージョンも管理できる。


Quiltはpipでインストールできる。ドキュメントによるとUbuntu Linuxではlibssl-devが必要とのこと。

$ pip install quilt
$ quilt --help
usage: quilt [-h]
             {login,logout,log,generate,build,push,version,tag,install,access,search,ls,inspect}
             ...

Quilt Command Line

optional arguments:
  -h, --help            show this help message and exit

Commands:
  {login,logout,log,generate,build,push,version,tag,install,access,search,ls,inspect}


パッケージ一覧


公開されているパッケージは下記で確認できる。
Quilt is a data package manager

現時点の一覧。

akarve/calls_911
akarve/clinton_email
akarve/cookbook_data
akarve/days
akarve/examples
akarve/fremont_bike
akarve/genes_demo
akarve/handbook
akarve/hgenes
akarve/mobile_activity
akarve/nyc_jobs
akarve/nyc_taxi
akarve/plants
akarve/quora
akarve/sales
akarve/school_accountability
akarve/seattle_911
akarve/seattle_police
akarve/us_census_segments
akarve/vcf
akarve/wine
aktiur/elections_france
bob/sales
cmungall/dinosaur_biotic_interactions
cmungall/prefixcommons_test
coryjog/MERRA
dima/hack
examples/wine
examples/world100m
jeeGnomeJeff/clinvarVcf_GRCh37_20170404
kmoore/CAforDS
kmoore/crispr
mjboothaus/Titanic
ndarville/fremont_bike
ndarville/polls
uciml/abalone
uciml/adult
uciml/bank
uciml/breast_cancer_wisconsin
uciml/car
uciml/forestfires
uciml/heart_disease
uciml/iris
uciml/poker_hand
uciml/wine
uciml/wine_quality


基本的な使い方


最初に使用したいデータセットをインストールする。

$ quilt install uciml/iris

インストールしたデータはカレントディレクトリ以下に保存される。

$ quilt ls
/home/vagrant/quilt_packages
└── uciml/iris

Pythonで以下のようにimportするとデータが使えるようになる。他のデータセットを使う場合はインストールしてfrom quilt.data.{Owner} import {Package Name}のようにすればよい。

>>> from quilt.data.uciml import iris
>>> iris
<PackageNode '/home/vagrant/quilt_packages/uciml/iris'>
raw/
tables/
README
>>> iris.tables
<GroupNode>

bezdek_iris
iris
>>> df = iris.tables.iris()
>>> df.describe()
       sepal_length  sepal_width  petal_length  petal_width
count    150.000000   150.000000    150.000000   150.000000
mean       5.843333     3.054000      3.758667     1.198667
std        0.828066     0.433594      1.764420     0.763161
min        4.300000     2.000000      1.000000     0.100000
25%        5.100000     2.800000      1.600000     0.300000
50%        5.800000     3.000000      4.350000     1.300000
75%        6.400000     3.300000      5.100000     1.800000
max        7.900000     4.400000      6.900000     2.500000

scikit-learnのデータセットと比べると値は同じ。

>>> from sklearn.datasets import load_iris
>>> iris = load_iris()
>>> import pandas as pd
>>> df = pd.DataFrame(iris.data, columns=iris.feature_names)
>>> df.describe()
       sepal length (cm)  sepal width (cm)  petal length (cm)  \
count         150.000000        150.000000         150.000000
mean            5.843333          3.054000           3.758667
std             0.828066          0.433594           1.764420
min             4.300000          2.000000           1.000000
25%             5.100000          2.800000           1.600000
50%             5.800000          3.000000           4.350000
75%             6.400000          3.300000           5.100000
max             7.900000          4.400000           6.900000

       petal width (cm)
count        150.000000
mean           1.198667
std            0.763161
min            0.100000
25%            0.300000
50%            1.300000
75%            1.800000
max            2.500000

データセットはバージョン管理でき、logで確認できる。

$ quilt log uciml/iris
Hash                                                             Pushed              Author
da2b6f56f323b11f7ebe2e32fd3a920e82842aaf0d52fc48eeb1e20f470e66c7 2017-06-14 04:52:22 uciml
d65b9514da28398be09687b7960eb6f7ac388d24035e8de94fde54c61c9f4291 2017-06-14 04:44:25 uciml
5c382b9757487b57d2baf0a82962df308f4f1547ef82e3ca9794cd64f42f615b 2017-06-14 03:34:44 uciml
d79643ef31ffffbd6a0d80fe049c832fea8481a9068b17bdafee81670c066568 2017-06-14 03:23:14 uciml
08f66e8902a178d293c41f2045feff872b7fa63422efe287fa0f2bd650ba3aa9 2017-06-14 03:19:16 uciml

特定のバージョンをインストールしたい場合はHashを指定する。

$ quilt install uciml/iris -x d65b9514da28398be09687b7960eb6f7ac388d24035e8de94fde54c61c9f4291
uciml/iris already installed.
Overwrite? (y/n)


データセットを作成する


自分でデータを用意してデータセットを作成することもできる (詳しくはここを参照)。
例えば以下のようなデータがあったとする。

$ head src/Fremont_Hourly_Bicycle_Counts_October_2012_to_present.csv
Date,Fremont Bridge West Sidewalk,Fremont Bridge East Sidewalk
10/03/2012 12:00:00 AM,4,9
10/03/2012 01:00:00 AM,4,6
10/03/2012 02:00:00 AM,1,1
10/03/2012 03:00:00 AM,2,3
10/03/2012 04:00:00 AM,6,1
10/03/2012 05:00:00 AM,21,10
10/03/2012 06:00:00 AM,105,50
10/03/2012 07:00:00 AM,257,95
10/03/2012 08:00:00 AM,291,146

まずgenerateコマンドでbuild.ymlを作成する(README.mdMarkdown記法で用意しておく)。

$ quilt generate src
Generated build-file src/build.yml.
$ cat src/build.yml
contents:
  Fremont_Hourly_Bicycle_Counts_October_2012_to_present:
    file: Fremont_Hourly_Bicycle_Counts_October_2012_to_present.csv
  README:
    file: README.md

データ名をわかりやすくするためにbuild.ymlを編集する(countsでデータにアクセスできるようになる)。parse_datespandas.read_csvの日付として扱うカラム。

$ cat src/build.yml
contents:
  counts:
    file: Fremont_Hourly_Bicycle_Counts_October_2012_to_present.csv
    parse_dates: True
  README:
    file: README.md

ビルドする。

$ quilt build myname/test src/build.yml
Inferring 'transform: csv' for Fremont_Hourly_Bicycle_Counts_October_2012_to_present.csv
Serializing src/Fremont_Hourly_Bicycle_Counts_October_2012_to_present.csv...
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.13M/1.13M [00:00<00:00, 42.8MB/s]
Saving as binary dataframe...
No transform given for README.md. Using 'transform: id'
Copying src/README.md...
Built myname/test successfully.

新しくデータセットが追加されていることを確認。

$ [f:id:wonder-wall:20170716211523p:plain]quilt ls
/home/vagrant/quilt_packages
├── uciml/iris
└── myname/test

これでデータが使えるようになる。

>>> from quilt.data.myname import test
>>> test
<PackageNode '/home/vagrant/quilt_packages/myname/test'>

README
counts
>>> df = test.counts()
>>> df.describe()
                          Date Fremont Bridge West Sidewalk  \
count                    39384                        39384
unique                   39384                          488
top     02/25/2015 05:00:00 AM                            2
freq                         1                         1854

       Fremont Bridge East Sidewalk
count                         39384
unique                          576
top                               1
freq                           1976

バージョン管理するためにはアカウントを作成してログインが必要らしい。その他、quilt pushでパッケージをcentral registryにアップロードすることもできるようだ。

$ quilt log myname/test
Package myname/test does not exist (do you need to log in?)