前回の続き:第5話 集計と可視化:pandasでデータの加工をしてみよう
今回のサンプルコード
処理を単純化するために、最初におかしな値を除外する
第5話で、わかばちゃんは Quantity(購入量) にマイナス値を見つけました。その理由は、返品処理のせいでしたね。
Quantity(購入量)だけでなく、UnitPrice(単価)も原因不明のマイナス値がありました。データ加工の処理を単純化するために、Quantity(購入量)及び、UnitPrice(単価)がマイナス値のデータを事前に削除しましょう。
Plotlyを使ってユーザーの購買履歴を折れ線グラフにしてみよう
Plotlyはオープンソースのデータ可視化ライブラリで、Pythonだけでなく、R、JavaScript、MATLABなどでも使うことができます。
まずは、ユーザーの購買履歴を折れ線グラフで可視化してみましょう。データの 1 行ごとに行動が記録されており、これを追跡することでユーザーの活動を追体験することができます。
Plotlyでグラフを描くために、plotly.graph_objectsを読み込んでgoという名前をつけておきます。go.Figureでグラフ描画の準備、go.Scatterでグラフの作成です。
データ上では、8月30日に初めて商品を購入しており12月5日に1日当たりの購入金額が最大になっています。
import plotly.graph_objects as go
fig = go.Figure(data=go.Scatter(x=購入日時のデータ, y=購入量のデータ))
fig.show()
```
ユーザーの居住地を円グラフにしてみよう
次に、ユーザーの居住地を円グラフで可視化してみましょう。円グラフではマイナーな項目全てを描画すると可読性が下がってしまうので「その他」でまとめるのがオススメです。
このデータセットはイギリスのECサイトであることから、約90%がイギリス国内からの購入は自然な結果ですね。約10%は他国に居住しているユーザーが購入していることが、興味深い点です。
import plotly.express as px
fig = px.pie(データ, values='count', names='Country')
fig.show()
```
購入実績の平均を、棒グラフで比較してみよう
前回実施したRFM分析(Recency:直近いつ、Frequency:頻度、Monetary:購入金額)における、Recencyの平均と翌月の購入実績の有無を用いて棒グラフを描いてみましょう。
棒グラフの作成には、go.Barを使います。
is_visit=Falseが購入実績のないユーザー、is_visit=Trueが購入実績のあるユーザーです。
fig = go.Figure(data=[ go.Bar(name='is_visit=False', x=["recency"], y=翌月の購入実績がないユーザーのRecencyの平均),
go.Bar(name='is_visit=True', x=["recency"], y=翌月の購入実績があるユーザーのRecencyの平均)
])
fig.update_layout(barmode='group')
fig.show()
```
Recency について、より詳しくデータを眺めていきましょう。
このヒストグラムからはRecencyが小さいユーザーが多く、大きくなるに従ってユーザーが減っていくことがわかります。ロングテールな分布と呼ばれる形をしています。
fig = px.histogram(データ, x="recency")
fig.show()
```
翌月の購入実績の有無で棒グラフを作って比較したように、ヒストグラムを2つ並べることも有用です。2つのヒストグラムを縦に並べて比較することによって、平均値で比較する棒グラフよりも細かい情報を得ることができます。
翌月に購入実績がないユーザーであっても直近30日以内に購入した人が全体の約28%もいます。直近に購入しているほど翌月も購入しやすい傾向はありますが、必ず購入するとは限らないことがわかります。
散布図で外れ値をチェックしよう
次は散布図を描きます。px.scatterもしくはgo.Scatterを使います。px.scatterを用いる方が短いコードで描画可能です。
横軸が Recency(直近いつ)、縦軸が Frequency(頻度)としています。
外れ値となるようなユーザーを細かく観測することで、サービスの珍しい使い方を発見できるかもしれません。場合によっては不適切な使い方をしているユーザーが外れ値となることもあります。
```
fig = px.scatter(x=Recencyデータ, y=Frequencyデータ)
fig.show()
```
バブルチャートを描いてみよう
最後に、複雑なグラフを描いてみましょう。
・縦軸にFrequency(頻度)
・データ点の○の大きさでMonetary(購入金額)
・色で翌月に購入したか(翌月購入は赤色、未購入は青色)
雑なグラフになるほど、グラフが伝えるメッセージが不明瞭になりますが、データの傾向を捉えたい探索的な分析には有効です。
第1話 機械学習の仕事内容って?実はコードを書くだけじゃない!
第2話 人工知能、機械学習、ディープラーニングの違いとは?
第3話 機械学習の活用事例!建設機械や回転寿司屋でも活用されている!?
第4話 機械学習したいのにデータがない!?
第5話 集計と可視化:pandasでデータの加工をしてみよう
わかばちゃんが登場する書籍いろいろ