三十、电子商务分析与服务推荐的分析方法与过程
生活随笔
收集整理的這篇文章主要介紹了
三十、电子商务分析与服务推荐的分析方法与过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 分析方法與過程
1.1 目標
本案例的目標是對用戶進行推薦,即以一定的方式將用戶與物品之間建立聯系。為了更好地幫助用戶從海量的數據中快速發現感興趣的網頁,在目前相對單一的推薦系統上進行補充。電子商務服務推薦的分析方法與過程的主要內容包括:
- 數據抽取
- 數據探索性分析
2. 數據抽取
- 推薦系統使用的推薦算法**
- 本項目中使用的是協同過濾算法,其特點是通過歷史數據找出相似的用戶或者網頁,在數據抽取的過程中,進可能選擇大量的數據,這樣就能降低推薦結果的隨機性,提高推薦結果的準確性,能更好地發掘長尾網頁中用戶感興趣的網頁。
用戶訪問數據的特征
- 用戶的訪問時間為條件,選取3個月用戶的訪問數據作為原始數據集。數據總量有837450條記錄,其中包括用戶號、訪問時間、來源網站、訪問頁面、頁面標題、來源網頁、標簽、網頁類別和關鍵詞詞等屬性。
智能推薦系統的流程圖
- 建立數據庫
- 導入數據
- 搭建Python等數據庫環境
- 數據分析
- 建立模型
Python訪問數據庫的代碼
import pandas as pd from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:222850@127.0.0.1:3306/7law?charset=utf8') sql = pd.read_sql('all_gzdata', engine, chunksize=10000)3 探索性數據分析
網頁類分析
- 首先對原始數據中用戶點擊的網頁類型進行統計,網頁類型是指“網址類型”中的3位數字(本身有6/7位數字)。
網頁類統計結果
- 點擊與咨詢相關(網頁類型為101)的記錄占了49.16%,其次是其他的類型(網頁類型為199)占比24%左右,然后是知識相關(網頁類型為107)占比22%左右。
- 可以得到用戶的點擊頁面類型的排行榜為:咨詢相關、知識相關、其它方面的網頁、法規(類型為310)、律師相關(類型為102)。可以初步得出相對于長篇的知識,用戶更加偏向于查看咨詢或者進行咨詢。
- 知識類型內部統計
網頁類分析實現的代碼
counts = [i['fullURLId'].value_counts() for i in sql] # 逐塊統計 counts = pd.concat(counts).groupby(level=0).sum() # 合并統計結果,把相同的統計項合并(即按index分組并求和) counts = counts.reset_index() # 重新設置index,將原來的index作為counts的一列。 counts.columns = ['index', 'num'] # 重新設置列名,主要是第二列,默認為0 counts['type'] = counts['index'].str.extract('(\d{3})') # 提取前三個數字作為類別id counts['percent'] = counts['num'] / counts['num'].sum() * 100 counts_ = counts[['type', 'num', 'percent']].groupby('type').sum() # 按類別合并 counts_.sort_values('num', ascending=False) # 降序排列 print(counts_)點擊次數分析
- 統計分析原始數據用戶瀏覽網頁次數(以“真實IP區分”)的情況,其結果如下表所示:可以從表中發現瀏覽一次的用戶占所有用戶總量的58%左右,大部分用戶瀏覽的次數在2~7次,用戶瀏覽的平均次數是3次
點擊次數分析代碼的實現過程
網頁排名
- 由分析目標課程,個性化推薦主要針對以html為后綴的網頁。從原始數據中統計以html為后綴的網頁的點擊率。
- 從表中可以看出,點擊次數前20名中,“法規專題”占了大部分,其次是“知識”,然后是“咨詢”。
類型點擊數統計
翻頁網頁統計
6 總結
分析方法與過程
-
數據抽取
1、建立數據庫—導入數據—搭建Python環境—數據分析—建立模型 -
數據探索性分析
2、網頁類型分析
3、網頁點擊次數分析
4、網頁排名分析
7.完整代碼
7.1 代碼目錄結果
7.2 完整代碼
1 sql_value_counts.py
import pandas as pd from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:222850@127.0.0.1:3306/7law?charset=utf8') sql = pd.read_sql('all_gzdata', engine, chunksize=10000) ''' 用create_engine建立連接,連接地址的意思依次為“數據庫格式(mysql)+程序名(pymysql)+賬號密碼@地址端口/數據庫名(test)”,最后指定編碼為utf8; all_gzdata是表名,engine是連接數據的引擎,chunksize指定每次讀取1萬條記錄。這時候sql是一個容器,未真正讀取數據。 '''counts = [i['fullURLId'].value_counts() for i in sql] # 逐塊統計 counts = pd.concat(counts).groupby(level=0).sum() # 合并統計結果,把相同的統計項合并(即按index分組并求和) counts = counts.reset_index() # 重新設置index,將原來的index作為counts的一列。 counts.columns = ['index', 'num'] # 重新設置列名,主要是第二列,默認為0 counts['type'] = counts['index'].str.extract('(\d{3})') # 提取前三個數字作為類別id counts['percent'] = counts['num'] / counts['num'].sum() * 100 counts_ = counts[['type', 'num', 'percent']].groupby('type').sum() # 按類別合并 counts_.sort_values('num', ascending=False) # 降序排列 print(counts_)2 ask_value_counts.py
import pandas as pd from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:222850@127.0.0.1:3306/7law?charset=utf8') sql = pd.read_sql('all_gzdata', engine, chunksize=10000)# 統計101類別的情況 def count101(i): # 自定義統計函數j = i[['fullURLId']][i['fullURLId'].str.contains('101')].copy() # 找出類別包含101的網址return j['fullURLId'].value_counts()counts2 = [count101(i) for i in sql] # 逐塊統計 counts2 = pd.concat(counts2).groupby(level=0).sum() # 合并統計結果 counts2 = pd.DataFrame(counts2) counts2.columns = ['num'] counts2['percent'] = counts2['num'] / counts2['num'].sum() * 100 counts2.sort_values('num', ascending=False) # 降序排列print(counts2)3 know_value_counts.py
import pandas as pd from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:222850@127.0.0.1:3306/7law?charset=utf8') sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)#統計107類別的情況 def count107(i): #自定義統計函數j = i[['fullURL']][i['fullURLId'].str.contains('107')].copy() #找出類別包含107的網址j['type'] = None #添加空列j['type'][j['fullURL'].str.contains('info/.+?/')] = u'知識首頁'j['type'][j['fullURL'].str.contains('info/.+?/.+?')] = u'知識列表頁'j['type'][j['fullURL'].str.contains('/\d+?_*\d+?\.html')] = u'知識內容頁'return j['type'].value_counts()counts2 = [count107(i) for i in sql] #逐塊統計 counts2 = pd.concat(counts2).groupby(level=0).sum() #合并統計結果 counts2 = pd.DataFrame(counts2) counts2.columns=['num'] counts2['percent'] = counts2['num']/counts2['num'].sum()*100 print(counts2)4 other_value_counts.py
import pandas as pd from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:222850@127.0.0.1:3306/7law?charset=utf8') sql = pd.read_sql('all_gzdata', engine, chunksize=10000)# 統計1999001類別的情況 def count101(i): # 自定義統計函數j = i[['pageTitle']][i['fullURLId'].str.contains('1999001')].copy() # 找出類別包含101的網址j['type'] = u'其他'j['type'][(j['pageTitle'] != '') & (j['pageTitle'].str.contains(u'快車-律師助手'))] = u'快車-律師助手'j['type'][(j['pageTitle'] != '') & (j['pageTitle'].str.contains(u'免費發布法律咨詢'))] = u'免費發布咨詢'j['type'][(j['pageTitle'] != '') & (j['pageTitle'].str.contains(u'咨詢發布成功'))] = u'咨詢發布成功'j['type'][(j['pageTitle'] != '') & (j['pageTitle'].str.contains(u'快搜'))] = u'快搜'return j['type'].value_counts()counts2 = [count101(i) for i in sql] # 逐塊統計 counts2 = pd.concat(counts2).groupby(level=0).sum() # 合并統計結果 counts2 = pd.DataFrame(counts2) counts2.columns = ['num'] counts2['percent'] = counts2['num'] / counts2['num'].sum() * 100 counts2.sort_values('num', ascending=False) # 降序排列web_click_counts.py
import pandas as pd from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:222850@127.0.0.1:3306/7law?charset=utf8') sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)#統計點擊次數 #value_count統計數據出現的頻率c = [i['realIP'].value_counts() for i in sql] count3 = pd.concat(c).groupby(level=0).sum() count3 = pd.DataFrame(count3) count3[1] = 1 count3 = count3.groupby('realIP').sum()count3_ =count3.iloc[:7,:].append(count3.iloc[7:,:].sum(),ignore_index=True) count3_.index = list(range(1,8))+['7次以上'] print(count3_)# 對瀏覽次數達7次以上的情況進行分析,發現大部分用戶瀏覽8~100次,代碼實現:counts3_7 = pd.concat([count3.iloc[7:100,:].sum(),count3.iloc[100:300,:].sum(),count3.iloc[300:,:].sum()]) counts3_7.index = ['8-100','101-300','301以上'] counts3_7df = pd.DataFrame(counts3_7) counts3_7df.index.name = '點擊次數' counts3_7df.columns = ['用戶數'] print(counts3_7df)web_sort
import pandas as pd from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://root:222850@127.0.0.1:3306/7law?charset=utf8')sql = pd.read_sql('all_gzdata', engine, chunksize=10000)counts4 = [i[['realIP','fullURL','fullURLId']] for i in sql] counts4_ = pd.concat(counts4) a = counts4_[counts4_['fullURL'].str.contains('\.html')] print(a.head()).0.0.1:3306/7law?charset=utf8’)
sql = pd.read_sql('all_gzdata', engine, chunksize=10000)counts4 = [i[['realIP','fullURL','fullURLId']] for i in sql] counts4_ = pd.concat(counts4) a = counts4_[counts4_['fullURL'].str.contains('\.html')] print(a.head())總結
以上是生活随笔為你收集整理的三十、电子商务分析与服务推荐的分析方法与过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二十九、电子商务服务推荐项目基本描述
- 下一篇: 三十一、电子商务分析与服务推荐