オンラインストア購買データ¶
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より引用)
項目名 |
日本語 |
型 |
内容 |
---|---|---|---|
InvoiceNo |
請求番号 |
文字列 |
基本は6桁の整数で、"c"から始まるコードはキャンセルを表す。 |
StockCode |
商品コード |
文字列 |
基本は5桁の整数だが、末尾にアルファベットが付くものもある。 |
Description |
商品名 |
文字列 |
商品の名称(商品コードと1:1に対応していないものもある) |
Quantity |
数量 |
整数 |
購入数量 |
InvoiceDate |
請求日時 |
実数 |
トランザクションが生成された日時 |
UnitPrice |
単価 |
実数 |
一商品あたりの英貨 |
CustomerID |
顧客コード |
文字列 |
5桁の整数で顧客の識別コード |
Country |
国名 |
文字列 |
顧客が居住する国 |
このデータはMicrosoft Excelのデータとして配布されている。 リスト 6 に、ダウンロードの方法を示している。 wgetやcurlコマンドを用いて、コマンドラインからダウンロードするのであれば、 リスト 7 に従えば良い。
とExcelをCSVに変換する方法を示している。
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")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_csv
に encoding='utf-8'
を指定する。
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万行ほどのデータである。
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桁が切り出され、 それぞれ date
と time
項目として追加されている。
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")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 データセットを利用する準備が整った。
このデータセットを用いたチュートリアルは こちら