本文主要是介绍我的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 实践实例之股票数据分析)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!