最近想用python對數據集進行數據預處理,想要分析系統調用之間的關系。初步想法是利用n-gram方法,因此查詢到了python的sklearn中有一個CountVectorizer方法可以使用,在這里介紹一下這個函數的使用方法,以及其輸出的相關含義。
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()) # 特征名稱
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())
首先調用CountVectorizer方法,其中的幾個參數意義如下:
ngram_range:(1,1)表示1-gram (2,2)表示2-gram? ?(1,2)表示1-gram + 2-gram
binary:FALSE表示不將文本進行二進制表示
token_pattern:通過正則表達式來確定哪些數據被過濾掉,默認情況下單個英文字母會被過濾掉,代碼中的\w{1,}可以避免這種情況
fit_transform(data) 用來對數據進行處理,表示成n-gram的形式
get_feature_names()來獲取都獲取了哪特征
vocabulary_用來表示特征在get_feature_names()中的列表中的位置
調用pandas庫主要用于將特征以及生成的稀疏矩陣用表的形式展現出來
以下為輸出結果:
圖中第一行為獲取的特征
第二行為各個特征的索引號,例如‘i’:2 表示字符i在特征表中的索引為2
第三部分為稀疏矩陣 正常的輸出矩陣如下面的一部分所示, (0,2) 1? 表示在全部矩陣的第0行第2列有數據1 在稀疏矩陣中沒有表示的索引全部為0
第四部分為全部矩陣 最左側的一列表示文本的索引號,0表示第一個文本 'I love you'? ?1表示'you are my angle are'
再看第二列 angle在0行值為0,在1行值為1 表示angle在一個文本中沒有出現,在第二個文本中出現了一次
同理 第二列表示are在第一個文本中沒有出現,在第二個文本中出現了兩次。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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