
CDA數(shù)據(jù)分析師 出品
作者:CDALevel Ⅰ持證人
崗位:數(shù)據(jù)分析師
行業(yè):大數(shù)據(jù)
背景
電子商務行業(yè)在近幾年發(fā)展得極為迅猛,很多在傳統(tǒng)行業(yè)就業(yè)但是薪資不理想的都在網電子商務行業(yè)去轉。這種趨勢造就了越來越多老百姓使用電子商務價值下的產品,不言而喻,比如網購等行為。換句話說,大量的網購會帶來的結果就是數(shù)據(jù)量的增大。面對這種大數(shù)據(jù),且時非結構化的數(shù)據(jù)如商品評論,怎么處理呢?怎么從中提取有用的信息呢?自然語言處理技術給出了答案,從規(guī)則提取到統(tǒng)計建模到如今非?;馃岬?a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度學習,都能從文本中提取到有用的商業(yè)價值,無論時為商家還是買家。本文就某電商平臺上AirPods智能耳機產品的售賣情況及相關商品信息進行情感分析與快速詞云圖搭建。情感分析也是自然語言處理中的一個方向
除了對文本進行挖掘以外,本文還欲搭建一個網頁APP。Python是目前比較流行的編程語言,利用Python搭建一個網頁APP常用的是Python結合Flask或者Django框架來貫穿前后端來搭建網頁。利用這個方法一般需要一定的前端經驗,來修改CSS、HTML、JAVASCRIPT這些文件。而對于沒有前端經驗的coder,讀者這里推薦一款友好的全程基于Python的庫streamlit,也就是本文所用到的庫。利用streamlit可以輕松快速的搭建一個網頁APP,再加入文本挖掘功能。這樣,就做出了一個小產品。下面,進入正題。
本文采用Anaconda進行Python編譯,主要涉及的Python模塊:
本章分為三部分講解:
1.數(shù)據(jù)探索性分析與商品評論文本提取
3.網頁結構設計與實現(xiàn)
4.功能整合與效果呈現(xiàn)
本文采取的數(shù)據(jù)為某寧電商平臺上的商品評論數(shù)據(jù)。數(shù)據(jù)字段有商品標題、價格、評價內容。其中,價格為近期4月份的實時價格。評價內容是按時間順序從近到遠的展現(xiàn)。下面為前五行的展示:
需要注意的是,上面五行顯示的是AirPods第2代的商品信息。原因是數(shù)據(jù)原本分為3張表,每張表的字段都是一樣的,總共3個,2個維度字段和1個度量字段(這個在CDA I課程中的數(shù)據(jù)結構會有提及)。因此,這份數(shù)據(jù)是3張表通過縱向合并方式對記錄進行拼接。最后生成的Index是新表生成的主鍵。
接著可以對數(shù)據(jù)進行適當?shù)奶剿餍苑治?,首先習慣性的觀察數(shù)據(jù)形狀、數(shù)據(jù)類型以及有沒有缺失值、異常值、重復值。缺失值利用pandas庫的isnull().sum()函數(shù)即可查閱。重復值利用duplicated().sum()即可。而重復由于本文探索的是商品評論文本且數(shù)據(jù)量較少,因此本文忽略不做。下面為各部分結果
數(shù)據(jù)形狀為(1020,3),這很好理解,就是1020條記錄行,3個字段。數(shù)據(jù)類型利用info()函數(shù)即可,結果如下:
上面結果解析:Non-NULL Count為各個字段的非空數(shù)值和??梢钥吹?,評價內容這個維度字段有2個空值。右邊Dtype表明三個字段都是字符串object類型。memory usage為這張上商品信息表格的占用字節(jié)空間,有24kb。這里額外提醒一下,如果一張表格有5G以上,也就是Excel軟件都較難打開時,可以換一種實現(xiàn)方式,使用dask庫,是一種分布式的數(shù)據(jù)處理package。
從上圖info信息中可以知道,這張商品信息表的空處有2個,也就是缺失值為2。而重復值計算得到為19個。接下來就是解決缺失值和重復值的方法,考慮到重復值多次出現(xiàn)會影響到后續(xù)詞頻統(tǒng)計的結果,本文考慮將重復值剔除。而缺失值會影響后面對評價內容分詞的步驟,因此這里選擇用空格進行替換。整段代碼如下,剛開始轉用Python的小伙伴可以牢記這段代碼,這幾乎是每次數(shù)據(jù)分析必用的。
import pandas as pd # 讀取數(shù)據(jù) df = pd.read_excel('蘇寧易購_airpods系列.xlsx')
df.isnull().sum() # 缺失值匯總 df.duplicated().sum() # 重復值匯總 df.info() # 表格信息abstract df.dtypes #數(shù)據(jù)類型 df['評價內容'] = df['評價內容'].fillna(' ') # 空格填充 df = df.drop_duplicates() # 剔除重復值
在3個字段中,最需要提取的是評價內容,因為本文的目的是建立一個商品評論文本信息挖掘系統(tǒng),功能包括情感分析、詞云圖可視化。而每個用戶ID的評價內容都是不一致的,因此,需要去做聚合運算。整合所有評價內容,同時去除停用詞,最后形成一句話,雖然這句話是不通順,但是對后面的詞頻統(tǒng)計沒有影響。
整合評價內容采用Python的內置函數(shù)split()完成,首先利用Pandas庫中的tolist()函數(shù)將評價內容字段的記錄變?yōu)橐粋€列表,接著將列表轉換為字符串,這里需要用到split()函數(shù)完成。以空格字符串作為連接符,連接列表里的每一個元素。最終形成的效果截取一部分如下:
之后就是去除停用詞,停用詞無論是中文NLP任務還是英文NLP任務,都需要用到這一步。這一步不僅可以去除大部分噪音,同時也能節(jié)省計算資源,更加高效。去除停用詞的算法其實很簡單,就是遍歷需要做統(tǒng)計挖掘的文本,如果文本中有單詞是屬于指定的停用詞的,就剔除。顯然,這里就需要停用詞庫,停用詞庫有很多,有百度的停用詞表、有哈工大停用詞表、有四川大學機器智能實驗室停用表等。本文選擇哈工大停用詞表,因為此表相較于其他表有對電子商務領域較好的單詞。讀者若是想做一個理想的項目,可以考慮自建電子商務領域的停用詞表。
去除停用詞具體的代碼及做法將在情感分析處講解。
上一部分我們提取了商品信息表格中的每個ID的商品評價內容,同時對其整合進行去停用詞,得到了一份干凈的txt數(shù)據(jù)集。接下來就可以進行文本挖掘的事情了。首先是商品評論詞云圖構建。
在Python中詞云圖構建的庫有很多,常用的就是Wordcloud標準的詞云圖可視化庫,還有pyecharts的詞云圖API。前者在構建詞云圖時,新手使用者往往會出現(xiàn)一大堆問題,比如pip安裝失敗、編碼錯誤、字體使用錯誤等,除此之外,其使用難度其實也是蠻大的。而后者則是常用于瀏覽器上的交互式圖表,其以代碼量,封裝性高所出名,聽起來是比較切合本文這個主題的,但是本文卻沒有考慮,原因是后面所用到的網頁開發(fā)庫streamlit要顯示交互式圖表通常不用pyecharts。
因此,這里本文引出新興的詞云圖可視化庫stylecloud,這個庫是基于wordcloud的。運用這個庫,新手可以以最少的代碼量畫出各色各樣的詞云圖,支持形狀設置。話不多說,直接上代碼:
start = time.time() #記錄初始時間 # 先在內部畫出詞云圖并保存到image文件夾 stop_words = open('哈工大停用詞表.txt','r',encoding='utf8').readlines() # 讀取停用詞 stylecloud.gen_stylecloud(text=txt, collocations=True, # 是否包括兩個單詞的搭配(二字組) font_path=r'?C:WindowsFontssimkai.ttf', # 指定字體 icon_name='fab fa-jedi-order',size=(2000,2000), # 指定樣式 output_name=r'img詞云圖.png', #指定輸出圖像文件路徑 custom_stopwords=stop_words) # 指定停用詞表 end = time.time() # 記錄結束時間 spend = end-start # 畫圖時間總長
代碼解析:
首先引入stylecloud庫,而后使用.gen_stylecloud()對象來初始化畫圖對象(類)。
除此之外,本文還設置了時間間隔,因為眾說周知詞云圖的刻畫需要較長時間,如果文本較長,一分鐘也有可能。所以加上時間的概念,對使用者進行數(shù)據(jù)調入也會友好一些。
這樣,我們就構建好了詞云圖,將在下一部分網頁端應用,這里以Airpods第二代舉例,先上效果圖
詞云圖構建完以后就是輪到情感分析,對干凈的商品評論信息做情感分析是非常有用的。對商家而言可以清楚知道買方使用此產品的感覺與評價,以便后面優(yōu)化產品,而對想要買此產品的人更加有借鑒。本文將對AirPods商品評論進行情感詞正負情感詞統(tǒng)計。
利用到的庫是cnsenti,這個庫是中文情感分析庫。在NLP任務領域中,大多庫與例子都是英文的,因此這個中文庫對于經常對中文文本進行挖掘的人是個好消息!
首先先介紹下這個庫把吧,cnsenti模塊中分為兩大部分,一個是本文用到的情感分析對象Sentiment,另一個是沒有用到的情緒分析對象Emotion。情感分析使用的詞典是知網Hownet,支持自定義。情緒分析使用的是大連理工大學情感本體庫,可以計算文本中的七大情緒詞分布。由于本文只使用情感分析對象類,因此感興趣的讀者可以自行學習情緒分析類。
對AirPods商品評論信息進行情感分析,在默認條件下,只用2句代碼即可。是的,就是那么方便!
senti = Sentiment() result = senti.sentiment_count(txt)
txt為我們的目標文本,首先需要調用情感分析類Sentiment(),如果不設置任何參數(shù),即表明以默認條件初始化。接著使用sentiment_count()函數(shù)計算正負情感詞統(tǒng)計,以AirPods第二代舉例,實現(xiàn)結果如下:
上面結果說明:總共單詞有18128個,句子有625句。積極的情感詞語有2221,消極的情感詞語有322個。
在情感分析類中,除了sentiment_count()函數(shù),還有sentiment_calculate()函數(shù),有什么區(qū)別呢?這個可更加精準的計算文本的情感信息。相比于sentiment_count只統(tǒng)計文本正負情感詞個數(shù),sentiment_calculate還考慮了情感詞前后是否強度副詞去修飾,情感詞前后是否有否定詞的情感語義反轉作用。同樣以AirPods產品舉例,使用這個函數(shù),得到的結果為
可以看到,識別出來的積極詞匯應該是使用了加權的手段將頻率升維到數(shù)值。
接下來就是網頁結構設計,做網頁首先就是構造出一個思路圖,確定功能是什么,有哪些控件,控件擺放位置如何。對于功能,本文的主題是商品評論信息文本挖掘,先對商品評論初始文本進行整合于去停用詞。而后利用stylecloud庫進行詞云圖構建,最后進行情感分析。除此之外,作者還希望完成一下功能:
確定功能就是以上這些了。通過上面的功能,本文可以確定有哪寫控件:
按照常規(guī)的網頁構建,控件位置的空間擺設是一定要設計的。但是對于新手來說,接下來講的超級web app建設streamlit則不需要考慮了。
streamlit的官方(https://streamlit.io/)簡介如下:
以最快的方式建立于分享數(shù)據(jù)app,將數(shù)據(jù)顯示在可分享的web app上,以python編程語言實現(xiàn),無需前端經驗。Streamlit是第一個專門針對機器學習和數(shù)據(jù)科學團隊的應用程序開發(fā)框架,它是開發(fā)自定義機器學習工具的最快的方法,可以幫助機器學習工程師快速開發(fā)用戶交互工具。同時它是基于tornado框架,封裝了大量互動組件,同時也支持大量表格、圖表、數(shù)據(jù)表等對象的渲染,并且支持柵格化響應式布局。Streamlit的默認渲染語言就是markdown;除此以外,Streamlit也支持html文本的渲染,這意味著你也可以將任何html代碼嵌入到streamlit應用里。
讀者可能會疑惑做網站,以為前后端都用Python+streamlit是一件普通的事情。其實不然,在streamlit建立之前,web creator with python一般采用的是前端使用html、css、JavaScript,后端使用python、Flask、Django。如果不用Python,則是前后端都使用D3。
因此,本文所使用的Python+streamlit前后端貫穿創(chuàng)建web app對新手是多么的友好!
接著,先展示streamlit的快速使用方法:
首先pip install streamlit安裝這個庫,而后在命令行輸入streamlit hello。這時會彈出一個窗口,這個是內置的打開幫助文檔,里面有各種實例,下面為一部分截圖:
首先是,記錄著幫助信息的頁面,里面存放著各種連接
而后在下拉框選擇plotting demo,點擊后顯示如下:
這是一個加載了記錄條的畫圖程序,可以是交互式的。
綜上,就可以發(fā)現(xiàn),運行streamlit不是在anaconda等python編譯器里面運行的,而是在命令框cmd中輸入streamlit run .py文件來運行程序的。
有興趣的讀者可以多泡一下streamlit的官網,可以學習到很多東西。
最后就是本文的web app構建與功能整合部分。先上代碼
import streamlit as st import pandas as pd from cnsenti import Sentiment import stylecloud import time
st.title('AirPods智能耳機商品評論分析系統(tǒng)')
st.markdown('這個數(shù)據(jù)分析系統(tǒng)將以可視化形式挖掘某電商公司下蘋果三種AirPods型號的商品評論信息')
st.markdown('Apple AirPods是蘋果品牌的無線耳機。目前有市場上銷售主流是3中機型:**AirPods2代**、**Airpods pro**、**AirPods三代**。這款耳機的主要特點是:耳機內置紅外傳感器能夠自動識別耳機是否在耳朵當中進行自動播放,通過雙擊可以控制Siri控制。帶上耳機自動播放音樂,波束的麥克風效果更好,雙擊耳機開啟Siri,充電盒支持長時間續(xù)航,連接非常簡單,只需要打開就可以讓iPhone自動識別。')
st.sidebar.title('數(shù)據(jù)分析系統(tǒng)控件')
st.sidebar.markdown('選擇一款型號/可視化類型:')
DATA_URL=('蘇寧易購_airpods系列.xlsx') # @st.cache(persist=True) #如果只有一份數(shù)據(jù),就可以用這個持久化,加快效率 def load_data(): data=pd.read_excel(DATA_URL) return data
df = load_data()
df['評價內容'] = df['評價內容'].fillna(' ') # 填充缺失值 select = st.sidebar.selectbox('選擇一款型號',df['商品標題'].unique()) # 在下拉框中得到選擇的型號值 state_data = df[df['商品標題'] == select] # 創(chuàng)建單項按鈕選項值 select_status = st.sidebar.radio("可視化類型", ('表結構數(shù)據(jù)','文本挖掘')) if select_status == '表結構數(shù)據(jù)':
st.text('該電商公司近期售賣產品的相關數(shù)據(jù)(以表結構化顯示)')
st.dataframe(state_data) if select_status == '評論可視化': # 判斷商品正負情感值 txt_list = state_data['評價內容'].tolist()
txt = ' '.join(txt_list)
senti = Sentiment()
result = senti.sentiment_count(txt)
start = time.time() # 先在內部畫出詞云圖并保存到image文件夾 stop_words = open('哈工大停用詞表.txt','r',encoding='utf8').readlines()
stylecloud.gen_stylecloud(text=txt, collocations=True,
font_path=r'?C:WindowsFontssimkai.ttf',
icon_name='fab fa-jedi-order',size=(2000,2000),
output_name=r'img詞云圖.png',
custom_stopwords=stop_words)
end = time.time()
spend = end-start # 顯示情感正負值在網頁端 if result['pos'] > result['neg']:
st.markdown("#### 該商品的正負情感值比為{}:{},呈積極信號".format(result['pos'],result['neg'])) if result['pos'] < result['neg']:
st.markdown("#### 該商品的正負情感值比為{}:{},呈消極信號".format(result['pos'],result['neg'])) # 顯示詞云圖 st.image(r'img詞云圖.png',caption = '詞云圖')
st.text('運行時長:{} s'.format(spend))
代碼解析:
首先引入包之后的前五行,是設置這個web app的標題,為AirPods智能耳機商品評論分析系統(tǒng)。然后下面為記錄該程序的簡要信息作為副標題。同時存儲一些AirPods這款蘋果公司旗下的智能手機簡介與它的功能獨特之處。除此之外,st.sidebar()這個函數(shù)是將目標從主頁面轉到側邊欄中,在側邊欄填入需要填入的信息。
之后就是第一部分講解的加載數(shù)據(jù)、數(shù)據(jù)探索性分析,去除重復值,填充缺失值等操作。
select = st.sidebar.selectbox('選擇一款型號',df['商品標題'].unique())這句話就是將商品信息表中的去重商品標題,即AirPods三代的機型作為下拉框單選選擇的值。選擇這個值后,就可以利用pandas進行條件篩選,最后用st.dataframe()函數(shù)將這個表結構類型進行顯示。
select_status = st.sidebar.radio("可視化類型", ('表結構數(shù)據(jù)','文本挖掘'))代表的是設置單選選擇按鈕的值,即主頁面顯示哪種頁面,是表格類型數(shù)據(jù),還是文本挖掘結果:詞云圖與情感分析結果。
if語句的設定如下:根據(jù)state_data結果,抽取的數(shù)據(jù)為為AirPods三代中的一代,那么記下來主頁顯示的表格數(shù)據(jù)類型或是情感分析都是基于這一代機型的相關商品信息。接著if語句是判定select_status是表結構數(shù)據(jù)還是文本挖掘,因為在本文的初始設定中,主頁面上是只顯示兩種可視化的。
而后一個if語句時提供給文本挖掘,也即情感分析用的。在第二部分中有講到,本文時計算正負情感詞的比例。如果正面情感詞(積極情感詞匯),則運行st.markdown("#### 該商品的正負情感值比為{}:{},呈積極信號".format(result['pos'],result['neg'])),顯示積極信號。反之,為消極信號。
這里有一個time模塊引用,這個引用時計算詞云圖構建的時間,大約在30s左右。這種性能測試與評估在工作中也是經常用到,因為工作中的數(shù)據(jù)可不像本文實例中的大小一般。
詞云圖構建的代碼在第二部分也提及到,這里直接嵌入到里面即可。同時利用st.image函數(shù)進行本地圖片讀取與顯示。
除此之外,streamlit還有一個友好的點就是,可以支持寫markdown代碼,上面的文本控件大部分都是用markdown編寫,常使用markdown的讀者可以研究一波。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關鍵? 在循環(huán)神經網絡(RNN)家族中,長短期記憶網絡(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務的價值轉化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預測分析中的應用:從數(shù)據(jù)查詢到趨勢預判? ? 在數(shù)據(jù)驅動決策的時代,預測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內權威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應對策略? 長短期記憶網絡(LSTM)作為循環(huán)神經網絡(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調研數(shù)據(jù)中的深度應用? 市場調研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉日期:解鎖數(shù)據(jù)處理的關鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎 ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03