オンラインストア購買データ

UCI machine learning repository より配布されている online retailデータセット の利用方法について解説する。 このデータは雑貨を扱う英国のオンラインストアの顧客ID付きPOSデータで、 表 1 に示される8項目から構成される。

注釈

Abstract: This is a transnational data set which contains all the transactions occurring between 01/12/2010 and 09/12/2011 for a UK-based and registered non-store online retail.

概要: 英国を拠点にしたオンラインストアの2010年1月12日〜2011年9月12日のトランザクションデータである。

(上記URLより引用)

表 1 オンラインストアデータの項目一覧

項目名

日本語

内容

InvoiceNo

請求番号

文字列

基本は6桁の整数で、"c"から始まるコードはキャンセルを表す。

StockCode

商品コード

文字列

基本は5桁の整数だが、末尾にアルファベットが付くものもある。

Description

商品名

文字列

商品の名称(商品コードと1:1に対応していないものもある)

Quantity

数量

整数

購入数量

InvoiceDate

請求日時

実数

トランザクションが生成された日時

UnitPrice

単価

実数

一商品あたりの英貨

CustomerID

顧客コード

文字列

5桁の整数で顧客の識別コード

Country

国名

文字列

顧客が居住する国

このデータはMicrosoft Excelのデータとして配布されている。 リスト 6 に、ダウンロードの方法を示している。 wgetやcurlコマンドを用いて、コマンドラインからダウンロードするのであれば、 リスト 7 に従えば良い。

とExcelをCSVに変換する方法を示している。

リスト 6 OnlineRetailのExcelファイルのダウンロード
1>>> import urllib.request
2>>> url="https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx"
3>>> urllib.request.urlretrieve(url,"onlineRetail.xlsx")
リスト 7 curlもしくはwgetによるダウンロード
1$ curl https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx >onlineRetail.xlsx
2$ wget -O onlineRetail.xlsx https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx

次に、ExcelファイルをCSVに変換する。変換にはPandasの to_csv メソッドを用いる。 ExcelデータにはASCIIコード以外に、マルチバイトコード(通貨記号など)も利用されているので、 to_csvencoding='utf-8' を指定する。

リスト 8 Pandasを用いて、ExcelファイルをCSVに変換する
1>>> import pandas as pd
2>>> data = pd.read_excel('onlineRetail.xlsx', 'Online Retail', index_col=None)
3>>> data.to_csv('onlineRetail.csv', encoding='utf-8', index=None)

変換されたCSVは リスト 9 に示される通り、8項目の54万行ほどのデータである。

リスト 9 変換されたCSVデータの内容
 1$ head onlineRetail.csv
 2InvoiceNo,StockCode,Description,Quantity,InvoiceDate,UnitPrice,CustomerID,Country
 3536365,85123A,WHITE HANGING HEART T-LIGHT HOLDER,6,2010-12-01 08:26:00,2.55,17850.0,United Kingdom
 4536365,71053,WHITE METAL LANTERN,6,2010-12-01 08:26:00,3.39,17850.0,United Kingdom
 5536365,84406B,CREAM CUPID HEARTS COAT HANGER,8,2010-12-01 08:26:00,2.75,17850.0,United Kingdom
 6536365,84029G,KNITTED UNION FLAG HOT WATER BOTTLE,6,2010-12-01 08:26:00,3.39,17850.0,United Kingdom
 7536365,84029E,RED WOOLLY HOTTIE WHITE HEART.,6,2010-12-01 08:26:00,3.39,17850.0,United Kingdom
 8536365,22752,SET 7 BABUSHKA NESTING BOXES,2,2010-12-01 08:26:00,7.65,17850.0,United Kingdom
 9536365,21730,GLASS STAR FROSTED T-LIGHT HOLDER,6,2010-12-01 08:26:00,4.25,17850.0,United Kingdom
10536366,22633,HAND WARMER UNION JACK,6,2010-12-01 08:28:00,1.85,17850.0,United Kingdom
11536366,22632,HAND WARMER RED POLKA DOT,6,2010-12-01 08:28:00,1.85,17850.0,United Kingdom
12
13$ wc onlineRetail.csv
14541910 3522965 48039726 onlineRetail.csv

このデータには InvoiceDate という日付時刻項目が含まれている。 mcmdでは、日付はyyyymmddの8桁固定長に、時刻はhhmmssの6桁固定長にしておくと扱いやすい。 その変換を行うスクリプトを リスト 10 に示している。 変換後のデータは リスト 11 に示される通りで、 InvoiceDate 項目から 日付8桁と時刻6桁が切り出され、 それぞれ datetime 項目として追加されている。

リスト 10 日付時刻項目を固定長に変換する。
1>>> import nysol.mcmd as nm
2>>> f=None
3>>> f <<= nm.mdformat(f="InvoiceDate", c="%Y-%m-%d %H:%M:%S", i="onlineRetail.csv")
4>>> f <<= nm.mcal(c="left($s{InvoiceDate},8)", a="date")
5>>> f <<= nm.mcal(c="right($s{InvoiceDate},6)", a="time")
6>>> f <<= nm.mcut(f="InvoiceDate", r=True, o="onlineRetail2.csv")
7>>> f.run(msg="on")
リスト 11 日付時刻項目が固定長に変換されたCSVデータ(onlineRetail2.csv)
 1$ head onlineRetail2.csv
 2InvoiceNo,StockCode,Description,Quantity,UnitPrice,CustomerID,Country,date,time
 3536365,85123A,WHITE HANGING HEART T-LIGHT HOLDER,6,2.55,17850.0,United Kingdom,20101201,082600
 4536365,71053,WHITE METAL LANTERN,6,3.39,17850.0,United Kingdom,20101201,082600
 5536365,84406B,CREAM CUPID HEARTS COAT HANGER,8,2.75,17850.0,United Kingdom,20101201,082600
 6536365,84029G,KNITTED UNION FLAG HOT WATER BOTTLE,6,3.39,17850.0,United Kingdom,20101201,082600
 7536365,84029E,RED WOOLLY HOTTIE WHITE HEART.,6,3.39,17850.0,United Kingdom,20101201,082600
 8536365,22752,SET 7 BABUSHKA NESTING BOXES,2,7.65,17850.0,United Kingdom,20101201,082600
 9536365,21730,GLASS STAR FROSTED T-LIGHT HOLDER,6,4.25,17850.0,United Kingdom,20101201,082600
10536366,22633,HAND WARMER UNION JACK,6,1.85,17850.0,United Kingdom,20101201,082800
11536366,22632,HAND WARMER RED POLKA DOT,6,1.85,17850.0,United Kingdom,20101201,082800

以上で、online retail データセットを利用する準備が整った。

  • このデータセットを用いたチュートリアルは こちら