[小白系列][线性回归模型]股票回归分析实例代码详解
代码详解
P.S:记录下第一个搞明白的模型哦!
import statsmodels.api as sm # 基本api
import statsmodels.formula.api as smf # 公式api
import statsmodels.graphics.api as smg # 图形界面api
import patsy # 主要类似 R 语言的公式转成 statsmodels 可以识别的形式
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
from scipy import stats # Python中一个很好的统计推断包
import seaborn as sns
import datetime, os, warnings # os模块是与计算机操作系统交互的一个接口,Python 的 os 模块封装了常见的文件和目录操作# 和exception异常要求用户立刻进行处理不同,warnings通常用于提示用户一些错误或者过时的用法warnings.filterwarnings('ignore') # 通过警告过滤器进行控制是否发出警告消息,“ignore”参数的作用是:忽略匹配的警告
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签,设置为黑体
plt.rcParams['axes.unicode_minus'] = False # 可以显示负号# 设置起始时间
start = datetime.datetime(2019,1,1)
end = datetime.datetime(2019,12,31)
#print(start)
# Python提供了专门从财经网站获取金融数据的API接口:DataReader
from pandas_datareader.data import DataReader
# 读取上证综指 及 探路者数据
def load_data():# 判断在当前的网站目录下是否存在000001.csv和300005.csv的文件,如果没有的话,则利用DataReader接口,用pandas自带的read_csv方法下载if os.path.exists('000001.csv'): # os.path.exists()就是判断括号里的文件是否存在的意思,括号内的可以是文件路径data_ss = pd.read_csv('000001.csv')data_tlz = pd.read_csv('300005.csv')else:# 上证综指data_ss = DataReader("000001.SS", "yahoo",start,end)# 300005 探路者股票 深证data_tlz = DataReader("300005.SZ", "yahoo",start,end)data_ss.to_csv('000001.csv')data_tlz.to_csv('300005.csv')return data_ss, data_tlzdata_ss, data_tlz = load_data()
# 数据探索,查看前五行数据
print(data_ss.head())
print(data_tlz.head())# 探路者与上证综指
# 这里是把股票的收盘价close拿了出来
close_ss = data_ss["Close"]
close_tlz = data_tlz["Close"]
# 对两支股票分别做数据探索
print(close_ss.head())
print(close_tlz.head())
# 将探路者与上证综指进行数据合并
# 此处merge函数利用的是左右连接键名不一样时候的情况
[详见](https://blog.csdn.net/KaelCui/article/details/105156974)
stock = pd.merge(data_ss, data_tlz, left_index = True, right_index = True)
stock = stock[["Close_x","Close_y"]] # 把合并之后的闭盘价格拿出来
stock.columns = ["上证综指","探路者"]
# 对合并之后的数据做数据探索
print(stock.head())
# 统计每日收益率
# .diff()函数,是用来将数据进行某种移动之后与原来的数据进行比较得出差异的数据
# .shift()函数,是可以把数据移动指定的位数,period = -1代表往上/往左,period = 1代表往下/往右
daily_return = (stock.diff()/stock.shift(periods = 1)).dropna() # dropna代表去除空值,因为有除法,否则程序没有意义
print(daily_return.head())
# 找出当天收益率大于10%的,应该是没有,因为涨停为10%
print(daily_return[daily_return["探路者"] > 0.1])# 每日收益率可视化
fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(15,6))
daily_return["上证综指"].plot(ax=ax[0])
ax[0].set_title("上证综指")
daily_return["探路者"].plot(ax=ax[1])
ax[1].set_title("探路者")
plt.show()# 散点图
fig,ax = plt.subplots(nrows=1,ncols=1,figsize=(12,6))
plt.scatter(daily_return["探路者"],daily_return["上证综指"])
plt.title("每日收益率散点图 from 探路者 & 上证综指")
plt.show()# 回归分析
import statsmodels.api as sm
# 加入截距项
daily_return["intercept"]=1.0 # 此处默认选择截距项为1
model = sm.OLS(daily_return["探路者"],daily_return[["上证综指","intercept"]]) # OLS(Ordinary Least Squares):最小二乘法进行回归分析
results = model.fit() # 做拟合
print(results.summary()) # 拟合结果展示
# print( result.params()) # 对应的各个变量的权重
[小白系列][线性回归模型]股票回归分析实例代码详解相关推荐
- yii mysql 事务处理_Yii2中事务的使用实例代码详解
前言 一般我们做业务逻辑,都不会仅仅关联一个数据表,所以,会面临事务问题. 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全 ...
- vue build text html,Vue中v-text / v-HTML使用实例代码详解_放手_前端开发者
废话少说,代码如下所述: /p> 显示123 /p> 补充:vuejs {{}},v-text 和 v-html的区别 {{message}} let app = new Vue({ el ...
- java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...
- vue中 点击事件的写法_vue实现绑定事件的方法实例代码详解
一.前言 vuejs中的事件绑定,使用来完成的,这里函数名是定义在Vue实例中的methods对象中的,Vue实例可以直接访问其中的方法. 二.事件绑定方式 1. 直接在标签中写js方法 执行方法的第 ...
- pos请求 微信小程序_微信小程序蓝牙连接小票打印机实例代码详解
1.连接蓝牙 (第一次发表博客) 第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAdapt ...
- Meta最新模型LLaMA细节与代码详解
Meta最新模型LLaMA细节与代码详解 0. 简介 1. 项目环境依赖 2. 模型细节 2.1 RMS Pre-Norm 2.2 SwiGLU激活函数 2.3 RoPE旋转位置编码 3. 代码解读 ...
- socket 获取回传信息_Luat系列官方教程5:Socket代码详解
文章篇幅较长,代码部分建议横屏查看,或在PC端打开本文链接.文末依然为爱学习的你准备了专属福利~ TCP和UDP除了在Lua代码声明时有一些不同,其他地方完全一样,所以下面的代码将以TCP长连接的数据 ...
- java多线程代码_java多线程实例代码详解
原文:http://blog.csdn.net/paranoidyang/article/details/70184523 作者:Paranoidyang 线程与进程的区别 (1)程序是一段静态的代码 ...
- python输出变量代码_Python中变量的输入输出实例代码详解
1.变量的输入: input函数: input() input("请输入银行卡密码") password = input("请输入银行卡密码") 变量名 = i ...
最新文章
- eplan怎么插入表格_EPLAN电气图实例控制柜(控制面板)
- audio标签控制音量_html中audio标签的使用
- android 中的PopupWindow
- Java当中的常量池
- 删除有序数组中的重复项(数组去重)
- 二叉树链表结构表示法
- 推荐一个能监控安卓手机上应用使用情况的应用,名叫ActionDash
- 张恩民 php,php张恩民PHP中ltrim与rtrim去除左右空格及特殊字符实例
- 密度图的密度估计_不同类型的二维密度图小教程
- EasyUI Datagrid 自定义列、Foolter及单元格编辑
- Sigmoid函数求导
- 个人运营app需要多少钱【费用】
- Mac顶部菜单栏(Menubar)卡死
- java tld 方法重载_java 中的TLD文件
- 小米官网仿写部分代码+实训报告
- 算法面试用c还是python_排序算法(C语言+Python版)宝宝再也不怕面试官写排序算法了...
- 值得收藏|基于全球切片解析标准TMS的瓦片规则
- Android 9.0 flash播放器播放swf源码讲解
- Elasticsearch许可证过期导致ES用不了的问题
- 为什么不建议轻行量玩频
热门文章
- python银行业务办理时间_python多线程实现代码(模拟银行服务操作流程)
- Python获取美元人民币实时汇率
- 计算机毕业设计java+ssm爱家房屋租赁信息管理系统(源码+系统+mysql数据库+Lw文档)
- ECE证书费用的收取标准是怎样的?
- Z97主板能装服务器系统,z97主板最高配什么cpu
- linux虚拟机使用NAT模式联网
- Robotstudio软件:利用CAD图进行机器人工作站布局
- 大数据专业前景怎么样?
- A33_Vstar的Android的编译过程(一)
- VirtualBox 安装以及 CentOS Linux 系统环境安装教程