一、報告目的
電子商務在發展過程中越來越注意消費者的用戶體驗,淘寶是深受中國消費者喜歡的電子商務平台,本文試圖通過研究淘寶商城消費者的用戶行為和潛在的需求,幫助企業制定個性化的營銷方案,提高平台的運行效率。
二、數據概況
2.1 數據來源
本文的數據來自天池數據集https://tianchi.aliyun.com/dataset/dataDetail?dataId=46
2.2 數據的基本情況
(1) 數據共有1200萬條,選取其中的20萬條作為報告內容。
(2) 數據清洗:清洗異常值、重復值、日期格式轉換、構造新特征
(3) 數據概覽
三、分析思路
3.1 流量分析
pv uv 跳失率 平均訪問量,結合時間維度進行分析
3.2 用戶分析
用戶點擊、收藏、加購、新增用戶情況、用戶復購率分析用戶情況,用戶價值模型分類
3.3 產品分析
主要產品結構、爆款產品分析
3.4 轉化分析
四、分析過程
4.1 數據清洗
# 數據清洗
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv('UserBehavior.csv',nrows=200000, header=None,
names= ['用戶ID','商品ID','商品類目ID','行為類型','時間戳'])
data.head()
data.describe()
data.isnull().sum().sort_values(ascending=False) # 缺失值為0
data.duplicated().sum() # 重復值為0
start_time = datetime.datetime(2017,11,25)
end_time = datetime.datetime(2017,12,4)
start_ts = time.mktime(start_time.timetuple())
end_ts = time.mktime(end_time.timetuple())
data = data[(int(start_ts) <= data['時間戳']) & (data['時間戳'] <= int(end_ts))]
data['時間戳'] = data.時間戳.apply(lambda x: datetime.datetime.fromtimestamp(x))
data['日期'] = data.時間戳.dt.date
data['時間'] = data.時間戳.dt.time
data['小時'] = data.時間戳.dt.hour
4.2 流量分析
pv_date = data[data['行為類型'] == 'pv'].groupby('日期')['行為類型'].count()
uv_date = data[data['行為類型']== 'pv'].drop_duplicates(['日期','用戶ID']).groupby('日期')['用戶ID'].count()
print(pv_date)
print(uv_date)
# 日流量
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = pv_date.index
y1 = pv_date.values
y2 = uv_date.values
plt.plot(x,y1,label='PV',linewidth=4, color='blue', marker='o', markerfacecolor='red', markersize=4)
plt.xticks(rotation=30)
plt.xlabel('日期',size=18)
plt.ylabel('數量',size=20)
plt.title('日流量情況',size=18)
plt.legend(loc='upper left')
plt.savefig('1周流量情況')
# 日訪客數
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = pv_date.index
y1 = pv_date.values
y2 = uv_date.values
plt.plot(x,y2,label='UV',linewidth=4, color='red', marker='o', markerfacecolor='black', markersize=4)
plt.xticks(rotation=30)
plt.xlabel('日期',size=18)
plt.ylabel('數量',size=20)
plt.title('訪客情況',size=18)
plt.legend(loc='upper left')
plt.savefig('2一周訪客情況')
# 日人均流量折線圖
y3 = y1/y2
plt.plot(x,y3,label='日均瀏覽量',linewidth=4, color='green', marker='o', markerfacecolor='black', markersize=4)
plt.xticks(rotation=30)
plt.xlabel('日期',size=18)
plt.ylabel('數量',size=20)
plt.title('日人均瀏覽量',size=18)
plt.legend(loc='upper left')
plt.savefig('3日均瀏覽量情況')
# 時流量
# 時訪客
hour_date = data[data['行為類型'] == 'pv'].groupby('小時')['行為類型'].count()
hour_uv = data[data['行為類型'] == 'pv'].drop_duplicates(['小時','用戶ID']).groupby('小時')['行為類型'].count()
x = hour_date.index
y1 = hour_date.values
y2 = hour_uv.values
y2
plt.plot(x,y1,label='PV',linewidth=4, color='blue', marker='o', markerfacecolor='red', markersize=4)
plt.xticks(rotation=30)
plt.xlabel('日期',size=18)
plt.ylabel('數量',size=20)
plt.title('時流量情況',size=18)
plt.legend(loc='upper left')
plt.savefig('4時流量情況')
plt.plot(x,y2,label='PV',linewidth=4, color='red', marker='o', markerfacecolor='black', markersize=4)
plt.xticks(rotation=30)
plt.xlabel('日期',size=18)
plt.ylabel('數量',size=20)
plt.title('時訪客數情況',size=18)
plt.legend(loc='upper left')
plt.savefig('4時訪客數情況')
- 日PV和日UV呈上升趨勢,且在11月1日至11月2日期間有大幅度提高,初步推測該平台流量有增長的態勢,並在12月1日開啟促銷宣傳活動。
- 時PV和時UV在10時以后較為平穩,並在16時至20時呈現持續增長的態勢,建議在下午和晚上加強宣傳引導,提高轉化率
- 人均瀏覽量在27日下降到最低,應該分析該天的運營情況,商品宣傳頁面是否出現問題等。
4.3 用戶分析
# 新增用戶分析
from copy import deepcopy
import datetime
df_pv = df[df.行為類型 == 'pv']
s = set()
days = []
nums = []
add_pv = []
for date in df_pv['日期'].unique():
num1 = len(s)
s1 = deepcopy(s)
ids = df_pv[df_pv.日期 == date]['用戶ID'].values.tolist()
for i in ids:
s.add(i)
add_users = s - s1
num2 = len(s)
days.append(date)
nums.append(num2-num1)
df_new_uv = pd.DataFrame({'日期': days, '新增訪客數': nums})
df_new_uv
hour_behavior = data.groupby(['行為類型','小時'])['行為類型'].count()
plt.figure(figsize=(12,8))
hour_behavior['pv'].plot(color='r',label='點擊')
plt.legend(fontsize=16, loc='upper right')
plt.xticks(hour_behavior['pv'].index, ['0時','1時','2時','3時','4時','5時','6時','7時','8時','9時','10時','11時','12時','13時','14時','15時','16時','17時','18時','19時','20時','21時','22時','23時'], fontsize=12)
plt.xlabel('')
plt.grid(b='False')
plt.twinx()
hour_behavior['fav'].plot(color='b', label='收藏')
hour_behavior['cart'].plot(color='k', label='加入購物車')
hour_behavior['buy'].plot(color='g', label='購買')
plt.xlabel('')
plt.xticks(hour_behavior['pv'].index, ['0時','1時','2時','3時','4時','5時','6時','7時','8時','9時','10時','11時','12時','13時','14時','15時','16時','17時','18時','19時','20時','21時','22時','23時'], fontsize=12)
plt.grid(b='False')
plt.legend()
plt.title('一天中用戶行為分布折線圖', fontsize=18)
plt.savefig('5一天內用戶行為分析')
# 兩周內用戶行為分析
plt.figure(figsize=(12,8))
day_behavior = data.groupby(['行為類型','日期'])['行為類型'].count()
day_behavior['pv'].plot(color='r',label='點擊')
plt.legend(fontsize=16, loc='upper right')
plt.xlabel('')
plt.xticks(rotation=30)
plt.twinx()
day_behavior['fav'].plot(color='b', label='收藏')
day_behavior['cart'].plot(color='k', label='加入購物車')
day_behavior['buy'].plot(color='g', label='購買')
plt.xlabel('')
plt.xticks(rotation=30)
plt.legend()
plt.title('近幾日用戶行為分布折線圖', fontsize=18)
plt.savefig('6一周內用戶行為分析')
from datetime import date
nowdate = date(2017, 12, 5)
recent_buy_date = df[df.行為類型 == 'buy'].groupby('用戶ID')['日期'].apply(lambda x: x.sort_values().iloc[-1])
recent_buy_time = (nowdate - recent_buy_date).map(lambda x: x.days)
fre_buy = df[df.行為類型 == 'buy'].drop_duplicates(['用戶ID', '時間戳']).groupby('用戶ID')['日期'].count()
rf_module = pd.DataFrame({'用戶ID': recent_buy_time.index,
'recency': recent_buy_time.values,
'frequency': fre_buy.values})
rf_module.to_excel('rf.xlsx')
結論:
- 新增訪客數在25日增加最多,在之后幾日逐漸減少,需要增加拉新活動
- 用戶收藏和購買趨勢線基本擬合,可以增加活動提高收藏率,從而增加購買轉化
- 18時-22時是用戶活躍購買 高峰期,需要加強運營
- rfm用戶價值分析:
重要價值客戶:該類用戶消費頻次較高,最近一次消費近,應當保持當前策略維持
重要發展客戶:該類用戶消費頻次較高,最近一次消費較遠,應該通過發放優惠券、短信及時喚回
潛力客戶:該類客戶消費頻次低,最近一次消費較近,應該通過關聯商品、打折等提高消費頻率
一般維持客戶:該類客戶消費頻次低,最近一次消費低,應當通過折扣、優惠券將其挽回
4.4 轉化分析
pv = data[data['行為類型'] == 'pv']['用戶ID'].count()
cart = data[data['行為類型'] == 'cart']['用戶ID'].count()
fav = data[data['行為類型'] == 'fav']['用戶ID'].count()
buy = data[data['行為類型'] == 'buy']['用戶ID'].count()
attr = ["購買:%.2f%%" % (buy / pv * 100), "收藏或加入購物車: %.2f%%" % ((fav+cart) / pv * 100),"點擊量:100%"]
value = [18, 36, 54]
funnel = Funnel("轉化率", width=600, height=400, title_pos='center')
funnel.add(
"商品",
attr,
value,
is_label_show=True,
label_pos="inside",
label_text_color="#fff",
is_legend_show = False
)
funnel
- 總的點擊量中,有6.25%加入購物車,有3.24%收藏,而到最后只有2.24%購買,整體來看,購買的轉化率最低,有很大的增長空間
- “點擊-加入購物車“這一環節的轉化率最低,按照“點擊-加入購物車-收藏-購買”這一用戶行為路徑,我們可通過優化“點擊-加入購物車”這一環節進而提升購買的轉化率。
# 產品分析
# 用戶關注哪些產品
goods_buy = data[data['行為類型']=='buy'].groupby('商品類目ID')['用戶ID'].count().sort_values(ascending=False)
goods_buy[:10]
goods_pv = data[data['行為類型']=='pv'].groupby('商品類目ID')['用戶ID'].count().sort_values(ascending=False)
goods_pv[:10]
goods_buy[:10].to_excel('goods_buy.xlsx')
goods_pv[:10].to_excel('goods_pv.xlsx')
結論:通過分析找出前10位的主要產品,可以對主要產品進行精准宣傳,打造爆款產品