利用API獲取金融資料並畫圖

Alex抱著爆米花發表於2020-12-15

利用 Tushare

首先這個社群是用積分制的,並不開放所有功能。比較受限,感覺不是很爽。
https://tushare.pro/
1.設定token

#先引入後面分析、視覺化等可能用到的庫
import tushare as ts
import pandas as pd  
import matplotlib.pyplot as plt
#正常顯示畫圖時出現的中文和負號
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False

#設定token
token='你的token'
#ts.set_token(token)
pro = ts.pro_api(token)

2.分析個股行情資料:
利用**pro.stock_basic()**函式
引數:is_hs:是否滬深港通標的,N否、H滬股通、S深股通;list_status:上市狀態,L上市、D退市、P暫停上市;exchange:交易所 SSE上交所,SZSE深交所,HKEX港交所。
pro.daily(ts_code= 或 trade_date=)
日行情:daily;周行情:weekly;月行情:monthly

#獲取當前上市的股票程式碼、簡稱、註冊地、行業、上市時間等資料
basic=pro.stock_basic(list_status='L')

#獲取平安銀行日行情資料
pa=pro.daily(ts_code='000001.SZ', start_date='20180101',
               end_date='20190106')
#K線圖視覺化
from pyecharts import Kline
pa.index=pd.to_datetime(pa.trade_date)
pa=pa.sort_index()
v1=list(pa.loc[:,['open','close','low','high']].values)
t=pa.index
v0=list(t.strftime('%Y%m%d'))
kline = Kline("平安銀行K線圖",title_text_size=15)
kline.add("", v0, v1,is_datazoom_show=True,
         mark_line=["average"],
         mark_point=["max", "min"],
         mark_point_symbolsize=60,
         mark_line_valuedim=['highest', 'lowest'] )
kline.render("上證指數圖.html")

pyecharts 的圖還是很漂亮的
在這裡插入圖片描述
3.獲取多隻股票並儲存資料

#定義獲取多隻股票函式:
def get_stocks_data(stocklist,start,end):
    all_data={}
    for code in stocklist:
        all_data[code]=pro.daily(ts_code=code,
                 start_date=start, end_date=end)
    return all_data
#儲存本地
def save_data(all_data):
    for code,data in all_data.items():
        data.to_csv(r'data/'+code+'.csv',
                     header=True, index=False)

stocklist=list(basic.ts_code)[:15]
start=''
end=''
all_data=get_stocks_data(stocklist,start,end)
all_data['000002.SZ'].tail()

#將資料儲存到本地
save_data(all_data)

#讀取本地資料夾裡所有檔案
import os
#檔案儲存路徑
file=r'data/'
g=os.walk(file)
filenames=[]
for path,d,filelist in g:
    for filename in filelist:
        filenames.append(os.path.join(filename))
print(filenames)
#將讀取的資料檔案放入一個字典中
df={}
#從檔名中分離出股票程式碼
code=[name.split('.')[0] for name in filenames]
for i in range(len(filenames)):
    filename=file+filenames[i]
    df[code[i]]=pd.read_csv(filename)

利用 BaoStock

開放,並且官方文件就是例子。很清晰。http://baostock.com/baostock/index.php/Python_API%E6%96%87%E6%A1%A3#HelloWorld

"""
author: wpc
date: 2020-12-15   14:04
"""

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import baostock as bs# pip install baostock
import baostock as bs
import pandas as pd

#### 登陸系統 ####
lg = bs.login()

#### 獲取歷史K線資料 ####
# query_history_k_data()
fields= "date,code,open,high,low,close"
rs = bs.query_history_k_data("sh.000001", fields,
    start_date='2000-01-01', end_date='2018-09-07',
    frequency="d", adjustflag="2")
#frequency="d"取日k線,adjustflag="3"預設不復權,
#1:後復權;2:前復權

data_list = []
while (rs.error_code == '0') & rs.next():
    # 獲取一條記錄,將記錄合併在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
result.index=pd.to_datetime(result.date)
#### 結果集輸出到csv檔案 ####
#result.to_csv("c:/zjy/history_k_data.csv",
#        encoding="gbk", index=False)
result.head()
#### 登出系統 ####
#bs.logout()

result.info()

#將某些object轉化numeric
result=result.apply(pd.to_numeric, errors='ignore')
result.info()

result.close.plot(figsize=(16,8))
ax = plt.gca()#獲得當前的座標軸
ax.spines['right'].set_color('none')#將座標軸的上和右去掉
ax.spines['top'].set_color('none')
plt.show()

在這裡插入圖片描述
感謝這篇文章https://zhuanlan.zhihu.com/p/54299970

相關文章