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

本文作者分享了在进行Python股票数据分析过程中遇到的问题和解决经验,包括数据导入、处理异常、计算最大年均复合增长率等,并详细介绍了如何解决matplotlib图像在Pycharm中不显示的问题。
摘要由CSDN通过智能技术生成

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

针对参考1中的代码进行实践,其中有几点体会和问题的处理。

首先,导入pandas库,详见参考2。

其次,准备数据,可以自己制作假数据,也可以从网上下载已有数据。

如下数据进行测试:

a01009a176733cdd0fbe0a8e61c4c8bf.png

将datadir和fname适配为自己的,编译发现无法识别中文,故此将标题改为代码中的对应英文标题。

5581b79ffa12f67eafd16fed8e3fb3ee.png

一步步开始调试代码,到第四步是出现编译异常,如下:

70b5e2b720c467b661dbbffd854fc4ac.png

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

# 最大年均复合增长率

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)。

cb88fef290c0309bd10c3a0394f68cc7.png

最后,经过以上调整之后所有代码可以成功编译,运行也未出错,结果如下:

fcf618aeadf56b89022ebd77df9a00fb.png

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

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

import numpy as np

import matplotlib.pyplot as plt

def 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(),增加后果然应验,效果如下图所示:

1141fa73682472d8b18ac3149416c384.png

对应代码为:

# coding=UTF-8

import os

import matplotlib.pyplot as plt

def main():

x = [0, 10]

y = [0, 1000]

lines = plt.plot(x, y)

# use keyword args

plt.setp(lines, color='r', linewidth=2.0)

**plt.show()**

if __name__ == "__main__":

main()

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

附采用历史数据产生效果如下所示:

6edd28437377ec73bfdcfd75a6b062de.png

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

# coding=UTF-8

import 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值