字典特征提取
python
def dict_demo():
"""
字典特征提取
:return:
"""
data = [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]
# data = [{'city':['北京','上海','深圳']},{'temperature':["100","60","30"]}]
from sklearn.feature_extraction import DictVectorizer
# 1、实例化一个转换器类
transfer = DictVectorizer(sparse=False) # sparse=False表示不用稀疏矩阵存储,稀疏矩阵存储的好处是节省内存,但是不方便观察,所以一般不用
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print(f'转换后的数据:{data_new}')
print(f'特征名字:{transfer.get_feature_names_out()}') # ['city=上海' 'city=北京' 'city=深圳' 'temperature']
return None
结果显示
注意:如果特征中存在非数值类型数据,需要转换成字典然后使用one-hot编码
文本特征提取
python
def text_demo():
"""
文本特征提取
:return:
"""
data = ["life is short,i like python","life is too long,i dislike python"]
from sklearn.feature_extraction.text import CountVectorizer
# 1、实例化一个转换器类
transfer = CountVectorizer()
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print(f'转换后的数据:{data_new.toarray()}') # toarray()将稀疏矩阵转换成数组
print(f'特征名字:{transfer.get_feature_names_out()}')
return None
结果显示
中文文本特征抽取
python
def chinese_demo():
"""
中文文本特征抽取
:return:
"""
data = ["我 爱 北京 天安门","天安门 上 太阳 升"]
from sklearn.feature_extraction.text import CountVectorizer
# 1、实例化一个转换器类
transfer = CountVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print(f'转换后的数据:{data_new.toarray()}') # toarray()将稀疏矩阵转换成数组
print(f'特征名字:{transfer.get_feature_names_out()}')
return None
结果
中文文本抽取,自动分词
python
# 分词函数
import jieba
def cut_word(text):
text = " ".join(list(jieba.cut(text)))
return text
def chinese_demo2():
"""
中文文本特征抽取,自动分词
:return:
"""
data = ["今天很残酷,明天更残酷,后天很美好,但绝对大多数是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用了一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相关联。"]
# 1、分词
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
# 2、特征抽取
from sklearn.feature_extraction.text import CountVectorizer
# 1、实例化一个转换器类
transfer = CountVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词
# 2、调用fit_transform
data_final = transfer.fit_transform(data_new)
print(f'转换后的数据:{data_final.toarray()}') # toarray()将稀疏矩阵转换成数组
print(f'特征名字:{transfer.get_feature_names_out()}')
结果
TF-IDF特征抽取
python
def tf_idf_demo():
"""
tf-idf特征抽取
:return:
"""
data = ["今天很残酷,明天更残酷,后天很美好,但绝对大多数是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用了一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相关联。"]
# 1、分词
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
# 2、特征抽取
from sklearn.feature_extraction.text import TfidfVectorizer
# 1、实例化一个转换器类
transfer = TfidfVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词
# 2、调用fit_transform
data_final = transfer.fit_transform(data_new)
print(f'转换后的数据:{data_final.toarray()}') # toarray()将稀疏矩阵转换成数组
print(f'特征名字:{transfer.get_feature_names_out()}')
结果
归一化
data.txt
python
def guiyi_demo():
"""
归一化
:return:
"""
import pandas as pd
# 读取数据
data = pd.read_csv("./data.txt")
# print(data)
data = data.iloc[:,:3]
# print(data)
# 归一化(针对特征值)
from sklearn.preprocessing import MinMaxScaler
# 1、实例化一个转换器类
transfer = MinMaxScaler(feature_range=(0,1)) # feature_range表示归一化的范围
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print(f'转换后的数据:{data_new}')
结果
标准化
python
def biaozhun_demo():
"""
标准化
:return:
"""
import pandas as pd
data = pd.read_csv("./data.txt")
data = data.iloc[:,:3]
# 标准化
from sklearn.preprocessing import StandardScaler
# 1、实例化一个转换器类
transfer = StandardScaler()
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print(f'转换后的数据:{data_new}')
结果
低方差特征过滤
python
def varis_demo():
"""
过滤低方差特征
:return:
"""
import pandas as pd
data = pd.read_csv("./data.txt")
data = data.iloc[:,1:-2]
# 过滤低方差特征
from sklearn.feature_selection import VarianceThreshold
# 1、实例化一个转换器类
transfer = VarianceThreshold(threshold=0.0) # threshold表示方差的阈值
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print(f'转换后的数据:{data_new}')
结果
相关系数法
python
def xiangguan_demo():
"""
相关系数法
:return:
"""
import pandas as pd
data = pd.read_csv("./data.txt")
data = data.iloc[:,1:-2]
# 相关系数法,皮尔逊相关系数
from scipy.stats import pearsonr
# 1、实例化一个转换器类
r = pearsonr(data['pe_ratio'],data['pb_ratio'])
# 2、求出相关系数
print(f'皮尔逊相关系数:{r}')
# 处理方法
# 1、选取其中一个特征
# 2、加权求和
# 3、主成分分析
主成分分析
python
def pca_demo():
"""
主成分分析
:return:
"""
data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]
# 主成分分析
from sklearn.decomposition import PCA
# 1、实例化一个转换器类
# transfer = PCA(n_components=0.9) # n_components表示保留多少特征信息
transfer = PCA(n_components=2) # n_components表示保留的特征个数
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print(f'转换后的数据:{data_new}')
print(f'保留的特征个数:{transfer.n_components_}')
print(f'保留的特征百分比:{transfer.explained_variance_ratio_}')
return None
结果
综合案例分析
python
def instacart_demo():
"""
instacart案例分析
:return:
"""
# 1、读取数据
import pandas as pd
order_products = pd.read_csv('./instacart/order_products__prior.csv')
orders = pd.read_csv('./instacart/orders.csv')
products = pd.read_csv('./instacart/products.csv')
aisles = pd.read_csv('./instacart/aisles.csv')
# 2、合并aisles和products表,目的:aisles_id和products在一张表中
table1 = pd.merge(aisles,products,on=['aisles_id','aisles_id'])
table2 = pd.merge(table1,order_products,on=['product_id','product_id'])
table3 = pd.merge(table2,orders,on=['order_id','order_id'])
# 3、交叉表处理
table = pd.crosstab(table3['user_id'],table3['aisle'])
# 4、主成分分析
from sklearn.decomposition import PCA
# 1、实例化一个转换器类
transfer = PCA(n_components=0.95) # n_components表示保留多少特征信息
# 2、调用fit_transform
data_new = transfer.fit_transform(table)
print(f'转换后的数据:{data_new}')
print(f'保留的特征个数:{transfer.n_components_}')
print(f'保留的特征百分比:{transfer.explained_variance_ratio_}')
return None