- 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编码
- 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
结果显示
- 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
结果
- # 分词函数
- 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()}')
结果
- 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
- 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}')
结果
- 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}')
结果
- 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}')
结果
- 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、主成分分析
- 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
结果
综合案例分析
- 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