
來(lái)源:Python爬蟲與數(shù)據(jù)挖掘
作者: Python進(jìn)階者
大家好,我是Python進(jìn)階者。
大家好,我是Python進(jìn)階者,上個(gè)禮拜的時(shí)候,我的Python交流群里有個(gè)名叫程序的大佬,頭像是綠色菜狗的那位,在Python交流群里邊的人應(yīng)該都知道我說(shuō)的是哪個(gè)大佬了,他提供了一份初始淘寶數(shù)據(jù),數(shù)據(jù)乍看上去非常雜亂無(wú)章,但是經(jīng)過(guò)小小明大佬的神化處理之后,一秒就變清晰了,真是太神了,然后就有了后續(xù)的數(shù)據(jù)分詞處理和可視化等內(nèi)容了,可能群里的人平時(shí)工作太忙,沒(méi)有來(lái)得及看群消息,作為熱心的群主,這里給大家整理成一篇文章,感興趣的小伙伴,可以去實(shí)操一下,還是可以學(xué)到很多東西的。言歸正傳,一起來(lái)學(xué)習(xí)下今天的數(shù)據(jù)分析內(nèi)容吧。
1、原始數(shù)據(jù)
在未經(jīng)過(guò)處理之前的數(shù)據(jù),長(zhǎng)這樣,大家可以看看,全部存儲(chǔ)在一個(gè)單元格里邊了,看得十分的讓人難受。如下圖所示。
按照常規(guī)來(lái)說(shuō),針對(duì)上面的數(shù)據(jù),我們肯定會(huì)選擇Excel里邊的數(shù)據(jù)分列進(jìn)行處理,然后依次的去根據(jù)空格、冒號(hào)去分割,這樣可以得到一份較為清晰的數(shù)據(jù)表,誠(chéng)然,這種方法確實(shí)可行,但是小小明大佬另辟蹊徑,給大家用Python中的正則表達(dá)式來(lái)處理這個(gè)數(shù)據(jù),處理方法如下。
小小明大佬直接使用正則表達(dá)式re模塊和pandas模塊進(jìn)行處理,方法可謂巧妙,一擊即中,數(shù)據(jù)處理代碼如下。
import re import pandas as pd
result = [] with open(r"淘寶數(shù)據(jù).csv") as f: for line in f:
row = dict(re.findall("([^:t]+):([^:t]+)", line)) if row:
result.append(row)
df = pd.DataFrame(result)
df.to_excel('new_data.xlsx', encoding='utf-8')
print(df)
之后我們可以看到效果圖,如下圖所示,這下是不是感覺(jué)到清爽了很多呢?
至此,我們對(duì)原始的數(shù)據(jù)進(jìn)行了預(yù)處理,但是這還不夠,我們今天主要的目標(biāo)是對(duì)上面數(shù)據(jù)中的兩列:配料表和保質(zhì)期進(jìn)行數(shù)據(jù)分析,接下來(lái)繼續(xù)我們的數(shù)據(jù)處理和分析。
一開始的時(shí)候,程序大佬對(duì)配料表和保質(zhì)期這兩列的數(shù)據(jù)進(jìn)行處理,但是來(lái)回得到的分詞中總有一些特殊字符,如下圖所示,我們可以看到這些字符里邊有%、頓號(hào)、空格等內(nèi)容。
我們都知道,這些是我們不需要的字符,當(dāng)時(shí)我們?cè)谌豪镉懻摰臅r(shí)候,我們就想到使用停用詞去針對(duì)這些擾人的字符進(jìn)行處理,代碼如下。
# 創(chuàng)建停用詞list def stopwordslist(filepath): stopwords = [line.strip() for line in open(filepath, 'r', encoding='gbk').readlines()] return stopwords # 對(duì)句子進(jìn)行分詞 def seg_sentence(sentence): sentence_seged = jieba.cut(sentence.strip())
stopwords = stopwordslist('stop_word.txt') # 這里加載停用詞的路徑 outstr = '' for word in sentence_seged: if word not in stopwords: if word != 't':
outstr += word
outstr += " " return outstr
其中stop_word.txt是小編之前在網(wǎng)上找到的一個(gè)存放一些常用特殊字符的txt文件,這個(gè)文件內(nèi)容可以看看下圖。
如上圖所示,大概有1894個(gè)詞左右,其實(shí)在做詞頻分析的時(shí)候,使用停用詞去除特殊字符是經(jīng)常會(huì)用到的,感興趣的小伙伴可以收藏下,也許后面你會(huì)用到呢?代碼和數(shù)據(jù)我統(tǒng)一放到文末了,記得去取就行。經(jīng)過(guò)這一輪的數(shù)據(jù)處理之后,我們得到的數(shù)據(jù)就基本上沒(méi)有太多雜亂的字符了,如下圖所示。
得到這些數(shù)據(jù)之后,接下來(lái)我們需要對(duì)這些詞語(yǔ)做一些詞頻統(tǒng)計(jì),并且對(duì)其進(jìn)行可視化。如果還有想法的話,也可以直接套用詞云模板,生成漂亮的詞云圖,也未嘗不可。
關(guān)于詞頻統(tǒng)計(jì)這塊,小編這里介紹兩種方法,兩個(gè)代碼都是可以用的,條條大路通羅馬,一起來(lái)看看吧!
方法一:常規(guī)處理
這里使用的是常規(guī)處理的方法,代碼親測(cè)可用,只需要將代碼中的1.txt進(jìn)行替換成你自己的那個(gè)需要分詞統(tǒng)計(jì)的文檔即可,然后系統(tǒng)會(huì)自動(dòng)給你生成一個(gè)Excel表格和一個(gè)TXT文件,內(nèi)容都是一樣的,只不過(guò)一個(gè)是表格,一個(gè)是文本。
#!/usr/bin/env python3 # -*- coding:utf-8 -*- import sys import jieba import jieba.analyse import xlwt # 寫入Excel表的庫(kù) # reload(sys) # sys.setdefaultencoding('utf-8') if __name__ == "__main__":
wbk = xlwt.Workbook(encoding='ascii')
sheet = wbk.add_sheet("wordCount") # Excel單元格名字 word_lst = []
key_list = [] for line in open('1.txt', encoding='utf-8'): # 1.txt是需要分詞統(tǒng)計(jì)的文檔 item = line.strip('nr').split('t') # 制表格切分 # print item tags = jieba.analyse.extract_tags(item[0]) # jieba分詞 for t in tags:
word_lst.append(t)
word_dict = {} with open("wordCount_all_lyrics.txt", 'w') as wf2: # 打開文件 for item in word_lst: if item not in word_dict: # 統(tǒng)計(jì)數(shù)量 word_dict[item] = 1 else:
word_dict[item] += 1 orderList = list(word_dict.values())
orderList.sort(reverse=True) # print orderList for i in range(len(orderList)): for key in word_dict: if word_dict[key] == orderList[i]:
wf2.write(key + ' ' + str(word_dict[key]) + 'n') # 寫入txt文檔 key_list.append(key)
word_dict[key] = 0 for i in range(len(key_list)):
sheet.write(i, 1, label=orderList[i])
sheet.write(i, 0, label=key_list[i])
wbk.save('wordCount_all_lyrics.xls') # 保存為 wordCount.xls文件
方法二:使用Pandas優(yōu)化處理
這里使用Pandas方法進(jìn)行處理,代碼如下,小編也是親測(cè)有效,小伙伴們也可以去嘗試下。
def get_data(df): # 將食品添加劑這一列空的數(shù)據(jù)設(shè)置為無(wú) # print(df) df.loc[:,'食品添加劑'] = df['食品添加劑'].fillna('無(wú)')
df.loc[:,'保質(zhì)期'] = df['保質(zhì)期'].fillna('無(wú)')
df.loc[:, '配料表'] = df['配料表'].fillna('無(wú)') # 分詞并擴(kuò)展提取 names = df.配料表.apply(jieba.lcut).explode() # 過(guò)濾長(zhǎng)度小于等于1的詞并去重 df1 = names[names.apply(len) > 1].value_counts() with pd.ExcelWriter("taobao.xlsx") as writer:
df1.to_excel(writer, sheet_name='配料')
df2 = pd.read_excel('taobao.xlsx', header=None, skiprows=1, names=['column1', 'column2'])
print(df2)
上面兩個(gè)代碼都是可以用的,最后得到的表格數(shù)據(jù),如下圖所示。
從上圖我們可以看到配料表里邊的配料占比詳情,有了上述的數(shù)據(jù)之后,接下來(lái)我們就可以對(duì)其進(jìn)行可視化操作了。關(guān)于可視化的內(nèi)容,小編也給大家已經(jīng)準(zhǔn)備好了,等待下一篇原創(chuàng)文章,給大家輸出,敬請(qǐng)期待。
大家好,我是Python進(jìn)階者。本文寫到這里,基本上就告一段落了。本文基于一份雜亂的淘寶原始數(shù)據(jù),利用正則表達(dá)式re庫(kù)和Pandas數(shù)據(jù)處理對(duì)數(shù)據(jù)進(jìn)行清洗,然后通過(guò)stop_word停用詞對(duì)得到的文本進(jìn)行分詞處理,得到較為”干凈“的數(shù)據(jù),之后利用傳統(tǒng)方法和Pandas優(yōu)化處理兩種方式對(duì)數(shù)據(jù)進(jìn)行詞頻統(tǒng)計(jì),針對(duì)得到的數(shù)據(jù),下一步將利用Pyecharts庫(kù),進(jìn)行多重可視化處理,包括但不限于餅圖、柱狀圖、Table表、漏斗圖、極化圖等,通過(guò)一系列的改進(jìn)和優(yōu)化,一步步達(dá)到想要的效果,可以說(shuō)是干貨滿滿,實(shí)操性強(qiáng),親測(cè)有效。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03