1. 程式人生 > >學習用Python分析股票資料(入門)

學習用Python分析股票資料(入門)

學習使用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() # 顯示

這裡寫圖片描述

相關關係

在觀察了價格的走勢之後,我們來看看各指標之間的關係。

又挖了個坑:

學會了再說