CAMP的Python实现——金融大数据股票分析

B站账号@狼群里的小杨,记得点赞收藏加关注,一键三连哦!

一、 实验目的

  1. 掌握CAMP相关概念
  2. 掌握量化选股方法
  3. 掌握 收益、 收益的计算

二、 实验内容
(1)根据输入数据,使用python 编程,CAPM 方程拟合;
(2)对拟合结果进行解释:是否存在阿尔法收益?贝塔收益?并进行对比,按你的理解分析为何这5只股票出现这种差异。
(3)将程序运行结果贴图。
(4)将代码粘贴附后。

三、 实验步骤
1、准备工作
安装tushare库
在这里插入图片描述

  • 安装statsmodels库
    在这里插入图片描述
  • 查看贵州茅台的股票代码
    在这里插入图片描述

中国石油股票代号查询
在这里插入图片描述

五粮液股票代号查询
在这里插入图片描述

泸州老窖股票代号查询
在这里插入图片描述

招商银行股票代号查询
在这里插入图片描述

美的集团股票代号查询
在这里插入图片描述

2、五家企业的CAMP模型拟合代码介绍
首先写一个函数modelCAMP(code, name),传入的参数code为企业股票代号,name为企业名称。
从tushare第三方库中获取上证指数和企业2018-01-01~2021-01-01的数据

sh = ts.get_hist_data('sh', start='2018-01-01', end='2021-01-01')  # 获取上证指数数据
stock = ts.get_hist_data(code, start='2018-01-01', end='2021-01-01')  # 获取企业三年的股票数据
  • 将获取到的数据融合成DataFrame形式的数据
ret_merge = pd.merge(pd.DataFrame(sh.p_change), pd.DataFrame(stock.p_change), left_index=True, right_index=True, how='inner')

计算日无风险利率

Rf_year =0.04  # 以2018 年中国三年期国债年化收益率为无风险利率
Rf = (1+Rf_year)**(1/365)-1  # 年利率转化为日利率

计算风险溢价

Eret = ret_merge-Rf
Eret.head()

画出两个风险溢价的散点图

plt.scatter(Eret.values[:, 0], Eret.values[:, 1])
plt.show()

利用最小二乘法进行线性回归,拟合CAPM 模型

md_capm = sm.OLS(Eret.p_change_y[1:],sm.add_constant(Eret.p_change_x[1:]))
result = md_capm.fit()
result.summary()
print("\n{}CAMP建立".format(name))
print(result.summary())

3、计算结果和可视化
贵州茅台的CAMP模型拟合结果
在这里插入图片描述
贵州茅台年α为
在这里插入图片描述
贵州茅台的程序计算结果如图所示

在这里插入图片描述
贵州茅台和大盘风险溢价的散点图
在这里插入图片描述

4、结果分析与解释
首先从总体来看六只股票如表1所示。
在这里插入图片描述

完整代码

'''
python3.7
-*- coding: UTF-8 -*-
@Project -> File   :Code -> CAMP
@IDE    :PyCharm
@Author :YangShouWei
@USER: 296714435
@Date   :2021/3/25 15:41:37
@LastEditor:
'''

import pandas as pd
import tushare as ts
import matplotlib.pyplot as plt
import statsmodels.api as sm


def modelCAMP(code, name):
    # 资本资产进价模型(CAPM) 
    # Ri -Rf = β*(Rm-Rf) + ε

    # 载入股指数据
    sh = ts.get_hist_data('sh', start='2018-01-01', end='2021-01-01')  # 获取上证指数数据
    stock = ts.get_hist_data(code, start='2018-01-01', end='2021-01-01')  # 获取企业三年的股票数据

    ret_merge = pd.merge(pd.DataFrame(sh.p_change), pd.DataFrame(stock.p_change), left_index=True, right_index=True, how='inner')

    # 计算日无风险利率
    Rf_year =0.04  # 以2018 年中国三年期国债年化收益率为无风险利率
    Rf = (1+Rf_year)**(1/365)-1  # 年利率转化为日利率

    # 计算风险溢价:Ri-Rf
    Eret = ret_merge-Rf
    Eret.head()

    # 画出两个风险溢价的散点图,查看相关性
    plt.scatter(Eret.values[:, 0], Eret.values[:, 1])
    plt.show()

    # 利用最小二乘法进行线性回归,拟合CAPM 模型
    md_capm = sm.OLS(Eret.p_change_y[1:],sm.add_constant(Eret.p_change_x[1:]))
    result = md_capm.fit()
    result.summary()
    print("\n{}CAMP建立".format(name))
    print(result.summary())


if __name__ == "__main__":
    # 依次调用函数计算企业的CAMP拟合结果
    modelCAMP('600036', "招商银行")
    modelCAMP("600519", "贵州茅台")
    modelCAMP("601857", "中国石油")
    modelCAMP("000858", "五粮液")
    modelCAMP("000568", "泸州老窖")
    modelCAMP("000333", "美的集团")

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,我可以帮你解决这个问题。 首先,Huffman编码是一种基于频率的编码方法,可以将出现频率较高的字符或符号用较短的编码表示,出现频率较低的字符或符号用较长的编码表示,从而减小数据的存储空间。 针对一张图像的Huffman编码压缩,我们需要先读取该图像的二进制数据,然后统计每个像素值出现的频率,根据频率构建Huffman树,生成每个像素值的编码,将像素值替换为对应的编码,并将编码输出到文件中。 下面是一个简单的Python实现: ```python import heapq import os class HuffmanCoding: def __init__(self, path): self.path = path self.heap = [] self.codes = {} self.reverse_mapping = {} # 统计每个像素值出现的频率 def make_frequency_dict(self, data): frequency = {} for pixel in data: if pixel not in frequency: frequency[pixel] = 0 frequency[pixel] += 1 return frequency # 构建Huffman树 def build_huffman_tree(self, frequency): for pixel in frequency: node = HuffmanNode(pixel, frequency[pixel]) heapq.heappush(self.heap, node) while len(self.heap) > 1: node1 = heapq.heappop(self.heap) node2 = heapq.heappop(self.heap) merged = HuffmanNode(None, node1.frequency + node2.frequency) merged.left = node1 merged.right = node2 heapq.heappush(self.heap, merged) # 生成每个像素值的编码 def make_codes_helper(self, root, current_code): if root is None: return if root.pixel is not None: self.codes[root.pixel] = current_code self.reverse_mapping[current_code] = root.pixel return self.make_codes_helper(root.left, current_code + "0") self.make_codes_helper(root.right, current_code + "1") def make_codes(self): root = heapq.heappop(self.heap) current_code = "" self.make_codes_helper(root, current_code) # 将像素值替换为对应的编码,并将编码输出到文件中 def get_encoded_data(self, data): encoded_data = "" for pixel in data: encoded_data += self.codes[pixel] padded_length = 8 - len(encoded_data) % 8 for i in range(padded_length): encoded_data += "0" padded_info = "{0:08b}".format(padded_length) encoded_data = padded_info + encoded_data b = bytearray() for i in range(0, len(encoded_data), 8): byte = encoded_data[i:i+8] b.append(int(byte, 2)) return bytes(b) # 将编码输出到文件中 def compress(self): filename, file_extension = os.path.splitext(self.path) output_path = filename + ".bin" with open(self.path, 'rb') as file, open(output_path, 'wb') as output: data = file.read() frequency = self.make_frequency_dict(data) self.build_huffman_tree(frequency) self.make_codes() encoded_data = self.get_encoded_data(data) output.write(encoded_data) print("Compressed file saved as", output_path) class HuffmanNode: def __init__(self, pixel, frequency): self.pixel = pixel self.frequency = frequency self.left = None self.right = None self.code = "" if __name__ == '__main__': path = "/path/to/image.jpg" h = HuffmanCoding(path) h.compress() ``` 这段代码可以对指定的图像进行Huffman编码压缩,并将压缩后的数据输出到一个新文件中。你只需要将代码中的 `path` 变量修改为你要压缩的图像的路径即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值