现成案例分享
Python数据分析:股票数据分析案例
步骤:
- 准备数据
- 可视化数据、审查数据
- 处理数据
- 根据ACF、PACF定阶
- 拟合ARIMA模型
- 预测
作者:python分享站 链接:https://www.zhihu.com/question/280744341/answer/1651341817 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 import pandas as pd import pandas_datareader import datetime import matplotlib.pylab as plt from matplotlib.pylab import style from statsmodels.tsa.arima_model import ARIMA from statsmodels.graphics.tsaplots import plot_acf, plot_pacf style.use('ggplot') # 设置图片显示的主题样式 # 解决matplotlib显示中文问题 plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题 def run_main(): """ 主函数 """ # 1. 准备数据 # 指定股票分析开始日期 start_date = datetime.datetime(2009, 1, 1) # 指定股票分析截止日期 end_date = datetime.datetime(2019, 4, 1) # 股票代码 stock_code = '600519.SS' # 沪市贵州茅台 stock_df = pandas_datareader.data.DataReader( stock_code, 'yahoo', start_date, end_date ) # 预览数据 print(stock_df.head()) # 2. 可视化数据 plt.plot(stock_df['Close']) plt.title('股票每日收盘价') plt.show() # 按周重采样 stock_s = stock_df['Close'].resample('W-MON').mean() stock_train = stock_s['2014':'2018'] plt.plot(stock_train) plt.title('股票周收盘价均值') plt.show() # 分析 ACF acf = plot_acf(stock_train, lags=20) plt.title("股票指数的 ACF") acf.show() # 分析 PACF pacf = plot_pacf(stock_train, lags=20) plt.title("股票指数的 PACF") pacf.show() # 3. 处理数据,平稳化数据 # 这里只是简单第做了一节差分,还有其他平稳化时间序列的方法 stock_diff = stock_train.diff() diff = stock_diff.dropna() print(diff.head()) print(diff.dtypes) plt.figure() plt.plot(diff) plt.title('一阶差分') plt.show() acf_diff = plot_acf(diff, lags=20) plt.title("一阶差分的 ACF") acf_diff.show() pacf_diff = plot_pacf(diff, lags=20) plt.title("一阶差分的 PACF") pacf_diff.show() # 4. 根据ACF和PACF定阶并建立模型 model = ARIMA(stock_train, order=(1, 1, 1), freq='W-MON') # 拟合模型 arima_result = model.fit() print(arima_result.summary()) # 5. 预测 pred_vals = arima_result.predict(start=str('2019-01'),end=str('2019-03'), dynamic=False, typ='levels') print(pred_vals) # 6. 可视化预测结果 stock_forcast = pd.concat([stock_s, pred_vals], axis=1, keys=['original', 'predicted']) plt.figure() plt.plot(stock_forcast) plt.title('真实值vs预测值') plt.savefig('./stock_pred.png', format='png') plt.show() if __name__ == '__main__': run_main()
书籍推荐
这本书几乎是数据分析入门必读书了。主要介绍了python 3个库numpy(数组),pandas(数据分析)和matplotlib(绘图)的学习。
看到书里涉及到到当统计概率知识看不懂的时候,这时候反过来再学习统计概率的知识。
很多人错误的学习方式是,先学习统计概率,再去学习数据分析编程工具(Excel, Python, R)。
最后抱怨太难了,学不会。
这其实学习方法是可以改进的。这是为什么呢?
有两个原因:
1)因为很多统计概率讲的都是复杂的数学公式2,却不讲统计概率在生活中如何应用的。这样造成
的结果就是你学习了很多,但是也忘记了很多。
2)统计概率知识大多数时候是理论基础,如果不结合数据分析工具(Excel, Python, R)来使.
用,你肯定学不会。
比如你学习了四分位数9的理论,但是如何在实际中使用的,你不会数据分析的工具,你当然不会
用了。
但是如果你会数据分析的工具,实际操作就一行代码,四分位就计算出来了。你当然兴奋了,一高
兴学习兴趣也就上来了。
所以,我的建议,也是正确的学习方式是:先学习基础的数据分析工期法,当遇到统计概率知识
的时候,再来补这个知识,边学习边用数据分析工实现一遍。
视频推荐
Python-数据分析训练营【项目】_哔哩哔哩_bilibili