我的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

相关文章

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown