pandas查詢股票交易記錄
㈠ 簡單的用Python採集股票數據,保存表格後分析歷史數據
學習使用Python分析股票歷史數據,為位元組跳動上市後可能成為我國第一個世界首富的鍾老闆提前打下基礎。現在,讓我們開始正文。
准備工作
在開始之前,確保你的環境已准備好。使用Python的環境,安裝第三方模塊:requests和pandas。這些模塊通過命令行安裝,只需在命令行中輸入:pip install requests pandas。
案例實現流程
分析數據來源,確定要採集的股票數據。接下來,編寫代碼實現流程,包括數據請求、響應處理、數據提取和保存。
代碼解析
獲取數據來源網站的請求,並確保請求成功。從響應中獲取數據,根據數據格式使用適當的方法提取所需信息。最後,將採集到的數據保存到表格文件中。
效果展示
成功採集數據並保存到表格後,展示實際代碼實現和結果。為了方便學習,我已將採集數據和可視化分析的代碼打包,只需點擊「閱讀原文」即可獲取。
可視化分析
通過分析保存的表格數據,可以進行可視化展示,更直觀地理解股票的歷史表現。這部分代碼已包括在打包的文件中,幫助你更好地進行分析。
總結
今天的分享到此結束,希望你已經掌握了如何使用Python採集和分析股票數據的技能。下次分享時,我們將會探討更多關於數據科學和金融分析的知識。期待與你再次相遇,一起探索更多可能性。
㈡ 【手把手教你】Python獲取股票數據和可視化
數據獲取是金融量化分析的核心環節,沒有可靠數據,量化分析便無從談起。在數據獲取渠道日益多元化的背景下,Python以其強大的數據處理能力和豐富的開源庫,成為了金融量化領域不可或缺的工具。本文將圍繞Python獲取股票數據和可視化展開,旨在為金融量化入門者提供實用指南。
首先,數據獲取渠道的多樣性為金融量化分析提供了豐富的資源。雖然網路爬蟲技術在數據獲取方面具有不可忽視的作用,但本文更側重於介紹Python的開源數據包,如tushare、baostock、pandas_datareader和yahool等財經數據API。這些工具不僅簡化了數據獲取流程,還有效節省了學習成本和時間。
在實際應用中,tushare是一個功能強大的開源庫,廣泛應用於獲取財經和股票交易數據。最新版本的tushare pro提供了更加穩定和高質量的數據服務,涵蓋了滬深股票行情、財務數據、宏觀經濟等豐富信息。用戶可通過注冊獲取token進行免費使用。藉助tushare,用戶能夠輕松獲取個股行情、指數數據等多種類型的數據,極大地簡化了數據獲取流程。
baostock同樣是一個免費、開源的證券數據平台,提供了大量准確、完整的證券歷史行情數據和上市公司財務數據。通過Python API,用戶可以方便地獲取所需數據,並以pandas DataFrame格式進行處理,便於後續的數據分析與可視化操作。
對於雅虎財經API,雖然其原始版本在2018年後不再維護,但仍有大神推出了修復版本,使得用戶仍能藉助Python獲取財務數據。用戶只需通過pip安裝該修復版即可。
本文的目的是為了引導讀者了解如何利用Python獲取股票數據,並進行初步的可視化處理。通過掌握這些工具,金融量化初學者能夠快速上手,為後續的深入學習打下堅實的基礎。同時,本文也強調了數據獲取渠道的多樣性,鼓勵探索更多資源,以滿足個性化需求。
㈢ 如何編程從免費股票軟體中提取實時數據
自己寫程序的話,一種方法是從已提供的信息源,例如webservice獲取數據。還有種辦法就是去連接提供即時信息的網頁硬解析。
代碼舉例如下:
Created on Thu Jul 23 09:17:27 2015
@author: jet
"""
DAY_PRICE_COLS = ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20', 'turnover']
DAY_PRICE_URL = '%sapi.finance.%s/%s/?code=%s&type=last'
INDEX_KEY = ['SH', 'SZ', 'HS300', 'SZ50', 'GEB', 'SMEB']
INDEX_LIST = {'SH': 'sh000001', 'SZ': 'sz399001', 'HS300': 'sz399300',
'SZ50': 'sh000016', 'GEB': 'sz399006', 'SMEB': 'sz399005'}
INDEX_DAY_PRICE_COLS= ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20']
K_TYPE_KEY = ['D', 'W', 'M']
K_TYPE_MIN_KEY = ['5', '15', '30', '60']
K_TYPE = {'D': 'akdaily', 'W': 'akweekly', 'M': 'akmonthly'}
MIN_PRICE_URL = '%sapi.finance.%s/akmin?scode=%s&type=%s'
PAGE_TYPE = {'http': 'http://', 'ftp': 'ftp://'}
PAGE_DOMAIN = {'sina': 'sina.com.cn', 'ifeng': 'ifeng.com'}
URL_ERROR_MSG = '獲取失敗,請檢查網路狀態,或者API埠URL已經不匹配!'
get_hist_data.py
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 23 09:15:40 2015
@author: jet
"""
import const as ct
import pandas as pd
import json
from urllib2 import urlopen,Request
def get_hist_data(code = None, start = None, end = None, ktype = 'D'):
"""
功能:
獲取個股歷史交易數據
--------
輸入:
--------
code:string
股票代碼 比如:601989
start:string
開始日期 格式:YYYY-MM-DD 為空時取到API所提供的最早日期數據
end:string
結束日期 格式:YYYY-MM-DD 為空時取到最近一個交易日數據
ktype:string(default=D, 函數內部自動統一為大寫)
數據類型 D=日K線,W=周K線,M=月K線,5=5分鍾,15=15分鍾
30=30分鍾,60=60分鍾
輸出:
--------
DataFrame
date 日期
open 開盤價
high 最高價
close 收盤價
low 最低價
chg 漲跌額
p_chg 漲跌幅
ma5 5日均價
ma10 10日均價
ma20 20日均價
vma5 5日均量
vma10 10日均量
vma20 20日均量
turnover換手率(指數無此項)
"""
code = code_to_APIcode(code.upper())
ktype = ktype.upper()
url = ''
url = get_url(ktype, code)
print(url)
js = json.loads(ping_API(url))
cols = []
if len(js['record'][0]) == 14:
cols = ct.INDEX_DAY_PRICE_COLS
else:
cols = ct.DAY_PRICE_COLS
df = pd.DataFrame(js['record'], columns=cols)
if ktype in ct.K_TYPE_KEY:
df = df.applymap(lambda x:x.replace(u',', u''))
for col in cols[1:]:
df[col]=df[col].astype(float)
if start is not None:
df = df [df.date >= start]
if end is not None:
df = df[df.date <= end]
df = df.set_index('date')
return df
def code_to_APIcode(code):
"""
功能:
驗證輸入的股票代碼是否正確,若正確則返回API對應使用的股票代碼
"""
print(code)
if code in ct.INDEX_KEY:
return ct.INDEX_LIST[code]
else:
if len(code) != 6:
raise IOError('code input error!')
else:
return 'sh%s'%code if code[:1] in ['5', '6'] else 'sz%s'%code
def get_url(ktype, code):
"""
功能:
驗證輸入的K線類型是否正確,若正確則返回url
"""
if ktype in ct.K_TYPE_KEY:
url = ct.DAY_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
ct.K_TYPE[ktype], code)
return url
elif ktype in ct.K_TYPE_MIN_KEY:
url = ct.MIN_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
code, ktype)
return url
else:
raise IOError('ktype input error!')
def ping_API(url):
"""
功能:
向API發送數據請求,若鏈接正常返回數據
"""
text = ''
try:
req = Request(url)
text = urlopen(req,timeout=10).read()
if len(text) < 15:
raise IOError('no data!')
except Exception as e:
print(e)
else:
return text
#測試入口
print(get_hist_data('601989','2015-07-11','2015-07-22'))