Mini Project)ショッピングモールの注文データを利用してデータ分析を行う-(5)ログデータを理解し、お客様がページを離れることを確認する


5.ログデータを理解し、顧客ページから離れることを確認する


データ検証


(1)Library and Data Import
import pandas as pd
import numpy as np
logs = pd.read_csv('../data/web.log', 
                   sep='\s',
                   engine='python',
                   names=['ip', 'session_id', 'user_id', 'datetime', 'request', 'url', 'status', 'bytesize'])
logs.head()
今回のデータは、これまで4編使っていたショッピングサイトの販売データではなく、Webサーバのログデータです.
Webサーバログデータは
  • Webサーバにクライアント要求の情報(IP、視点、アクセスページ等)のファイルを記録する.
  • ログを記録するフォーマット基準
  • がありますが、
  • に個別に変更できます.
  • ログデータは、主にWebサーバのデバッグまたはデータ分析に使用されます.
  • 本例で使用するフォーマット
    ipセッションアイデンティティユーザ識別子(id)ビジュアルリクエストページステータスコードバイトサイズ

  • ログ情報の確認
    log.info()

    日付書式の変換
    logs['datetime'] = logs['datetime'].apply(lambda date: date.replace('[', '').replace(']', ''))
    logs['datetime'] = pd.to_datetime(logs['datetime'], format='%d/%b/%YT%H:%M:%S')
    logs.head()

    最終ステップDataFrameの作成


    罰とは何ですか.
    ユーザーがサービスに接続した後に商品を購入する経路を可視化し、転換と移転率を測定することで、ページの機能改善に重点を置くことが分かった.
    ここでは全部で4つのステップ(商品リスト-商品詳細-ショッピングバスケット-購入済み)に分かれています.
    funnel_dict = {'/product_list': 1, 
                   '/product_detail': 2,
                  '/cart': 3,
                  '/order_complete': 4}
    funnel_steps = pd.DataFrame.from_dict(funnel_dict, orient='index', columns=['step_no'])
    funnel_steps

    セッションとurlにグループ化
    ユーザIDではなくセッションベースの理由は、同じユーザが別のセッションに接続される可能性があるため、この場合、独立したイベントと見なすべきである.
    セッションIDとurlを使用してグルーブを行い、最初のイベントを抽出します.
    grouped = logs.groupby(['session_id', 'url'])['datetime'].agg(np.min)
    grouped = pd.DataFrame(grouped).merge(funnel_steps, left_on='url', right_index=True)
    grouped

    個人用テーブルの作成
    ステップごとに順番に列に入るように変更
    funnel = grouped.reset_index().pivot(index='session_id', columns='step_no', values='datetime')
    funnel.columns = funnel_steps.index
    funnel.head()

    たとえば、/product detailまで時間レコードがあり、/cartのNATである場合、ユーザはproduct detailページから購入せずに終了したことを示す.
    逆数計算
    -ステップごとのカウント
    step_values = [funnel[index].notnull().sum() for index in funnel_steps.index]
    step_values
    今回のデータの出力は[419,351,261,84]である.これは、最後のページが登場するにつれて、顧客数がますます少なくなっていることを意味します.
    最後に、ployを使用してパネルをグラフィカルに表示します.
    def show_funnel(funnel_values, funnel_steps):
        from plotly import graph_objects as go
        
        fig = go.Figure(go.Funnel(
            y = funnel_steps,
            x = funnel_values
        ))
        fig.show()
    show_funnel(step_values, funnel_steps.index)

    このように最終ステップをグラフで表示できます.ployを使用する場合は、マウスポインタで各レバーの合計パーセントを表示することもできます.ここで最後のページの割合は約20%です.
    パネルあたりの平均消費時間の計算
    np.mean(funnel['/product_detail'] - funnel['/product_list'])
    Timedelta('0 days 00:16:50.635327635')
    カタログページと商品詳細ページの間の時間は約17分です.
    np.mean(funnel['/cart'] - funnel['/product_detail'])
    Timedelta('0 days 00:18:42.804597701')
    商品の詳細からショッピングバスケットまで、約19分あります.
    np.mean(funnel['/order_complete'] - funnel['/cart'])
    Timedelta('0 days 00:33:35.904761904')
    買い物かごから注文完了まで、約33分35秒.
    どうしてこんなに時間がかかるんだろう…?
    Mini Project)はショッピングモールの注文データを用いてデータ分析を終了する.