我的Python心路历程 第十期 (10.1 实践实例之股票数据分析)

本文主要是介绍我的Python心路历程 第十期 (10.1 实践实例之股票数据分析),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

今日我的Python心路历程是 实践实例之股票数据分析)

方案

针对参考1中的代码进行实践,其中有几点体会和问题的处理。
首先,导入pandas库,详见参考2。

其次,准备数据,可以自己制作假数据,也可以从网上下载已有数据。
如下数据进行测试:
在这里插入图片描述

将datadir和fname适配为自己的,编译发现无法识别中文,故此将标题改为代码中的对应英文标题。
在这里插入图片描述

一步步开始调试代码,到第四步是出现编译异常,如下:
在这里插入图片描述

根据提示更改为如下代码:

# 最大年均复合增长率
print('4.2 最大年均复合增长率')
min_date = adj_price.idxmin()
max_date = adj_price.idxmax()
print(max_date.year)
print(min_date.year)max_growth_per_year = total_max_growth ** (1.0 / (max_date.year - min_date.year))
print(max_growth_per_year)

编译时发现又一个问题,计算max_growth_per_year时的分母max_date.year - min_date.year为0,调整数据,将Adj Close列的数据从小到大序列化(更改为模拟数据,因为真实数据只有2019年的,故此导致max_date.year和min_date.year均为2019)。
在这里插入图片描述

最后,经过以上调整之后所有代码可以成功编译,运行也未出错,结果如下:
在这里插入图片描述

但是,out2的图表matplotlib.pyplot示意并没有出来,肿么办呢?

通过参考3的方法测试发现图像是可以显示出来的,测试代码如下:

import numpy as np
import matplotlib.pyplot as pltdef main():# 线的绘制x = np.linspace(-np.pi, np.pi, 256, endpoint=True)c, s = np.cos(x), np.sin(x)# 绘制plt.figure(1)# 自变量 因变量plt.plot(x, c)# 自变量 因变量plt.plot(x, s)plt.show()plt.savefig("one.png")if __name__ == "__main__":main()

经过初步分析,发现是不是因为没有main函数导致的呢?不应该啊,添加main函数后依旧不现实图像,仔细研读以上测试成功的代码发现少了一句plt.show(),增加后果然应验,效果如下图所示:

在这里插入图片描述

对应代码为:

# coding=UTF-8import os
import matplotlib.pyplot as pltdef main():x = [0, 10]y = [0, 1000]lines = plt.plot(x, y)# use keyword argsplt.setp(lines, color='r', linewidth=2.0)**plt.show()**if __name__ == "__main__":main()

果不其然,少了这句就是无法显示Pycharm Matplotlib 图像。

附采用历史数据产生效果如下所示:
在这里插入图片描述

附所有代码如下(更新后):

# coding=UTF-8import pandas as pd
import numpy as np
import os
import matplotlib.pyplot as plt# 股票数据分析,前提是对应的数据已经下载,如SZ#300790.csv#获取绝对路径,300790-300999为当前文件夹
datadir = os.path.join(os.path.dirname(__file__), '300790-300999')
fname = '00001.csv'
data = pd.read_csv(os.path.join(datadir, fname), index_col='Date', parse_dates=True)def gpbase0():# 分析波动幅度print('1.分析波动幅度')print(data)# 使用 resample 针对复权收盘价进行重采样print('2.使用 resample 针对复权收盘价进行重采样')adj_price = data['Adj Close']print(adj_price)resampled = adj_price.resample('m').ohlc()print(resampled)print((resampled.high - resampled.low) / resampled.low)def growth3():## 增长曲线print('3.增长曲线')adj_price = data['Adj Close']adj_price.plot(figsize=(8, 6))print(data.head())def growth4():#获取列族'Adj Close'adj_price = data['Adj Close']## 增长倍数print('4.增长倍数')### 最高增长倍数print('4.1 最高增长倍数')total_max_growth = adj_price.max() / adj_price.min()print(total_max_growth)# 最大年均复合增长率print('4.2 最大年均复合增长率')min_date = adj_price.idxmin()max_date = adj_price.idxmax()print(max_date.year)print(min_date.year)max_growth_per_year = total_max_growth ** (1.0 / (max_date.year - min_date.year))print(max_growth_per_year)def growth5():#获取列族'Adj Close'adj_price = data['Adj Close']## 当前增长倍数及复合增长率print('5.当前增长倍数及复合增长率')### 当前平均增长倍数print('5.1 当前平均增长倍数')total_growth = adj_price.iloc[0] / adj_price.iloc[-1]print(total_growth)### 年复合增长倍数print('5.2 年复合增长倍数')old_date = adj_price.index[-1]now_date = adj_price.index[0]growth_per_year = total_growth ** (1.0 / (now_date.year - old_date.year))print(growth_per_year)### 平均年化增长率print('5.3 平均年化增长率')price_in_years = adj_price.to_period(freq='A').groupby(level=0).first()print(price_in_years)#print(price_in_years.plot(figsize=(8,6)))diff = price_in_years.diff()rate_in_years =  diff / (price_in_years - diff)print(rate_in_years)print(rate_in_years.mean())rate_in_years.plot(kind='bar', figsize=(8,6))X = [0, len(rate_in_years)]Y = [0, 0]plt.plot(X, Y, color='red', linestyle='-')#不增加该代码的话,Pycharm Matplotlib 图像不显示plt.show()def main():growth5()if __name__ == "__main__":main()

参考:

1、python数据科学(十三):实例——股票数据分析
2、我的Python心路历程 第七期 (PyCharm配置第三方库)
3、Pycharm Matplotlib 图像不显示问题

这篇关于我的Python心路历程 第十期 (10.1 实践实例之股票数据分析)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/215952

相关文章

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基