parent
51befd140c
commit
e5325bb8f8
@ -0,0 +1,66 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from sklearn.preprocessing import StandardScaler
|
||||||
|
from sklearn.decomposition import PCA
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
def Fr():
|
||||||
|
# 读取数据
|
||||||
|
data = pd.read_excel('Data.xlsx', index_col=0) # 确保索引是股票代码
|
||||||
|
|
||||||
|
# 只选择数值列
|
||||||
|
numeric_cols = data.select_dtypes(include=[np.number]).columns
|
||||||
|
data = data[numeric_cols]
|
||||||
|
|
||||||
|
# 处理非正数
|
||||||
|
data = data[data > 0]
|
||||||
|
data = data.dropna()
|
||||||
|
|
||||||
|
# 读取股票代码
|
||||||
|
co = pd.read_excel('stkcode.xlsx', index_col=0) # 确保索引是股票代码
|
||||||
|
Co = pd.Series(co['name'].values, index=co.index)
|
||||||
|
|
||||||
|
# 打印调试信息
|
||||||
|
print("data.index:", data.index)
|
||||||
|
print("co.index:", co.index)
|
||||||
|
|
||||||
|
# 确保索引匹配
|
||||||
|
common_indices = data.index.intersection(Co.index)
|
||||||
|
if common_indices.empty:
|
||||||
|
raise ValueError("No common indices found between data.index and co.index")
|
||||||
|
|
||||||
|
# 仅使用共同的索引
|
||||||
|
data_common = data.loc[common_indices]
|
||||||
|
|
||||||
|
# 打印调试信息
|
||||||
|
print("common_indices length:", len(common_indices))
|
||||||
|
print("data_common length:", len(data_common))
|
||||||
|
|
||||||
|
# 标准化
|
||||||
|
scaler = StandardScaler()
|
||||||
|
X = scaler.fit_transform(data_common)
|
||||||
|
|
||||||
|
# PCA
|
||||||
|
pca = PCA(n_components=0.95) # 累计贡献率为95%
|
||||||
|
Y = pca.fit_transform(X)
|
||||||
|
gxl = pca.explained_variance_ratio_
|
||||||
|
|
||||||
|
# 计算综合得分
|
||||||
|
F = np.dot(Y, gxl)
|
||||||
|
|
||||||
|
# 打印调试信息
|
||||||
|
print("F length:", len(F))
|
||||||
|
|
||||||
|
# 创建得分序列
|
||||||
|
fs1 = pd.Series(F, index=data_common.index)
|
||||||
|
Fscore1 = fs1.sort_values(ascending=False)
|
||||||
|
|
||||||
|
Co1 = Co[common_indices]
|
||||||
|
|
||||||
|
# 打印调试信息
|
||||||
|
print("Co1 length:", len(Co1))
|
||||||
|
|
||||||
|
fs2 = pd.Series(F, index=Co1.index)
|
||||||
|
Fscore2 = fs2.sort_values(ascending=False)
|
||||||
|
|
||||||
|
return Fscore1, Fscore2
|
Loading…
Reference in new issue