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.mdはMarkdown記法で用意しておく)。
$ 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_datesはpandas.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?)