學習用Python分析股票資料(入門)
阿新 • • 發佈:2019-02-14
學習使用python來分析股票,主要事涉及資料獲取、資料視覺化,以及探究資料中各項指標的含義及和關係。
使用工具
pandas、numpy、datatime
pandas-datareader 線上獲取股票資料
matplotlib 資料視覺化
Jupyter Notebook 資料分析利器
#一、資料獲取
# 匯入包
import pandas as pd
import numpy as np
import pandas_datareader.data as web
from datetime import datetime
# 初始資料
# 建立字典
myDict = {'谷歌': 'GOOG',
'蘋果' : 'AAPL',
'阿里巴巴':'BABA',
'騰訊': '0700.hk'
}
# 時間
start = datetime(2017,1,1)
end = datetime(2017,12,31)
# 從IEX資料來源獲取谷歌股票資料
gdata = web.DataReader(myDict['蘋果'],'iex', start, end)
2y
# 檢視前5條資料
gdata.head()
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
open | high | low | close | volume | |
---|---|---|---|---|---|
date | |||||
2017-01-03 | 113.5044 | 114.0239 | 112.4850 | 113.8474 | 28781865 |
2017-01-04 | 113.5534 | 114.2003 | 113.4554 | 113.7200 | 21118116 |
2017-01-05 | 113.6220 | 114.5475 | 113.5142 | 114.2983 | 22193587 |
2017-01-06 | 114.4649 | 115.8176 | 114.1611 | 115.5725 | 31751900 |
2017-01-09 | 115.6118 | 117.0624 | 115.6020 | 116.6311 | 33561948 |
# 查詢某一天資料
gdata.loc['2017-09-11']
open 1.592756e+02
high 1.608138e+02
low 1.586703e+02
close 1.602680e+02
volume 3.158080e+07
Name: 2017-09-11, dtype: float64
# 逆序排列
gdata = gdata[::-1]
# 查詢前10條資料
# 將顯示重新排列後的結果
gdata[:10]
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
open | high | low | close | volume | |
---|---|---|---|---|---|
date | |||||
2017-12-29 | 169.8275 | 169.8972 | 168.5328 | 168.5428 | 25999922 |
2017-12-28 | 170.3056 | 171.1521 | 169.7877 | 170.3852 | 16480187 |
2017-12-27 | 169.4092 | 170.0865 | 169.0208 | 169.9072 | 21498213 |
2017-12-26 | 170.1064 | 170.7737 | 168.9899 | 169.8773 | 33185536 |
2017-12-22 | 173.9706 | 174.7116 | 173.7914 | 174.2993 | 16349444 |
2017-12-21 | 173.4627 | 175.3052 | 173.3930 | 174.2993 | 20949896 |
2017-12-20 | 174.1599 | 174.7076 | 172.5464 | 173.6420 | 23475649 |
2017-12-19 | 174.3192 | 174.6777 | 173.3830 | 173.8312 | 27436447 |
2017-12-18 | 174.1698 | 176.4804 | 174.1499 | 175.7036 | 29421114 |
2017-12-15 | 172.9249 | 173.4627 | 171.7596 | 173.2635 | 40169307 |
# 查詢更多資訊
gdata.info
# 檢視資料型別
gdata.dtypes
open float64
high float64
low float64
close float64
volume int64
dtype: object
# 檢視資料集描述統計資訊
gdata.describe()
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
open | high | low | close | volume | |
---|---|---|---|---|---|
count | 251.000000 | 251.000000 | 251.000000 | 251.000000 | 2.510000e+02 |
mean | 148.836282 | 149.783743 | 147.883783 | 148.936850 | 2.707997e+07 |
std | 15.244058 | 15.321351 | 14.973921 | 15.119471 | 1.128283e+07 |
min | 113.504400 | 114.023900 | 112.485000 | 113.720000 | 1.402667e+07 |
25% | 139.685100 | 140.516950 | 138.833550 | 139.606350 | 2.041327e+07 |
50% | 151.237300 | 152.158200 | 149.741000 | 150.873100 | 2.436148e+07 |
75% | 158.496600 | 159.448850 | 157.299600 | 158.595850 | 2.952661e+07 |
max | 174.398900 | 176.480400 | 174.149900 | 175.703600 | 1.119850e+08 |
二、資料觀察
每日股票資訊
open: 開盤價
high: 最高價
low: 最低價
close: 收盤價
volume: 成交量
下面我們主要來關注每日的收盤價
股票漲跌幅度
'''
定義函式:計算機股票漲跌幅 =(現在股價-買入價格)/買入價格
輸入引數:column 表示收盤價這一列資料
返回漲跌幅
'''
def change(column):
# 買入價格 年初
buyPrice = column[0]
# 現在價格 年末
curPrice = column[len(gdata)-1]
changePrice = (curPrice - buyPrice)/buyPrice
# 判斷股價變化
if changePrice > 0:
print('股票累計上漲=',changePrice)
elif changePrice == 0:
print('股票累計沒有變化=',changePrice)
else:
print('股票累計下跌=', changePrice)
return changePrice
# 檢視結果
bdata = gdata[::-1]
change(bdata['close'])
股票累計上漲= 0.48042730883621415
0.48042730883621415
資料視覺化-時間序列圖
以時間為橫座標,每日的收盤價為縱座標,繪製折線圖,可以觀察股票隨時間的波動情況。我們使用 matplotlib 包來繪製。
# 匯入繪圖包
#coding:utf-8
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False # 用來正常顯示負號
# 繪製圖表
fig, ax = plt.subplots(figsize=(14,8)) # 繪圖視窗大小
plt.title('2017年蘋果股票', fontsize=18) # 標題
ax.plot(bdata['close'],color='blue', label='收盤價')
ax.plot(bdata['open'],color='#F37726', label='開盤價')
ax.plot((bdata['close']-bdata['open']),color='red', label='每日漲跌(收盤價-開盤價)')
ax.grid(False) # 網格
ax.legend(frameon=False)
plt.xlabel('1-12月份', fontsize=14) # 橫座標
# plt.ylabel('收盤價', fontsize=14) #縱座標
# 刻度標記大小
# axis 可選擇引數 x,y,both
plt.tick_params(axis='both',labelsize=13)
# ax.axis('equal') # label顯示位置
plt.show() # 顯示
先挖個坑:
上圖中橫座標一條黑粗線,實際為每天股票日期,全部重疊在一起就變這條黑線 囧
原來想顯示1-12月份的,但找了好多資料都還沒完成,希望哪個大神看到能指導下,謝謝!
學會了回來補上
上圖中我首先用藍色繪製收盤價折線圖,再用黃色繪製開盤價折線圖,最後用紅色繪製每日漲跌幅折線圖,看起來是否很亂,如果再加上每天最高價和最低價,那就更無法見人了。
那麼有什麼方法能夠在一張圖中顯示出這四種指標呢?答案是K線圖。
K線圖
相傳K線圖起源於日本德川幕府時代,當時的商人用此圖來記錄米市的行情和價格波動,後來K線圖被引入到股票市場。每天的四項指標資料用如下蠟燭形狀的圖形來記錄,不同的顏色代表漲跌情況。
三、資料分析
相對變化量
股票中關注的不是價格的絕對值,而是相對變化量。有多種方式可以衡量股價的相對值,最簡單的方法就是將股價除以初始時的價格。
方法一: 前面介紹的計算每日漲跌幅
(收盤價-開盤價)/ 開盤價
# 繪製圖表
fig, ax = plt.subplots(figsize=(14,8)) # 繪圖視窗大小
plt.title('2017年蘋果股票', fontsize=18) # 標題
# 繪製參考線
(bdata['close']-bdata['open']).plot(grid=True, color='red', label='每日漲跌(收盤價-開盤價)').axhline(y=0, color='black', lw=2)
ax.legend(frameon=False)
plt.xlabel('1-12月份', fontsize=14) # 橫座標
plt.ylabel('漲跌幅度', fontsize=14) #縱座標
# 刻度標記大小
# axis 可選擇引數 x,y,both
plt.tick_params(axis='both',labelsize=13)
plt.show() # 顯示
相關關係
在觀察了價格的走勢之後,我們來看看各指標之間的關係。
又挖了個坑:
學會了再說 囧