オンラインストア購買データ ============================= |uci| より配布されている |uci_onlineretail| の利用方法について解説する。 このデータは雑貨を扱う英国のオンラインストアの顧客ID付きPOSデータで、 :numref:`uci_online_fields` に示される8項目から構成される。 .. note:: 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より引用) .. csv-table:: オンラインストアデータの項目一覧 :name: uci_online_fields :header: 項目名, 日本語, 型, 内容 InvoiceNo ,請求番号 ,文字列,基本は6桁の整数で、"c"から始まるコードはキャンセルを表す。 StockCode ,商品コード,文字列,基本は5桁の整数だが、末尾にアルファベットが付くものもある。 Description ,商品名 ,文字列,商品の名称(商品コードと1:1に対応していないものもある) Quantity ,数量 ,整数 ,購入数量 InvoiceDate ,請求日時 ,実数 ,トランザクションが生成された日時 UnitPrice ,単価 ,実数 ,一商品あたりの英貨 CustomerID ,顧客コード,文字列,5桁の整数で顧客の識別コード Country ,国名 ,文字列,顧客が居住する国 このデータはMicrosoft Excelのデータとして配布されている。 :numref:`uci_online_download` に、ダウンロードの方法を示している。 wgetやcurlコマンドを用いて、コマンドラインからダウンロードするのであれば、 :numref:`uci_online_wget` に従えば良い。 とExcelをCSVに変換する方法を示している。 .. |uci| raw:: html UCI machine learning repository .. |uci_onlineretail| raw:: html online retailデータセット .. code-block:: python :linenos: :caption: OnlineRetailのExcelファイルのダウンロード :name: uci_online_download >>> import urllib.request >>> url="https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx" >>> urllib.request.urlretrieve(url,"onlineRetail.xlsx") .. code-block:: bash :linenos: :caption: curlもしくはwgetによるダウンロード :name: uci_online_wget $ curl https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx >onlineRetail.xlsx $ 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'`` を指定する。 .. code-block:: python :linenos: :caption: Pandasを用いて、ExcelファイルをCSVに変換する :name: uci_online_excel2csv >>> import pandas as pd >>> data = pd.read_excel('onlineRetail.xlsx', 'Online Retail', index_col=None) >>> data.to_csv('onlineRetail.csv', encoding='utf-8', index=None) 変換されたCSVは :numref:`uci_online_csv` に示される通り、8項目の54万行ほどのデータである。 .. code-block:: bash :linenos: :caption: 変換されたCSVデータの内容 :name: uci_online_csv $ head onlineRetail.csv InvoiceNo,StockCode,Description,Quantity,InvoiceDate,UnitPrice,CustomerID,Country 536365,85123A,WHITE HANGING HEART T-LIGHT HOLDER,6,2010-12-01 08:26:00,2.55,17850.0,United Kingdom 536365,71053,WHITE METAL LANTERN,6,2010-12-01 08:26:00,3.39,17850.0,United Kingdom 536365,84406B,CREAM CUPID HEARTS COAT HANGER,8,2010-12-01 08:26:00,2.75,17850.0,United Kingdom 536365,84029G,KNITTED UNION FLAG HOT WATER BOTTLE,6,2010-12-01 08:26:00,3.39,17850.0,United Kingdom 536365,84029E,RED WOOLLY HOTTIE WHITE HEART.,6,2010-12-01 08:26:00,3.39,17850.0,United Kingdom 536365,22752,SET 7 BABUSHKA NESTING BOXES,2,2010-12-01 08:26:00,7.65,17850.0,United Kingdom 536365,21730,GLASS STAR FROSTED T-LIGHT HOLDER,6,2010-12-01 08:26:00,4.25,17850.0,United Kingdom 536366,22633,HAND WARMER UNION JACK,6,2010-12-01 08:28:00,1.85,17850.0,United Kingdom 536366,22632,HAND WARMER RED POLKA DOT,6,2010-12-01 08:28:00,1.85,17850.0,United Kingdom $ wc onlineRetail.csv 541910 3522965 48039726 onlineRetail.csv このデータには ``InvoiceDate`` という日付時刻項目が含まれている。 mcmdでは、日付はyyyymmddの8桁固定長に、時刻はhhmmssの6桁固定長にしておくと扱いやすい。 その変換を行うスクリプトを :numref:`uci_online_convdate` に示している。 変換後のデータは :numref:`uci_online2_csv` に示される通りで、 ``InvoiceDate`` 項目から 日付8桁と時刻6桁が切り出され、 それぞれ ``date`` と ``time`` 項目として追加されている。 .. code-block:: python :linenos: :caption: 日付時刻項目を固定長に変換する。 :name: uci_online_convdate >>> import nysol.mcmd as nm >>> f=None >>> f <<= nm.mdformat(f="InvoiceDate", c="%Y-%m-%d %H:%M:%S", i="onlineRetail.csv") >>> f <<= nm.mcal(c="left($s{InvoiceDate},8)", a="date") >>> f <<= nm.mcal(c="right($s{InvoiceDate},6)", a="time") >>> f <<= nm.mcut(f="InvoiceDate", r=True, o="onlineRetail2.csv") >>> f.run(msg="on") .. code-block:: bash :linenos: :caption: 日付時刻項目が固定長に変換されたCSVデータ(onlineRetail2.csv) :name: uci_online2_csv $ head onlineRetail2.csv InvoiceNo,StockCode,Description,Quantity,UnitPrice,CustomerID,Country,date,time 536365,85123A,WHITE HANGING HEART T-LIGHT HOLDER,6,2.55,17850.0,United Kingdom,20101201,082600 536365,71053,WHITE METAL LANTERN,6,3.39,17850.0,United Kingdom,20101201,082600 536365,84406B,CREAM CUPID HEARTS COAT HANGER,8,2.75,17850.0,United Kingdom,20101201,082600 536365,84029G,KNITTED UNION FLAG HOT WATER BOTTLE,6,3.39,17850.0,United Kingdom,20101201,082600 536365,84029E,RED WOOLLY HOTTIE WHITE HEART.,6,3.39,17850.0,United Kingdom,20101201,082600 536365,22752,SET 7 BABUSHKA NESTING BOXES,2,7.65,17850.0,United Kingdom,20101201,082600 536365,21730,GLASS STAR FROSTED T-LIGHT HOLDER,6,4.25,17850.0,United Kingdom,20101201,082600 536366,22633,HAND WARMER UNION JACK,6,1.85,17850.0,United Kingdom,20101201,082800 536366,22632,HAND WARMER RED POLKA DOT,6,1.85,17850.0,United Kingdom,20101201,082800 以上で、online retail データセットを利用する準備が整った。 * このデータセットを用いたチュートリアルは :doc:`こちら<../tutorial/index>`