dropna()
fillna()
replace()
drop_duplicates()
pip install Scikit-learn
描述 | 特点 |
---|---|
kaggle | 大数据竞争平台,800万科学家,真实数据,数据巨大 |
UCI | 收集了360个数据集,覆盖了科学、生活、经济等领域,数据量几十万 |
Scikit-learn | 数据量小,方便学习 |
DictVectorize(sparse=True)
DictVectorize.fit_transform(x)
Dictvectorize.inverse_transform(x)
Dictvectorize.get_feature_names()
Dictvectorize.transform(X)
Dictvectorize
这个类中sparse
默认参数时# @Time : 2020/5/23 0:43
# @Author : SmallJ
from sklearn.feature_extraction import DictVectorizer
# 导入的 DictVectorizer 为一个类,当我们想使用这个类里面的方法的时候,需要进行实例化
def dict_matrix():
"""
字典矩阵
:return:None
"""
# 实例化
dict_number = DictVectorizer(sparse=True)
data = [{
'city': '北京', 'temperature': 100}, {
'city': '上海', 'temperature': 60}, {
'city': '深圳', 'temperature': 30}]
result = dict_number.fit_transform(data)
print(dict_number.get_feature_names())
print(result)
print(type(result))
if __name__ == '__main__':
dict_matrix()
['city=上海', 'city=北京', 'city=深圳', 'temperature']
(0, 1) 1.0
(0, 3) 100.0
(1, 0) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0
<class 'scipy.sparse.csr.csr_matrix'>
结论 :当默认参数的时候,类型为sparse
矩阵的结果
Dictvectorizer
这个类中sparse
参数指定为False情况时# @Time : 2020/5/23 0:43
# @Author : SmallJ
from sklearn.feature_extraction import DictVectorizer
# 导入的 DictVectorizer 为一个类,当我们想使用这个类里面的方法的时候,需要进行实例化
def dict_matrix():
"""
字典矩阵
:return:None
"""
# 实例化
dict_number = DictVectorizer(sparse=False)
data = [{
'city': '北京', 'temperature': 100}, {
'city': '上海', 'temperature': 60}, {
'city': '深圳', 'temperature': 30}]
result = dict_number.fit_transform(data)
# 返回类别名称
print(dict_number.get_feature_names())
print(result)
print(type(result))
if __name__ == '__main__':
dict_matrix()
['city=上海', 'city=北京', 'city=深圳', 'temperature']
[[ 0. 1. 0. 100.]
[ 1. 0. 0. 60.]
[ 0. 0. 1. 30.]]
<class 'numpy.ndarray'>
结论 : 当参数为False时候,返回的类型为numpy.array
数据类型
# 数据源
data = [{
'city': '北京', 'temperature': 100}, {
'city': '上海', 'temperature': 60}, {
'city': '深圳', 'temperature': 30}]
# 为true数据
['city=上海', 'city=北京', 'city=深圳', 'temperature']
(0, 1) 1.0
(0, 3) 100.0
(1, 0) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0
# 为false数据
['city=上海', 'city=北京', 'city=深圳', 'temperature']
[[ 0. 1. 0. 100.]
[ 1. 0. 0. 60.]
[ 0. 0. 1. 30.]]
分析 : 先观察为true的数据,会发现第一列为位置,第二列为数据参数。然后我们观察为false的数据会发现其实我们通过get_feature_names()
返回类别名称。city="上海"指定为第一列,city="北京"为第二列以此类推。返回的数据为numpy.array()
类型数据。也就是相当于第一行数据为北京的,第二行数据为上海的,第三行数据为深圳的。
当第一行数据为北京,是怎么填充数据的呢,当city数据集指向北京,就会在第一行中寻找为北京的那一列填充为1,最后一列为temperature
就填充数值。以此类推。
sparse矩阵数据相当于就是相对应的numpy.array
位置数据
什么是one-hot编码?
One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。
编码对象
编码的对象–[“中国”, “美国”, “日本”, “美国”]
确定分类变量 – 中国 美国 日本
以上问题就相当于**,有3个样本,每个样本有3个特征,将其转化为二进制向量**表示,
one-hot 编码处理
作用:对文本数据进行特征值化,对单字母不进行分类
CountVectorize()
CountVectorize.fit_transform(x)
CountVectorize.get_feature_names()
from sklean.feature_extraction.text import CountVectorizer
def text_extract():
"""
对文本特征值操作
:return: None
"""
# 总结
# 当我们的文本特征抽取的时候发现并没有sparse这个值的参数
# 不过我们可用知道矩阵一定是使用了numpy中的方法
# toarray()
# 文本特征抽取统计的是字母出现的次数
# 会发现单个单词并不会统计。为什么呢,原因在于单个单词分类出来并不知道使用处
count = CountVectorizer()
data = ["life is short,i like python", "life is too long,i dislike python"]
result = count.fit_transform(data)
print(count.get_feature_names())
print(result.toarray())
if __name__ == '__main__':
# dict_extract()
text_extract()
# 运行结果说明
# CountVectorizer 统计的是单词出现的次数
# 将数据中对应出现的单词进行分本分类
# 分类完后并开始统计对应位置的出现次数
# 在对应的字母单词的列中进行对应的分类
# 有一次则填充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]]
# @Time : 2020/5/23 14:23
# @Author : SmallJ
from sklearn.feature_extraction.text import CountVectorizer
def text_extract():
"""
对文字进行特征抽取
:return:
"""
count = CountVectorizer()
# 当我们对中文进行特征抽取会是一个什么样的结果
# 我们会发现中文特征抽取是使用的是空格来进行
# 这不是我们想使用的结果。
data = ['人生 苦短,我用 Python', '人生 漫长,我 不同 Python']
result = count.fit_transform(data)
print(count.get_feature_names())
print(result.toarray())
if __name__ == '__main__':
text_extract()
['python', '不同', '人生', '我用', '漫长', '苦短']
[[1 0 1 1 0 1]
[1 1 1 0 1 0]]
安装
pip install jieba
使用
import jieba
# @Time : 2020/5/23 14:39
# @Author : SmallJ
"""
案例
1.今天很残酷,明天更残酷,后天很美好
2.我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去
3.如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系
"""
import jieba
from sklearn.feature_extraction.text import CountVectorizer
def cut_word():
"""
进行中文分词
:return:
"""
c1 = jieba.cut("今天很残酷,明天更残酷,后天很美好")
c2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去")
c3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系")
count1 = list(c1)
count2 = list(c2)
count3 = list(c3)
# 对数据进行处理转换为字符串格式
count1 = "".join(count1)
count2 = "".join(count2)
count3 = "".join(count3)
return count1, count2, count3
def text_extract():
"""
中文特征值化
:return: None
"""
# 实例化对象
count = CountVectorizer()
# 进行拆包
c1, c2, c3 = cut_word()
# 中文特征值化操作
data = count.fit_transform([c1, c2, c3])
# 类别名称转换
print(count.get_feature_names())
# 转换为numpy.array格式
print(data.toarray())
if __name__ == '__main__':
text_extract()
# cut_word()
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache
Loading model cost 0.610 seconds.
Prefix dict has been built successfully.
['了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系', '今天很残酷', '你就不会真正了解它', '后天很美好', '如果只用一种方式了解某样事物', '我们是在看它的过去', '我们看到的从很远星系来的光是在几百万年之前发出的', '明天更残酷', '这样当我们看到宇宙时']
[[0 1 0 1 0 0 0 1 0]
[0 0 0 0 0 1 1 0 1]
[1 0 1 0 1 0 0 0 0]]
TF-IDF : 是词频-逆向文件频率,是一种用于信息检索与文本挖掘的常用的加权技术。
TF-IDF的主要思想是:如果某个词或词语在一遍文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用分类。
TF-IDF作用:用于评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
为什么需要TF-IDF : 分类机器学习算法的重要依据
TF-IDF 的值越高代表权值越高
# @Time : 2020/5/23 23:23
# @Author : SmallJ
# TF-IDF : 词频或者逆向文件磁盘的需要使用的机器学习
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cut_word():
"""
进行中文分词
:return:
"""
c1 = jieba.cut("今天很残酷,明天更残酷,后天很美好")
c2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去")
c3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系")
count1 = list(c1)
count2 = list(c2)
count3 = list(c3)
# 对数据进行处理转换为字符串格式
count1 = "".join(count1)
count2 = "".join(count2)
count3 = "".join(count3)
return count1, count2, count3
def tf_extract():
"""
计算每个词语的权值
:return:None
"""
# 实例化对象
tf = TfidfVectorizer()
# 进行拆包
c1, c2, c3 = cut_word()
# 计算每个词的tf-idf的权值
result = tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(result.toarray())
# result.toarray() 类型为numpy.array数据类型
# result 也是为矩阵类型的数据
print(type(result))
if __name__ == '__main__':
tf_extract()
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache
Loading model cost 0.589 seconds.
Prefix dict has been built successfully.
['了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系', '今天很残酷', '你就不会真正了解它', '后天很美好', '如果只用一种方式了解某样事物', '我们是在看它的过去', '我们看到的从很远星系来的光是在几百万年之前发出的', '明天更残酷', '这样当我们看到宇宙时']
[[0. 0.57735027 0. 0.57735027 0. 0.
0. 0.57735027 0. ]
[0. 0. 0. 0. 0. 0.57735027
0.57735027 0. 0.57735027]
[0.57735027 0. 0.57735027 0. 0.57735027 0.
0. 0. 0. ]]
<class 'scipy.sparse.csr.csr_matrix'>