最近想用python對(duì)數(shù)據(jù)集進(jìn)行數(shù)據(jù)預(yù)處理,想要分析系統(tǒng)調(diào)用之間的關(guān)系。初步想法是利用n-gram方法,因此查詢(xún)到了python的sklearn中有一個(gè)CountVectorizer方法可以使用,在這里介紹一下這個(gè)函數(shù)的使用方法,以及其輸出的相關(guān)含義。
0x01 輸入及輸出
from sklearn.feature_extraction.text import CountVectorizer
# from sklearn.feature_extraction.text import TfidfTransformer
import pandas as pd
data = ['I love you', 'you are my angle are']
vecl = CountVectorizer(ngram_range=(1, 1), binary=False, token_pattern='\w{1,}')
xl = vecl.fit_transform(data)
print(vecl.get_feature_names()) # 特征名稱(chēng)
print(vecl.vocabulary_) # 特征在列表中的索引位置
X = vecl.fit_transform(data)
print(X)
df = pd.DataFrame(X.toarray(), columns=vecl.get_feature_names()) # to DataFrame
print(df.head())
首先調(diào)用CountVectorizer方法,其中的幾個(gè)參數(shù)意義如下:
ngram_range:(1,1)表示1-gram (2,2)表示2-gram? ?(1,2)表示1-gram + 2-gram
binary:FALSE表示不將文本進(jìn)行二進(jìn)制表示
token_pattern:通過(guò)正則表達(dá)式來(lái)確定哪些數(shù)據(jù)被過(guò)濾掉,默認(rèn)情況下單個(gè)英文字母會(huì)被過(guò)濾掉,代碼中的\w{1,}可以避免這種情況
fit_transform(data) 用來(lái)對(duì)數(shù)據(jù)進(jìn)行處理,表示成n-gram的形式
get_feature_names()來(lái)獲取都獲取了哪特征
vocabulary_用來(lái)表示特征在get_feature_names()中的列表中的位置
調(diào)用pandas庫(kù)主要用于將特征以及生成的稀疏矩陣用表的形式展現(xiàn)出來(lái)
以下為輸出結(jié)果:
圖中第一行為獲取的特征
第二行為各個(gè)特征的索引號(hào),例如‘i’:2 表示字符i在特征表中的索引為2
第三部分為稀疏矩陣 正常的輸出矩陣如下面的一部分所示, (0,2) 1? 表示在全部矩陣的第0行第2列有數(shù)據(jù)1 在稀疏矩陣中沒(méi)有表示的索引全部為0
第四部分為全部矩陣 最左側(cè)的一列表示文本的索引號(hào),0表示第一個(gè)文本 'I love you'? ?1表示'you are my angle are'
再看第二列 angle在0行值為0,在1行值為1 表示angle在一個(gè)文本中沒(méi)有出現(xiàn),在第二個(gè)文本中出現(xiàn)了一次
同理 第二列表示are在第一個(gè)文本中沒(méi)有出現(xiàn),在第二個(gè)文本中出現(xiàn)了兩次。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
