久久国产精品一区二区_欧美成年网站_国产精品成人国产_亚洲欧美日韩在线观看a三区_在线成人动漫_国产乱码精品一品二品_一级毛片在线看_美女免费视频一区二区_亚洲综合图片_亚洲精品tv久久久久久久久久

外貿領航
首頁外貿學堂 > 基于python的電商評論分析「python商業數據分析」

基于python的電商評論分析「python商業數據分析」

來源:互聯網 2024-08-15 17:04:03
本文分析主要內容分為下四個部分:

一. 項目背景

二. 數據集介紹

三. 數據清洗

四. 分析模型構建

五. 總結

一. 項目背景

項目對京東電商運營數據集進行指標分析以了解用戶購物行為特征,為運營決策提供支持建議。 本文采用了MySQL和Python兩種代碼進行指標計算以適應不同的數據分析開發環境。

二. 數據集介紹

本數據集為京東競賽數據集,詳細介紹請訪問鏈接: jdata.jd.com/html/detail… 。 數據集共有五個文件,包含了'2021-02-01'至'2021-04-15'之間的用戶數據,數據已進行了脫敏處理,本文使用了其中的行為數據表,表中共有五個字段,各字段含義如下圖所示 行為數據表(jdata_action)字段說明

三. 數據清洗# 導入python相關模塊import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltfrom datetime import datetimeplt.style.use('ggplot')%matplotlib inline# 設置中文編碼和負號的正常顯示plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False復制代碼# 讀取數據,數據集較大,如果計算機讀取內存不夠用,可以嘗試kaggle比賽# 中的reduce_mem_usage函數,附在文末,主要原理是把int64/float64# 類型的數值用更小的int(float)32/16/8來搞定user_action = pd.read_csv('jdata_action.csv')復制代碼# 因數據集過大,本文截取'2018-03-30'至'2018-04-15'之間的數據完成本次分析# 注:僅4月份的數據包含加購物車行為,即type == 5user_data = user_action[(user_action['action_time'] > '2018-03-30') & (user_action['action_time'] < '2018-04-15')]復制代碼# 存至本地備用user_data.to_csv('user_data.csv',sep=',')復制代碼# 查看原始數據各字段類型behavior = pd.read_csv('user_data.csv', index_col=0)behavior[:10]復制代碼# OUTPUTuser_id sku_id action_time module_id type17 1455298 208441 2018-04-11 15:21:43 6190659 118 1455298 334318 2018-04-11 15:14:54 6190659 119 1455298 237755 2018-04-11 15:14:13 6190659 120 1455298 6422 2018-04-11 15:22:25 6190659 121 1455298 268566 2018-04-11 15:14:26 6190659 122 1455298 115915 2018-04-11 15:13:35 6190659 123 1455298 208254 2018-04-11 15:22:16 6190659 124 1455298 177209 2018-04-14 14:09:59 6628254 125 1455298 71793 2018-04-14 14:10:29 6628254 126 1455298 141950 2018-04-12 15:37:53 10207258 1復制代碼behavior.info()復制代碼# OUTPUT<class 'pandas.core.frame.DataFrame'>Int64Index: 7540394 entries, 17 to 37214234Data columns (total 5 columns):user_id int64sku_id int64action_time objectmodule_id int64type int64dtypes: int64(4), object(1)memory usage: 345.2 MB復制代碼# 查看缺失值 behavior.isnull().sum()復制代碼# OUTPUTuser_id 0sku_id 0action_time 0module_id 0type 0dtype: int64復制代碼

數據各列無缺失值。

# 原始數據中時間列action_time,時間和日期是在一起的,不方便分析,對action_time列進行處理,拆分出日期和時間列,并添加星期字段求出每天對應# 的星期,方便后續按時間緯度對數據進行分析behavior['date'] = pd.to_datetime(behavior['action_time']).dt.date # 日期behavior['hour'] = pd.to_datetime(behavior['action_time']).dt.hour # 時間behavior['weekday'] = pd.to_datetime(behavior['action_time']).dt.weekday_name # 周復制代碼# 去除與分析無關的列behavior = behavior.drop('module_id', axis=1)復制代碼# 將用戶行為標簽由數字類型改為用字符表示behavior_type = {1:'pv',2:'pay',3:'fav',4:'comm',5:'cart'}behavior['type'] = behavior['type'].apply(lambda x: behavior_type[x])behavior.reset_index(drop=True,inplace=True)復制代碼# 查看處理好的數據behavior[:10]復制代碼# OUTPUTuser_id sku_id action_time type date hour weekday0 1455298 208441 2018-04-11 15:21:43 pv 2018-04-11 15 Wednesday1 1455298 334318 2018-04-11 15:14:54 pv 2018-04-11 15 Wednesday2 1455298 237755 2018-04-11 15:14:13 pv 2018-04-11 15 Wednesday3 1455298 6422 2018-04-11 15:22:25 pv 2018-04-11 15 Wednesday4 1455298 268566 2018-04-11 15:14:26 pv 2018-04-11 15 Wednesday5 1455298 115915 2018-04-11 15:13:35 pv 2018-04-11 15 Wednesday6 1455298 208254 2018-04-11 15:22:16 pv 2018-04-11 15 Wednesday7 1455298 177209 2018-04-14 14:09:59 pv 2018-04-14 14 Saturday8 1455298 71793 2018-04-14 14:10:29 pv 2018-04-14 14 Saturday9 1455298 141950 2018-04-12 15:37:53 pv 2018-04-12 15 Thursday復制代碼四. 分析模型構建分析指標流量指標分析用戶消費頻次分析用戶行為在時間緯度的分布用戶行為轉化漏斗用戶留存率分析商品銷量分析RFM用戶價值分層1.流量指標分析

pv、uv、消費用戶數占比、消費用戶總訪問量占比、消費用戶人均訪問量、跳失率

PV UV# 總訪問量pv = behavior[behavior['type'] == 'pv']['user_id'].count()# 總訪客數uv = behavior['user_id'].nunique()# 消費用戶數 user_pay = behavior[behavior['type'] == 'pay']['user_id'].unique()# 日均訪問量pv_per_day = pv / behavior['date'].nunique()# 人均訪問量pv_per_user = pv / uv# 消費用戶訪問量pv_pay = behavior[behavior['user_id'].isin(user_pay)]['type'].value_counts().pv# 消費用戶數占比user_pay_rate = len(user_pay) / uv# 消費用戶訪問量占比pv_pay_rate = pv_pay / pv# 消費用戶人均訪問量pv_per_buy_user = pv_pay / len(user_pay)復制代碼# SQLSELECT count(DISTINCT user_id) UV, (SELECT count(*) PV from behavior_sql WHERE type = 'pv') PVFROM behavior_sql;SELECT count(DISTINCT user_id)FROM behavior_sqlWHERE?WHERE type = 'pay';SELECT type, COUNT(*) FROM behavior_sqlWHERE user_id IN(SELECT DISTINCT user_idFROM behavior_sqlWHERE type = 'pay')AND type = 'pv'GROUP BY type;復制代碼print('總訪問量為 %i' %pv)print('總訪客數為 %i' %uv)print('消費用戶數為 %i' %len(user_pay))print('消費用戶訪問量為 %i' %pv_pay)print('日均訪問量為 %.3f' %pv_per_day)print('人均訪問量為 %.3f' %pv_per_user)print('消費用戶人均訪問量為 %.3f' %pv_per_buy_user)print('消費用戶數占比為 %.3f%%' %(user_pay_rate * 100))print('消費用戶訪問量占比為 %.3f%%' %(pv_pay_rate * 100))復制代碼# OUTPUT總訪問量為 6229177總訪客數為 728959消費用戶數為 395874消費用戶訪問量為 3918000日均訪問量為 389323.562人均訪問量為 8.545消費用戶人均訪問量為 9.897消費用戶數占比為 54.307%消費用戶訪問量占比為 62.898%復制代碼

消費用戶人均訪問量和總訪問量占比都在平均值以上,有過消費記錄的用戶更愿意在網站上花費更多時間,說明網站的購物體驗尚可,老用戶對網站有一定依賴性,對沒有過消費記錄的用戶要讓快速了解產品的使用方法和價值,加強用戶和平臺的黏連。

跳失率# 跳失率:只進行了一次操作就離開的用戶數/總用戶數attrition_rates = sum(behavior.groupby('user_id')['type'].count() == 1) / (behavior['user_id'].nunique())復制代碼# SQLSELECT (SELECT COUNT(*)FROM (SELECT user_id FROM behavior_sql GROUP BY user_id HAVING COUNT(type)=1) A) /(SELECT COUNT(DISTINCT user_id) UV FROM behavior_sql) attrition_rates;復制代碼print('跳失率為 %.3f%%' %(attrition_rates * 100) )復制代碼# OUTPUT跳失率為 22.585%復制代碼

整個計算周期內跳失率為22.585%,還是有較多的用戶僅做了單次操作就離開了頁面,需要從首頁頁面布局以及產品用戶體驗等方面加以改善,提高產品吸引力。

2. 用戶消費頻次分析# 單個用戶消費總次數total_buy_count = (behavior[behavior['type']=='pay'].groupby(['user_id'])['type'].count() .to_frame().rename(columns={'type':'total'}))# 消費次數前10客戶topbuyer10 = total_buy_count.sort_values(by='total',ascending=False)[:10]# 復購率re_buy_rate = total_buy_count[total_buy_count>=2].count()/total_buy_count.count()復制代碼# SQL#消費次數前10客戶SELECT user_id, COUNT(type) total_buy_count FROM behavior_sql WHERE type = 'pay'GROUP BY user_idORDER BY COUNT(type) DESCLIMIT 10#復購率CREAT VIEW v_buy_count AS SELECT user_id, COUNT(type) total_buy_countFROM behavior_sqlWHERE type = 'pay'GROUP BY user_id;SELECT CONCAT(ROUND((SUM(CASE WHEN total_buy_count>=2 THEN 1 ELSE 0 END)/SUM(CASE WHEN total_buy_count>0 THEN 1 ELSE 0 END))*100,2),'%') AS re_buy_rate FROM v_buy_count;復制代碼topbuyer10.reset_index().style.bar(color='skyblue',subset=['total'])復制代碼# 單個用戶消費總次數可視化tbc_box = total_buy_count.reset_index()fig, ax = plt.subplots(figsize=[16,6])ax.set_yscale("log")sns.countplot(x=tbc_box['total'],data=tbc_box,palette='Set1')for p in ax.patches: ax.annotate('{:.2f}%'.format(100*p.get_height()/len(tbc_box['total'])), (p.get_x() - 0.1, p.get_height()))plt.title('用戶消費總次數')復制代碼

整個計算周期內,最高購物次數為133次,最低為1次,大部分用戶的購物次數在6次以下,可適當增加推廣,完善購物體驗,提高用戶消費次數。購物次數前10用戶為1187177、502169等,應提高其滿意度,增大留存率。

print('復購率為 %.3f%%' %(re_buy_rate * 100) )復制代碼# OUTPUT復購率為 13.419%復制代碼

復購率較低,應加強老用戶召回機制,提升購物體驗,也可能因數據量較少,統計周期之內的數據 無法解釋完整的購物周期,從而得出結論有誤。

3. 用戶行為在時間緯度的分布日消費次數、日活躍人數、日消費人數、日消費人數占比、消費用戶日人均消費次數# 日活躍人數(有一次操作即視為活躍) daily_active_user = behavior.groupby('date')['user_id'].nunique()# 日消費人數daily_buy_user = behavior[behavior['type'] == 'pay'].groupby('date')['user_id'].nunique()# 日消費人數占比proportion_of_buyer = daily_buy_user / daily_active_user# 日消費總次數daily_buy_count = behavior[behavior['type'] == 'pay'].groupby('date')['type'].count()# 消費用戶日人均消費次數consumption_per_buyer = daily_buy_count / daily_buy_user復制代碼# SQL# 日消費總次數SELECT date, COUNT(type) pay_daily FROM behavior_sql WHERE type = 'pay'GROUP BY date;# 日活躍人數SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY date;# 日消費人數SELECT date, COUNT(DISTINCT user_id) user_pay_daily FROM behavior_sql WHERE type = 'pay'GROUP BY date;# 日消費人數占比SELECT(SELECT date, COUNT(DISTINCT user_id) user_pay_daily FROM behavior_sql WHERE type = 'pay'GROUP BY date) /(SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY date) # 日人均消費次數SELECT(SELECT date, COUNT(type) pay_daily FROM behavior_sql WHERE type = 'pay'GROUP BY date) /(SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY date) 復制代碼# 日消費人數占比可視化# 柱狀圖數據pob_bar = (pd.merge(daily_active_user,daily_buy_user,on='date').reset_index() .rename(columns={'user_id_x':'日活躍人數','user_id_y':'日消費人數'}) .set_index('date').stack().reset_index().rename(columns={'level_1':'Variable',0: 'Value'}))# 線圖數據pob_line = proportion_of_buyer.reset_index().rename(columns={'user_id':'Rate'})fig1 = plt.figure(figsize=[16,6])ax1 = fig1.add_subplot(111)ax2 = ax1.twinx()sns.barplot(x='date', y='Value', hue='Variable', data=pob_bar, ax=ax1, alpha=0.8, palette='husl')ax1.legend().set_title('')ax1.legend().remove() sns.pointplot(pob_line['date'], pob_line['Rate'], ax=ax2,markers='D', linestyles='--',color='teal')x=list(range(0,16))for a,b in zip(x,pob_line['Rate']): plt.text(a 0.1, b 0.001, '%.2f%%' % (b*100), ha='center', va= 'bottom',fontsize=12)fig1.legend(loc='upper center',ncol=2)plt.title('日消費人數占比')復制代碼

日活躍人數與日消費人數無明顯波動,日消費人數占比均在20%以上。

# 消費用戶日人均消費次數可視化# 柱狀圖數據cpb_bar = (daily_buy_count.reset_index().rename(columns={'type':'Num'}))# 線圖數據cpb_line = (consumption_per_buyer.reset_index().rename(columns={0:'Frequency'}))fig2 = plt.figure(figsize=[16,6])ax3 = fig2.add_subplot(111)ax4 = ax3.twinx()sns.barplot(x='date', y='Num', data=cpb_bar, ax=ax3, alpha=0.8, palette='pastel')sns.pointplot(cpb_line['date'], cpb_line['Frequency'], ax=ax4, markers='D', linestyles='--',color='teal')x=list(range(0,16))for a,b in zip(x,cpb_line['Frequency']): plt.text(a 0.1, b 0.001, '%.2f' % b, ha='center', va= 'bottom',fontsize=12)plt.title('消費用戶日人均消費次數')復制代碼

日消費人數在25000以上,日人均消費次數大于1次。

dau3_df = behavior.groupby(['date','user_id'])['type'].count().reset_index()dau3_df = dau3_df[dau3_df['type'] >= 3]復制代碼# 每日高活躍用戶數(每日操作數大于3次)dau3_num = dau3_df.groupby('date')['user_id'].nunique()復制代碼# SQLSELECT date, COUNT(DISTINCT user_id) FROM(SELECT date, user_id, COUNT(type)FROM behavior_sqlGROUP BY date, user_idHAVING COUNT(type) >= 3) dau3GROUP BY date;復制代碼fig, ax = plt.subplots(figsize=[16,6])sns.pointplot(dau3_num.index, dau3_num.values, markers='D', linestyles='--',color='teal')x=list(range(0,16))for a,b in zip(x,dau3_num.values): plt.text(a 0.1, b 300 , '%i' % b, ha='center', va= 'bottom',fontsize=14)plt.title('每日高活躍用戶數')復制代碼

每日高活躍用戶數在大部分4萬以上,2018-04-04之前數量比較平穩,之后數量一直攀升,8號9號達到最高,隨后下降,推測數據波動應為營銷活動產生的。

# 高活躍用戶累計活躍天數分布dau3_cumsum = dau3_df.groupby('user_id')['date'].count()復制代碼# SQLSELECT user_id, COUNT(date) FROM(SELECT date, user_id, COUNT(type)FROM behavior_sqlGROUP BY date, user_idHAVING COUNT(type) >= 3) dau3GROUP BY user_id;復制代碼fig, ax = plt.subplots(figsize=[16,6])ax.set_yscale("log")sns.countplot(dau3_cumsum.values,palette='Set1')for p in ax.patches: ax.annotate('{:.2f}%'.format(100*p.get_height()/len(dau3_cumsum.values)), (p.get_x() 0.2, p.get_height() 100))plt.title('高活躍用戶累計活躍天數分布')復制代碼

統計周期內,大部分高活躍用戶累計活躍天數在六天以下,但也存在高達十六天的超級活躍用戶數量,對累計天數較高的用戶要推出連續登錄獎勵等繼續維持其對平臺的黏性,對累計天數較低的用戶要適當進行推送活動消息等對其進行召回。

#每日瀏覽量pv_daily = behavior[behavior['type'] == 'pv'].groupby('date')['user_id'].count()#每日訪客數uv_daily = behavior.groupby('date')['user_id'].nunique()復制代碼# SQL#每日瀏覽量SELECT date, COUNT(type) pv_daily FROM behavior_sql WHERE type = 'pv'GROUP BY date;#每日訪客數SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY date;復制代碼# 每日瀏覽量可視化fig, ax = plt.subplots(figsize=[16,6])sns.pointplot(pv_daily.index, pv_daily.values,markers='D', linestyles='--',color='dodgerblue')x=list(range(0,16))for a,b in zip(x,pv_daily.values): plt.text(a 0.1, b 2000 , '%i' % b, ha='center', va= 'bottom',fontsize=14)plt.title('每日瀏覽量')復制代碼# 每日訪客數可視化fig, ax = plt.subplots(figsize=[16,6])sns.pointplot(uv_daily.index, uv_daily.values, markers='H', linestyles='--',color='m')x=list(range(0,16))for a,b in zip(x,uv_daily.values): plt.text(a 0.1, b 500 , '%i' % b, ha='center', va= 'bottom',fontsize=14)plt.title('每日訪客數')復制代碼

瀏覽量和訪客數每日變化趨勢大致相同,2018-04-04日前后用戶數量變化波動較大,4月4日為清明節假日前一天,各數據量在當天均有明顯下降,但之后逐步回升,推測應為節假日營銷活動或推廣拉新活動帶來的影響。

#每時瀏覽量pv_hourly = behavior[behavior['type'] == 'pv'].groupby('hour')['user_id'].count()#每時訪客數uv_hourly = behavior.groupby('hour')['user_id'].nunique()復制代碼# SQL # 每時瀏覽量SELECT date, COUNT(type) pv_daily FROM behavior_sql WHERE type = 'pv'GROUP BY hour;# 每時訪客數SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY hour;復制代碼# 瀏覽量隨小時變化可視化fig, ax = plt.subplots(figsize=[16,6])sns.pointplot(pv_hourly.index, pv_hourly.values, markers='H', linestyles='--',color='dodgerblue')for a,b in zip(pv_hourly.index,pv_hourly.values): plt.text(a, b 10000 , '%i' % b, ha='center', va= 'bottom',fontsize=12)plt.title('瀏覽量隨小時變化')復制代碼# 訪客數隨小時變化可視化fig, ax = plt.subplots(figsize=[16,6])sns.pointplot(uv_hourly.index, uv_hourly.values, markers='H', linestyles='--',color='m')for a,b in zip(uv_hourly.index,uv_hourly.values): plt.text(a, b 1000 , '%i' % b, ha='center', va= 'bottom',fontsize=12)plt.title('訪客數隨小時變化')復制代碼

瀏覽量及訪客數隨小時變化趨勢一致,在凌晨1點到凌晨5點之間,大部分用戶正在休息,整體活躍度較低。凌晨5點到10點用戶開始起床工作,活躍度逐漸增加,之后趨于平穩,下午6點之后大部分人恢復空閑,瀏覽量及訪客數迎來了第二波攀升,在晚上8點中到達高峰,隨后逐漸下降。可以考慮在上午9點及晚上8點增大商品推廣力度,加大營銷活動投入,可取的較好的收益,1點到5點之間適合做系統維護。

# 用戶各操作隨小時變化type_detail_hour = pd.pivot_table(columns = 'type',index = 'hour', data = behavior,aggfunc=np.size,values = 'user_id')# 用戶各操作隨星期變化type_detail_weekday = pd.pivot_table(columns = 'type',index = 'weekday', data = behavior,aggfunc=np.size,values = 'user_id')type_detail_weekday = type_detail_weekday.reindex(['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'])復制代碼# SQL# 用戶各操作隨小時變化 SELECT hour,SUM(CASE WHEN behavior='pv' THEN 1 ELSE 0 END)AS 'pv',SUM(CASE WHEN behavior='fav' THEN 1 ELSE 0 END)AS 'fav',SUM(CASE WHEN behavior='cart' THEN 1 ELSE 0 END)AS 'cart',SUM(CASE WHEN behavior='pay' THEN 1 ELSE 0 END)AS 'pay'FROM behavior_sqlGROUP BY hourORDER BY hour# 用戶各操作隨星期變化 SELECT weekday,SUM(CASE WHEN behavior='pv' THEN 1 ELSE 0 END)AS 'pv',SUM(CASE WHEN behavior='fav' THEN 1 ELSE 0 END)AS 'fav',SUM(CASE WHEN behavior='cart' THEN 1 ELSE 0 END)AS 'cart',SUM(CASE WHEN behavior='pay' THEN 1 ELSE 0 END)AS 'pay'FROM behavior_sqlGROUP BY weekdayORDER BY weekday復制代碼tdh_line = type_detail_hour.stack().reset_index().rename(columns={0: 'Value'})tdw_line = type_detail_weekday.stack().reset_index().rename(columns={0: 'Value'})tdh_line= tdh_line[~(tdh_line['type'] == 'pv')]tdw_line= tdw_line[~(tdw_line['type'] == 'pv')]復制代碼# 用戶操作隨小時變化可視化fig, ax = plt.subplots(figsize=[16,6])sns.pointplot(x='hour', y='Value', hue='type', data=tdh_line, linestyles='--')plt.title('用戶操作隨小時變化')復制代碼

用戶操作隨小時變化規律與PV、UV隨小時規律相似,與用戶作息規律相關,加入購物車和付款兩條曲線貼合比比較緊密,說明大部分用戶習慣加入購物車后直接購買。關注數相對較少,可以根據用戶購物車內商品進行精準推送。評論數也相對較少,說明大部分用戶不是很熱衷對購物體驗進行反饋,可以設置一些獎勵制度提高用戶評論數,增大用用戶粘性。

# 用戶操作隨星期變化可視化fig, ax = plt.subplots(figsize=[16,6])sns.pointplot(x='weekday', y='Value', hue='type', data=tdw_line[~(tdw_line['type'] == 'pv')], linestyles='--')plt.title('用戶操作隨星期變化')復制代碼

周一到周四工作日期間,用戶操作隨星期變化比較平穩,周五至周六進入休息日,用戶操作明顯增多,周日又恢復正常。

4. 用戶行為轉化漏斗# 導入相關包from pyecharts import options as optsfrom pyecharts.charts import Funnelimport math復制代碼behavior['action_time'] = pd.to_datetime(behavior['action_time'],format ='%Y-%m-%d %H:%M:%S')復制代碼# 用戶整體行為分布type_dis = behavior['type'].value_counts().reset_index()type_dis['rate'] = round((type_dis['type'] / type_dis['type'].sum()),3)復制代碼type_dis.style.bar(color='skyblue',subset=['rate'])復制代碼

用戶整體行為中,有82.6%行為為瀏覽,實際支付操作僅占6.4,除此之外,用戶評論及收藏的行為占比也較低,應當增強網站有用戶之間的互動,提高評論數量和收藏率。

df_con = behavior[['user_id', 'sku_id', 'action_time', 'type']]復制代碼df_pv = df_con[df_con['type'] == 'pv']df_fav = df_con[df_con['type'] == 'fav']df_cart = df_con[df_con['type'] == 'cart']df_pay = df_con[df_con['type'] == 'pay']df_pv_uid = df_con[df_con['type'] == 'pv']['user_id'].unique()df_fav_uid = df_con[df_con['type'] == 'fav']['user_id'].unique()df_cart_uid = df_con[df_con['type'] == 'cart']['user_id'].unique()df_pay_uid = df_con[df_con['type'] == 'pay']['user_id'].unique()復制代碼pv - buyfav_cart_list = set(df_fav_uid) | set(df_cart_uid)復制代碼pv_pay_df = pd.merge(left=df_pv, right=df_pay, how='inner', on=['user_id', 'sku_id'], suffixes=('_pv', '_pay'))復制代碼pv_pay_df = pv_pay_df[(~pv_pay_df['user_id'].isin(fav_cart_list)) & (pv_pay_df['action_time_pv'] < pv_pay_df['action_time_pay'])]復制代碼uv = behavior['user_id'].nunique()pv_pay_num = pv_pay_df['user_id'].nunique()pv_pay_data = pd.DataFrame({'type':['瀏覽','付款'],'num':[uv,pv_pay_num]})pv_pay_data['conversion_rates'] = (round((pv_pay_data['num'] / pv_pay_data['num'][0]),4) * 100)復制代碼attr1 = list(pv_pay_data.type)values1 = list(pv_pay_data.conversion_rates)data1 = [[attr1[i], values1[i]] for i in range(len(attr1))]復制代碼# 用戶行為轉化漏斗可視化pv_pay=(Funnel(opts.InitOpts(width="600px", height="300px")) .add( series_name="", data_pair=data1, gap=2, tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b} : {c}%"), label_opts=opts.LabelOpts(is_show=True, position="inside"), itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1) ) .set_global_opts(title_opts=opts.TitleOpts(title="用戶行為轉化漏斗圖")) )pv_pay.render_notebook()復制代碼pv - cart - paypv_cart_df = pd.merge(left=df_pv, right=df_cart, how='inner', on=['user_id', 'sku_id'], suffixes=('_pv', '_cart'))復制代碼pv_cart_df = pv_cart_df[pv_cart_df['action_time_pv'] < pv_cart_df['action_time_cart']]pv_cart_df = pv_cart_df[~pv_cart_df['user_id'].isin(df_fav_uid)]復制代碼pv_cart_pay_df = pd.merge(left=pv_cart_df, right=df_pay, how='inner', on=['user_id', 'sku_id'])復制代碼pv_cart_pay_df = pv_cart_pay_df[pv_cart_pay_df['action_time_cart'] < pv_cart_pay_df['action_time']]復制代碼uv = behavior['user_id'].nunique()pv_cart_num = pv_cart_df['user_id'].nunique()pv_cart_pay_num = pv_cart_pay_df['user_id'].nunique()pv_cart_pay_data = pd.DataFrame({'type':['瀏覽','加購','付款'],'num':[uv,pv_cart_num,pv_cart_pay_num]})pv_cart_pay_data['conversion_rates'] = (round((pv_cart_pay_data['num'] / pv_cart_pay_data['num'][0]),4) * 100)復制代碼attr2 = list(pv_cart_pay_data.type)values2 = list(pv_cart_pay_data.conversion_rates)data2 = [[attr2[i], values2[i]] for i in range(len(attr2))]復制代碼# 用戶行為轉化漏斗可視化pv_cart_buy=(Funnel(opts.InitOpts(width="600px", height="300px")) .add( series_name="", data_pair=data2, gap=2, tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b} : {c}%"), label_opts=opts.LabelOpts(is_show=True, position="inside"), itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1) ) .set_global_opts(title_opts=opts.TitleOpts(title="用戶行為轉化漏斗圖")) )pv_cart_buy.render_notebook()復制代碼pv - fav - paypv_fav_df = pd.merge(left=df_pv, right=df_fav, how='inner', on=['user_id', 'sku_id'], suffixes=('_pv', '_fav'))復制代碼pv_fav_df = pv_fav_df[pv_fav_df['action_time_pv'] < pv_fav_df['action_time_fav']]pv_fav_df = pv_fav_df[~pv_fav_df['user_id'].isin(df_cart_uid)]復制代碼pv_fav_pay_df = pd.merge(left=pv_fav_df, right=df_pay, how='inner', on=['user_id', 'sku_id'])復制代碼pv_fav_pay_df = pv_fav_pay_df[pv_fav_pay_df['action_time_fav'] < pv_fav_pay_df['action_time']]復制代碼uv = behavior['user_id'].nunique()pv_fav_num = pv_fav_df['user_id'].nunique()pv_fav_pay_num = pv_fav_pay_df['user_id'].nunique()pv_fav_pay_data = pd.DataFrame({'type':['瀏覽','收藏','付款'],'num':[uv,pv_fav_num,pv_fav_pay_num]})pv_fav_pay_data['conversion_rates'] = (round((pv_fav_pay_data['num'] / pv_fav_pay_data['num'][0]),4) * 100)復制代碼attr3 = list(pv_fav_pay_data.type)values3 = list(pv_fav_pay_data.conversion_rates)data3 = [[attr3[i], values3[i]] for i in range(len(attr3))]復制代碼# 用戶行為轉化漏斗可視化pv_fav_buy=(Funnel(opts.InitOpts(width="600px", height="300px")) .add( series_name="", data_pair=data3, gap=2, tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b} : {c}%"), label_opts=opts.LabelOpts(is_show=True, position="inside"), itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1) ) .set_global_opts(title_opts=opts.TitleOpts(title="用戶行為轉化漏斗圖")) )pv_fav_buy.render_notebook()復制代碼pv - fav - cart - paypv_fav = pd.merge(left=df_pv, right=df_fav, how='inner', on=['user_id', 'sku_id'], suffixes=('_pv', '_fav'))復制代碼pv_fav = pv_fav[pv_fav['action_time_pv'] < pv_fav['action_time_fav']]復制代碼pv_fav_cart = pd.merge(left=pv_fav, right=df_cart, how='inner', on=['user_id', 'sku_id'])復制代碼pv_fav_cart = pv_fav_cart[pv_fav_cart['action_time_fav']<pv_fav_cart['action_time']]復制代碼pv_fav_cart_pay = pd.merge(left=pv_fav_cart, right=df_pay, how='inner', on=['user_id', 'sku_id'], suffixes=('_cart', '_pay'))復制代碼pv_fav_cart_pay = pv_fav_cart_pay[pv_fav_cart_pay['action_time_cart']<pv_fav_cart_pay['action_time_pay']]復制代碼uv = behavior['user_id'].nunique()pv_fav_n = pv_fav['user_id'].nunique()pv_fav_cart_n = pv_fav_cart['user_id'].nunique()pv_fav_cart_pay_n = pv_fav_cart_pay['user_id'].nunique()pv_fav_cart_pay_data = pd.DataFrame({'type':['瀏覽','收藏','加購','付款'],'num':[uv,pv_fav_n,pv_fav_cart_n,pv_fav_cart_pay_n]})pv_fav_cart_pay_data['conversion_rates'] = (round((pv_fav_cart_pay_data['num'] / pv_fav_cart_pay_data['num'][0]),4) * 100)復制代碼attr4 = list(pv_fav_cart_pay_data.type)values4 = list(pv_fav_cart_pay_data.conversion_rates)data4 = [[attr4[i], values4[i]] for i in range(len(attr4))]復制代碼# 用戶行為轉化漏斗可視化pv_fav_buy=(Funnel(opts.InitOpts(width="600px", height="300px")) .add( series_name="", data_pair=data4, gap=2, tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b} : {c}%"), label_opts=opts.LabelOpts(is_show=True, position="inside"), itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1) ) .set_global_opts(title_opts=opts.TitleOpts(title="用戶行為轉化漏斗圖")) )pv_fav_buy.render_notebook()復制代碼

image.png

不同路徑用戶消費時間間隔分析

pv - cart - paypcp_interval = pv_cart_pay_df.groupby(['user_id', 'sku_id']).apply(lambda x: (x.action_time.min() - x.action_time_cart.min())).reset_index()復制代碼pcp_interval['interval'] = pcp_interval[0].apply(lambda x: x.seconds) / 3600pcp_interval['interval'] = pcp_interval['interval'].apply(lambda x: math.ceil(x))復制代碼fig, ax = plt.subplots(figsize=[16,6])sns.countplot(pcp_interval['interval'],palette='Set1')for p in ax.patches: ax.annotate('{:.2f}%'.format(100*p.get_height()/len(pcp_interval['interval'])), (p.get_x() 0.1, p.get_height() 100))ax.set_yscale("log")plt.title('pv-cart-pay路徑用戶消費時間間隔')復制代碼pv - fav - paypfp_interval = pv_fav_pay_df.groupby(['user_id', 'sku_id']).apply(lambda x: (x.action_time.min() - x.action_time_fav.min())).reset_index()復制代碼pfp_interval['interval'] = pfp_interval[0].apply(lambda x: x.seconds) / 3600pfp_interval['interval'] = pfp_interval['interval'].apply(lambda x: math.ceil(x))復制代碼fig, ax = plt.subplots(figsize=[16,6])sns.countplot(pfp_interval['interval'],palette='Set1')for p in ax.patches: ax.annotate('{:.2f}%'.format(100*p.get_height()/len(pfp_interval['interval'])), (p.get_x() 0.1, p.get_height() 10))ax.set_yscale("log")plt.title('pv-fav-pay路徑用戶消費時間間隔')復制代碼

image.png

兩種路徑下大部分用戶均在4小時內完成了支付,大部分用戶的購物意向很明確,也側面說明了網站的商品分類布局和購物結算方式比較合理。

# SQL# 漏斗圖SELECT type, COUNT(DISTINCT user_id) user_numFROM behavior_sqlGROUP BY typeORDER BY COUNT(DISTINCT user_id) DESCSELECT COUNT(DISTINCT b.user_id) AS pv_fav_num,COUNT(DISTINCT c.user_id) AS pv_fav_pay_numFROM((SELECT DISTINCT user_id, sku_id, action_time FROM users WHERE type='pv' ) AS aLEFT JOIN(SELECT DISTINCT user_id, sku_id, action_time FROM users WHERE type='fav'AND user_id NOT IN (SELECT DISTINCT user_idFROM behavior_sqlWHERE type = 'cart')) AS bON a.user_id = b.user_id AND a.sku_id = b.sku_id AND a.action_time <= b.action_timeLEFT JOIN(SELECT DISTINCT user_id,sku_id,item_category,times_new FROM users WHERE behavior_type='pay') AS cON b.user_id = c.user_id AND b.sku_id = c.sku_id AND AND b.action_time <= c.action_time);復制代碼

比較四種不同的轉化方式,最有效的轉化路徑為瀏覽直接付款轉化率為21.46%,其次為瀏覽加購付款,轉化率為12.47%,可以發現隨著結算方式越來越復雜轉化率越來越低。加購的方式比收藏購買的方式轉化率要高,推其原因為購物車接口進入方便且可以做不同商家比價用,而收藏則需要更繁瑣的操作才可以查看到商品,因此轉化率較低。

可以優化商品搜索功能,提高商品搜索準確度、易用性,減少用戶搜索時間。根據用戶喜好在首頁進行商品推薦,優化重排商品詳情展示頁,提高顧客下單欲望,提供一鍵購物等簡化購物步驟的功能,客服也可以留意加購及關注用戶,適時推出優惠福利及時解答用戶問題,引導用戶購買以進一步提高轉化率。

對于用戶消費時間間隔,可以通過限時領券購買、限時特惠價格等進一步縮短用戶付款時間,提高訂單量。

5. 用戶留存率分析#留存率first_day = datetime.date(datetime.strptime('2018-03-30', '%Y-%m-%d'))fifth_day = datetime.date(datetime.strptime('2018-04-03', '%Y-%m-%d'))tenth_day = datetime.date(datetime.strptime('2018-04-08', '%Y-%m-%d'))fifteenth_day = datetime.date(datetime.strptime('2018-04-13', '%Y-%m-%d'))#第一天新用戶數user_num_first = behavior[behavior['date'] == first_day]['user_id'].to_frame()#第五天留存用戶數user_num_fifth = behavior[behavior['date'] == fifth_day ]['user_id'].to_frame()#第十留存用戶數user_num_tenth = behavior[behavior['date'] == tenth_day]['user_id'].to_frame()#第十五天留存用戶數user_num_fifteenth = behavior[behavior['date'] == fifteenth_day]['user_id'].to_frame()復制代碼#第五天留存率fifth_day_retention_rate = round((pd.merge(user_num_first, user_num_fifth).nunique()) / (user_num_first.nunique()),4).user_id#第十天留存率tenth_day_retention_rate = round((pd.merge(user_num_first, user_num_tenth ).nunique()) / (user_num_first.nunique()),4).user_id#第十五天留存率fifteenth_day_retention_rate = round((pd.merge(user_num_first, user_num_fifteenth).nunique()) / (user_num_first.nunique()),4).user_id復制代碼retention_rate = pd.DataFrame({'n日后留存率':['第五天留存率','第十天留存率','第十五天留存率'], 'Rate':[fifth_day_retention_rate,tenth_day_retention_rate,fifteenth_day_retention_rate]})復制代碼# 留存率可視化fig, ax = plt.subplots(figsize=[16,6])sns.barplot(x='n日后留存率', y='Rate', data=retention_rate, palette='Set1')x=list(range(0,3))for a,b in zip(x,retention_rate['Rate']): plt.text(a, b 0.001, '%.2f%%' % (b*100), ha='center', va= 'bottom',fontsize=12)plt.title('用戶留存率')復制代碼

留存率反應了產品質量和保留用戶的能力,按照Facebook平臺流傳出留存率“40–20–10”規則(規則中的數字表示的是次日留存率、第7日留存率和第30日留存率),統計周期內第五日留存率為22.81%,第15日留存率為17.44%,反映出平臺的用戶依賴性較高,也因平臺發展已經到達穩定階段,用戶保留率不會發生較大波動,數據量足夠的情況下可以以年為單位,計算按月的留存率。要合理安排消息推送,推出簽到有獎等機制提高用戶粘性,進一步提高留存率。

# SQL#n日后留存率=(注冊后的n日后還登錄的用戶數)/第一天新增總用戶數create table retention_rate as select count(distinct user_id) as user_num_first from behavior_sqlwhere date = '2018-03-30';alter table retention_rate add column user_num_fifth INTEGER;update retention_rate set user_num_fifth=(select count(distinct user_id) from behavior_sqlwhere date = '2018-04-03' and user_id in (SELECT user_id FROM behavior_sqlWHERE date = '2018-03-30'));alter table retention_rate add column user_num_tenth INTEGER;update retention_rate set user_num_tenth=(select count(distinct user_id) from behavior_sqlwhere date = '2018-04-08' and user_id in (SELECT user_id FROM behavior_sqlWHERE date = '2018-03-30'));alter table retention_rate add column user_num_fifteenth INTEGER;update retention_rate set user_num_fifteenth=(select count(distinct user_id) from behavior_sqlwhere date = '2018-04-13' and user_id in (SELECT user_id FROM behavior_sqlWHERE date = '2018-03-30'));SELECT CONCAT(ROUND(100*user_num_fifth/user_num_first,2),'%')AS fifth_day_retention_rate,CONCAT(ROUND(100*user_num_tenth/user_num_first,2),'%')AS tenth_day_retention_rate,CONCAT(ROUND(100*user_num_fifteenth/user_num_first,2),'%')AS fifteenth_day_retention_ratefrom retention_rate;復制代碼6. 商品銷量分析# 商品總數behavior['sku_id'].nunique()復制代碼# OUTPUT 239007復制代碼# 商品被購前產生平均操作次數sku_df = behavior[behavior['sku_id'].isin(behavior[behavior['type'] == 'pay']['sku_id'].unique())].groupby('sku_id')['type'].value_counts().unstack(fill_value=0)sku_df['total'] = sku_df.sum(axis=1)sku_df['avg_beha'] = round((sku_df['total'] / sku_df['pay']), 2)復制代碼fig, ax = plt.subplots(figsize=[8,6])sns.scatterplot(x='avg_beha', y='pay', data=sku_df, palette='Set1')ax.set_xscale("log")ax.set_yscale("log")plt.xlabel('平均操作次數')plt.ylabel('銷量')復制代碼

左下角操作少購買少,屬于冷門購買頻率較低的產品。

左上角操作少購買多,屬于快消類產品,可選擇品牌少,少數品牌壟斷的行業。

右下角操作多購買少,品牌多,但是購買頻率低,應為貴重物品類。

右上角操作多購買多,大眾品牌,可選多,被購買頻次高。

# 商品銷量排行sku_num = (behavior[behavior['type'] == 'pay'].groupby('sku_id')['type'].count().to_frame() .rename(columns={'type':'total'}).reset_index())# 銷量大于1000的商品topsku = sku_num[sku_num['total'] > 1000].sort_values(by='total',ascending=False)# 單個用戶共購買商品種數sku_num_per_user = (behavior[behavior['type'] == 'pay']).groupby(['user_id'])['sku_id'].nunique()復制代碼topsku.set_index('sku_id').style.bar(color='skyblue',subset=['total'])復制代碼

在計算周期內訂單數均突破1000以上的共有13款產品,其中152092這款產品訂單數最高為1736. 推出商品組合有優惠等,提高單個用戶購買產品種數。

# SQL# sku銷量排行SELECT sku_id, COUNT(type) sku_num FROM behavior_sql WHERE type = 'pay'GROUP BY sku_idHAVING sku_num > 1000ORDER BY sku_num DESC;復制代碼7. RFM用戶分層#RFM#由于缺少M(金額)列,僅通過R(最近一次購買時間)和F(消費頻率)對用戶進行價值分析buy_group = behavior[behavior['type']=='pay'].groupby('user_id')['date']復制代碼#將2018-04-13作為每個用戶最后一次購買時間來處理final_day = datetime.date(datetime.strptime('2018-04-14', '%Y-%m-%d'))復制代碼#最近一次購物時間recent_buy_time = buy_group.apply(lambda x:final_day-x.max())recent_buy_time = recent_buy_time.reset_index().rename(columns={'date':'recent'})recent_buy_time['recent'] = recent_buy_time['recent'].map(lambda x:x.days)復制代碼#近十五天內購物頻率buy_freq = buy_group.count().reset_index().rename(columns={'date':'freq'})復制代碼RFM = pd.merge(recent_buy_time,buy_freq,on='user_id')復制代碼RFM['R'] = pd.qcut(RFM.recent,2,labels=['1','0'])#天數小標簽為1天數大標簽為0RFM['F'] = pd.qcut(RFM.freq.rank(method='first'),2,labels=['0','1'])#頻率大標簽為1頻率小標簽為0復制代碼RFM['RFM'] = RFM['R'].astype(int).map(str) RFM['F'].astype(int).map(str)復制代碼dict_n={'01':'重要保持客戶', '11':'重要價值客戶', '10':'重要挽留客戶', '00':'一般發展客戶'}復制代碼#用戶標簽RFM['用戶等級'] = RFM['RFM'].map(dict_n)復制代碼RFM_pie = RFM['用戶等級'].value_counts().reset_index()RFM_pie['Rate'] = RFM_pie['用戶等級'] / RFM_pie['用戶等級'].sum()復制代碼fig, ax = plt.subplots(figsize=[16,6])plt.pie(RFM_pie['Rate'], labels = RFM_pie['index'], startangle = 90,autopct="%1.2f%%", counterclock = False,colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral'])plt.axis('square')plt.title('RFM用戶分層')復制代碼

不同類型用戶占比差異較小,應提升重要價值各戶的占比,減小一般發展客戶的占比。 通過RFM模型對用戶價值進行分類,對不同價值用戶應采取不同的運營策略,對于重要價值客戶來說,要提高該部分用戶的滿意度,服務升級,發放特別福利,增大該部分用戶留存率,在做運營推廣時也要給與特別關注,避免引起用戶反感。 對于重要保持客戶,他們購物頻次較高,但最近一段時間沒有消費,可以推送相關其他商品,發放優惠卷、贈品和促銷信息等,喚回該部分用戶。 對于重要挽留客戶,他們最近消費過,但購物頻次較低,可以通過問卷有禮的方式找出其對平臺的不滿,提升購物體驗,增大用戶粘性。 對于一般發展客戶,做到定期發送郵件或短信喚回,努力將其轉化為重要保持客戶或重要挽留客戶。

# SQL# RFMCREATE VIEW RF_table ASSELECT user_id, DATEDIFF('2018-04-14',MAX(date)) AS R_days,COUNT(*) AS F_countFROM behavior_sql WHERE type='pay' GROUP BY user_id;SELECT AVG(R_days), AVG(F_count)FROM RF_tablecreate view RF_ layer asSELECT user_id, (CASE WHEN R_days < 7.1697 THEN 1 ELSE 0 END) AS R,(CASE WHEN F_count < 1.2129 THEN 0 ELSE 1 END) AS FFROM RF_tableORDER BY user_id DESC;create view customer_value asselect user_id, R, F, (CASE WHEN R=1 and F=1 THEN "重要價值客戶" WHEN R=1 and F=0 THEN "重要挽留客戶" WHEN R=0 and F=1 THEN "重要保持客戶" WHEN R=0 and F=0 THEN "一般發展客戶" ELSE 0 END) as 用戶價值FROM RF_ layer;SELECT * FROM customer_value;復制代碼五. 總結

1.可以增加渠道推廣投入,進行精準人群推廣,推出新用戶福利,吸引新用戶,推出團購、分享有禮等活動促進老帶新,推出促銷活動刺激老用戶,提高訪客數和瀏覽量。提高產品質量,提高商品詳情頁對用戶的吸引力,降低跳失率。

2.根據用戶操作隨時間變化規律來開展營銷活動,使活動更容易觸達用戶,在用戶訪問高峰期多推送用戶感興趣商品。

3.復購率較低,說明用戶對平臺購物體驗不滿,需要找出用戶槽點,提高用戶購物滿意度,優化商品推送機制,對老用戶給予特別福利,提高他們所享受權益。轉化率也偏低,需要改善平臺搜索機制降低提高搜索效率,優化購物路徑降低購物復雜度,改善商品詳情信息展示方式便于信息的獲取。

4.留存率相對穩定,為進一步提高留存率,可以定期推出秒殺活動,推出專享優惠券,推出簽到有禮環節,增加用戶瀏覽時長和深度,提高用戶粘性。分析用戶對產品的真實使用感受與評價,提高用戶忠誠度。

5.通過RFM對用戶進行分層,將用戶從一個整體拆分成特征明顯的群體,有針對性的采取不同的營銷方法進行精準化營銷,用有限的公司資源優先服務于公司最重要的客戶。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如有侵權行為,請第一時間聯系我們修改或刪除,多謝。

CopyRight ? 外貿領航 2023 All Rights Reserved.

激情五月婷婷综合| 午夜国产在线观看| 国产成人精品999在线观看| 国产亚洲福利社区一区| 色偷偷亚洲男人天堂| 中文精品一区二区三区| 久久网中文字幕| 亚洲a级精品| 国产精品美女一区二区三区| 蜜臀久久99精品久久久无需会员 | 欧美亚韩一区| 欧美日韩国产一区中文午夜| 成人av色在线观看| 国产精品一区二区人妻喷水| 九九九伊在线综合永久| 国产精品亚洲成人| 国产午夜精品一区二区三区 | 久久人人97超碰com| 色系列之999| 黄色网页免费在线观看| 亚洲一区在线观| 国产精品一区毛片| 欧美一区二区三区影视| 欧美日韩综合精品| 欧美成人综合色| 欧美精品一二| 精品久久久视频| 91在线精品视频| av直播在线观看| 视频二区欧美毛片免费观看| 久久嫩草精品久久久久| 久久91超碰青草是什么| 精品亚洲一区二区三区四区| 黄色av网站免费在线观看| 激情五月播播久久久精品| 亚洲免费伊人电影在线观看av| 中文字幕第50页| 69视频免费看| 国产精品社区| 亚洲国产欧美一区二区三区久久| 国产又黄又爽免费视频| 最新中文字幕第一页| 99精品视频免费| 欧美成人高清电影在线| 黄色一级片网址| 伊人网免费视频| 久久久精品网| 亚洲精品之草原avav久久| 日韩网站在线免费观看| www.黄色片| 国产一区在线精品| 日韩中文字幕视频在线| 亚洲少妇第一页| 欧美成人黑人| 久久久欧美精品sm网站| 97在线观看免费高清| yjizz视频| 成人av综合网| 亚洲午夜久久久久久久久久久| 91久久国产婷婷一区二区| 国产毛片欧美毛片久久久| 制服丝袜日韩| 在线亚洲一区二区| 日韩资源av在线| 伊人久久成人网| 极品尤物av久久免费看| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 欧美性受极品xxxx喷水| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 色呦呦网站入口| 一级特黄aaa大片| 国产一区二区三区免费在线观看 | 色婷婷激情五月| 91亚洲国产成人精品一区二三| 97视频在线观看播放| 欧美精品欧美极品欧美激情| 欧美人与物videos另类xxxxx| 日韩欧美在线观看| 无码免费一区二区三区免费播放 | 久久精品72免费观看| 色噜噜狠狠色综合网图区| 不卡的在线视频| 日韩精品视频在线看| 午夜不卡在线视频| 国产 高清 精品 在线 a| 久青草视频在线观看| 亚洲经典在线看| 亚洲精品影视在线观看| 在线观看免费成人av| 亚洲精品毛片| 亚洲福利一二三区| 欧美日韩在线一二三| 一级淫片免费看| 国产麻豆9l精品三级站| 97视频免费在线观看| www色com| 欧美日本中文| 国产视频在线观看一区二区| 色悠悠久久综合网| 91综合精品国产丝袜长腿久久| 亚洲va欧美va人人爽午夜| 人禽交欧美网站免费| 91亚洲精品国偷拍自产在线观看| 丁香啪啪综合成人亚洲小说| 日本韩国在线不卡| 天天综合天天做| 麻豆精品网站| 久久在线免费视频| 精品人妻一区二区三区香蕉| 影音先锋日韩在线| 精品国产污污免费网站入口 | 香港一级纯黄大片| 国产精品精品国产色婷婷| 福利视频一区二区三区| 在线观看国产区| 成人aa视频在线观看| 国产精品日韩在线播放| 亚欧洲精品在线视频| 久久99久久99小草精品免视看| 97免费中文视频在线观看| 性爱在线免费视频| 国产欧美综合一区二区三区| 久久精品99无色码中文字幕 | 欧美大片在线观看一区| 天天色综合天天色| 免费观看久久av| 欧美成人三级电影在线| 99热这里只有精品在线播放| 少妇久久久久| 日韩亚洲电影在线| 中文字幕 日韩 欧美| 九九精品在线| 亚洲福利小视频| a级大片免费看| 久久国产亚洲精品| 亚洲欧美日韩高清| 亚洲调教欧美在线| 亚洲人www| 欧美精品18videos性欧| 污污的视频在线免费观看| 日本成人中文字幕| 国产精品成熟老女人| 国产情侣自拍av| a在线播放不卡| 国产免费一区二区三区| 99热这里只有精品9| 亚洲婷婷综合久久一本伊一区| 五码日韩精品一区二区三区视频| 三上悠亚亚洲一区| 欧美日韩在线观看视频| 免费观看美女裸体网站| 成人18夜夜网深夜福利网| 日韩情涩欧美日韩视频| 亚洲综合伊人久久| 午夜久久免费观看| 久久不射热爱视频精品| 天天综合天天做| 国产99精品国产| 成人黄动漫网站免费| 亚洲精品久久久蜜桃动漫| 一区二区三区在线免费| 欧美交换配乱吟粗大25p| 亚洲视频国产| 亚洲成人av资源网| 黑丝av在线播放| 久久亚洲精选| 国产美女久久久| 国产乱淫av片免费| 一区二区免费在线| 日本福利视频在线| 国产一区二区区别| 一区二区三欧美| 97在线观看免费高| 成人自拍视频在线| 欧美激情一区二区三区在线视频| 成人在线爆射| 51精品视频一区二区三区| 国产精品igao网网址不卡| 在线观看日韩av电影| 欧美在线一级va免费观看| 波多野结衣绝顶大高潮| 欧美激情一区三区| 超碰在线免费观看97| 一区二区三区免费在线看| 亚洲国产精品成人精品| 无码人妻精品一区二区三区温州| 日韩精品成人一区二区三区| 国产欧美日韩91| 国产黄色av片| 欧美性猛交xxxx偷拍洗澡| 亚洲娇小娇小娇小| 亚洲性感美女99在线| 欧美一级大胆视频| 91久久久久国产一区二区| 亚洲一区中文在线| 日韩av手机版| 韩国亚洲精品| 国产suv精品一区二区三区88区| 在线视频播放大全| 亚洲第一在线综合网站| 黄色成人免费看| 欧美三区美女| 国产精品xxxxx| 精品国产九九九| 一本色道久久综合亚洲91| 在线视频日韩欧美| 首页亚洲欧美制服丝腿| 国产精品推荐精品| 色诱色偷偷久久综合| 亚洲精品国产精品久久清纯直播 | 久久综合久久鬼色中文字| 伊人久久大香线蕉综合75| 秋霞蜜臀av久久电影网免费 | 男人的天堂最新网址| 亚洲成色精品| 成人午夜黄色影院| **在线精品| 亚洲第一色在线| 国产免费美女视频| 国产午夜精品一区二区三区四区| 欧美一级爱爱视频| 国产精品成人av| 日产精品久久久一区二区福利| 精品欧美一区二区精品少妇| 欧美日韩三级在线| 加勒比一区二区| 顶级嫩模精品视频在线看| 最新欧美日韩亚洲| 色婷婷综合网| 国产aaa精品| 亚洲wwww| 亚洲国产欧美一区二区三区久久| 99热精品免费| 1区2区3区精品视频| 91激情视频在线| 日韩国产一区二| 欧美极品一区二区| 青青草久久爱| 国产69久久精品成人| 女人18毛片水真多18精品| 精品奇米国产一区二区三区| 亚洲av鲁丝一区二区三区| 中文字幕日韩一区| 欧美一级xxxx| 韩国精品免费视频| 在线看视频不卡| 亚洲激情久久| 91午夜理伦私人影院| 亚洲欧美在线综合| 久久久www成人免费精品| 亚洲天堂手机在线| 欧美日本免费一区二区三区| 97超碰在线免费观看| 国产亚洲1区2区3区| 宅男噜噜噜66国产免费观看| 日本免费新一区视频| 亚洲精品欧美精品| 亚洲九九在线| 国产精品日韩高清| 偷窥自拍亚洲色图精选| 日本亚洲精品在线观看| 成人开心激情| 色偷偷偷亚洲综合网另类| 91亚洲欧美激情| 日韩精品一区在线| 国产精久久久久久| 日韩欧美aaa| 在线看片中文字幕| 亚洲天堂成人在线观看| 中文字幕无人区二| 91丨九色丨国产丨porny| 国产精品99久久免费黑人人妻| 全部av―极品视觉盛宴亚洲| 国产系列第一页| 午夜欧美精品| 狠狠色伊人亚洲综合网站色| 国产在视频线精品视频www666| 国产精品视频1区| 欧美欧美在线| 2023亚洲男人天堂| 99只有精品| 久久69精品久久久久久久电影好 | 国产精品一区二区三区观看 | 国内在线观看一区二区三区| 狠狠干一区二区| 日韩不卡一区| 成人国产1314www色视频| 国产精品手机在线播放| 91免费版网站入口| 欧美日韩夜夜| 成人欧美一区二区三区黑人| 成人av动漫| 国产精品视频久| 国产一区丝袜| 国产日韩欧美在线看| 久久九九热re6这里有精品| 国产激情视频一区| 中文字幕av一区二区三区四区| 91av在线网站| 国色天香久久精品国产一区| 97人人做人人爱| 亚州欧美在线| 欧美在线视频免费观看| 精品久久国产一区| 国产成人亚洲综合青青| 成人春色在线观看免费网站| 国产精品爽黄69| 窝窝社区一区二区| **亚洲第一综合导航网站| 妖精视频一区二区三区免费观看| 亚洲一区二区三区sesese| 曰本一区二区三区视频| 99国产超薄肉色丝袜交足的后果| 不卡av一区二区| 国产在线一区二区三区四区| 天天超碰亚洲| 欧美三级电影在线播放| 亚洲成人中文| 成人在线观看毛片| 毛片av一区二区三区| 国产91在线免费| 国产高清在线观看免费不卡| 亚洲黄色av网址| 国产午夜精品理论片a级大结局| 亚洲av无码一区东京热久久| 亚洲欧洲精品一区二区精品久久久 | 中文字幕一区二区三区色视频| 久久久久国产精品无码免费看| 亚洲乱码一区二区三区在线观看| 国内精品卡一卡二卡三| 黑人巨大精品欧美一区免费视频| 久久一二三四区| 日韩欧美一区电影| 99精品在线视频观看| 日韩在线资源网| 国产91在线播放精品| 国产成人久久久| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产精品动漫网站| 91视频国产观看| 人妻无码一区二区三区| 天天爽夜夜爽夜夜爽精品视频| 国产精品白浆一区二小说| 日韩欧美国产高清| 亚洲欧美高清视频| 久久久久国色av免费观看性色| 无码国模国产在线观看| 产国精品偷在线| 亚洲成人原创| 成人免费观看视频在线观看| 91麻豆精品视频| 国产特级黄色录像| 日本乱人伦一区| 中文字幕福利视频| 久久精品国产免费观看| av在线亚洲一区| 3d精品h动漫啪啪一区二区 | 蜜桃一区二区三区在线观看| 妺妺窝人体色www在线观看| 欧美高清在线视频| 又色又爽的视频| 91精品在线麻豆| 成人福利小视频| 69视频在线播放| 欧美人与拘性视交免费看| 亚洲成人精品电影在线观看| 日韩国产欧美在线观看| 欧美特黄aaa| 亚洲高清视频中文字幕| wwwxxx亚洲| 中文日韩电影网站| 亚洲免费一区三区| 国产一级二级三级精品| 久久久人人人| 亚洲精品综合在线观看| 亚洲已满18点击进入久久| 天天干在线播放| 北条麻妃久久精品| 动漫av一区| 日本成人三级电影网站| 经典三级在线一区| 国内精品免费视频| 欧美亚洲国产bt| 国产成人精品无码高潮| 欧美性做爰毛片| 久久一区二区三区电影| 97久久国产亚洲精品超碰热| 26uuu另类欧美亚洲曰本| 国产免费嫩草影院| 欧美精品一区二区三区蜜桃视频| 经典三级一区二区| 亚洲qvod图片区电影| 91久久综合| 日日噜噜夜夜狠狠| 午夜精品成人在线视频| 伊人久久亚洲综合| 国外成人在线视频| 97久久视频| 99精品免费在线观看| 亚洲伦在线观看|