
作者:Python進(jìn)階者
來源:Python爬蟲與數(shù)據(jù)挖掘
前幾天有個(gè)叫【小明】的粉絲在問了一道關(guān)于Python處理文本可視化+語(yǔ)義分析的問題。
他要構(gòu)建語(yǔ)料庫(kù),目前通過Python網(wǎng)絡(luò)爬蟲抓到的數(shù)據(jù)存在一個(gè)csv文件里邊,現(xiàn)在要把數(shù)據(jù)放進(jìn)txt里,表示不會(huì),然后還有后面的詞云可視化,分詞,語(yǔ)義分析等,都不太會(huì)。
內(nèi)容稍微有點(diǎn)多,大體思路如下,先將csv中的文本取出,之后使用停用詞做分詞處理,再做詞云圖,之后做情感分析。
1、將csv文件中的文本逐行取出,存新的txt文件,這里運(yùn)行代碼《讀取csv文件中文本并存txt文檔.py》進(jìn)行實(shí)現(xiàn),得到文件《職位表述文本.txt》
2、運(yùn)行代碼《使用停用詞獲取最后的文本內(nèi)容.py》,得到使用停用詞獲取最后的文本內(nèi)容,生成文件《職位表述文本分詞后_outputs.txt》
3、運(yùn)行代碼《指定txt詞云圖.py》,可以得到詞云圖;
4、運(yùn)行代碼《jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔.py》,得到《wordCount_all_lyrics.xls》和《分詞結(jié)果.txt》文件,將《分詞結(jié)果.txt》中的統(tǒng)計(jì)值可以去除,生成《情感分析用詞.txt》,給第五步情感分析做準(zhǔn)備
5、運(yùn)行代碼《情感分析.py》,得到情感分析的統(tǒng)計(jì)值,取平均值可以大致確認(rèn)情感是正還是負(fù)。
1.將csv文件中的文本逐行取出,存新的txt文件
這里運(yùn)行代碼《讀取csv文件中文本并存txt文檔.py》進(jìn)行實(shí)現(xiàn),得到文件《職位表述文本.txt》,代碼如下。
# coding: utf-8
import pandas as pd
df = pd.read_csv('./職位描述.csv', encoding='gbk')
# print(df.head())
for text in df['Job_Description']:
# print(text)
if text is not None:
with open('職位表述文本.txt', mode='a', encoding='utf-8') as file:
file.write(str(text))
print('寫入完成')
2.使用停用詞獲取最后的文本內(nèi)容
運(yùn)行代碼《使用停用詞獲取最后的文本內(nèi)容.py》,得到使用停用詞獲取最后的文本內(nèi)容,生成文件《職位表述文本分詞后_outputs.txt》,代碼如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import jieba
# jieba.load_userdict('userdict.txt')
# 創(chuàng)建停用詞list
def stopwordslist(filepath):
stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').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
inputs = open('職位表述文本.txt', 'r', encoding='utf-8')
outputs = open('職位表述文本分詞后_outputs.txt', 'w', encoding='utf-8')
for line in inputs:
line_seg = seg_sentence(line) # 這里的返回值是字符串
outputs.write(line_seg + 'n')
outputs.close()
inputs.close()
關(guān)鍵節(jié)點(diǎn),都有相應(yīng)的注釋,你只需要替換對(duì)應(yīng)的txt文件即可,如果有遇到編碼問題,將utf-8改為gbk即可解決。
3.制作詞云圖
運(yùn)行代碼《指定txt詞云圖.py》,可以得到詞云圖,代碼如下:
from wordcloud import WordCloud
import jieba
import numpy
import PIL.Image as Image
def cut(text):
wordlist_jieba=jieba.cut(text)
space_wordlist=" ".join(wordlist_jieba)
return space_wordlist
with open(r"C:UserspdcfiDesktopxiaoming職位表述文本.txt" ,encoding="utf-8")as file:
text=file.read()
text=cut(text)
mask_pic=numpy.array(Image.open(r"C:UserspdcfiDesktopxiaomingpython.png"))
wordcloud = WordCloud(font_path=r"C:/Windows/Fonts/simfang.ttf",
collocations=False,
max_words= 100,
min_font_size=10,
max_font_size=500,
mask=mask_pic).generate(text)
image=wordcloud.to_image()
# image.show()
wordcloud.to_file('詞云圖.png') # 把詞云保存下來
如果想用你自己的圖片,只需要替換原始圖片即可。這里使用Python底圖做演示,得到的效果如下:
4.分詞統(tǒng)計(jì)
運(yùn)行代碼《jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔.py》,得到《wordCount_all_lyrics.xls》和《分詞結(jié)果.txt》文件,將《分詞結(jié)果.txt》中的統(tǒng)計(jì)值可以去除,生成《情感分析用詞.txt》,給第五步情感分析做準(zhǔn)備,代碼如下:
#!/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('職位表述文本.txt', encoding='utf-8'): # 需要分詞統(tǒng)計(jì)的原始目標(biāo)文檔
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("分詞結(jié)果.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文件
得到的txt和excel文件如下所示:
5.情感分析的統(tǒng)計(jì)值
運(yùn)行代碼《情感分析.py》,得到情感分析的統(tǒng)計(jì)值,取平均值可以大致確認(rèn)情感是正還是負(fù),代碼如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from snownlp import SnowNLP
# 積極/消極
# print(s.sentiments) # 0.9769551298267365 positive的概率
def get_word():
with open("情感分析用詞.txt", encoding='utf-8') as f:
line = f.readline()
word_list = []
while line:
line = f.readline()
word_list.append(line.strip('rn'))
f.close()
return word_list
def get_sentiment(word):
text = u'{}'.format(word)
s = SnowNLP(text)
print(s.sentiments)
if __name__ == '__main__':
words = get_word()
for word in words:
get_sentiment(word)
# text = u'''
# 也許
# '''
# s = SnowNLP(text)
# print(s.sentiments)
# with open('lyric_sentiments.txt', 'a', encoding='utf-8') as fp:
# fp.write(str(s.sentiments)+'n')
# print('happy end')
基于NLP語(yǔ)義分析,程序運(yùn)行之后,得到的情感得分值如下圖所示:
將得數(shù)取平均值,一般滿足0.5分以上,說明情感是積極的,這里經(jīng)過統(tǒng)計(jì)之后,發(fā)現(xiàn)整體是積極的。
我是Python進(jìn)階者。本文基于粉絲提問,針對(duì)一次文本處理,手把手教你對(duì)抓取的文本進(jìn)行分詞、詞頻統(tǒng)計(jì)、詞云可視化和情感分析,算是完成了一個(gè)小項(xiàng)目了。下次再遇到類似這種問題或者小的課堂作業(yè),不妨拿本項(xiàng)目練練手,說不定有妙用噢,拿個(gè)高分不在話下!
數(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