程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python數據分析與機器學習45- 股票預測

編輯:Python

文章目錄

  • 一. 股票數據下載
    • 1.1 AKshare介紹
    • 1.2 安裝AKShare
    • 1.3 如何使用AKShare?
      • 1.3.1 獲取股票實時的交易數據
      • 1.3.2 獲取股票歷史行情數據
  • 二. 股票數據預測
  • 參考:

一. 股票數據下載

1.1 AKshare介紹

先簡單介紹下AKShare,內容截至官網。

AKShare 是基於 Python 的開源金融數據接口庫,目的是實現對股票、期貨、期權、基金、債券、外匯等金融產品和另類數據從數據采集,數據清洗到數據下載的工具,滿足金融數據科學家、數據科學愛好者在數據獲取方面的需求。

它的特點是利用 AKShare 獲取的是基於可信任數據源發布的原始數據,廣大數據科學家可以利用原始數據進行再加工,從而得出科學的結論。

  1. 代碼語法符合 PEP8 規范, 數據接口的命名統一;
  2. 最佳支持 Python 3.7.5 及其以上版本;
  3. 提供最佳的文檔支持, 每個數據接口提供詳細的說明和示例, 只需要復制粘貼就可以下載數據;
  4. 持續維護由於目標網頁變化而導致的部分數據接口運行異常問題;
  5. 持續更新財經數據接口, 同時優化源代碼;

1.2 安裝AKShare

pip install akshare

1.3 如何使用AKShare?

1.3.1 獲取股票實時的交易數據

該數據來源新浪,使用時候注意頻率,不然會被封IP

代碼:

import akshare as ak
stock_zh_a_spot_df = ak.stock_zh_a_spot()
stock_zh_a_spot_df.to_csv('E:/file/gupiao.csv',encoding="gbk")

測試記錄:

1.3.2 獲取股票歷史行情數據

date 交易日
open 開盤價
high 最高價
low 最低價
close 收盤價
volume 成交量;單位:股
outstanding_share 流動股本;單位:股
trunover 換手率=成交量/流動股本

代碼:

import akshare as ak
stock_zh_a_daily_qfq_df = ak.stock_zh_a_daily(symbol = "sh600497",adjust = '')
stock_zh_a_daily_qfq_df.to_csv('E:/file/sh600497.csv')

測試記錄:

二. 股票數據預測

我們以收盤價為基准來預測

代碼:

import pandas as pd
import numpy as np
import datetime as dt
import matplotlib.pylab as plt
import seaborn as sns
from matplotlib.pylab import style
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import statsmodels.api as sm
# 一些配置
style.use('ggplot')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 讀取數據源
stockFile = 'E:/file/sh600497.csv'
stock = pd.read_csv(stockFile, index_col=0, parse_dates=[0])
# 查看每周的均價
# 首先需要將dataframe的索引設置為時間列
stock.index = pd.to_datetime(stock['date'])
stock_week = stock['close'].resample('W-MON').mean()
stock_train = stock_week['2020':'2022']
stock_train.plot(figsize=(12,8))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("Stock Close")
sns.despine()
# 一階差分
stock_diff = stock_train.diff()
stock_diff = stock_diff.dropna()
plt.figure()
plt.plot(stock_diff)
plt.title('一階差分')
#plt.show()
# ACF
acf = plot_acf(stock_diff, lags=20)
plt.title("ACF")
#acf.show()
# PACF
pacf = plot_pacf(stock_diff, lags=20)
plt.title("PACF")
#pacf.show()
# 進行預測
stock_train[np.isnan(stock_train)] = 0
stock_train[np.isinf(stock_train)] = 0
model = ARIMA(stock_train, order=(1, 1, 1), freq='W-MON')
result = model.fit()
#pred = result.predict('2022/1/1', '2022/6/1',dynamic=True, typ='levels')
#print (pred)
#print(help(result.predict))
pred = result.predict(start=len(stock_train)-3, end=len(stock_train)+3, dynamic=True, typ='levels')
print(pred)
plt.figure(figsize=(6, 6))
plt.xticks(rotation=45)
plt.plot(pred)
plt.plot(stock_train)
plt.show()

測試記錄:

預測只能預測一個趨勢,從下圖我們可以看到,預測的股價趨勢趨於平穩。

參考:

  1. https://study.163.com/course/introduction.htm?courseId=1003590004#/courseDetail?tab=1
  2. https://zhuanlan.zhihu.com/p/393083394

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved