赞
踩
大数据数学基础实验以及实训(多源数据融合与数据分析)
(代码太长,章末有获取方法)
实验一:微积分
实验二:线性代数(分析收视人数)
实验三:概率与统计
实验四:数值计算
实验五:数据可视化
实验六:
6.1: K-Means聚类建模
6.2:SVM分类建模
6.3:BP神经网络建模
关注公众号:Time木
回复:大数据数学基础实验
可获得相关代码,数据,文档
关注公众号:Time木
回复:数学分析
可获得相关代码,数据,文档
fun.py
import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA import pandas as pd import numpy as np def Fr(data,year): #输入: #data--财务指标数据 #year--排名年度 #输出: #Fscore1--排名结果(股票代码形式) #Fscore2--排名结果(股票名称形式) data2 = data.iloc[data['Accper'].values == str(year)+'-12-31',[ 0,2,3,4,5,6,7,8,9,10,11]] data2 = data2[data2 > 0] data2 = data2.dropna() X = data2.iloc[:, 1:] scaler = StandardScaler() scaler.fit(X) X = scaler.transform(X) # 累计贡献率为95% pca = PCA(n_components=0.95) # 满足累计贡献率为95%的主成分数据 Y = pca.fit_transform(X) # 贡献率 gxl = pca.explained_variance_ratio_ F = np.zeros((len(Y))) # 预定义综合得分数组F for i in range(len(gxl)): f = Y[:, i] * gxl[i] # 第i个主成分与第i个主成分贡献率的乘积 F = F + f # 数组累积求和 # 构建序列,值为综合得分F,index为股票代码 fs1 = pd.Series(F, index=data2['Stkcd'].values) # 结果排名,降序 Fscore1 = fs1.sort_values(ascending=False) co = pd.read_excel('TRD_Co.xlsx') Co = pd.Series(co['Stknme'].values, index=co['Stkcd'].values) Co1 = Co[data2['Stkcd'].values] # 主成分分析指标数据对应的上市公司名称 fs2 = pd.Series(F, index=Co1.values) Fscore2 = fs2.sort_values(ascending=False) return (Fscore1,Fscore2)
ffun.py
def Fr2(data,year): import pandas as pd import numpy as np # 读取2014年指标数据,将数据转换为Numpy数组的形式 data = pd.read_excel('data1.xlsx') data2 = data.iloc[data['Accper'].values == '2014-12-31', [0, 2, 3, 4, 5, 6, 7, 8, 9]] # da=data2.as_matrix() da = data2.values # 对最后一个指标PEG进行处理 da = da[(da[:, 8] < 4) & (da[:, 8] > -4), :] # 消除异常值 da[:, 8] = 1 - (da[:, 8] - min(da[:, 8])) / (max(da[:, 8]) - min(da[:, 8])) # 反极差化处理 # 对剩下的7个指标均要求大于0,且将8倍均值作为异常值进行剔除处理。示例代码如下: for i in np.arange(1, 8): da = da[da[:, i] > 0, :] # 要求指标值大于0 da = da[da[:, i] < 8 * np.mean(da[:, i]), :] # 剔除异常值(8倍均值) # 要求净资产收益率大于0.06 # 这里假定6%回报率为投资者的最低要求。示例代码如下: da = da[da[:, 6] >= 0.06, :] # 数据标准化处理 # 这里将指标均作归一化处理。即将指标值全部规范化到[0,1]之间。采用Python中的数据预处理模块中的极差法进行处理。: from sklearn.preprocessing import MinMaxScaler X = da[:, 1:] scaler = MinMaxScaler() scaler.fit(X) X = scaler.transform(X) # 6. 对市盈率、市现率、市净率指标也做反极差化处理 # 主要目的是实现指标度量的统一,即值越大越好。 X[:, 2] = 1 - X[:, 2] X[:, 3] = 1 - X[:, 3] X[:, 4] = 1 - X[:, 4] # 对标准化之后的指标数据X作主成分分析,提取其主成分,要求累计贡献率在95%以上。 from sklearn.decomposition import PCA pca = PCA(n_components=0.95) # 累计贡献率为95% Y = pca.fit_transform(X) # 满足累计贡献率为95%的主成分数据 gxl = pca.explained_variance_ratio_ # 贡献率 # 1. 计算综合得分,其中综合得分等于提取的各个主成分与其贡献率的加权求和 F = np.zeros((len(Y))) for i in range(len(gxl)): f = Y[:, i] * gxl[i] F = F + f # 2. 整理排名结果 # 为了方便进行排名,采用序列作为排名结果的储存数据结构。排名包括两种方式,一种index为股票代码,方面后续收益率计算使用。一种index为股票中文简称,方便查看其排名结果。 # 第一种方式如下: Fs1 = pd.Series(F, index=da[:, 0]) Fscore1 = Fs1.sort_values(ascending=False) # 降序,True为升序 # 第二种方式如下: # 首先获取主成分分析指标数据对应的上市公司名称,可以通过data2数据中的股票代码关联上市公司信息表(TRD_Co.xlsx)筛选获得。TRD_Co.xlsx数据表详细信息见表8-2,其Python程序代码如下: co = pd.read_excel('TRD_Co.xlsx') Co = pd.Series(co['Stknme'].values, index=co['Stkcd'].values) Co1 = Co[da[:, 0]] # 其次,以综合得分F为值,上市公司名称作为索引(index),构建序列,并按值作降序排序,以观察其排名结果 Fs2 = pd.Series(F, index=Co1.values) Fscore2 = Fs2.sort_values(ascending=False) # 降序,True为升序 return (Fscore1,Fscore2)
fun2.py
import matplotlib.pyplot as plt import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA import pandas as pd # 输入: # Fscore1--排名结果(股票代码形式) # s_trd1--持有期开始日期 # s_trd1--持有期结束日期 # num--排名数 # 输出: # r_list--股票代码收益率列表 # r_total--总收益率 # 获取交易数据 def Re(Fscore1, s_trd1, s_trd2, num): trd = pd.read_excel('trd_'+s_trd1[0:4]+'.xlsx') # 预定义每个股票的收益率序列 r_list = [] for i in range(num): # 获取排名第i个股票代码 code = Fscore1.index[i] # 获取排名第i个股票代码的交易数据 dt = trd.iloc[trd.iloc[:, 0].values == code, :] # 获取排名第i个股票代码2017年度的交易数据,并按交易日期升序排序 I1 = dt['Trddt'].values >= str(s_trd1) I2 = dt['Trddt'].values <= str(s_trd2) dtt = dt.iloc[I1 & I2, :].sort_values('Trddt') # 数据是否为空条件判断 if len(dtt) > 1: # 获取排名第i个股票代码的 # 首个和最后一个交易日的考虑现金红利再投资的收盘价可比价 p1 = dtt.iloc[0, 3] p2 = dtt.iloc[len(dtt) - 1, 3] # 计算排名第i个股票代码的收益率,并添加到r_list中 r_list.append((p2 - p1) / p1) # 计算总收益率 r_total = sum(r_list) return (r_list,r_total)
test0.py
import matplotlib.pyplot as plt import visual import numpy as np import pandas as pd plt.rcParams['font.sans-serif'] = ['SimHei'] data=pd.read_excel('data.xlsx') data2=data.iloc[data['Accper'].values=='2016-12-31',[ 0,2,3,4,5,6,7,8,9,10,11]] data2=data2[data2>0] data2=data2.dropna() from sklearn.preprocessing import StandardScaler X=data2.iloc[:,1:] scaler = StandardScaler() scaler.fit(X) X=scaler.transform(X) from sklearn.decomposition import PCA #累计贡献率为95% pca=PCA(n_components=0.95) #满足累计贡献率为95%的主成分数据 Y=pca.fit_transform(X) #贡献率 gxl=pca.explained_variance_ratio_ import numpy as np F=np.zeros((len(Y))) #预定义综合得分数组F for i in range(len(gxl)): f=Y[:,i]*gxl[i] #第i个主成分与第i个主成分贡献率的乘积 F=F+f #数组累积求和 #构建序列,值为综合得分F,index为股票代码 fs1=pd.Series(F,index=data2['Stkcd'].values) #结果排名,降序 Fscore1=fs1.sort_values(ascending=False) co=pd.read_excel('TRD_Co.xlsx') Co=pd.Series(co['Stknme'].values,index=co['Stkcd'].values) Co1=Co[data2['Stkcd'].values] #主成分分析指标数据对应的上市公司名称 fs2=pd.Series(F,index=Co1.values) Fscore2=fs2.sort_values(ascending=False) X = list() Y = list() for k ,v in Fscore2.items(): X.append(k) X = X[:10] print(X) Y = Y[:10] print(Fscore2) # visual.visual(Fscore2) # # 条形图 # X = list() # Y = list() # for k,v in Fscore2.items(): # X.append(k) # Y.append(v) # X = X[:10] # Y = Y[:10] # #使用ggplot样式来模拟ggplot2风格的图形,ggplot2是一个常用的R语言绘图包 # plt.style.use('ggplot') # customers = X # customers_index = range(len(customers)) # sale_amounts = Y # #基础图 # fig = plt.figure() # #在基础图上加上子图 # ax1 = fig.add_subplot(1,1,1) # #param1:设置条形左侧在X轴上的坐标;param2:设置条形的高度;param3:设置条形和标签中间对齐;param4:设置条形的颜色 # ax1.bar(customers_index,sale_amounts,align='center',color='darkblue') # #设置X,Y轴刻度线位置 # ax1.xaxis.set_ticks_position('bottom') # ax1.yaxis.set_ticks_position('left') # #将条形的刻度线标签由客户索引值更改为实际的客户名称 # plt.xticks(customers_index,customers,rotation=0,fontsize='small') # #设置X轴标签 # plt.xlabel('Stock Name') # #设置Y轴标签 # plt.ylabel('Score') # #设置图标签 # plt.title('Score Analysis') # #将统计图保存在当前文件夹,dpi为分辨率,bbox_inches将图形四周的空白部分去掉 # plt.savefig('bar_plot.png',dpi=400,bbox_inches='tight') # #显示图形 # plt.show() # # #获取交易数据 # trd=pd.read_excel('trd_2017.xlsx') # #预定义每个股票的收益率序列 # r_list=[] # for i in range(30): # #获取排名第i个股票代码 # code=Fscore1.index[i] # #获取排名第i个股票代码的交易数据 # dt=trd.iloc[trd.iloc[:,0].values==code,:] # #获取排名第i个股票代码2017年度的交易数据,并按交易日期升序排序 # I1=dt['Trddt'].values>='2017-05-01' # I2=dt['Trddt'].values<='2017-12-31' # dtt=dt.iloc[I1&I2,:].sort_values('Trddt') # #数据是否为空条件判断 # if len(dtt)>1: # #获取排名第i个股票代码的 # #首个和最后一个交易日的考虑现金红利再投资的收盘价可比价 # p1=dtt.iloc[0,3] # p2=dtt.iloc[len(dtt)-1,3] # #计算排名第i个股票代码的收益率,并添加到r_list中 # r_list.append((p2-p1)/p1) # r_total=sum(r_list) #计算总收益率
test1_1.py
import pandas as pd import fun import fun2 import visual data=pd.read_excel('data.xlsx') r1=fun.Fr(data,2016) Fscore1=r1[0] Fscore2=r1[1] print(Fscore2) print(Fscore1) visual.visual(Fscore2) visual.visual(Fscore1) r2=fun2.Re(Fscore1,'2017-05-01','2017-12-31',30) r_list=r2[0] r_total=r2[1] print(r_total)
test1_2.py
import pandas as pd import fun #导入自定义的函数文件 import fun2 #导入自定义的函数文件 data=pd.read_excel('data.xlsx') ind300=pd.read_excel('index300.xlsx')#沪深300指数 list1=[] #存放年度 list2=[] #存放持有期 list3=[] #存放投资组合收益率 list4=[] #存放沪深300指数收益率 for year in [2013,2014,2015,2016]: for time in ['06-30','09-30','12-31']: #获得基于总体规模与投资效率指标的综合评价排名结果 r1=fun.Fr(data,year) r2=fun2.Re(r1[0],str(year+1)+'-05-O1',str(year+1)+'-'+time,40) r_total=r2[1] list1.append(year) list2.append(str(year+1)+'-05-01'+'--'+str(year+1)+'-'+time) list3.append(r_total) #计算沪深300指数同期收益率 td1=str(year+1)+'-05-01' td2=str(year+1)+'-'+time l1=ind300.iloc[:,1].values>=td1 l2=ind300.iloc[:,1].values<=td2 dt=ind300.iloc[l1&l2,[1,2]].sort_values('Idxtrd01') p=dt.iloc[:,1].values list4.append((p[len(p)-1]-p[0])/p[0]) #将结果转化为数据框,并导出到Excel Reason={'year':list1 , 'time':list2,'r_total':list3,'index':list4} Reason=pd.DataFrame(Reason) Reason.to_excel('Reason.xlsx')
test2_1.py
import pandas as pd import numpy as np #读取2014年指标数据,将数据转换为Numpy数组的形式 data=pd.read_excel('data1.xlsx') data2=data.iloc[data['Accper'].values=='2014-12-31',[0,2,3,4,5,6,7,8,9]] da=data2.values #对最后一个指标PEG进行处理 da=da[(da[:,8]<4)&(da[:,8]>-4),:] #消除异常值 da[:,8]=1-(da[:,8]-min(da[:,8]))/(max(da[:,8])-min(da[:,8])) #反极差化处理 #3. 对剩下的7个指标均要求大于0,且将8倍均值作为异常值进行剔除处理。 for i in np.arange(1,8): da=da[da[:,i]>0,:] #要求指标值大于0 da=da[da[:,i]<8*np.mean(da[:,i]),:] #剔除异常值(8倍均值) #4. 要求净资产收益率大于0.06 #这里假定6%回报率为投资者的最低要求。 da=da[da[:,6]>=0.06,:] #5. 数据标准化处理 #这里将指标均作归一化处理。即将指标值全部规范化到[0,1]之间。采用Python中的数据预处理模块中的极差法进行处理。 from sklearn.preprocessing import MinMaxScaler X=da[:,1:] scaler = MinMaxScaler() scaler.fit(X) X=scaler.transform(X) #6. 对市盈率、市现率、市净率指标也做反极差化处理 #主要目的是实现指标度量的统一,即值越大越好。示例代码如下: X[:,2]=1-X[:,2] X[:,3]=1-X[:,3] X[:,4]=1-X[:,4] #对标准化之后的指标数据X作主成分分析,提取其主成分,要求累计贡献率在95%以上。其计算程序如下: from sklearn.decomposition import PCA pca=PCA(n_components=0.95) #累计贡献率为95% Y=pca.fit_transform(X) #满足累计贡献率为95%的主成分数据 gxl=pca.explained_variance_ratio_ #贡献率 #1. 计算综合得分,其中综合得分等于提取的各个主成分与其贡献率的加权求和 F=np.zeros((len(Y))) for i in range(len(gxl)): f=Y[:,i]*gxl[i] F=F+f #2. 整理排名结果 # 为了方便进行排名,采用序列作为排名结果的储存数据结构。排名包括两种方式,一种index为股票代码,方面后续收益率计算使用。一种index为股票中文简称,方便查看其排名结果。 # 第一种方式如下: Fs1=pd.Series(F,index=da[:,0]) Fscore1=Fs1.sort_values(ascending=False) #降序,True为升序 # 第二种方式如下: # 首先获取主成分分析指标数据对应的上市公司名称,可以通过data2数据中的股票代码关联上市公司信息表(TRD_Co.xlsx)筛选获得。TRD_Co.xlsx数据表详细信息见表8-2,其Python程序代码如下: # 其次,以综合得分F为值,上市公司名称作为索引(index),构建序列,并按值作降序排序,以观察其排名结果 co=pd.read_excel('TRD_Co.xlsx') Co=pd.Series(co['Stknme'].values,index=co['Stkcd'].values) Co1=Co[da[:,0]] Fs2=pd.Series(F,index=Co1.values) Fscore2=Fs2.sort_values(ascending=False) #降序,True为升序 import visual #排名可视化 visual.visual(Fscore2) visual.visual(Fscore1) # print(Fscore1) # print(Fscore2) #收益率计算 trd=pd.read_excel('trd_2015.xlsx') #预定义每个股票的收益率序列 r_list=[] for i in range(20): #获取排名第i个股票代码 code=Fscore1.index[i] #获取排名第i个股票代码的交易数据 dt=trd.iloc[trd.iloc[:,0].values==code,:] #获取排名第i个股票代码2015年度的交易数据,并按交易日期升序排序 I1=dt['Trddt'].values>='2015-05-01' I2=dt['Trddt'].values<='2015-12-31' dtt=dt.iloc[I1&I2,:].sort_values('Trddt') #数据是否为空条件判断 if len(dtt)>1: #获取排名第i个股票代码的 #首个和最后一个交易日的考虑现金红利再投资的收盘价可比价 p1=dtt.iloc[0,3] p2=dtt.iloc[len(dtt)-1,3] #计算排名第i个股票代码的收益率 r_list.append((p2-p1)/p1) r_total=sum(r_list) #总收益率 print(r_list) print(r_total)
test2_2.py
import pandas as pd import ffun import fun2 data=pd.read_excel('data1.xlsx') r1=ffun.Fr2(data,2014) Fscore1=r1[0] Fscore2=r1[1] r2=fun2.Re(Fscore1,'2015-05-01','2015-12-31',20) r_list=r2[0] r_total=r2[1] data=pd.read_excel('data1.xlsx') ind300=pd.read_excel('index300.xlsx')#沪深300指数 list1=[] #存放年度 list2=[] #存放持有期 list3=[] #存放投资组合收益率 list4=[] #存放沪深300指数收益率 for year in [2013,2014,2015,2016]: for time in ['06-30','09-30','12-31']: print(str(year) + '-' + str(time)) #获得基于总体规模与投资效率指标的综合评价排名结果 r1=ffun.Fr2(data,year) # a=r1[1] # X = list() # for k, v in a.items(): # X.append(k) # X = X[:20] # print(X[:20]) r2=fun2.Re(r1[0],str(year+1)+'-05-O1',str(year+1)+'-'+time,40) r_total=r2[1] list1.append(year) list2.append(str(year+1)+'-05-01'+'--'+str(year+1)+'-'+time) list3.append(r_total) #计算沪深300指数同期收益率 td1=str(year+1)+'-05-01' td2=str(year+1)+'-'+time l1=ind300.iloc[:,1].values>=td1 l2=ind300.iloc[:,1].values<=td2 dt=ind300.iloc[l1&l2,[1,2]].sort_values('Idxtrd01') p=dt.iloc[:,1].values list4.append((p[len(p)-1]-p[0])/p[0]) #将结果转化为数据框,并导出到Excel Reason2={'year':list1 , 'time':list2,'r_total':list3,'index':list4} Reason2=pd.DataFrame(Reason2) Reason2.to_excel('Reason2.xlsx')
关注公众号:Time木
回复:大数据数学基础实验
回复:数学分析
可获得相关代码,数据,文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。