Python数据分析项目实战

现成案例分享

Python数据分析:股票数据分析案例

步骤:

  1. 准备数据
  2. 可视化数据、审查数据
  3. 处理数据
  4. 根据ACF、PACF定阶
  5. 拟合ARIMA模型
  6. 预测
    作者: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

猜你喜欢

转载自blog.csdn.net/wshyb0314/article/details/130268125