import pandas as pd
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
'''
降维一般有两种方法:1、特征选择,2、主成分分析
'''
# 特征选择中的的低方差过滤
def variance_demo():
# 获取数据
data = pd.read_csv("./factor_returns.csv")
# 取出特征值的列,要所有的行,只要2到10列
data = data.iloc[:,1:10]
print(data)
# 实例化一个转换器对象,threshold表示的是阈值,默认是0,低于阈值的列会被认为是低方差的列,就会被过滤掉。
transfer = VarianceThreshold(threshold=5)
# 调用fit_transform方法
data_new = transfer.fit_transform(data)
print(data_new, data_new.shape)
# 特征选择中的相关系数过滤
def index_demo():
# 获取数据
data = pd.read_csv("./factor_returns.csv")
# 取出特征值的列,要所有的行,只要2到10列
data = data.iloc[:, 1:10]
# 求出两列间的相关系数
r1 = pearsonr(data["pe_ratio"],data["pb_ratio"])
# 返回结果为:(-0.004389322779936263, 0.8327205496564927),第一个值为相关系数,第二个值为显著水平
print("r1的相关系数为:", r1)
r2 = pearsonr(data['revenue'], data['total_expense'])
print("r2的相关系数为:", r2)
# 也可以用matplotlib.pyplot 的 plt 来画图观察相关性
plt.figure(figsize=(20, 8), dpi=100)
plt.scatter(data['revenue'], data['total_expense'])
plt.show()
# 主成分分析
def pca_demo():
data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]
# 实例化一个对象,n_components = 2 表示降成两个特征
tranfer = PCA(n_components=2)
# 获取数据
data_new = tranfer.fit_transform(data)
print(data_new)
if __name__ == '__main__':
# 特征选择中的的低方差过滤
# variance_demo()
# 特征选择中的相关系数过滤
# index_demo()
# 主成分分析
pca_demo()