- sklearn.feature_extraction
字典特征抽取
作用:对字典数据进行特征值化
类:sklearn.feature_extraction.DictVectorizer
DictVectorizer 语法
参数
-
dtype : callable, optional- 特征值的类型。传递给Numpy数组/scipy。稀疏矩阵构造函数作为dtype参数。
-
separator : string, optional- 隔符字符串用于构造用于一次热编码的新特性。
-
sparse : boolean, optional.- 转换是否应该生成scipy。稀疏矩阵。默认True。
- sort : boolean, optional.
-
是否应该在拟合时对feature_names_和vocabulary . _进行排序。默认True。
-
属性
- vocabulary
_ : dict 将特征名映射到特征索引的字典 。
- feature_names_ : list
- 长度为n_features的列表,其中包含特性名称(例如,“f=ham”和“f=spam”)。
方法
fit (X[, y]) | 学习特性名称列表——>索引映射。 |
fit_transform (X[, y]) | 学习特性名称列表——>索引映射和转换X。 |
get_feature_names () | 返回按索引顺序排列的特性名称列表。 |
get_params ([deep]) | 获取此估计器的参数。 |
inverse_transform (X[, dict_type]) | 将数组或稀疏矩阵X转换回特征映射 |
restrict (support[, indices]) | 将特性限制为使用特性选择支持的特性 |
set_params (**params) | 设置此估计器的参数。 |
transform (X) | 转换特征->值dicts到数组或稀疏矩阵。 |
流程
- 实例化类DictVectorizer
- 调用fit_transform方法输入数据并转换 注意返回格式
示例代码
from sklearn.feature_extraction import DictVectorizer
def dictvec(data):
'''
字典数据抽取
:return: result
'''
# 实例化
dict = DictVectorizer()
# dict = DictVectorizer(sparse=False) # 设置sparse为False
# 调用fit_transform
result = dict.fit_transform(data)
# 输出类别名称
print(dict.get_feature_names())
return result
if __name__ == '__main__':
# 数据
data = [
{'city': 'BeiJing','temperature':100},
{'city': 'ShangHai', 'temperature': 60},
{'city': 'ShenZhen', 'temperature': 30},
]
# 打印结果
print(dictvec(data))
# 运行结果
['city=BeiJing', 'city=ShangHai', 'city=ShenZhen', 'temperature']
(0, 0) 1.0
(0, 3) 100.0
(1, 1) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0
# 设置sparse为False的结果
[[ 1. 0. 0. 100.]
[ 0. 1. 0. 60.]
[ 0. 0. 1. 30.]]
文本特征抽取
作用:对文本数据进行特征值化
类:sklearn.feature_extraction.text.CountVectorizer
CountVectorizer语法

流程
- 实例化类CountVectorizer
- 调用fit_transform方法输入数据并转换 注意返回格式,利用toarray()进行sparse矩阵转换array数组
示例代码
from sklearn.feature_extraction.text import CountVectorizer
def countvec(data):
'''
对文本进行特征值化
'''
cv = CountVectorizer()
result = cv.fit_transform(data)
# print(cv.get_feature_names()) # 输出类别名称
# print(result.toarray()) # 转换array数组
return result
if __name__ == '__main__':
# 数据
data = [
"life is short,I like python",
"life is too long,I dislike python"
]
print(countvec(data))
# 运行结果
(0, 5) 1
(0, 3) 1
(0, 6) 1
(0, 1) 1
(0, 2) 1
(1, 0) 1
(1, 4) 1
(1, 7) 1
(1, 5) 1
(1, 1) 1
(1, 2) 1
# 类别名称及array数组结果
''' 步骤分析:
1.统计所有文章当中所有的词,重复的只当做一次 [词的列表]
2.对每篇文章,在词的列表里面进行统计每个词的出现次数
'''
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
[[0 1 1 1 0 1 1 0]
[1 1 1 0 1 1 0 1]]
对中文文本特征抽取
- 使用jieba库对中文进行分词处理
- 将分词后的数据转换为列表,再将列表转换成字符串以空格分开 ‘ ‘.join()
- 将字符串当作fit_transform的输入值
代码示例
from sklearn.feature_extraction.text import CountVectorizer
import jieba
def cutword():
con1 = jieba.cut("这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。")
con2 = jieba.cut("这个环境下,系统Python环境不受任何影响。")
con3 = jieba.cut("完全可以针对每个应用创建独立的Python运行环境,这样就可以对每个应用的Python环境进行隔离。")
# 转换成列表
content1 = list(con1)
content2 = list(con2)
content3 = list(con3)
# 把列表转换成字符串
c1 = ' '.join(content1)
c2 = ' '.join(content2)
c3 = ' '.join(content3)
return c1,c2,c3
def countvec():
'''
中文特征值化
:return:None
'''
c1,c2,c3 = cutword()
print(c1,c2,c3)
cv = CountVectorizer()
result = cv.fit_transform([c1,c2,c3])
print(cv.get_feature_names())
print(result.toarray())
return None
if __name__ == '__main__':
countvec()
# 运行结果
这样 , 我们 就 得到 了 一个 不带 任何 第三方 包 的 “ 干净 ” 的 Python 运行 环境 。 这个 环境 下 , 系统 Python 环境 不 受 任何 影响 。 完全 可以 针对 每个 应用 创建 独立 的 Python 运行 环境 , 这样 就 可以 对 每个 应用 的 Python 环境 进行 隔离 。
['python', '一个', '不带', '任何', '创建', '可以', '完全', '干净', '应用', '影响', '得到', '我们', '每个', '独立', '环境', '第三方', '系统', '运行', '这个', '这样', '进行', '针对', '隔离']
[[1 1 1 1 0 0 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0]
[1 0 0 1 0 0 0 0 0 1 0 0 0 0 2 0 1 0 1 0 0 0 0]
[2 0 0 0 1 2 1 0 2 0 0 0 2 1 2 0 0 1 0 1 1 1 1]]