久久国产精品一区二区_欧美成年网站_国产精品成人国产_亚洲欧美日韩在线观看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.

91成人免费在线观看| 欧美天堂在线观看| 国产精品一区=区| 成人深夜直播免费观看| 日本一二三四区视频| 亚洲精品一区二区三区新线路| 亚洲日韩视频| 91久久精品一区二区三| 91精品久久久久久久久久 | 亚洲xxx在线观看| www.97av.com| 久久高清一区| 日韩欧美国产一区在线观看| 久久久一本精品99久久精品66 | 亚洲精品福利视频网站| 777午夜精品福利在线观看| 2025韩国理伦片在线观看| 草逼视频免费看| 青青草91视频| 亚洲国产私拍精品国模在线观看| 亚洲欧洲日韩精品| 91蜜桃视频在线观看| 水蜜桃久久夜色精品一区| 黄色精品一区二区| 亚洲一区二区中文| 中文字幕在线观看免费高清| 999久久久精品一区二区| 中文字幕av免费专区久久| 97超级碰碰碰久久久| 午夜免费福利网站| 日韩漫画puputoon| 99精品欧美一区二区三区小说| 久久久精品日本| 天天爽天天爽夜夜爽| 污视频软件在线观看| 丁香婷婷综合色啪| 欧美超级乱淫片喷水| 91欧美视频在线| 在线日本欧美| 26uuu久久天堂性欧美| 欧美二区在线播放| 日韩欧美理论片| 精品176极品一区| 久久婷婷国产综合精品青草| 久久久亚洲成人| 久久精品一二三四| 蜜桃在线一区| 最好看的中文字幕久久| 国产精品黄页免费高清在线观看| 双性尿奴穿贞c带憋尿| 2020国产精品极品色在线观看| 亚洲欧洲日韩一区二区三区| 国产精品入口日韩视频大尺度| 女尊高h男高潮呻吟| 欧美日韩看看2015永久免费| 午夜影院久久久| 国产欧美一区二区视频| 国产性猛交普通话对白| 欧美日本中文| 精品久久人人做人人爽| 免费在线看黄色片| 国产成人自拍一区| 成人免费福利片| 91精品国产高清久久久久久91| 美国黄色一级视频| 精品三级av在线导航| 五月天国产精品| 国产精品亚洲综合| 日韩精品视频免费播放| 香蕉久久夜色精品国产| 亚洲欧洲一区二区三区久久| 国产精品人人妻人人爽人人牛| 成人日韩精品| 国产精品久99| 亚洲伊人一本大道中文字幕| 久久久久亚洲av无码专区体验| 综合在线视频| 精品99999| 亚洲午夜精品久久久久久人妖| 欧美日韩美女| 亚洲国产精品成人综合 | www.av欧美| gogogo高清在线观看一区二区| 欧美综合欧美视频| 亚洲制服欧美久久| 国产黄色高清视频| 91小视频免费看| 国产精品久久久久久久久久久新郎 | 国产精品9999久久久久仙踪林| 国产精品suv一区二区| 亚洲免费综合| 色婷婷综合成人av| 亚洲精品一区二区18漫画| 精品国产乱子伦一区二区| 一本色道久久综合亚洲aⅴ蜜桃| 日本一区二区三区免费观看| 国产区精品在线| 99久久99久久精品免费看蜜桃| 国产大片精品免费永久看nba| 长河落日免费高清观看| 欧美日韩少妇| 亚洲一区二区久久| 亚洲黄色片免费| 神马日本精品| 欧美精品久久久久久久多人混战| 欧美乱做爰xxxⅹ久久久| 巨茎人妖videos另类| 亚洲视频免费在线观看| 久久福利电影| 国产强被迫伦姧在线观看无码| 99久久久久久99| 成人免费黄色网| 青青草av在线播放| 精品一区二区三区在线观看国产| 国语自产在线不卡| 日韩精品123区| 石原莉奈在线亚洲二区| 欧美插天视频在线播放| 一级片手机在线观看| 欧美日韩a区| 伊人激情综合网| 国产精品一区二区无码对白| 婷婷精品进入| 亚洲日韩欧美视频一区| 精品国产乱码久久久久夜深人妻| 人人狠狠综合久久亚洲婷| 亚洲电影天堂av | 五十路六十路七十路熟婆| 99成人在线视频| 亚洲色图50p| 日本少妇xxxx| 亚洲视频日本| 久热精品视频在线观看| av手机在线播放| 亚洲精选成人| 欧美成人免费大片| 国产wwwwxxxx| 奇米888四色在线精品| 欧美亚洲另类在线| 国产真实夫妇交换视频| 国产精一区二区三区| 国产一区二区香蕉| 日韩乱码一区二区三区| 久久久国产一区二区三区四区小说| 成人羞羞视频免费| www.四虎在线观看| 亚洲免费av网站| 天天干天天色天天爽| 成人国产精品一区二区网站| 欧美主播一区二区三区美女| 久久久久久久少妇| 超碰成人久久| 在线播放国产一区二区三区| b站大片免费直播| 久久久久91| 国产成人精品免费视频| 亚洲欧美另类在线视频| 久久久精品国产免大香伊| 玛丽玛丽电影原版免费观看1977| 五月婷婷丁香网| 欧美性xxxx在线播放| 一区二区传媒有限公司| 牲欧美videos精品| 亚洲区一区二区| 午夜时刻免费入口| 蜜臀久久99精品久久久久久9| 国产精品高潮在线| 亚洲特级黄色片| 最新日韩在线视频| 国产小视频免费| 韩国精品福利一区二区三区| 欧美videos大乳护士334| 动漫av在线免费观看| 在线观看日韩av电影| 国语自产精品视频在线看一大j8| 久久精品一二区| 国产三级欧美三级日产三级99 | 99久免费精品视频在线观看| 国产一区二区高清不卡| 日本韩国欧美| 在线播放91灌醉迷j高跟美女| 亚洲欧美日韩网站| 国产婷婷精品| 国产精品日韩在线| 国产黄色片免费观看| 欧美日韩国产综合视频在线观看中文| 亚洲中文字幕无码不卡电影| 人人狠狠综合久久亚洲婷| 九九热在线精品视频| 日韩高清精品免费观看| 国产午夜精品久久| 三级网在线观看| 蜜桃一区av| 最新国产精品拍自在线播放| 日本少妇高清视频| 久久久久久一级片| 91精品一区二区三区四区| 天堂在线精品| 色偷偷av一区二区三区| 久久免费少妇高潮99精品| 久久蜜桃香蕉精品一区二区三区| 中文字幕久久一区| 亚洲电影男人天堂| 久久综合伊人77777| 欧美日韩一二三四区| 亚洲品质自拍视频| 男人揉女人奶房视频60分| 久久久久亚洲| 欧美亚洲日本黄色| 99久久精品国产一区色| 91官网在线观看| 白丝校花扒腿让我c| 免费国产亚洲视频| 精品国产乱码久久久久软件| 精品一区视频| 在线精品高清中文字幕| 中文字幕一区二区三区精品| 亚洲日穴在线视频| 亚洲色图 在线视频| 宅男噜噜噜66国产日韩在线观看| 国产精品综合久久久| 成人免费网站视频| 精品福利视频一区二区三区| 国产又粗又猛又爽又黄的视频四季| 99视频有精品| 2018中文字幕第一页| 68国产成人综合久久精品| 日韩女优人人人人射在线视频| 国产jzjzjz丝袜老师水多| 欧美午夜片在线看| 欧美 日韩 国产 成人 在线观看| 不卡一区在线观看| 黄色网址在线免费看| 91亚洲自偷观看高清| 国产精品高清在线观看| 亚洲av激情无码专区在线播放| 日韩欧美一级二级三级久久久| 国产又粗又猛又爽又黄的视频四季 | 日本裸体美女视频| 国产调教视频一区| aaaaaa亚洲| 麻豆成人精品| 精品日韩美女| 日韩三级毛片| 97av在线播放| 午夜视频1000| 日韩黄色在线免费观看| 精品成人久久久| 调教+趴+乳夹+国产+精品| 久久国产劲爆∧v内射| 国产精品一区二区不卡| 九一免费在线观看| 欧美成人有码| 成人午夜电影在线播放| 狠狠久久伊人| 中文不卡在线| 久99久在线视频| 精品国产一级片| 欧美成人一区二区三区在线观看| 在线免费日韩av| 亚洲国产毛片aaaaa无费看| 中文字幕avav| 国产成人免费视频网站高清观看视频 | 成人久久一区二区| 免费看一区二区三区| 久久亚洲国产精品| 国内精品偷拍视频| 精品国产乱码久久久久久影片| 精品人妻在线播放| 日韩欧美中文第一页| 日韩一区二区a片免费观看| 国产精品网站在线播放| 午夜天堂在线视频| 成人免费视频视频在线观看免费| 少妇高潮毛片色欲ava片| 久久xxxx精品视频| 亚洲精品中文字幕在线| 亚洲欧洲日韩| 国产在线精品一区| 国内精品视频在线观看| 成人高清视频观看www| 欧美电影在线观看一区| 97人人爽人人喊人人模波多| 久久久成人av毛片免费观看| 久久九九全国免费精品观看| 亚洲乱码精品久久久久..| 亚洲人成电影在线播放| 一级成人免费视频| 精品国产a毛片| 男人天堂视频网| 91精品国产色综合久久不卡蜜臀| 日韩毛片在线播放| 欧美日韩在线三级| 国产精品suv一区二区| 欧美在线高清视频| 免费在线观看国产精品| 色婷婷国产精品久久包臀| 国精品无码一区二区三区| 午夜电影久久久| 刘亦菲国产毛片bd| 亚洲成a人片综合在线| 337人体粉嫩噜噜噜| 亚洲午夜一区二区| 最新日韩免费视频| 无码av免费一区二区三区试看| 国产又粗又硬视频| 亚洲aⅴ怡春院| 精品一区二区在线观看视频| 欧美日韩免费一区| 永久看片925tv| 欧美在线免费观看亚洲| 精品在线视频观看| 欧美日本在线播放| 国产伦精品一区二区三区视频网站| 91精品久久久久久久99蜜桃| 一级做a爰片久久毛片| 精品女同一区二区| 综合久久国产| 成人激情四射网| 在线播放国产精品| 亚洲国产成人二区| 欧美老女人性视频| 国产95亚洲| 国产精品久久久久久av福利软件 | 不卡的av电影| 日韩欧美中文视频| 国产精品久久久久久久第一福利 | 日韩精品电影网| 午夜精品久久久久久久爽 | 成人午夜免费福利| 日韩在线免费视频| 欧美不卡高清一区二区三区| 7m第一福利500精品视频| 日韩黄色三级在线观看| 国产精品91一区| 亚洲自拍电影| 精品国产一区二区三区日日嗨 | 欧美午夜精品久久久久久蜜| 最新成人av网站| 老司机激情视频| 国产v综合v亚洲欧| 国内自拍偷拍视频| 一区二区三区四区在线| 日本少妇高清视频| 日韩精品一区国产麻豆| 国产视频www| 欧美理论电影在线播放| 日本久久伊人| 999精品视频一区二区三区| 欧美成人亚洲| 人人妻人人澡人人爽欧美一区| 国产一区二区看久久| 中文字幕欧美视频| 亚洲国产日韩a在线播放性色| 欧美色图一区二区| 精品国产乱码久久久久久蜜臀| www.欧美国产| 国产做受69高潮| 婷婷综合一区| 免费久久久一本精品久久区| 国产又大又长又粗| 中文字幕在线不卡一区二区三区| 天堂久久精品忘忧草| 欧美午夜电影在线播放| 一区二区视频播放| 久久五月天综合| 99a精品视频在线观看| 激情欧美一区二区三区中文字幕| 久久久久国产一区二区| 亚洲老女人av| 亚洲视频一区二区在线| 久久综合亚洲色hezyo国产| 日韩的一区二区| 精品久久久网| 成人国产一区二区| 久久精品人人| 天堂av在线8| 亚洲 欧美综合在线网络| 久久久久亚洲av成人毛片韩| 在线精品高清中文字幕| 无码国模国产在线观看| 国内一区二区三区在线视频| 日本中文字幕一区二区视频| 男生操女生视频在线观看 | 亚洲一区二区三区在线视频 | 中韩乱幕日产无线码一区| 91精品美女在线| 99热精品在线| 亚洲人视频在线| 精品国产乱码久久久久酒店| 天天干天天插天天射| 欧美精品18videos性欧美| 国产欧美日韩精品一区二区三区| 亚洲欧美日韩不卡一区二区三区| 国产91精品露脸国语对白| 中文字幕av网址| 日韩精品在线网站| 黑人一区二区三区| 国产欧美一区二区三区另类精品| 麻豆精品一区二区三区|