
CDA數據分析師 出品
作者:CDALevel Ⅰ持證人
崗位:數據分析師
行業:大數據
背景
電子商務行業在近幾年發展得極為迅猛,很多在傳統行業就業但是薪資不理想的都在網電子商務行業去轉。這種趨勢造就了越來越多老百姓使用電子商務價值下的產品,不言而喻,比如網購等行為。換句話說,大量的網購會帶來的結果就是數據量的增大。面對這種大數據,且時非結構化的數據如商品評論,怎么處理呢?怎么從中提取有用的信息呢?自然語言處理技術給出了答案,從規則提取到統計建模到如今非?;馃岬?a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度學習,都能從文本中提取到有用的商業價值,無論時為商家還是買家。本文就某電商平臺上AirPods智能耳機產品的售賣情況及相關商品信息進行情感分析與快速詞云圖搭建。情感分析也是自然語言處理中的一個方向
除了對文本進行挖掘以外,本文還欲搭建一個網頁APP。Python是目前比較流行的編程語言,利用Python搭建一個網頁APP常用的是Python結合Flask或者Django框架來貫穿前后端來搭建網頁。利用這個方法一般需要一定的前端經驗,來修改CSS、HTML、JAVASCRIPT這些文件。而對于沒有前端經驗的coder,讀者這里推薦一款友好的全程基于Python的庫streamlit,也就是本文所用到的庫。利用streamlit可以輕松快速的搭建一個網頁APP,再加入文本挖掘功能。這樣,就做出了一個小產品。下面,進入正題。
本文采用Anaconda進行Python編譯,主要涉及的Python模塊:
本章分為三部分講解:
1.數據探索性分析與商品評論文本提取
3.網頁結構設計與實現
4.功能整合與效果呈現
本文采取的數據為某寧電商平臺上的商品評論數據。數據字段有商品標題、價格、評價內容。其中,價格為近期4月份的實時價格。評價內容是按時間順序從近到遠的展現。下面為前五行的展示:
需要注意的是,上面五行顯示的是AirPods第2代的商品信息。原因是數據原本分為3張表,每張表的字段都是一樣的,總共3個,2個維度字段和1個度量字段(這個在CDA I課程中的數據結構會有提及)。因此,這份數據是3張表通過縱向合并方式對記錄進行拼接。最后生成的Index是新表生成的主鍵。
接著可以對數據進行適當的探索性分析,首先習慣性的觀察數據形狀、數據類型以及有沒有缺失值、異常值、重復值。缺失值利用pandas庫的isnull().sum()函數即可查閱。重復值利用duplicated().sum()即可。而重復由于本文探索的是商品評論文本且數據量較少,因此本文忽略不做。下面為各部分結果
數據形狀為(1020,3),這很好理解,就是1020條記錄行,3個字段。數據類型利用info()函數即可,結果如下:
上面結果解析:Non-NULL Count為各個字段的非空數值和??梢钥吹?,評價內容這個維度字段有2個空值。右邊Dtype表明三個字段都是字符串object類型。memory usage為這張上商品信息表格的占用字節空間,有24kb。這里額外提醒一下,如果一張表格有5G以上,也就是Excel軟件都較難打開時,可以換一種實現方式,使用dask庫,是一種分布式的數據處理package。
從上圖info信息中可以知道,這張商品信息表的空處有2個,也就是缺失值為2。而重復值計算得到為19個。接下來就是解決缺失值和重復值的方法,考慮到重復值多次出現會影響到后續詞頻統計的結果,本文考慮將重復值剔除。而缺失值會影響后面對評價內容分詞的步驟,因此這里選擇用空格進行替換。整段代碼如下,剛開始轉用Python的小伙伴可以牢記這段代碼,這幾乎是每次數據分析必用的。
import pandas as pd # 讀取數據 df = pd.read_excel('蘇寧易購_airpods系列.xlsx')
df.isnull().sum() # 缺失值匯總 df.duplicated().sum() # 重復值匯總 df.info() # 表格信息abstract df.dtypes #數據類型 df['評價內容'] = df['評價內容'].fillna(' ') # 空格填充 df = df.drop_duplicates() # 剔除重復值
在3個字段中,最需要提取的是評價內容,因為本文的目的是建立一個商品評論文本信息挖掘系統,功能包括情感分析、詞云圖可視化。而每個用戶ID的評價內容都是不一致的,因此,需要去做聚合運算。整合所有評價內容,同時去除停用詞,最后形成一句話,雖然這句話是不通順,但是對后面的詞頻統計沒有影響。
整合評價內容采用Python的內置函數split()完成,首先利用Pandas庫中的tolist()函數將評價內容字段的記錄變為一個列表,接著將列表轉換為字符串,這里需要用到split()函數完成。以空格字符串作為連接符,連接列表里的每一個元素。最終形成的效果截取一部分如下:
之后就是去除停用詞,停用詞無論是中文NLP任務還是英文NLP任務,都需要用到這一步。這一步不僅可以去除大部分噪音,同時也能節省計算資源,更加高效。去除停用詞的算法其實很簡單,就是遍歷需要做統計挖掘的文本,如果文本中有單詞是屬于指定的停用詞的,就剔除。顯然,這里就需要停用詞庫,停用詞庫有很多,有百度的停用詞表、有哈工大停用詞表、有四川大學機器智能實驗室停用表等。本文選擇哈工大停用詞表,因為此表相較于其他表有對電子商務領域較好的單詞。讀者若是想做一個理想的項目,可以考慮自建電子商務領域的停用詞表。
去除停用詞具體的代碼及做法將在情感分析處講解。
上一部分我們提取了商品信息表格中的每個ID的商品評價內容,同時對其整合進行去停用詞,得到了一份干凈的txt數據集。接下來就可以進行文本挖掘的事情了。首先是商品評論詞云圖構建。
在Python中詞云圖構建的庫有很多,常用的就是Wordcloud標準的詞云圖可視化庫,還有pyecharts的詞云圖API。前者在構建詞云圖時,新手使用者往往會出現一大堆問題,比如pip安裝失敗、編碼錯誤、字體使用錯誤等,除此之外,其使用難度其實也是蠻大的。而后者則是常用于瀏覽器上的交互式圖表,其以代碼量,封裝性高所出名,聽起來是比較切合本文這個主題的,但是本文卻沒有考慮,原因是后面所用到的網頁開發庫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()對象來初始化畫圖對象(類)。
除此之外,本文還設置了時間間隔,因為眾說周知詞云圖的刻畫需要較長時間,如果文本較長,一分鐘也有可能。所以加上時間的概念,對使用者進行數據調入也會友好一些。
這樣,我們就構建好了詞云圖,將在下一部分網頁端應用,這里以Airpods第二代舉例,先上效果圖
詞云圖構建完以后就是輪到情感分析,對干凈的商品評論信息做情感分析是非常有用的。對商家而言可以清楚知道買方使用此產品的感覺與評價,以便后面優化產品,而對想要買此產品的人更加有借鑒。本文將對AirPods商品評論進行情感詞正負情感詞統計。
利用到的庫是cnsenti,這個庫是中文情感分析庫。在NLP任務領域中,大多庫與例子都是英文的,因此這個中文庫對于經常對中文文本進行挖掘的人是個好消息!
首先先介紹下這個庫把吧,cnsenti模塊中分為兩大部分,一個是本文用到的情感分析對象Sentiment,另一個是沒有用到的情緒分析對象Emotion。情感分析使用的詞典是知網Hownet,支持自定義。情緒分析使用的是大連理工大學情感本體庫,可以計算文本中的七大情緒詞分布。由于本文只使用情感分析對象類,因此感興趣的讀者可以自行學習情緒分析類。
對AirPods商品評論信息進行情感分析,在默認條件下,只用2句代碼即可。是的,就是那么方便!
senti = Sentiment() result = senti.sentiment_count(txt)
txt為我們的目標文本,首先需要調用情感分析類Sentiment(),如果不設置任何參數,即表明以默認條件初始化。接著使用sentiment_count()函數計算正負情感詞統計,以AirPods第二代舉例,實現結果如下:
上面結果說明:總共單詞有18128個,句子有625句。積極的情感詞語有2221,消極的情感詞語有322個。
在情感分析類中,除了sentiment_count()函數,還有sentiment_calculate()函數,有什么區別呢?這個可更加精準的計算文本的情感信息。相比于sentiment_count只統計文本正負情感詞個數,sentiment_calculate還考慮了情感詞前后是否強度副詞去修飾,情感詞前后是否有否定詞的情感語義反轉作用。同樣以AirPods產品舉例,使用這個函數,得到的結果為
可以看到,識別出來的積極詞匯應該是使用了加權的手段將頻率升維到數值。
接下來就是網頁結構設計,做網頁首先就是構造出一個思路圖,確定功能是什么,有哪些控件,控件擺放位置如何。對于功能,本文的主題是商品評論信息文本挖掘,先對商品評論初始文本進行整合于去停用詞。而后利用stylecloud庫進行詞云圖構建,最后進行情感分析。除此之外,作者還希望完成一下功能:
確定功能就是以上這些了。通過上面的功能,本文可以確定有哪寫控件:
按照常規的網頁構建,控件位置的空間擺設是一定要設計的。但是對于新手來說,接下來講的超級web app建設streamlit則不需要考慮了。
streamlit的官方(https://streamlit.io/)簡介如下:
以最快的方式建立于分享數據app,將數據顯示在可分享的web app上,以python編程語言實現,無需前端經驗。Streamlit是第一個專門針對機器學習和數據科學團隊的應用程序開發框架,它是開發自定義機器學習工具的最快的方法,可以幫助機器學習工程師快速開發用戶交互工具。同時它是基于tornado框架,封裝了大量互動組件,同時也支持大量表格、圖表、數據表等對象的渲染,并且支持柵格化響應式布局。Streamlit的默認渲染語言就是markdown;除此以外,Streamlit也支持html文本的渲染,這意味著你也可以將任何html代碼嵌入到streamlit應用里。
讀者可能會疑惑做網站,以為前后端都用Python+streamlit是一件普通的事情。其實不然,在streamlit建立之前,web creator with python一般采用的是前端使用html、css、JavaScript,后端使用python、Flask、Django。如果不用Python,則是前后端都使用D3。
因此,本文所使用的Python+streamlit前后端貫穿創建web app對新手是多么的友好!
接著,先展示streamlit的快速使用方法:
首先pip install streamlit安裝這個庫,而后在命令行輸入streamlit hello。這時會彈出一個窗口,這個是內置的打開幫助文檔,里面有各種實例,下面為一部分截圖:
首先是,記錄著幫助信息的頁面,里面存放著各種連接
而后在下拉框選擇plotting demo,點擊后顯示如下:
這是一個加載了記錄條的畫圖程序,可以是交互式的。
綜上,就可以發現,運行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智能耳機商品評論分析系統')
st.markdown('這個數據分析系統將以可視化形式挖掘某電商公司下蘋果三種AirPods型號的商品評論信息')
st.markdown('Apple AirPods是蘋果品牌的無線耳機。目前有市場上銷售主流是3中機型:**AirPods2代**、**Airpods pro**、**AirPods三代**。這款耳機的主要特點是:耳機內置紅外傳感器能夠自動識別耳機是否在耳朵當中進行自動播放,通過雙擊可以控制Siri控制。帶上耳機自動播放音樂,波束的麥克風效果更好,雙擊耳機開啟Siri,充電盒支持長時間續航,連接非常簡單,只需要打開就可以讓iPhone自動識別。')
st.sidebar.title('數據分析系統控件')
st.sidebar.markdown('選擇一款型號/可視化類型:')
DATA_URL=('蘇寧易購_airpods系列.xlsx') # @st.cache(persist=True) #如果只有一份數據,就可以用這個持久化,加快效率 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] # 創建單項按鈕選項值 select_status = st.sidebar.radio("可視化類型", ('表結構數據','文本挖掘')) if select_status == '表結構數據':
st.text('該電商公司近期售賣產品的相關數據(以表結構化顯示)')
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智能耳機商品評論分析系統。然后下面為記錄該程序的簡要信息作為副標題。同時存儲一些AirPods這款蘋果公司旗下的智能手機簡介與它的功能獨特之處。除此之外,st.sidebar()這個函數是將目標從主頁面轉到側邊欄中,在側邊欄填入需要填入的信息。
之后就是第一部分講解的加載數據、數據探索性分析,去除重復值,填充缺失值等操作。
select = st.sidebar.selectbox('選擇一款型號',df['商品標題'].unique())這句話就是將商品信息表中的去重商品標題,即AirPods三代的機型作為下拉框單選選擇的值。選擇這個值后,就可以利用pandas進行條件篩選,最后用st.dataframe()函數將這個表結構類型進行顯示。
select_status = st.sidebar.radio("可視化類型", ('表結構數據','文本挖掘'))代表的是設置單選選擇按鈕的值,即主頁面顯示哪種頁面,是表格類型數據,還是文本挖掘結果:詞云圖與情感分析結果。
if語句的設定如下:根據state_data結果,抽取的數據為為AirPods三代中的一代,那么記下來主頁顯示的表格數據類型或是情感分析都是基于這一代機型的相關商品信息。接著if語句是判定select_status是表結構數據還是文本挖掘,因為在本文的初始設定中,主頁面上是只顯示兩種可視化的。
而后一個if語句時提供給文本挖掘,也即情感分析用的。在第二部分中有講到,本文時計算正負情感詞的比例。如果正面情感詞(積極情感詞匯),則運行st.markdown("#### 該商品的正負情感值比為{}:{},呈積極信號".format(result['pos'],result['neg'])),顯示積極信號。反之,為消極信號。
這里有一個time模塊引用,這個引用時計算詞云圖構建的時間,大約在30s左右。這種性能測試與評估在工作中也是經常用到,因為工作中的數據可不像本文實例中的大小一般。
詞云圖構建的代碼在第二部分也提及到,這里直接嵌入到里面即可。同時利用st.image函數進行本地圖片讀取與顯示。
除此之外,streamlit還有一個友好的點就是,可以支持寫markdown代碼,上面的文本控件大部分都是用markdown編寫,常使用markdown的讀者可以研究一波。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《劉靜:10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda ...
2025-04-23