Python用戶畫像準確性評測 ——撥開python大數據分析的面紗

 

Part1 用戶畫像評測回顧與總結python

一、爲何作用戶畫像評測?web

將時鐘撥回到2018年初,你們迫切想打破以往資訊推薦無章可循的局面,而今日的推薦算法也彷佛演成了神話,用戶意圖這個詞在WiFi管家團隊被一再說起,繼而AI推薦佈局被推到了前臺。算法

用戶意圖識別的優劣取決於對用戶實時需求的瞭解程度,此事古來難。AI團隊率先作的嘗試是在一些特定場景下猜想用戶意圖,進行意圖相關推薦,如住酒店用戶,地鐵上用戶等,這是算法能夠作的事情,那測試在這個過程當中能夠作些什麼呢?算法驗證相對滯後,有什麼能夠先行的呢?用戶意圖識別首要識別對用戶場景,若是場景錯了,後面的工做就沒法關聯起來。如,住酒店,是個動態場景,嘗試進一步拆分紅可衡量的靜態場景,如,什麼人(性別,工做,偏好等)?什麼時間(出行時間)住什麼酒店(酒店位置,級別等)?這些咱們是有後套標籤系統的,通過了解這些標籤系統已經有些嘗試應用,可是標籤自己準確性卻無從評估,所以,用戶標籤準確性評測就在懵懂中籌備開始了。sql

二、用戶畫像準確性怎麼作?數組

感謝先行者瀏覽器團隊,提供了最初的評測思路,他們的考慮很周全。而我在具體的實踐過程當中,根據業務的實際狀況制定了最終的評測方案(下圖),從第一輪標籤提取開始,就暴露出各類細節問題,好在都一一解決了。瀏覽器

 

 

 

簡單列下可供後來者借鑑的幾個注意項: 視頻資料學習分享 企(Q)鵝羣 519970686數據結構

(1) 問卷設計的原則:每個問卷題目與後臺標籤對應關係提早考慮好,有的一對一有的一對多。問卷的每個選項要與對應標籤的取值對應好關係,這會大大簡化後期腳本處理工做。app

(2) 問卷下發回收:最初下發了label數量>9的用戶,用>8的用戶補了1k,結果實際回收率不到50%,因而追加了>8的全量用戶,總共4k多個,實際回收依然不足1k,而此間耗費了將近2周的時間。函數

(3) 關鍵字選取:整個過程關鍵字是imei,但下發問卷時,衆測平臺關鍵字倒是qq,這就在數據處理上又須要多一層轉換處理了。工具

(4) 標籤系統提數:標籤系統的數據是週期性更新,更新頻率高,建議問卷回收後進行二次提數,儘量減小時間差形成的數據不一致。

(5) 腳本處理:由於涉及的數據量比較大,涉及到比較多文件的處理,強烈建議裝兩個庫,jupyter notebook(交互式筆記本,可及時編寫和調試代碼,很好用),還有一個大數據處理的pandas,對於excel的操做實在便利太多。

(6) 經緯度處理:經緯度數據無法下發問卷,所以問卷題目設計成問具體地址,大樓,小區等。數據轉換接入了地圖的逆地址解析接口,而後再對比具體位置信息,這裏的對比也是糾結了1天時間,最終精確到2箇中文字符的維度。

三、用戶畫像準確性怎麼分析?

至問卷回收完畢,實際工做才完成一半,接下來就是遠超預估的複雜繁瑣的數據處理及分析過程了。我想用下面這張圖來描述整個分析過程。

 

 

 

整個分析包括四部分:

(1) 黃框:活躍用戶數據處理。

1.爲何要作?

活躍用戶主要下發問卷前用,這裏爲何還須要作分析呢?這裏的分析工做是能夠省掉的,方案最後會說,先來看這裏的目標是什麼。由於問卷沒有收集imei數據,而lable標籤是根據imei進行統計的,所以這裏須要多作一層merge處理,以使問卷能夠補足缺失的imei信息。

2.是否可優化?是否存在風險?

細心的讀者可能已經發現,這裏存在一個隱患!可能致使樣本數量減小,由於用戶的qq和imei其實不是一一對應的,可能存在一對一或一對多狀況,若是下發imei用戶更換qq完成了問卷,這裏的merge就會致使部分樣本數據反查不到imei數據從而丟失樣本。慶幸的是本次測試丟失樣本數不到10個,不然我可能要從頭再來了。

3.如何規避?

在用戶問卷設計中讓用戶主動反饋imei信息。前期設計沒有考慮清楚key值的設計形成了這個隱患,同時還增長了分析的工做量。

(2) 藍框:系統lable數據處理。

1.爲何要作?

細心的讀者會發現,系統lable在最初已經提取了,用於作單個用戶lable數量的過濾分析,這裏還能夠直接用原來的數據麼?

答案是很是不建議!由於後臺數據會週期性更新,最初提取的數據已經不能表徵問卷用戶當前的上報數據了。因此lable數據從新提取這一步不能省。

(3) 紅框:問卷數據處理。

1.爲何要作?

問卷設計的原則是便於用戶理解選擇,與代碼數據上報實現差別很大,因此這裏的數據解析是必須的,也是結果分析最核心的部分。

2.作了什麼?

這裏我花費了大量的時間寫腳本、調試,這裏大量採用pandas,感謝它大大簡化了個人代碼量。爲了便於你們熟悉瞭解pandas的用法,我這裏會截取部分代碼來看。

Action1:drop冗餘數據

經驗:感謝pandas,定義droplist,經過dataframe的drop方法,兩行代碼:

 

 

 

Action2:按lableid從新定義列名

 

 

 

Action3:常規各列數據處理(舉個栗子)

 

 

 

(4)綠框:diff結果分析

1.作了什麼?

在腳本處理上經緯度會更復雜,但思路大同小異,便於解說,這裏以常規數據舉例。

關鍵點1:利用dataframe將一行取出來存成array:

 

 

 

關鍵點2:定義diffresult文件列名:

 

 

 

關鍵點3:遍歷每一列數據,過濾掉不存在lable:

 

 

 

關鍵點4:循環遍歷比較系統數據和用戶數據:

 

 

 

在本part最後,再總結下不足,主要有以下三方面: 視頻資料學習分享 企(Q)鵝羣 519970686

(1) 樣本覆蓋全面性不夠:覆蓋具備侷限性,不能表明全部的用戶;

(2) 沒法全自動化監控:問卷設計及提數暫時沒法自動化,也就僅限於一次摸底;

(3) 樣本數量不足:單個用戶的標籤不全,致使標籤總體數量偏少。

Part2 pandas使用總結

一、jupyter環境準備(web交互式筆記本,python快速編碼運行調試神器)。

(1)pip install jupyter

 

 

 

解決:下載ipython-5.7.0-py2-none-any.whl,notebook-5.5.0-py2.py3-none-any.whl放到python的Scripts目錄下,pip install xxx.whl。

(2)再次pipinstall jupyter

(3)使用jupyter notebook

 

 

 

new-選擇對應類型可打開交互式筆記本界面。

二、Pandas擅長作什麼?

(1)快速讀寫csv、excel、sql,以原表數據結構存儲,便捷操做處理行、列數據;

(2)數據文檔行列索引快速一鍵重定義;

(3)強大的函數支持大數據文件的快速統計分析;

(4)能夠對整個數據結構進行操做,沒必要一行行循環讀取……

若是您有上述需求,不妨繼續往下看。

三、pandas安裝

(1)安裝:通常用pip,安裝第三方庫前不妨先更新下pip。

python -m pip install -U pip

pip install pandas

(2)導入

import pandas as pd

(3) 幫助

查看python第三方庫幫助,利用python自帶pydoc文檔生成工具

Step1:配置pydoc服務

Cmd下python –m pydoc –p 1234

 

 

 

Step2:瀏覽器打開http://localhost:1234/

 

 

 

四、Pandas數據結構

series:帶標籤的一維數組,標籤能夠重定義。

dataframe:二維表格性數組,導入讀取的csv、excel就是這種結構,能夠直接對行列作操做。

舉個例子:

 

 

 

 

 

讀取表格——獲得類型是DataFrame的二維數組question_data:

 

 

 

其中的一列df[‘num’]就是一維數組series,像個豎起來的list。

五、pandas的數據處理

(1)數據檢索處理。

(a)查詢首尾;

 

 

 

(b)查詢某行,列;

注意:iloc、loc、ix(儘可能用ix,避免搞不清楚index和行號)。

 

 

 

loc:主要經過index索引行數據。df.loc[1:]可獲取多行,df.loc[[1],[‘name’,’score’]]也可獲取某行某列iloc:主要經過行號索引行數據。與loc的區別,index能夠定義,行號固定不變,index沒有從新定義的話,index與行號相同。

ix:結合loc和iloc的混合索引。df.ix[1],df.ix[‘1’]。

 

 

 

(c)按條件查詢指定行和列;

 

 

 

(d)多條件查詢;

 

 

 

(2)數據增刪改處理。

(a)增刪行;

 

 

 

 

 

(b)增刪列;

 

 

 

 

 

(c)行列數據相連:參看(3)(c)。

(3)多表數據處理;

(a)merge;

eg:合併兩張表:

 

 

 

 

 

stu_score1 = pd.merge(df_student, df_score, on='Name')——內鏈接,交集。

stu_score1

 

 

 

stu_score2 =pd.merge(df_student, df_score, on='Name',how='left')——左鏈接,以左邊爲準。

stu_score2

 

 

 

how參數:inner(默認),left,right,outer,分別爲內、左、右、外鏈接,inner爲交集,outer爲並集。

(b)join——how原則同merge,默認how=‘left’

主用於索引拼接列,兩張表不一樣列索引合併成一個DataFram,比較少用。

(c)concat——axis=0,按行合併,axis=1,按列合併

stu_score2 = pd.concat([df_student,df_score], axis=0)。

stu_score2

 

 

 

(4)數據統計處理;

(a)df.describe()

根據某列計算一系列統計值,df[‘xxx’].describe(),返回以下數據表:

 

 

 

(b)df.set_index(‘列a’)與df.reset_index(‘列a’)

須要對某列數據處理時能夠經過set_index()設爲索引,再用df.sort_index()進行排序,而後再經過reset_index()設回數據。

(5)文件讀寫處理; 視頻資料學習分享 企(Q)鵝羣 519970686

以csv爲例

df = pd.read_csv("D:/pandas_test.csv", encoding='utf-8')

df.to_csv(r"D:\test.csv", index=False,sep=',', encoding='utf_8_sig')

寫文件時設置encoding='utf_8_sig'可解決中文亂碼問題。

(6)數據集批量處理。

(a)apply和applymap

df[‘’].apply(函數)對某列數據應用函數,df.applymap(函數)對整個表應用函數。

(b)groupby

根據某列或某幾列分組,自己沒有任何計算,返回,用於作分組後的數據統計,如:

group_results = total_result.groupby(['lable', 'diff_value']).size()返回每一個分組的個數,經常使用的有max(),min(),mean()

如上是本次腳本分析涉及到的功能,此外,pandas還有做圖功能,此次暫未用到,就不展開說啦。

相關文章
相關標籤/搜索