前言
最近在學(xué)習(xí)python數(shù)據(jù)統(tǒng)計(jì)相關(guān)的知識(shí),基于‘實(shí)踐出真知’以及‘知之者不如好之者,好之者不如樂(lè)之者’兩大亙古不變的理論撒穷,特撰寫本文。
統(tǒng)計(jì)結(jié)果
為了滿足部分同學(xué)強(qiáng)烈的好奇心芯义,小碼哥先將部分統(tǒng)計(jì)結(jié)果公布出來(lái)趁舀。若想了解詳細(xì)操作流程且有一定python基礎(chǔ)的同學(xué)可以繼續(xù)閱讀。
由上圖我們可以知道蛇捌,西游記中出現(xiàn)最多的字是"道" 出現(xiàn)了11078次
數(shù)據(jù)分析
數(shù)據(jù)獲取
本次小碼哥使用的數(shù)據(jù)是問(wèn)度娘要來(lái)的抚恒,不想麻煩的同學(xué)可以直接用小碼哥的數(shù)據(jù)(點(diǎn)擊下載)
數(shù)據(jù)讀入
數(shù)據(jù)下載到本地后,用python內(nèi)置函數(shù)open() 將數(shù)據(jù)讀入
fr = open('數(shù)據(jù)文件路徑','r')
characters = [] #存儲(chǔ)所有漢字
stat = {} #存儲(chǔ)每個(gè)漢字出現(xiàn)的次數(shù)
數(shù)據(jù)處理
由于原數(shù)據(jù)中含有大量標(biāo)點(diǎn)符號(hào)络拌、空白俭驮、換行等,為了不影響分析結(jié)果我們應(yīng)該先把這些雜質(zhì)剔除春贸。
for line in fr:
# 去掉每一行兩邊的空白
line = line.strip()
# 如果為空行則跳過(guò)該輪循環(huán)
if len(line) == 0:
continue
# 將文本轉(zhuǎn)為unicode混萝,便于處理漢字
line = unicode(line)
# 遍歷該行的每一個(gè)字
for x in xrange(0, len(line)):
# 去掉標(biāo)點(diǎn)符號(hào)和空白符
if line[x] in [' ', '\t', '\n', '。', '萍恕,', '(', ')', '(', ')', ':', '□', '逸嘀?', '!', '《', '》', '允粤、', ' ',']', '崭倘;', '“', '”', '……']:
continue
# 尚未記錄在characters中
if not line[x] in characters:
characters.append(line[x])
# 尚未記錄在stat中
if not stat.has_key(line[x]):
stat[line[x]] = 0
# 漢字出現(xiàn)次數(shù)加1
stat[line[x]] += 1
數(shù)據(jù)輸出
為了便于觀察,小碼哥將結(jié)果輸出為一個(gè).csv 文件(可導(dǎo)入Excel)
# lambda生成一個(gè)臨時(shí)函數(shù)
# d表示字典的每一對(duì)鍵值對(duì)类垫,d[0]為key司光,d[1]為value
# reverse為True表示降序排序
stat = sorted(stat.items(), key=lambda d:d[1], reverse=True)
fw = open('result.csv', 'w')
for item in stat:
# 進(jìn)行字符串拼接之前,需要將int轉(zhuǎn)為str
fw.write(item[0] + ',' + str(item[1]) + '\n')
后記
- 鑒于有熱心同學(xué)在評(píng)論里建議小碼哥生成詞云悉患,小碼哥很愉快的采納了這個(gè)建議残家,后續(xù)將上傳。
- 閱讀完本文售躁,你有什么感受或建議都可以寫在評(píng)論里讓小碼哥知道坞淮,小碼哥看到后會(huì)第一時(shí)間回復(fù)。
- 若大家覺(jué)得本篇文章還不錯(cuò)陪捷,麻煩在右下角給小碼哥點(diǎn)個(gè)喜歡回窘,鼓勵(lì)小碼哥繼續(xù)創(chuàng)作!