# 导入包
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()
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]
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()
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() # 显示
先挖个坑:
上图中横坐标一条黑粗线,实际为每天股票日期,全部重叠在一起就变这条黑线 囧
原来想显示1-12月份的,但找了好多资料都还没完成,希望哪个大神看到能指导下,谢谢!
学会了回来补上
上图中我首先用蓝色绘制收盘价折线图,再用黄色绘制开盘价折线图,最后用红色绘制每日涨跌幅折线图,看起来是否很乱,如果再加上每天最高价和最低价,那就更无法见人了。
那么有什么方法能够在一张图中显示出这四种指标呢?答案是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() # 显示
在观察了价格的走势之后,我们来看看各指标之间的关系。
又挖了个坑:
学会了再说 囧