どうもニコイチです。以下は、シリーズ第1回「データの読み込みと確認」の内容に基づいた、Python初学者向けの解説記事例です。以下のサンプルコードと解説を参考に、実際に手を動かしながらデータの読み込みと基本的な確認の方法を学んでいきましょう。
はじめに
ECサイトの運営者として、ユーザーの過去の行動履歴データを活用し、どのユーザーがどの商品に対してどんなアクションを取ったかを把握することは、サイトのUI/UX改善や購買率向上に非常に有効です。今回のシリーズでは、実際のデモデータ(例:sate_demo_train.tsv
および sate_demo_test.tsv
)を用いて、ユーザーの行動予測アルゴリズム作成に挑戦します。まずは、データの読み込みと基本的な中身の確認から始めましょう。
ライブラリのインポート
データ分析では、以下のようなライブラリを使います。
- pandas
データフレーム(表形式データ)の操作に必須。 - numpy
数値計算のためのライブラリ。 - matplotlib.pyplot
グラフ描画のためのモジュール。
省略形を用いると、後のコード記述がシンプルになります。まずは、これらをインポートしてみましょう。
import pandas as pd # pandasをpdとしてインポート
import numpy as np # numpyをnpとしてインポート
from matplotlib import pyplot as plt # pyplotのみをpltとしてインポート
データの読み込み
今回のデモでは、タブ区切りのファイル(TSV形式)を読み込みます。pandas の read_csv
関数は、sep
引数に区切り文字を指定することで、TSVファイルも読み込むことができます。
以下のコードでは、デモデータの一つである sate_demo_train.tsv
(例としてtrain_B.tsv
と名前が示されている場合もあります)を読み込み、変数 data
に代入しています。
# データの読み込み(タブ区切りの場合はsep='\t'を指定)
data = pd.read_csv("sate_demo_train.tsv", sep="\t")
※ ファイル名は実際のファイル名に合わせて変更してください。
読み込んだデータの基本確認
データが正しく読み込まれているか、そして中身がどのような構造になっているかを確認することは、後の分析に向けた大切なステップです。ここでは主に以下の項目を確認します。
カラム(列)の確認
まずは、データの列名を確認してみましょう。
# カラム名一覧の表示
print(data.columns)
実行例としては、以下のような出力が得られます。
Index(['user_id', 'product_id', 'event_type', 'ad', 'time_stamp'], dtype='object')
各カラムのデータ型
各列がどのようなデータ型(数値型、文字列型など)で構成されているか確認します。これにより、後でどのような演算や変換が必要か見えてきます。
# 各カラムのデータ型一覧を表示
print(data.dtypes)
例:
user_id object
product_id object
event_type int64
ad int64
time_stamp object
dtype: object
データの行数の確認
全体のデータ規模を把握するために、行数(レコード数)を確認します。len
関数や DataFrame の shape
属性が利用できます。
# 行数の表示
print(len(data))
# または
print(data.shape) # (行数, 列数) が表示される
実行例:
100000
(100000, 5)
データの最初の数行を確認する
全体の雰囲気を掴むために、最初の5行を表示します。pandas の head
メソッドを使います。
# 最初の5行の表示
print(data.head(5))
実行例:
user_id product_id event_type ad time_stamp
0 U1127 P1884 1 -1 2021-01-07 14:48:14
1 U1460 P202 1 -1 2021-01-21 15:58:21
2 U861 P1871 0 -1 2021-01-05 19:32:46
3 U1295 P2342 1 -1 2021-01-08 04:53:36
4 U1131 P33 1 -1 2021-01-16 16:03:43
日付データの整形と取得期間の確認
行動履歴データには、イベントが発生した日時が time_stamp
カラムに格納されていますが、現在は文字列型になっています。このため、日時の計算を行うには pd.to_datetime
関数を利用して、日時型(datetime型)に変換する必要があります。
# time_stampをdatetime型に変換して変数tsに代入
ts = pd.to_datetime(data["time_stamp"])
変換後、データがどの期間にわたって取得されたのかを確認するため、最古の日付と最新の日付の差を求めます。
# データの取得期間を表示
data_period = max(ts) - min(ts)
print(data_period)
実行例:
22 days 23:59:46
例として「22 days 23:59:46」のような期間が表示されれば、データ取得期間が約23日間であることがわかります。
ユニークなユーザーや商品の確認
ユーザーや商品に重複がある場合、ユニークな数を把握することは重要です。
ユニークユーザー数の確認
# ユニークユーザー一覧の取得と個数の表示
users = data["user_id"].unique()
print("ユニークユーザー数:", len(users))
実行例:
ユニークユーザー数: 2000
ユニーク商品の確認
# ユニーク商品一覧の取得と個数の表示
products = data["product_id"].unique()
print("ユニーク商品数:", len(products))
実行例:
ユニーク商品数: 3000
これにより、データ内で実際に何人のユーザーと何種類の商品が存在するかが把握できます。
ユーザーの行動の種類と頻度の確認
イベント(行動)の頻度
event_type
カラムは、各行動(カートに入れる、詳細ページ閲覧、広告クリック、購入)を表す数値になっています。各行動の件数を確認して、どの行動が多いかを把握してみましょう。
# 各行動の頻度を表示
print(data["event_type"].value_counts())
実行例:
event_type
1 90017
0 4893
2 2585
3 2505
Name: count, dtype: int64
広告経由の購入の確認
購入に関しては、ad
カラムで、広告経由かどうかが記録されています。ここで、-1は「購入していない」ことを意味するので、0と1の値に注目します。
# 広告経由購入とそれ以外の頻度を表示
print(data["ad"].value_counts())
実行例:
ad
-1 97495
0 2007
1 498
Name: count, dtype: int64
0(広告経由でない購入)と1(広告経由の購入)の合計が実際の購入件数と一致することを確認してください。
まとめ
今回のMissionでは、以下のポイントを学びました:
- ライブラリのインポート
データ分析に必要な pandas、numpy、matplotlib の読み込み方法を確認しました。 - データの読み込み
pd.read_csv()
を用いて、タブ区切りのデータファイルを読み込む方法を学びました。 - データの基本確認
カラム名、データ型、行数、データの先頭部分を確認することで、データの概要を把握しました。 - 日付データの変換と取得期間の確認
pd.to_datetime()
を用いて、日時の演算ができるように変換し、データ取得期間を算出しました。 - ユニークユーザーや商品の確認
ユニークなユーザー数や商品数を把握し、データの規模感を理解しました。 - 行動頻度の分析
ユーザーがどのような行動を多く取っているか、また広告経由の購入の割合を確認しました。
次回以降は、これらの基本確認を踏まえて、ユーザーや商品の詳細な行動分析、特徴量作成、そして最終的に推薦エンジンの構築に進んでいきます。まずは今回の内容をしっかりと理解し、実際にコードを実行してみてください。
コメント