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

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.