python股票分析挖掘预测金融大数据获取方法和实现(1)

本人股市多年的老韭菜了,各种股票分析书籍,技术指标书籍阅历无数,萌发想法,何不自己开发个股票预测分析软件,选择python因为够强大,它提供了很多高效便捷的数据分析工具包,

我们已经初步的接触与学习其中数据分析中常见的3大利器---Numpy,PandasMatplotlib库。

数据是万物之源,我们做股票分析,首要条件是获取最新的,最全面的金融数据,我们才能进行下一步开发。

我们获取数据主要有二大渠道,爬虫爬取金融网站数据和金融网站主动提供API接口方式获得,这一章简单介绍一下金融数据接口的使用方法:

 金融数据接口

目前有不少支持Python接口的金融数据库,比如Tushare、AKshare、Baostock、wind等,都可以获得国内股票、基金、期货、利率等数据。总共加起来几十个差不多,各位开发者可以按照自己的情况选择(很多接口版本如果升级,很大可能接口代码有所改变,所以开发者随时要调整代码,才能获得数据

(1)AKshare接口

 AKShare 是基于 Python 的开源金融数据接口库,目的是实现对股票、期货、期权、基金、债券、外汇等金融产品和另类数据从数据采集,数据清洗到数据下载的工具,满足金融数据科学家、数据科学爱好者在数据获取方面的需求。
它的特点是利用 AKShare 获取的是基于可信任数据源发布的原始数据,开发人员可以利用原始数据进行再加工,从而得出科学的结论。

  优点:

  • 码语法符合PEP8 规范数据接口的命名;
  • 最佳支持Python 3.7.5 及其以上版本;
  • 提供最佳的文档支持每个数据接口提供详细明和示例只需要复制粘就可以下数据;
  • 续维护由于目页变化而致的部分数据接口运行异常问题;
  • 更新财经数据接口时优化源;

  缺点:

如果是免费版本,如果访问过多随时封闭接口,也存在接口版本升级,很多获取数据代码随着改变,增加开发人员工作量。

安装: pip install akshare

 

代码案例:


import akshare as ak
import pandas as pd

pd.set_option('expand_frame_repr', False)  # True就是可以换行显示。设置成False的时候不允许换行
pd.set_option('display.max_columns', None)  # 显示所有列
# pd.set_option('display.max_rows', None)  # 显示所有行
pd.set_option('colheader_justify', 'centre')  # 显示居中


def a_hist():
    # period
    #     str
    #     choice of {'daily', 'weekly', 'monthly'}
    # start_date
    #     str
    #     开始查询的日期
    # end_date
    #     str
    #     结束查询的日期
    # adjust
    #     str
    #     默认返回不复权的数据;
    #     qfq: 返回前复权后的数据;
    #     hfq: 返回后复权后的数据
    stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="002389", period="weekly", start_date="20231001",
                                            end_date='20231227',
                                            adjust="qfq")
    print(stock_zh_a_hist_df)

if __name__ == "__main__":
    a_hist()
    # a_hist_min()


#执行结果成功得到数据:
           日期     开盘     收盘     最高     最低     成交量           成交额    振幅   涨跌幅   涨跌额   换手率
0   2023-10-13  19.98  20.14  21.46  19.83  665132  1.367442e+09  8.28  2.34  0.46  6.73
1   2023-10-20  20.32  19.72  21.12  19.60  598403  1.219992e+09  7.55 -2.09 -0.42  6.05
2   2023-10-27  19.59  20.55  20.68  18.79  497698  9.752065e+08  9.58  4.21  0.83  5.04
3   2023-11-03  20.35  19.82  20.46  19.58  447499  8.934958e+08  4.28 -3.55 -0.73  4.53
4   2023-11-10  19.86  19.69  20.06  19.39  429908  8.483078e+08  3.38 -0.66 -0.13  4.35

(2)pandasdatareader接口 

接口特点 

 pandasdatareader是一个使用Python语言获取数据的库,主要通过pandas库对Yahoo Finance、Google Finance、World Bank等数据源进行操作。pandasdatareader支持多个金融数据源,可以使用一个API来获取多个数据源的数据信息,使得数据的获取更加方便

   安装:pip install pandas-datareader 

代码案例: 


#使用pip进行安装:pip install pandas-datareader
import pandas as pd
import pandas_datareader.data as web

start = pd.to_datetime('2020-05-01')
end = pd.to_datetime('2023-05-31')

data = web.DataReader('AAPL', 'yahoo', start, end)
print(data.head())

(3) efinance接口 

优点

 efinance 是由个人打造的用于获取股票、基金、期货数据的免费开源 Python 库,你可以使用它很方便地获取数据以便更好地服务于个人的交易系统需求。

缺点

免费版查看数据的频率和接口获得的数据受到限制,具体的规则由接口提供者制定。

安装:pip install efinance

代码案例

 下面这个例子完成了从网上获取数据保存到本地,然后通过Matplotlib来实现简单的k线图



import efinance as ef



import mplfinance as mpf

import seaborn as sns


df = ef.stock.get_quote_history('600118', beg='20230601', end='20231101')
df.head()

df.to_csv('date.csv', encoding='utf-8-sig', index=None)

df_arr = df.values

from datetime import datetime

df['日期'] = df['日期'].apply(lambda x: datetime.strptime(x, '%Y-%m-%d'))
import matplotlib.pyplot as plt

plt.plot(df['日期'], df['收盘'])
plt.show()

# (7) 绘制股票K线图、均线图、成交量柱状图
fig, axes = plt.subplots(2, 1, sharex=True, figsize=(15, 8))
ax1, ax2 = axes.flatten()
mpf.candlestick(ax1, df_arr, width=0.6, colorup='r', colordown='g', alpha=1.0)
ax1.plot(df_arr[:, 0], df['MA5'])
ax1.plot(df_arr[:, 0], df['MA10'])
ax1.set_title('万科A')
ax1.set_ylabel('价格')
ax1.grid(True)
ax1.xaxis_date()
ax2.bar(df_arr[:, 0], df_arr[:, 5])
ax2.set_xlabel('日期')
ax2.set_ylabel('成交量')
ax2.grid(True)
ax2.xaxis_date()

本地date.csv数据保存成功,呈现出来的k线图

 

其他接口

除此以外还有几十种金融数据接口,就不一一介绍,有兴趣的朋友可以研究,选择自己合适的开发
附国内外金融数据接口大全
•    findatapy - 获取彭博终端,Quandl和雅虎财经的数据
•    googlefinance - 从谷歌财经获取实时股票价格
•    yahoo-finance - 从雅虎财经下载股票报价,历史价格,产品信息和财务报表
•    pandas-finance - 提供高级接口下载和分析金融时间序列
•    pyhoofinance - 从雅虎财经批量获取股票数据
•    yfinanceapi - 从雅虎财经获取数据
•    yql-finance - 从雅虎财经获取数据
•    ystockquote - 从雅虎财经获取实时报价
•    wallstreet - 实时股票和期权报价
•    stock_extractor - 从网络上爬取股票信息
•    Stockex - 从雅虎财经获取数据
•    finsymbols - 获取全美证券交易所,纽约证券交易所和纳斯达克上市公司的详细数据
•    inquisitor - 从Econdb获取经济数据,Econdb是全球经济指标聚合器
•    chinesestockapi - 获取A股数据
•    exchange - 获取最新的汇率报价
•    ticks - 命令行程序,获取股票报价
•    pybbg - 彭博终端COM的Python接口
•    ccy - 获取外汇数据
•    tushare - 获取中国股票,基金,债券和期货市场的历史数据
•    jsm - 获取日本股票市场的历史数据
•    cn_stock_src - 从不同数据源获取中国的股票数据
•    coinmarketcap - 从coinmarketcap获取数字货币数据
•    after-hours - 获取美股盘前和盘后的市场价格
•    bronto-python - 整合Bronto API接口
•    pytdx - 获取中国国内股票的实时报价
•    pdblp - 整合Pandas和彭博终端的公共接口
•    tiingo - 从Tiingo平台获取股票日K线和实时报价/新闻流
•    IEX - 从IEX交易所获取股票的实时报价和历史数据
•    alpaca-trade-api - 从Alpaca平台获取股票实时报价和历史数据,并提供交易接口交易美股
•    metatrader5 - 集成Python和MQL5交易平台,适合外汇交易
•    akshare - 获取中国股票,基金,债券和宏观经济数据
•    yahooquery - 从雅虎财经获取数据
•    investpy - 从英为财经(http://Investing.com)获取数据
•    yliveticker - 从雅虎财经通过Websocket获取实时报价

注释:上述接口获取数据代码我已经整理完成,有兴趣的朋友可以下载研究。