第1关 基于总体规模与投资效率指标的上市公司综合能力聚类分析
# 1.去掉指标值小于0和存在空值的记录
# 2.去掉存在异常值的记录,指标取值大于或等于8倍均值视为异常值
# 3.对指标值进行均值-方差标准化处理
# 4.对标准化后的指标值进行k-均值聚类分析,k=5,即聚为5类
# 5.返回聚类结果,用序列Fs来表示,index为股票代码、值为聚类标签值(0~4),
# 并按聚类标签值从小到大排序
def return_values():
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
#1.数据读取,清洗掉<0,nan
dta=pd.read_excel('data.xlsx')
dta=dta.iloc[:,[0,2,3,4,5,6,7,8,9,10,11]]
dta=dta[dta>0]
dta=dta.dropna()
#data2=dta.values
data2=dta.to_numpy()
for i in range(1,11):
data2=data2[data2[:,i]<8*np.mean(data2[:,i]),:]
X=data2[:,1:]
scaler = StandardScaler()
scaler.fit(X)
X=scaler.transform(X)
# 4.k均值聚类分析
model = KMeans(n_clusters=5, random_state=0,max_iter = 1000)
model.fit(X)
c=model.labels_ #类标签
Fs=pd.Series(c,index=data2[:,0])
Fs=Fs.sort_values(ascending=True)
return Fs
第2关 基于聚类结果构建投资组合及量化投资检验
# 读取2016年5-12月股票交易数据表"trd.xlsx",字段名称为:
# 股票代码、交易日期、考虑现金红利再投资的收盘价可比价
# 任务如下:
# 1.在上一关基础上,以每一类股票作为投资组合,计算各投资组合持有期为2016-05-01~2016-12-31日的收益率。
# 其中股票的收益率=(持有期最大交易日的收盘价-持有期最小交易日的收盘价)/持有期最小交易日的收盘价。
# 投资组合的收益率=投资组合中持有期内各股票收益率之和。
# 收盘价采用考虑现金红利再投资的收盘价可比价进行计算。
# 2.返回各投资组合收益率,用一个列表R来表示(注:有5个元素)
def return_values():
import pandas as pd
import step9_1
def get_prices(stock_code, trd):
filtered_trd = trd[(trd['Stkcd'] == stock_code)]
# 按交易日期排序
sorted_trd = filtered_trd.sort_values(by='Trddt')
# 获取考虑现金红利再投资的收盘价可比价
prices = sorted_trd['Adjprcwd'].tolist()
return prices
Fs=step9_1.return_values()
trd=pd.read_excel('trd.xlsx')
R=[]
for i in range(5):
Fs_i=Fs[Fs==i]
code_i=list(Fs_i.index)
r_i=0
for t in range(len(code_i)):
#计算r_i,即每类股票投资组合的收益率
p = get_prices(code_i[t], trd)
if len(p)>0: #条件判断
p1=p[0]
p2=p[len(p)-1]
r=(p2-p1)/p1
r_i=r_i+r
R.append(r_i)
return R