学习用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 # 用来正常显示负号

matplotlib 显示中文乱码问题,详细查看 https://segmentfault.com/a/1190000005144275

# 绘制图表
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() # 显示

学习用Python分析股票数据(入门)_第1张图片

先挖个坑:

上图中横坐标一条黑粗线,实际为每天股票日期,全部重叠在一起就变这条黑线

原来想显示1-12月份的,但找了好多资料都还没完成,希望哪个大神看到能指导下,谢谢!

学会了回来补上

上图中我首先用蓝色绘制收盘价折线图,再用黄色绘制开盘价折线图,最后用红色绘制每日涨跌幅折线图,看起来是否很乱,如果再加上每天最高价和最低价,那就更无法见人了。
那么有什么方法能够在一张图中显示出这四种指标呢?答案是K线图。

K线图

相传K线图起源于日本德川幕府时代,当时的商人用此图来记录米市的行情和价格波动,后来K线图被引入到股票市场。每天的四项指标数据用如下蜡烛形状的图形来记录,不同的颜色代表涨跌情况。

再来挖个坑:

利用上面得到数据绘制K线图,没成功

先学习了Matplotlib 入门教程(https://blog.csdn.net/wizardforcel/article/details/54407212) 再来

学会了回来补上

三、数据分析

相对变化量

参考自:https://www.jianshu.com/p/ce0e0773c6ec

股票中关注的不是价格的绝对值,而是相对变化量。有多种方式可以衡量股价的相对值,最简单的方法就是将股价除以初始时的价格。

方法一: 前面介绍的计算每日涨跌幅

(收盘价-开盘价)/ 开盘价
# 绘制图表
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() # 显示

学习用Python分析股票数据(入门)_第2张图片

相关关系

在观察了价格的走势之后,我们来看看各指标之间的关系。

又挖了个坑:

学会了再说

你可能感兴趣的:(Python,数据分析)