python分析股票数据_Python数据可视化——股票数据分析
1.背景
GAFATA,它表示的是GOOGLE,AMAZON,FACEBOOK,APPLE,TENCENT,ALIBABA这六家互联网巨头的首字母缩写。本文主要分析GAFATA这六家公司股票近一年的的涨跌情况。
2.过程
先使用conda安装:
1)在python环境下安装数据分析pandas包,和互联数据获取包pandas-datareader
#导入包
#数据分析包
import pandas as pd
'''互联数据获取包注意:安装包的命令中的连接符是‘-’也就是pandas-datareader。但是这里导入包的连接符是下划线‘_’,也就是pandas-datareader这里一定要注意安装和导入包这两个连接符是不一样的,不然无法导入使用'''
from pandas_datareader import data
# 存在的问题:由于是从国外获取股票数据,会由于网络不稳定,获取数据失败,多运行几次这个cell就好了
'''获取国内股票数据的方式是:“股票代码”+“对应股市”(港股为.hk,A股为.ss)例如腾讯是港股是:0700.hk'''
#字典:6家公司的股票
gafataDict={'谷歌':'GOOG','亚马逊':'AMZN','Facebook':'FB',
'苹果':'AAPL','阿里巴巴':'BABA','腾讯':'0700.hk'}
'''定义函数函数功能:计算股票涨跌幅=(现在股价-买入价格)/买入价格输入参数:column是收盘价这一列的数据返回数据:涨跌幅'''
def change(column):
#买入价格
buyPrice=column[0]
#现在股价
#column.size是总共数据条数,序号是从0开始的,所以最后一条数据的序号是总数目-1
curPrice=column[column.size-1]
#累计涨跌幅
priceChange=(curPrice-buyPrice)/buyPrice
#判断股票是上涨,还是下跌
if(priceChange>0):
print('股票累计上涨=',priceChange*100,'%')
elif(priceChange==0):
print('股票累没有变化=',priceChange*100,'%')
else:
print('股票累计下跌',priceChange*100,'%')
#返回数据
return priceChange
阿里巴巴
'''get_data_yahoo表示从雅虎数据源获取股票数据,官网使用操作文档:http://pandas-datareader.readthedocs.io/en/latest/remote_data.html可能存在的问题:1)由于是从国外获取股票数据,会由于网络不稳定,获取数据失败,多运行几次这个cell就好了2)如果多运行几次还是无法获的股票数据,使用这个链接里的方法:https://pypi.org/project/fix-yahoo-finance/0.0.21/3)如果经过上面2个方法还不行,打开这个官网使用文档(http://pandas-datareader.readthedocs.io/en/latest/remote_data.html),换其他的财经数据源试试'''
# 获取哪段时间范围的股票数据
start_date = '2017-11-15'
end_date = '2018-11-15'
#从雅虎财经数据源(get_data_yahoo)获取阿里巴巴股票数据
babaDf=data.get_data_yahoo(gafataDict['阿里巴巴'],start_date, end_date)
#或者从Morningstar数据源获取阿里巴巴数据
#babaDf=data.DataReader(gafataDict['阿里巴巴'],'morningstar',start_date, end_date)
'''每日股票价位信息Open:开盘价High:最高加Low:最低价Close:收盘价Volume:成交量下面我们主要关注每日的收盘价'''
#查看前5行数据
babaDf.head()
#股票数据的行索引是时间序列类型,记录每天的股票信息
babaDf.index
DatetimeIndex(['2017-11-14', '2017-11-15', '2017-11-16', '2017-11-17',
'2017-11-20', '2017-11-21', '2017-11-22', '2017-11-24',
'2017-11-27', '2017-11-28',
...
'2018-11-02', '2018-11-05', '2018-11-06', '2018-11-07',
'2018-11-08', '2018-11-09', '2018-11-12', '2018-11-13',
'2018-11-14', '2018-11-15'],
dtype='datetime64[ns]', name='Date', length=254, freq=None)
#查看数据集情况
babaDf.info()
DatetimeIndex: 254 entries, 2017-11-14 to 2018-11-15
Data columns (total 6 columns):
Open 254 non-null float64
High 254 non-null float64
Low 254 non-null float64
Close 254 non-null float64
Adj Close 254 non-null float64
Volume 254 non-null int64
dtypes: float64(5), int64(1)
memory usage: 13.9 KB
#查看每一列数据类型
babaDf.dtypes
Open float64
High float64
Low float64
Close float64
Adj Close float64
Volume int64
dtype: object
#查看数据集描述统计信息
babaDf.describe()
#获取收盘价Close这一列的数据
closeCol=babaDf['Close']
#调用函数,获取涨跌幅
babaChange=change(closeCol)
股票累计下跌 -14.0656763214 %
谷歌
#获取谷歌股票数据
googDf=data.get_data_yahoo(gafataDict['谷歌'],start_date, end_date)
googDf.head()
'''累计涨幅'''
#获取收盘价Close这一列的数据
closeCol=googDf['Close']
#调用函数,获取涨跌幅
googChange=change(closeCol)
股票累计上涨= 3.77290068226 %
亚马逊
#获取亚马逊股票数据
amazDf=data.get_data_yahoo(gafataDict['亚马逊'],start_date, end_date)
amazDf.head()
'''累计涨幅'''
#获取收盘价Close这一列的数据
closeCol=amazDf['Close']
#调用函数,获取涨跌幅
amazChange=change(closeCol)
股票累计上涨= 42.4510036094 %
#获取Facebook股票数据
fbDf=data.get_data_yahoo(gafataDict['Facebook'],start_date, end_date)
fbDf.head()
'''累计涨幅'''
#获取收盘价Close这一列的数据
closeCol=fbDf['Close']
#调用函数,获取涨跌幅
fbChange=change(closeCol)
股票累计下跌 -19.2171615965 %
苹果
#获取苹果股票数据
applDf=data.get_data_yahoo(gafataDict['苹果'],start_date, end_date)
applDf.head()
'''累计涨幅'''
#获取收盘价Close这一列的数据
closeCol=applDf['Close']
#调用函数,获取涨跌幅
applChange=change(closeCol)
股票累计上涨= 11.7135569444 %
腾讯
#获取亚马逊股票数据
txDf=data.get_data_yahoo(gafataDict['腾讯'],start_date, end_date)
#腾讯是港股,所以这里的收盘价是港币,按照今天的汇率将其转化为美元
exchange=0.1278 #港币兑换美元的汇率,这个值可以根据在网上查到当天的最新汇率
#为了方便后期多家公司的股价比较,增加新的一列收盘价(美元)
txDf['Close_dollar']= txDf['Close']* exchange
#txDf.dropna(axis=0,how='any',inplace=True)#(axis=0,how='any')
txDf.head()
'''累计涨幅'''
#获取收盘价Close这一列的数据
closeCol=txDf['Close']
#调用函数,获取涨跌幅
txChange=change(closeCol)
股票累计下跌 -28.3550929504 %
数据可视化
%matplotlib inline
#导入可视化包
import matplotlib.pyplot as plt
折线图:绘制股票走势
'''横轴x是股票时间(babaDf.index是Pandas二维数据Dataframe的行索引,这里是时间序列)纵轴y是收盘价Close这一列数据plot默认是线条图'''
babaDf.plot(x=babaDf.index,y='Close')
#x坐标轴文本
plt.xlabel('时间')
#y坐标轴文本
plt.ylabel('股价(美元)')
#图片标题
plt.title('2017年阿里巴巴股价走势')
#显示网格
plt.grid(True)
#显示图形
plt.show()
分析结果:通过图中显然可以看出阿里巴巴的股票价格总体趋势是增长的,是值得投资的一家公司。
'''上面绘图后,横坐标没有显示出来,原因:1)先查看你的数据框索引是不是日期类型的,如果不是,将数据框索引转换成日期类型的2)如果获取数据来源,前面换成了数据源(morningstar),后面绘图的时候需要重置索引,代码如下:babaDf.reset_index(inplace=True)babaDf.set_index('Date',inplace=True)#查看索引是否重置成功babaDf.head()'''
"\n上面绘图后,横坐标没有显示出来,原因:\n1)先查看你的数据框索引是不是日期类型的,如果不是,将数据框索引转换成日期类型的\n2)如果获取数据来源,前面换成了数据源(morningstar),后面绘图的时候需要重置索引,代码如下:\n\nbabaDf.reset_index(inplace=True)\nbabaDf.set_index('Date',inplace=True)\n#查看索引是否重置成功\nbabaDf.head()\n\n"
散点图:成交量和股价
'''我们给plot传入的横轴x坐标轴数据成交量这一列的数据,纵轴y坐标轴数据是收盘价这一列的数据,同时增加了一个参数叫kind这个值表示绘制图形的类型,这里的值等于scatter表示绘制散点图。kind取值(图形类型)参考官方文档:http://pandas.pydata.org/pandas-docs/stable/visualization.html'''
babaDf.plot(x='Volume',y='Close',kind='scatter')
#x坐标轴文本
plt.xlabel('成交量')
#y坐标轴文本
plt.ylabel('股价(美元)')
#图片标题
plt.title('成交量和股价')
#显示网格
plt.grid(True)
#显示图形
plt.show()
#得到相关系数矩阵
babaDf.corr()
GAFATA股价走势比较
#绘制谷歌的画纸1
ax1=googDf.plot(x=googDf.index,y='Close')
#通过指定画纸ax,在同一张画纸上绘图
#亚马逊
amazDf.plot(ax=ax1,x=amazDf.index,y='Close')
fbDf.plot(ax=ax1,x=fbDf.index,y='Close')
#苹果
applDf.plot(ax=ax1,x=applDf.index,y='Close')
#阿里巴巴
babaDf.plot(ax=ax1,x=babaDf.index,y='Close')
#腾讯
txDf.plot(ax=ax1,x=txDf.index,y='Close_dollar')
#x坐标轴文本
plt.xlabel('时间')
#y坐标轴文本
plt.ylabel('股价(美元)')
#图片标题
plt.title('2018年GAFATA股价累计涨幅比较')
#显示网格
plt.grid(True)
plt.show()
'''使用label自定义图例'''
#绘制谷歌的画纸1
ax1=googDf.plot(x=googDf.index,y='Close',label='谷歌')
#通过指定画纸ax,在同一张画纸上绘图
#亚马逊
amazDf.plot(ax=ax1,x=amazDf.index,y='Close',label='亚马逊')
fbDf.plot(ax=ax1,x=fbDf.index,y='Close',label='Facebook')
#苹果
applDf.plot(ax=ax1,x=applDf.index,y='Close',label='苹果')
#阿里巴巴
babaDf.plot(ax=ax1,x=babaDf.index,y='Close',label='阿里巴巴')
#腾讯
txDf.plot(ax=ax1,x=txDf.index,y='Close_dollar',label='腾讯')
#x坐标轴文本
plt.xlabel('时间')
#y坐标轴文本
plt.ylabel('股价(美元)')
#图片标题
plt.title('2018年GAFATA累计涨幅')
#显示网格
plt.grid(True)
plt.show()
因为谷歌和亚马逊的股价比较高,造成我们看不出其他4家公司的股票走势。 所以根据股价我们可以将这6家公司分成2组,一组是股价较高的谷歌和亚马逊。另外一组是股价较低的4家公司。
'''第1组:谷歌,亚马逊'''
#绘制谷歌的画纸2
ax2=googDf.plot(x=googDf.index,y='Close',label='谷歌')
#通过指定画纸ax,在同一张画纸上绘图
#亚马逊
amazDf.plot(ax=ax2,x=amazDf.index,y='Close',label='亚马逊')
#x坐标轴文本
plt.xlabel('时间')
#y坐标轴文本
plt.ylabel('股价(美元)')
#图片标题
plt.title('2018年谷歌和亚马逊累计涨幅')
#显示网格
plt.grid(True)
plt.show()
'''第2组:4家公司'''
#绘制Facebook的画纸3
#通过指定画纸ax,在同一张画纸上绘图
ax3=fbDf.plot(x=fbDf.index,y='Close',label='Facebook')
#苹果
applDf.plot(ax=ax3,x=applDf.index,y='Close',label='苹果')
#阿里巴巴
babaDf.plot(ax=ax3,x=babaDf.index,y='Close',label='阿里巴巴')
#腾讯
txDf.plot(ax=ax3,x=txDf.index,y='Close_dollar',label='腾讯')
#x坐标轴文本
plt.xlabel('时间')
#y坐标轴文本
plt.ylabel('股价(美元)')
#图片标题
plt.title('GAFATA2018年累计涨幅')
#显示网格
plt.grid(True)
plt.show()
柱状图:六家公司股票的平均值
#6家公司股票收盘价平均值
gafataMeanList=[googDf['Close'].mean(),#谷歌
amazDf['Close'].mean(),#亚马逊
fbDf['Close'].mean(),#Facebook
applDf['Close'].mean(),#苹果
babaDf['Close'].mean(),#阿里巴巴
txDf['Close_dollar'].mean()#腾讯
]
#创建pandas一维数组Series
gafataMeanSer=pd.Series(gafataMeanList,
index=['谷歌',
'亚马逊',
'Facebook',
'苹果',
'阿里巴巴',
'腾讯'])
gafataMeanSer.plot(kind='bar',label='GAFATA')
#图片标题
plt.title('2017年GAFATA股价平均值')
#x坐标轴文本
plt.xlabel('公司名称')
#y坐标轴文本
plt.ylabel('股价平均值(美元)')
plt.grid(True)
plt.show()
分析结果:可以看出,仅从股票价格上来判断,亚马逊和谷歌的股票价格要远远的超过了其他四家。但是这里只是算的平均值,下面我们看下用四分位数绘制的箱线图
#存放6家公司的收盘价
closeDf=pd.DataFrame()
#合并6家公司的收盘价
closeDf=pd.concat([closeDf,googDf['Close'],#谷歌
amazDf['Close'],#亚马逊
fbDf['Close'],#Facebook
applDf['Close'],#苹果
babaDf['Close'],#阿里巴巴
txDf['Close_dollar']#腾讯
],axis=1)
#重命名列名为公司名称
closeDf.columns=['谷歌','亚马逊','Facebook','苹果','阿里巴巴','腾讯']
#closeDf.head()
#箱线图
closeDf.plot(kind='box')
plt.grid(True)
plt.show()
python分析股票数据_Python数据可视化——股票数据分析相关推荐
- [译] 使用 python 分析 14 亿条数据
原文地址:Analysing 1.4 billion rows with python 原文作者:Steve Stagg 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold ...
- python分析股票主力_python如何获取股票数据,python股票分析系统
内容导航: Q1:怎样用python处理股票 用Python处理股票需要获取股票数据,以国内股票数据为例,可以安装Python的第三方库:tushare:一个国内股票数据获取包.可以在百度中搜索&qu ...
- python图形绘制星空图_Python数据可视化教程:基于Plotly的动态可视化绘图
1. plotly 介绍 Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图, 下面我们以jupyter ...
- python支付宝蚂蚁森林_Python数据可视化-支付宝蚂蚁森林能量收取记录
支付宝蚂蚁森林模块最早从2016年推出,题主最开始从支付宝集福活动开始接触.期间懒懒散散收过一些能量,但是相比朋友圈动辄几十几百公斤的能量值,我的能量值只有20Kg,想种棵胡杨连零头都不够.所以,本着 ...
- matplotlib柱状图上方显示数据_Python数据可视化之matplotlib
数据可视化能让人们更直观的传递数据所要表达的信息.Python 中有两个专用于可视化的库,matplotlib 和 seaborn ,本文将介绍matplotlib. Matplotlib:基于Pyt ...
- python的歌曲评论数据分析_用Python分析44万条数据,揭秘如何成为网易云音乐评论区的网红段子手...
有个段子讲"十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单身狗",网易云音乐的评论区也一直都是各类文案大神的聚集地. 那么我们普通用户到底如何成为网易云音乐评论里的热评 ...
- python归档excel数据_python 数据存储excel
Python的小数据存储,用什么格式更有逼格? 小数据存储 我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者excel存储.但如果只是一些小数据,或 ...
- 如何用 Python 分析 14 亿条数据?
(点击视学算法公众号,可快速关注) 英文:Steve Stagg,翻译:Ryden Sun juejin.im/post/5aceae206fb9a028d2084fea Google Ngram v ...
- Python 分析 9 万条数据告诉你复仇者联盟谁才是绝对 C 位!
<复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即: 漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁侠.惊奇队长.浩克.索尔等人在维护 ...
最新文章
- mysql存储过程语法及实例
- vs代码补全的快捷键_一款Python编程的自动补全插件神器——kite
- 团队作业-Beta冲刺(周三)
- 字符串-拆分和拼接字符串
- Binary tree paths-深度优先遍历DFS
- 手写Maven的archetype项目脚手架
- 流畅的python读书笔记-第十章-序列的修改、散列和切片
- Docker入门之-网络(三):容器如何与外部世界通信
- 【牛腩】-母版图片不显示问题
- 【Vue实用功能】Vue实现tab页多页面切换
- 注解—— java.lang.annotation.Annotation
- JavaWeb在线考试系统(简单版)
- 程序员的自我修养——SQL语言及MySQL数据库
- 在apache中运行 cgi程序
- 解决 Chrome浏览器网页上出现光标,无法通过键盘方向键实现页面滚动的问题
- Visual assistx(西红柿)插件的安装及简单使用
- Sentaurus命令注释
- 初尝Windows8预览版
- DMMS工具介绍-更改Android虚拟机默认安装位置
- Windows下mklink使用, 硬链接, 软链接和快捷方式的区别
热门文章
- 定制自己的Windows CE 5.0 ARM中文模拟器(转)
- MS SQL入门基础:触发器概述
- 3.1_ 1_ 内存的基础知识
- vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈)
- SpringBoot笔记整理(四)
- html 链接section,HTML section 标签
- k折交叉验证法python实现_Jason Brownlee专栏| 如何解决不平衡分类的k折交叉验证-不平衡分类系列教程(十)...
- Chrome划词翻译插件
- JavaSE——面向对象基础(思想、类与对象、构造方法、重载、匿名对象)
- 数字图像处理总结(冈萨雷斯版)