大数据数学基础实验以及实训(多源数据融合与数据分析)

大数据数学基础实验以及实训(多源数据融合与数据分析)

1.大数据数学基础

(代码太长,章末有获取方法)
实验一:微积分
在这里插入图片描述

实验二:线性代数(分析收视人数)
在这里插入图片描述

实验三:概率与统计
在这里插入图片描述

实验四:数值计算
在这里插入图片描述

实验五:数据可视化
在这里插入图片描述

实验六:
6.1: K-Means聚类建模
6.2:SVM分类建模
6.3:BP神经网络建模
在这里插入图片描述
关注公众号:Time木
回复:大数据数学基础实验
可获得相关代码,数据,文档

2.多源数据融合与数据分析

在这里插入图片描述
关注公众号: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木
回复:大数据数学基础实验
回复:数学分析
可获得相关代码,数据,文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Time木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值