1. 程式人生 > >Python資料探勘-文字挖掘

Python資料探勘-文字挖掘

文字挖掘概要

搞什麼的?

  • 從大量文字資料中,抽取出有價值的知識,並且利用這些知識更好的組織資訊的過程。

目的是什麼?

  • 把文字資訊轉化為人們可利用的知識。

舉例來說,下面的圖表利用文字挖掘技術對庫克iphoneX 釋出會的內容進行分析,得出此次釋出會報告中的幾個常青詞彙、詞頻的趨勢變化情況。

(一)語料庫(Corpus)

在python中,如何根據以往的文件檔案搭建一個語料庫?

1.什麼是語料庫

語料庫是我們要分析的所有文件的集合。

在日常工作中我們對文章的管理,先是一篇篇的文章不斷的積累,我們存了大量的文章之後,會對文章資訊進行一些歸類的工作,一般體現於建立不同的資料夾來儲存不同類別的文章。

同樣的,我們把我們需要分析的文字檔案,讀取記憶體變數中,然後在記憶體變數中使用不同的資料結構,對這些文字檔案進行儲存,以便進行下一步的分析。

這個記憶體變數就是語料庫

2.語料庫構建實操

我們通過一個案例來了解語料庫構建的過程。
這裡,jacky為了分享,整理了一份iphone8釋出後,主流新聞網站評論的語料資料。
資料分析-jacky
資料分析- jacky

我存放iphone 語義資料夾的路
file:///Users/apple/Downloads/Iphone8
如果是windows系統要替換成響應的路徑。

1) 如何把語料資料作為語料庫匯入到記憶體中

# -*- coding:utf-8 -*-
import
os import os.path import codecs filePaths=[] fileContents=[] for root,dirs,files in os.walk('Users/apple/Documents/Iphone8'): for name in files: filePath=os.path.join(root,name) filePaths.append(filePath) f=codecs.open(filePath,'r','utf-8') fileContent=f.read() f.close() fileContents.append(fileContent) import
pandas corpos=pandas.DataFrame({ 'filePath':filePaths, 'fileContent':fileContents })

上述程式碼註解:

把一個資料夾中,包括巢狀資料夾的全路徑,讀入到一個記憶體變數中,我們定義為filePaths陣列變數,接著使用os中walk方法,傳入這個目錄作為引數,就可以遍歷該檔案中的所有檔案了
for root,dirs,files in os.walk中root為檔案目錄,dirs為root目錄下的所有子目錄,root目錄下的所有檔案,我們命名為files,然後進行遍歷。
為了拿到root目錄下的所有檔案,我們再次便利所有的檔案(程式碼:for name in files:)把它追加到filePaths變數中去即可。
os.path.join是拼接檔案路徑的方法,因為檔案路徑在windows,mac,linux中的寫法是不同的,使用這個方法可以解決在不同系統中使用檔案路徑要使用不同方法的問題。
最後組建資料框pandas.DataFrame

我們可以print(corpos)
@資料分析-jacky

(二)中文分詞(Chinese Word Segmentation)

1.中文分詞

英文中單詞是以空格作為自然分界符,而中文只是字句和段,能夠通過明顯的分界符簡單化簡,唯獨詞沒有一個明顯的分界符

  • 將一個漢字序列切分成一個一個單獨的詞

    • 我是資料分析部落的發起人 —-> 我/是/資料/分析/部落/的/發起人(@資料分析-jacky)

2.停用詞(Stop Words)

對文章進行分詞後,會產生大量的分詞,這些分詞中並不是每個詞都有用的,在我們進行資料處理時,要過濾掉某些字或詞

  • 氾濫的詞:如web,網站等;

  • 語氣助詞、副詞、介詞、連線詞等:如的、地、得

3.分詞模組-jieba分詞包

分詞包有很多,jieba分詞包是效率高,最簡單的分詞包

1)jieba基本使用方法-cut方法

import jieba
for w in jieba.cut('我是資料分析-jacky'):
    print(w)

@資料分析-jacky

下面是“分詞屆”最奇葩,也是最津津樂道的分詞難題:

工信處女幹事
每月經過下屬科室都要親口交代
24口交換機等技術性器件的安裝工作

import jieba
for w in jieba.cut('''
工信處女幹事 
每月經過下屬科室都要親口交代 
24口交換機等技術性器件的安裝工作

'''):
    print(w)

@資料分析-jacky

jieba在沒有使用自定義分詞的情況下,只使用預設詞庫,效果還是非常好的。

2)匯入詞庫

雖然jieba包已經有預設詞庫,一般場景使用不會出現什麼問題,但是我們要是把分詞的功能用於專業的場景,會出現什麼狀況呢?

# -*- coding:utf-8 -*-
import jieba
seg_list = jieba.cut('天馬流星拳和廬山升龍霸哪個更牛逼呢?')
for w in seg_list:
    print(w)

資料分析- jacky

import jieba
jieba.add_word('天馬流星拳')
jieba.add_word('廬山升龍霸')
jieba.add_word('牛逼')
seg_list = jieba.cut('天馬流星拳和廬山升龍霸哪個更牛逼呢?')
for w in seg_list:
    print(w)

@資料分析-jacky

  • 我們增加了自定義分詞,明顯增加了分詞效果
  • 但是我們要處理的分詞很多,使用一個個匯入的方法就顯得非常不高效了,我們可以使用load_userdict方法一次匯入使用者自定義詞庫中
jieba.load_userdict('路徑/聖鬥士招數.txt')

掌握了對單個字串進行分詞後,我們就可以對大量的文字進行分詞了,用load_userdict一次性匯入自定義詞庫中

3) 與語料庫結合的實操案例

# -*- coding:utf-8 -*-
#搭建預料庫
import os
import os.path
import codecs
filePaths=[]
fileContents=[]
for root,dirs,files in os.walk('Iphone8'):
    for name in files:
        filePath=os.path.join(root,name)
        filePaths.append(filePath)
        f=codecs.open(filePath,'r','GB2312')
        fileContent=f.read()
        f.close()
        fileContents.append(fileContent)

import pandas
corpos=pandas.DataFrame({
    'filePath':filePaths,
    'fileContent':fileContents
})

#每個分詞後面都要跟著一個資訊,那就是這個分詞來源是哪篇文章
#因此,我們的結果除了分詞,還需要指明分詞的出處,以便進行後續的分析
import jieba
segments=[]
filePaths=[]
#接下來,遍歷所有文章,使用資料框的方法,我們獲取到語料庫的每行資料,這樣遍歷得到的行是一個字典,
#列名index作為key,於是我們可以通過列名,使用字典的值的獲取方法,獲取到檔案路徑filePath,和檔案內容fileContent

for index,row in corpos.iterrows():
    filePath=row['filePath']
    fileContent=row['fileContent']
    #接著呼叫cut方法,對檔案內容進行分詞
    segs=jieba.cut(fileContent)
    #接著遍歷每個分詞,和分詞對應的檔案路徑一起,把它加到兩列中
    for seg in segs:
        segments.append(seg)
        filePaths.append(filePath)

#最後我們把得到的結果存在一個數據框中
segmentDataFrame=pandas.DataFrame({
    'segment':segments,
    'filePath':filePaths
})

print(segmentDataFrame)

@資料分析-jacky

(三)文字挖掘的入口-詞頻統計

1.詞頻

  • 某個詞在該文件中出現的次數

  • 用詞頻這個指標來做應用的時候,並不會給定特定的詞,而是計算機先對文章進行分詞,然後對所得到的所有分詞進行詞頻統計,然後看看哪些詞在文章中經常出現。

2.如何使用Python進行詞頻統計

接著說上面Iphone8釋出會語料庫的案例,我們已經把語料庫搭建好,對語料庫進行了分詞,上面的案例我們得到了一列為分詞(segment),一列為分詞所屬檔案(filePath)的資料框,接下來我們進行詞頻統計就非常簡單了

我們使用分組統計函式,直接在分詞變數資料框後呼叫groupby方法,使用分詞欄位進行分組,然後聚合函式使用numpy.size函式,也就是對分組欄位做一個計數,最後重新設定索引[‘segment’],在根據計算進行倒序排列,得到的結果就是我們詞頻統計的結果了

import numpy
#進行詞頻統計
segStat=segmentDataFrame.groupby(
    by='segment'
)['segment'].agg({'計數':numpy.size}).reset_index().sort(
    columns=['計數'],
    ascending=False
)
  • 這裡要特別注意的是:降序計數呼叫的方法sort函式,需要新版本的pandas庫,懶得升新版本不降序也不影響後續的處理,這裡小夥伴們可以自己處理。

接下來就是過濾停用詞:

#首先判斷分詞列裡面是否包含這些停用詞
stopwords=pandas.read_csv(
"路徑.txt",
encoding='utf-8',
index_col=False
)
#用isin方法,包含停用詞就過濾詞,用~符號取反
fSegStat=segStat[
~segStat.segment.isin(stopwords.stopword)
]

(四)生詞詞雲

#匯入WordCloud和matplotlib包
from wordcloud import WordCloud
import matplotlib.pyplot as plt

#生成一個matplot物件,傳入一個字型位置的路徑和背景顏色即可
wordcloud=WordCloud(
        font_path='字型路徑\simhei.ttf',
        background_color='black'
)
#WordCloud方法接受一個字典結構的輸入,我們前面整理出來的詞頻統計結果是資料框的形式,因此需要轉換,轉換的方法,首先把分詞設定為資料框的索引,然後在呼叫一個to_dict()的方法,就可以轉換為字典的機構
words=fSegStat.set_index('segment').to_dict()

#接著呼叫fit_words方法來呼叫我們的詞頻
wordcloud.fit_words(words['計數'])

#繪圖
plt.imshow(wordcloud)
plt.close()

(五)完整案例程式碼展示

# -*- coding:utf-8 -*-
import os
import os.path
import codecs
filePaths=[]
fileContents=[]
for root,dirs,files in os.walk('Users/apple/Documents/Iphone8'):
    for name in files:
        filePath=os.path.join(root,name)
        filePaths.append(filePath)
        f=codecs.open(filePath,'r','utf-8')
        fileContent=f.read()
        f.close()
        fileContents.append(fileContent)

import pandas
corpos=pandas.DataFrame({
    'filePath':filePaths,
    'fileContent':fileContents
})

import jieba
segments=[]
filePaths=[]
for index,row in corpos.iterrows():
    filePath=row['filePath']
    fileContent=row['fileContent']
    segs=jieba.cut(fileContent)
    for seg in segs:
        segments.append(seg)
        filePaths.append(filePath)
segmentDataFrame=pandas.DataFrame({
    'segment':segments,
    'filePath':filePaths
})

import numpy
segStat=segmentDataFrame.groupby(
    by='segment'
)['segment'].agg({'計數':numpy.size}).reset_index().sort(
    columns=['計數'],
    ascending=False
)

stopwords=pandas.read_csv(
"路徑.txt",
encoding='utf-8',
index_col=False
)
fSegStat=segStat[
~segStat.segment.isin(stopwords.stopword)
]

from wordcloud import WordCloud
import matplotlib.pyplot as plt
wordcloud=WordCloud(
        font_path='字型路徑\simhei.ttf',
        background_color='black'
)
words=fSegStat.set_index('segment').to_dict()
wordcloud.fit_words(words['計數'])
plt.imshow(wordcloud)
plt.close()

最後,我們來看看效果吧
資料分析-jacky

相關推薦

Python資料文字挖掘

文字挖掘概要 搞什麼的? 從大量文字資料中,抽取出有價值的知識,並且利用這些知識更好的組織資訊的過程。 目的是什麼? 把文字資訊轉化為人們可利用的知識。 舉例來說,下面的圖表利用文字挖掘技術對庫克iphoneX 釋出會的內容進行分析,得出此次釋

python資料實戰筆記——文字挖掘(1):語料庫構建

什麼是文字挖掘 ?   文字挖掘是抽取有效、新穎、有用、可理解的、散佈在文字檔案中的有價值知識,並且利用這些知識更好地組織資訊的過程。 一、搭建語料庫 語料庫:要進行文字分析的所有文件的集合。 需要用到的模組:os、os.path、codecs、pandas 程

python資料實戰筆記——文字挖掘(4):詞雲繪製

概念: 詞雲:詞雲是指對文字中詞頻較高的分詞,給予視覺上的突出,形成“關鍵詞渲染”,從而過濾掉大量的文字資訊,使瀏覽者一眼掃過就可以領略文字的主旨。 需要用到的包:wordcloud、matplotlib wordcloud包下載地址:http://www.l

Python資料學習筆記(1)文字挖掘入門

一、準備階段: (1)開啟cmd,pip安裝jieba(pip install jieba) (2)開啟python安裝目錄的Lib->site-packages->jieba,開啟dict.txt,可以看到這是jieba模組的詞典:          每

python資料實戰筆記——文字分析(6):關鍵詞提取

緊接上篇的文件,這節學習關鍵字的提取,關鍵詞——keyword,是人們快速瞭解文件內容,把握主題的重要內容。 #匯入需要的模組 import os import codecs import pandas import jieba import jieba.ana

Python資料——文字分析

一、一、定義:文字挖掘:從大量文字資料中抽取出有價值的知識,並且利用這些知識重新組織資訊的過程。二、語料庫(Corpus)語料庫是我們要分析的所有文件的集合。import os import os.path filePaths = [] #定義一個數組變數 #再用OS.w

Python資料課程】八.關聯規則挖掘及Apriori實現購物推薦

        這篇文章主要介紹三個知識點,也是我《資料探勘與分析》課程講課的內容。        1.關聯規則挖掘概念及實現過程;        2.Apriori演算法挖掘頻繁項集;        3.Python實現關聯規則挖掘及置信度、支援度計算。一. 關聯規則挖掘概

python資料課程】二十一.樸素貝葉斯分類器詳解及中文文字輿情分析

這是《Python資料探勘課程》系列文章,也是我上課內容及書籍中的一個案例。本文主要講述樸素貝葉斯分類演算法並實現中文資料集的輿情分析案例,希望這篇文章對大家有所幫助,提供些思路。內容包括:1.樸素貝葉斯數學原理知識    2.naive_bayes用法及簡單案例    3.

分享《Python資料入門與實踐》高清中文版+高清英文版+原始碼

下載:https://pan.baidu.com/s/1J7DOGrjoF7HnaSZ8LvFh_A更多資料分享:http://blog.51cto.com/3215120 《Python資料探勘入門與實踐》高清中文版+高清英文版+原始碼 高清中文版PDF,251頁,帶目錄和書籤,能夠複製貼上;高清英文版

python資料分析微信朋友圈

參考https://blog.csdn.net/qinyuanpei/article/details/79360703,基於python3.6實現微信朋友圈性別、地區、個性簽名、頭像四個維度的分析。 我的GitHub專案地址https://github.com/sanciyuan/wechat_

[Python資料]第3章、資料探索

1、缺失值處理:刪除、插補、不處理 2、離群點分析:簡單統計量分析、3σ原則(資料服從正態分佈)、箱型圖(最好用) 離群點(異常值)定義為小於QL-1.5IQR或大於Qu+1.5IQR import pandas as pd catering_sale = '../data/catering

Python資料入門與實戰:第一章

程式碼來源於:https://github.com/hLvMxM/Learning_Data_Mining_with_Python/blob/master/Chapter 1/ch1_affinity.ipynb 其中註釋是在自己學習中加上去的, 便於初學者看懂 分析文字為:affinity

Python資料過程

資料探勘的建模過程 定義挖掘目標 明確系統完成後想要達成什麼樣的效果。 我們需要分析應用領域,瞭解相關領域的情況,熟悉背景知識,弄清使用者需求。 資料取樣 從業務系統中抽取一個與挖掘目標相關的樣本資料子集。 抽取資料的標準,一是相關性,二是可靠性,三是有效性。 衡量取樣

Python資料的——資料探索詳解

資料質量分析: 資料質量的分析是資料分析資料中有效資料準備過程中的一個重要環節。是資料預處理的前提重要的環節。也是為資料探勘的分析的有效性和準確性的基礎。 資料質量的分析主要是原始資料中是否存在骯資料。髒資料包括是:缺失值 不一致的資料 重複資料或者是特殊的符號 資料特徵分析:

python資料——資料預處理

在資料探勘中 海量的資料存在大量的不完整(有缺失值)、不一致 有異常的資料,嚴重影響到資料的挖掘的建模過程執行的效率。甚至導致挖掘的資料結果偏差甚大。資料探勘預處理的過程中主要包括:資料清洗,資料整合,資料變換,資料規約。 處理過程如圖: 4.1 資料的清洗主要是對原始資料集中的無

Python資料的基礎理解

資料探勘是從大量的資料中找到隱含的、先前未知的、對決策有潛在價值的關係和模式和趨勢。並且利用這些知識和規則建立用於決策和支援的模型。資料探勘有助於企業發現業務的趨勢,提供決策性的支援的方法。 資料探勘 的任務有:資料探索,資料預處理,分類和預測 聚類和分析 時序預測,關聯規則挖掘 和偏差檢測

Python資料學習筆記(12)淘寶圖片爬蟲實戰

       所謂圖片爬蟲,即是從網際網路中自動把對方伺服器上的圖片爬下來的爬蟲程式。 一、圖片爬蟲前的網頁連結分析 1.首先開啟淘寶首頁,在搜尋框中輸入關鍵詞,如“神舟”,在搜尋結果介面中點選下一頁,分別開啟第一頁,第二頁,第三頁的搜尋結果,並記下每一頁結果的URL至記

Python資料學習——親和性分析

最近了解了一些Python資料探勘方面的內容,主要學習了《Python資料探勘入門與實踐》這本書的內容,在這裡對書中的內容以及我遇到的一些問題進行整理。 資料探勘旨在讓計算機根據已有的資料作出決策。 資料探勘的第一步一般是建立資料集,資料集主要包括: (1)樣本:表示真實世界中的物體

Python資料-NLP

NLTK Python上著名的⾃然語⾔處理庫 自帶語料庫,詞性分類庫 自帶分類,分詞,等等功能 強⼤的社群支援 還有N多的簡單版wrapper nltk的安裝十分便捷,只需要pip就可以。相對Python2版本來說,NLTK更支援Python3版本。  pip i

資料01---文字分析(jieba分詞和詞雲繪製)

一、定義: 文字挖掘:從大量文字資料中抽取出有價值的知識,並且利用這些知識重新組織資訊的過程。 二、語料庫(Corpus) 語料庫是我們要分析的所有文件的集合。 import os import os.path filePaths = [] #定義一個數組變數 #再用