欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python分析文本數(shù)據(jù)的詞頻并詞云圖可視化

 更新時間:2023年09月21日 11:51:12   作者:艾派森  
這篇文章主要給大家介紹了關于如何使用Python分析文本數(shù)據(jù)的詞頻并詞云圖可視化,文章中有詳細的圖文介紹和代碼示例,對我們的學習或工作有一定的幫助,需要的朋友可以參考下

一、Python分析文本數(shù)據(jù)的優(yōu)點

廣泛的庫和工具支持:Python擁有豐富的文本分析庫,如NLTK(自然語言工具包)、spaCy、TextBlob、Gensim等,這些庫提供了各種文本處理和分析功能,使得文本分析任務更容易實現(xiàn)。

易于學習和使用:Python是一門容易學習的編程語言,因此即使是初學者也可以快速上手文本分析任務。Python的簡潔語法和清晰的代碼結構有助于更好地理解和維護分析代碼。

社區(qū)支持:Python擁有龐大的開發(fā)者社區(qū),這意味著可以輕松找到答案、解決問題,并獲得有關文本分析的支持和建議。

跨平臺性:Python是一種跨平臺的編程語言,可以在Windows、Linux和Mac等操作系統(tǒng)上運行,因此非常適合各種不同環(huán)境中的文本分析。

數(shù)據(jù)處理能力:Python擁有強大的數(shù)據(jù)處理和操作庫,如NumPy和Pandas,這些庫使得數(shù)據(jù)清洗、轉換和分析變得更加容易。

可視化能力:Python中的庫,如Matplotlib、Seaborn和Plotly,可以用于生成各種數(shù)據(jù)可視化,幫助用戶更好地理解和展示文本數(shù)據(jù)的分析結果。

機器學習和深度學習支持:Python在機器學習和深度學習方面表現(xiàn)出色,因此可以使用各種機器學習和深度學習模型來進行文本分類、情感分析、命名實體識別等任務。

開源和免費:Python是一種開源的編程語言,可以免費使用,這意味著無需額外費用就可以進行文本分析。

豐富的文檔和教程:有大量的在線文檔、教程和示例代碼可用于幫助用戶學習和實踐文本分析。

二、Python分析文本常用的第三方庫

NLTK(Natural Language Toolkit):NLTK是一款廣泛用于自然語言處理的庫,提供了文本分詞、詞性標注、命名實體識別、語法分析等功能,以及大量的語料庫和數(shù)據(jù)集。

spaCy:spaCy是一個高度優(yōu)化的自然語言處理庫,具有出色的性能和功能,支持分詞、命名實體識別、詞性標注等任務,并支持多語言。

TextBlob:TextBlob是一個簡單而易于使用的庫,用于執(zhí)行各種文本分析任務,包括情感分析、文本分類、詞性標注等。

Gensim:Gensim是一個用于主題建模和文本向量化的庫,特別適用于處理大型文本語料庫和文本文檔集合。

Scikit-learn:雖然Scikit-learn主要用于機器學習,但它也提供了文本特征提取、文本分類和聚類等文本分析的工具和算法。

Word2Vec:Word2Vec是一個用于詞嵌入(word embedding)的庫,可以將詞匯轉換為向量表示,以便進行文本分析和自然語言處理任務。

Pattern:Pattern是一個用于文本挖掘和自然語言處理的庫,支持詞性標注、情感分析、信息提取等任務。

Spacy-transformers:這是spaCy的一個擴展庫,使其能夠使用預訓練的Transformer模型(如BERT、GPT-2)進行文本分析。

TfidfVectorizer:TfidfVectorizer是Scikit-learn的一部分,用于將文本數(shù)據(jù)轉換為TF-IDF(Term Frequency-Inverse Document Frequency)特征表示,常用于文本分類和信息檢索。

NLTK和TextBlob的情感分析模塊:這些庫提供了用于情感分析的功能,可用于判斷文本的情感傾向,如積極、消極或中性。

Matplotlib、Seaborn和Plotly:這些庫用于可視化文本數(shù)據(jù)分析結果,可以生成各種圖表和圖形,幫助更好地理解文本數(shù)據(jù)。

三、詞頻分析

上次批量提取了上市公司主要業(yè)務信息,要分析這些文本數(shù)據(jù),就需要做文本詞頻分析。由于中文不同于英文,詞是由一個一個漢字組成的,而英文的詞與詞之間本身就有空格,所以中文的分詞需要單獨的庫才能夠?qū)崿F(xiàn),常用的是`jieba`。若沒安裝,直接運行`cmd`,然后輸入`pip install jieba`安裝即可。然后導入`jieba`庫。我們以“華特氣體”公司的主要業(yè)務進行分詞,分詞前如下圖所示。通過`open`打開華特氣體文本文件,使用讀模式`r`,為避免編碼錯誤,指定編碼類型為`utf-8`。讀取出來是一個大字符串,將這個大字符串存入`txt`。然后調(diào)用`jieba`進行分詞。`lcut`的意思是切分詞后再轉換成列表("l"即表示`list`的首字母)。將切分后的詞存入列表`words`。

import jieba
txt = open("華特氣體.txt", "r", encoding="utf-8").read()
words = jieba.lcut(txt)
words

結果如上,可見基本是按照我們的漢字使用習慣來區(qū)分詞的,不能組成詞的字則是按單獨一個字符串存放的。然后我們就需要將詞和對應出現(xiàn)的次數(shù)統(tǒng)計出來。先新建一個字典`wordsDict`用于儲存詞及其出現(xiàn)的次數(shù)。對于單個的字或字符不是我們想要的,所以加了一個`if`語句將其排除在外。`continue`的作用是,`if`后面的條件滿足時,讓程序回到`for`循環(huán),而不執(zhí)行`continue`下面的語句。也就是列表中的元素只有一個字符的時候,就馬上跳到下一個而不執(zhí)行任何操作。只有當元素不止一個字符的時候,才執(zhí)行`else`語句,即將詞及其出現(xiàn)的次數(shù)加入字典。此處用`setdefault`給詞的出現(xiàn)初始值設置為0,每重復出現(xiàn)一次,自動加1。然后我們根據(jù)此出現(xiàn)的次數(shù),降序排序,并查看前20個詞的情況。

wordsDict = {} #新建字典用于儲存詞及詞頻
for word in words:
    if len(word) == 1: #單個的字符不作為詞放入字典
        continue
    else:
        wordsDict.setdefault(word, 0) #設置詞的初始出現(xiàn)次數(shù)為0
        wordsDict[word] +=1 #對于重復出現(xiàn)的詞,每出現(xiàn)一次,次數(shù)增加1
wordsDict_seq = sorted(wordsDict.items(),key=lambda x:x[1], reverse=True) #按字典的值降序排序
wordsDict_seq[:15] 

可以看到,有些詞并不是我們想要的,比如“公司”、“行業(yè)”、“000”。因此需要把這些意義不大的詞刪除。先定義一個儲存要排除的詞的列表`stopWords`,將想排除的詞放進去,一般是放出現(xiàn)次數(shù)較多,但意義不大的詞,可根據(jù)實際需要調(diào)整。然后遍歷這個字典,在檢查這些詞是否在目標字典`wordsDict`中,如果在,就將字典中這個詞對應的數(shù)據(jù)刪除。 

stopWords = ["公司","行業(yè)","000","用于","情況","方面","一種","要求","對于","進行","一般","212","實現(xiàn)","處理","通過","投入","隨著"]
for word in stopWords:
    if word in wordsDict:
        del wordsDict[word] #刪除對應的詞
wordsDict_seq = sorted(wordsDict.items(),key=lambda x:x[1], reverse=True) #按字典的值降序排序
wordsDict_seq[:15] 

然后將篩選后的數(shù)據(jù)轉換成DataFrame,并增加列名“詞”和“次數(shù)”,然后導出為Excel文件。

df = pd.DataFrame(wordsDict_seq,columns=['詞','次數(shù)'])
df.to_excel("華特氣體-詞頻.xlsx",index = False) #存為Excel時去掉index索引列
df.head(10)

以上,搞定了一個文件的詞頻收集,那批量操作呢?請看下面分解。

import os
path='主要業(yè)務'  #文件所在文件夾
files = [path+"\\"+i for i in os.listdir(path)] #獲取文件夾下的文件名,并拼接完整路徑
files

以上,先獲取到所有待分析文件的路徑。然后逐個進行分析。稍微修改一下上面的程序,很快分析完成。結果如下。

import jieba
import pandas as pd
for file in files:
    txt = open(file, "r", encoding="utf-8").read()
    words = jieba.lcut(txt)
    wordsDict = {} #新建字典用于儲存詞及詞頻
    for word in words:
        if len(word) == 1: #單個的字符不作為詞放入字典
            continue
        else:
            wordsDict.setdefault(word, 0) #設置詞的初始出現(xiàn)次數(shù)為0
            wordsDict[word] +=1 #對于重復出現(xiàn)的詞,每出現(xiàn)一次,次數(shù)增加1
    stopWords = ["2019","不斷","持續(xù)","主要","企業(yè)","產(chǎn)品","業(yè)務","公司","行業(yè)","000","用于","情況","方面","一種","要求","對于","進行","一般","212","實現(xiàn)","處理","通過","投入","隨著"]
    for word in stopWords:
        if word in wordsDict:
            del wordsDict[word] #刪除對應的詞
    wordsDict_seq = sorted(wordsDict.items(),key=lambda x:x[1], reverse=True) #按字典的值降序排序
    df = pd.DataFrame(wordsDict_seq,columns=['詞','次數(shù)'])
    df.to_excel("詞頻//{}.xlsx".format(file.split("\\")[1][:-4]),index = False) #存為Excel時去掉index索引列

四、詞云圖分析

如果要將上面做好的詞頻分析可視化,“詞云圖”是一個很好的選擇。它的原理是,將詞頻高的詞顯示得相對更大一些。而且可以自定義背景圖,讓詞云顯示成個性化的形狀。今天我們就來將上次獲取的10家上市公司的“主要業(yè)務”詞頻文件批量生成詞云圖,這樣一看詞云圖就大致了解這家公司的主要業(yè)務是什么了,放在PPT里展示也顯得高大上。首先,我們導入需要用到庫。若顯示導入不成功,則需要用`pip install + 庫名`進行安裝。

import numpy as np # numpy數(shù)據(jù)處理庫
import wordcloud # 詞云庫
from PIL import Image # 圖像處理庫,用于讀取背景圖片
import matplotlib.pyplot as plt # 圖像展示庫,以便在notebook中顯示圖片
from openpyxl import load_workbook #讀取詞頻Excel文件
import os #獲取詞頻Excel文件路徑

然后獲取所有的Excel詞頻表路徑,以便后續(xù)逐一讀取,并傳入詞云庫生成詞云圖。再定義詞頻背景圖,`np.array(Image.open())`打開圖片后轉為數(shù)組,存入`maskImage`變量。需要注意詞頻背景圖中想要的形狀的背景需要是白色的,不然無法得到想要的詞云圖形狀。比如如下背景圖片,左邊的圖片因為猴子的背景不是白色,做出的詞云圖會占滿整個圖片,即是一個矩形的詞云圖;右邊的圖片中,猴子的背景是白色的,做出的詞云圖看起來就是一只猴子的形狀。

然后用`for`循環(huán)遍歷所有待處理的Excel文件,逐個打開,提取其中的詞和詞頻,存入字典`wordFreq`。然后通過`wordcloud.WordCloud()`定義詞云樣式。這個函數(shù)有很多參數(shù),具體如下。我們只需要關注常用的幾個即可,其它可作為了解。

wordcloud.WordCloud(font_path=None, width=400, height=200, margin=2, ranks_only=None, prefer_horizontal=0.9, mask=None, scale=1, color_func=None, max_words=200, min_font_size=4, stopwords=None, random_state=None, background_color='black', max_font_size=None, font_step=1, mode='RGB', relative_scaling='auto', regexp=None, collocations=True, colormap=None, normalize_plurals=True, contour_width=0, contour_color='black', repeat=False, 'include_numbers=False', 'min_word_length=0', 'collocation_threshold=30')

`font_path`:字體路徑。字體存在`C:\Windows\Fonts`目錄,在想要的字體上點右鍵,選擇“屬性”可查看其名稱,然后連同路徑復制,賦給font_path即可。比如本例使用的黑體。需要注意的是,若是中文詞云,需要選中文字體。

`width,height`:畫布的寬度和高度,單位為像素。若沒設置`mask`值,才會使用此默認值400*200。
`margin`:詞間距。
`ranks_only`:文檔未說明。
`prefer_horizontal`:詞語橫排顯示的概率(默認為90%,則豎排顯示概率為10%)
`mask`:用于設定繪制模板,需要是一個`nd-array`(多維數(shù)組),所以在用`Image.open()`讀取圖片后,需要用`np.array`轉換成數(shù)組。另外`mask`參數(shù)有設定的話,畫布的大小會由詞頻背景圖的大小決定。這個經(jīng)常使用,因為我們更傾向于自定義模板。
`scale`:比例尺,用于放大畫布的尺寸。一般使用默認值。
`color_func`:顏色函數(shù),一般不用。
`max_words`:詞云圖中最多顯示詞的字數(shù),設定一個值,可讓那些出現(xiàn)次數(shù)極少的詞不顯示出來。
`min_font_size`:字號最小值。
`stopwords`:設置不想顯示的詞。
`random_state`:文檔未說明。
`background_color`:詞云圖背景色,默認為黑色。可根據(jù)需要調(diào)整。
`max_font_size`:字號最大值。
`font_step`:字體的步長,一般使用默認。大于1的時候可提升運算速度,但匹配較差。
`mode`:當設置為"RGBA" 且`background_color`設置為"None"時可產(chǎn)生透明背景。
`relative_scaling`:詞頻對字體大小的影響度,一般使用默認。
`regexp`:正則表達式分割輸入的字符。一般是先處理好才給到wordcloud,所以基本不用。
`collocations`:是否包含兩個詞的搭配,若使用了`generate_from_frequencies`方法則忽略此參數(shù)。一般不用。
`colormap`:每個詞對應的顏色,若設置了`color_func`則忽略此參數(shù)。
`normalize_plurals`:是否移除英文復數(shù)單詞末尾的s ,比如可將word和words視同為一個詞,并將詞頻算到word頭上。如果使用了`generate_from_frequencies`方法則忽略此參數(shù)。
`contour_width`:如果`mask`有設置,且`contour_width`>0,將會繪制`mask`輪廓。
`contour_color`:`mask`輪廓的顏色,默認為黑色。
`repeat`:當詞不足以滿足設定的`max_words`時,是否重復詞或短語以使詞云圖上的詞數(shù)量達到`max_words`
`include_numbers`:是否將數(shù)字作為詞。
`min_word_length`:設置一個詞包含的最少字母數(shù)量。
`collocation_threshold`:界定英文中的`bigrams`,對于中文不適用。

此例中,我們調(diào)用`wordcloud`時,設定了字體為“黑體”,使用了背景圖為繪圖模板,設置了最多顯示詞數(shù)為500,字號最大為100。然后使用`generate_from_frequencies()`從已有詞頻數(shù)據(jù)的字典中生成詞云圖。然后將詞云圖按公司名保存到指定路徑(“詞云圖”文件夾)。最后用`plt.imshow()`在notebook中顯示詞云圖。結果如下。

#將存好的Excel詞頻表讀取成字典
path='詞頻'  #文件所在文件夾
files = [path+"\\"+i for i in os.listdir(path)] #獲取文件夾下的文件名,并拼接完整路徑
maskImage = np.array(Image.open('background.png')) # 定義詞頻背景圖
for file in files:
    #將詞頻Excel文件讀取為字典
    wb = load_workbook(file)
    ws = wb.active
    wordFreq = {}
    for i in range(2,ws.max_row+1):
        word = ws["A"+str(i)].value
        freq = ws["B"+str(i)].value
        wordFreq[word] = freq    
    #定義詞云樣式
    wc = wordcloud.WordCloud(
        font_path='C:/Windows/Fonts/simhei.ttf', # 設置字體
        mask= maskImage, # 設置背景圖
        max_words=500, # 最多顯示詞數(shù)
        max_font_size=100) # 字號最大值
    #生成詞云圖
    wc.generate_from_frequencies(wordFreq) # 從字典生成詞云
    #保存圖片到指定文件夾
    wc.to_file("詞云圖\\{}.png".format(file.split("\\")[1][:4]))
    #在notebook中顯示詞云圖
    plt.imshow(wc) # 顯示詞云
    plt.axis('off') # 關閉坐標軸
    plt.show() # 顯示圖像

以上就是使用Python分析文本數(shù)據(jù)的詞頻并詞云圖可視化的詳細內(nèi)容,更多關于Python分析文本數(shù)據(jù)的資料請關注腳本之家其它相關文章!

相關文章

  • pytorch建立mobilenetV3-ssd網(wǎng)絡并進行訓練與預測方式

    pytorch建立mobilenetV3-ssd網(wǎng)絡并進行訓練與預測方式

    這篇文章主要介紹了pytorch建立mobilenetV3-ssd網(wǎng)絡并進行訓練與預測方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用AJAX和Django獲取數(shù)據(jù)的方法實例

    使用AJAX和Django獲取數(shù)據(jù)的方法實例

    這篇文章主要給大家介紹了關于使用AJAX和Django獲取數(shù)據(jù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 基于Django的樂觀鎖與悲觀鎖解決訂單并發(fā)問題詳解

    基于Django的樂觀鎖與悲觀鎖解決訂單并發(fā)問題詳解

    這篇文章主要介紹了基于Django的樂觀鎖與悲觀鎖解決訂單并發(fā)問題詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • 解決Python pandas df 寫入excel 出現(xiàn)的問題

    解決Python pandas df 寫入excel 出現(xiàn)的問題

    今天小編就為大家分享一篇解決Python pandas df 寫入excel 出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 讓Django支持Sql Server作后端數(shù)據(jù)庫的方法

    讓Django支持Sql Server作后端數(shù)據(jù)庫的方法

    今天小編就為大家分享一篇讓Django支持Sql Server作后端數(shù)據(jù)庫的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python pandas 時間日期的處理實現(xiàn)

    python pandas 時間日期的處理實現(xiàn)

    這篇文章主要介紹了python pandas 時間日期的處理實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python利用flask操作Redis的方法詳解

    Python利用flask操作Redis的方法詳解

    這篇文章主要為大家詳細介紹了Python如何利用flask操作Redis,文中的示例代碼講解詳細,對我們學習Python有一定的幫助,需要的可以參考一下
    2023-02-02
  • Python 的迭代器與zip詳解

    Python 的迭代器與zip詳解

    本篇文章主要介紹Python 的迭代器與zip,可迭代對象的相關概念,有需要的小伙伴可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • PyTorch零基礎入門之構建模型基礎

    PyTorch零基礎入門之構建模型基礎

    PyTorch是一個開源的Python機器學習庫,基于Torch,用于自然語言處理等應用程序,它是一個可續(xù)計算包,提供兩個高級功能:1、具有強大的GPU加速的張量計算(如NumPy)。2、包含自動求導系統(tǒng)的深度神經(jīng)網(wǎng)絡
    2021-10-10
  • python實現(xiàn)商品進銷存管理系統(tǒng)

    python實現(xiàn)商品進銷存管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)商品進銷存管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評論