股票数据分析数据可视化案例

首页 > 科技 > 大数据 > 正文 2021-08-30

发表自话题:股票柱状图颜色详解图


案例

6家公司股票:谷歌、亚马逊、Facebook、苹果、阿里巴巴、腾讯;数据来源:从雅虎数据源或Morningstar数据源获取阿里巴巴数据获取股票数据;绘制6家公司股价图、平均股价图等;


步骤如下

1、先使用conda安装:

1)先在conda中进入你notebook使用的python环境,例如你在notebook中使用的环境名称是py3, 那么conda命令就是:activate py3;

2)在你需要的python环境下安装数据分析pandas包,和互联数据获取包pandas-datareader;

互联数据获取包注意:安装包的命令中的连接符是‘-’也就是pandas-datareader。 但是导入包的连接符是下划线‘_’,也就是pandas-datareader 这里一定要注意安装和导入包这两个连接符是不一样的,不然无法导入使用。


1、导入包 #数据分析包 import pandas as pd #互联数据获取包 from pandas_datareader import data 获取国内股票数据的方式是:“股票代码”+“对应股市”(港股为.hkA股为.ss 例如腾讯是港股是:0700.hk 2、定义字典:6家公司的股票 gafataDict={'谷歌':'GOOG','亚马逊':'AMZN','Facebook':'FB', '苹果':'AAPL','阿里巴巴':'BABA','腾讯':'0700.hk'} 3、定义函数 函数功能:计算股票涨跌幅=(现在股价-买入价格)/买入价格 输入参数:column是收盘价这一列的数据 返回数据:涨跌幅 def change(column): buyPrice=column[0]#买入价格 curPrice=column[column.size-1] #现在股价,column.size是总共数据条数,序号是从0开始的,所以最后一条数据的序号是总数目-1 priceChange=(curPrice-buyPrice)/buyPrice#累计涨跌幅 if(priceChange>0):#判断股票是上涨,还是下跌 print('股票累计上涨=',priceChange*100,'%') elif(priceChange==0): print('股票累没有变化=',priceChange*100,'%') else: print('股票累计下跌',priceChange*100,'%') #返回数据 return priceChange


接下来获取6家公司从到之间的股票数据。


一、获取数据

获取股票数据分方法:

方法1:从雅虎数据源获取股票数据,函数为get_data_yahoo,官网使用操作文档: http://pandas-datareader.readthedocs.io/en/latest/remote_data.html;方法2:从Morningstar数据源获取数据。本文案例主要从雅虎数据源获取股票数据。


获取数据过程存在问题时的解决方案:

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), 换其他的财经数据源试试。


每日股票价位信息:

Open:开盘价 High:最高加Low:最低价 Close:收盘价 Volume:成交量


1、阿里巴巴

(1)获取哪段时间范围的股票数据 start_date = '2017-01-01' end_date = '2018-01-01' (2)从雅虎财经数据源(get_data_yahoo)获取阿里巴巴股票数据 babaDf=data.get_data_yahoo(gafataDict['阿里巴巴'],start_date, end_date) 或者从Morningstar数据源获取阿里巴巴数据 #babaDf=data.DataReader(gafataDict['阿里巴巴'],'morningstar',start_date, end_date) #查看前5行数据 babaDf.head()3)查看数据信息 1)股票数据的行索引是时间序列类型,记录每天的股票信息 babaDf.index DatetimeIndex(['2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-09', '2017-01-10', '2017-01-11', '2017-01-12', '2017-01-13', '2017-01-17', ... '2017-12-15', '2017-12-18', '2017-12-19', '2017-12-20', '2017-12-21', '2017-12-22', '2017-12-26', '2017-12-27', '2017-12-28', '2017-12-29'], dtype='datetime64[ns]', name='Date', length=251, freq=None) 2)查看数据集情况 babaDf.info() DatetimeIndex: 251 entries, 2017-01-03 to 2017-12-29 Data columns (total 6 columns): High 251 non-null float64 Low 251 non-null float64 Open 251 non-null float64 Close 251 non-null float64 Volume 251 non-null int64 Adj Close 251 non-null float64 dtypes: float64(5), int64(1) memory usage: 13.7 KB 3)查看每一列数据类型 babaDf.dtypes High float64 Low float64 Open float64 Close float64 Volume int64 Adj Close float64 dtype: object 4)查看数据集描述统计信息 babaDf.describe()4)计算累计涨幅 1)取收盘价Close这一列的数据 closeCol=babaDf['Close'] 2)调用函数,获取涨跌幅 babaChange=change(closeCol) 股票累计上涨= 94. %

2、谷歌

1)获取谷歌股票数据 googDf=data.get_data_yahoo(gafataDict['谷歌'],start_date, end_date) googDf.head()2)计算累计涨幅 #获取收盘价Close这一列的数据 closeCol=googDf['Close'] #调用函数,获取涨跌幅 googChange=change(closeCol) 股票累计上涨= 33. %

3、亚马逊

1)获取亚马逊股票数据 amazDf=data.get_data_yahoo(gafataDict['亚马逊'],start_date, end_date) amazDf.head()2)累计涨幅 #获取收盘价Close这一列的数据 closeCol=amazDf['Close'] #调用函数,获取涨跌幅 amazChange=change(closeCol) 股票累计上涨= 55. %

4、Facebook

1)获取Facebook股票数据 fbDf=data.get_data_yahoo(gafataDict['Facebook'],start_date, end_date) fbDf.head() 2)累计涨幅 #获取收盘价Close这一列的数据 closeCol=fbDf['Close'] #调用函数,获取涨跌幅 fbChange=change(closeCol) 股票累计上涨= 51.00 %

5、苹果

1)获取苹果股票数据 applDf=data.get_data_yahoo(gafataDict['苹果'],start_date, end_date) applDf.head()2)累计涨幅 #获取收盘价Close这一列的数据 closeCol=applDf['Close'] #调用函数,获取涨跌幅 applChange=change(closeCol) 股票累计上涨= 45. %

6、腾讯

1)获取亚马逊股票数据 txDf=data.get_data_yahoo(gafataDict['腾讯'],start_date, end_date) txDf.head()#腾讯是港股,所以这里的收盘价是港币,按照今天的汇率将其转化为美元 exchange=0.1278 #港币兑换美元的汇率,这个值可以根据在网上查到当天的最新汇率 #为了方便后期多家公司的股价比较,增加新的一列收盘价(美元) txDf['Close_dollar']= txDf['Close']* exchange txDf.head()2)累计涨幅 #获取收盘价Close这一列的数据 closeCol=txDf['Close'] #调用函数,获取涨跌幅 txChange=change(closeCol) 股票累计上涨= 120. %

二、数据可视化

%matplotlib inline #导入可视化包 import matplotlib.pyplot as plt


(一)折线图:绘制股票走势

横轴x是股票时间,babaDf.index是Pandas二维数据Dataframe的行索引,这里是时间序列;纵轴y是收盘价Close这一列数据 plot默认是线条图


绘图时遇到横坐标没有显示出来的原因

先查看你的数据框索引是不是日期类型的,如果不是,将数据框索引转换成日期类型的 ;如果获取数据来源,前面换成了数据源(morningstar),后面绘图的时候需要重置索引。


解决方案:重置索引

重置索引代码如下:

babaDf.reset_index(inplace=True) babaDf.set_index('Date',inplace=True)


查看索引是否重置成功

babaDf.head()

1、重置索引

#阿里巴巴重置索引 babaDf.reset_index(inplace=True) babaDf.set_index('Date',inplace=True) #重置索引后 babaDf['Date']=babaDf.index babaDf.plot(x='Date',y='Close') #x坐标轴文本 plt.xlabel('time') #y坐标轴文本 plt.ylabel('price(dollar)') #图片标题 plt.title('Alibabas stock moves in 2017') #显示网格 plt.grid(True) #显示图形 plt.show()

(二)散点图:成交量和股价
babaDf.plot(x='Volume',y='Close',kind='scatter')
plt.xlabel('Volume')#x坐标轴文本
plt.ylabel('price(dollar)')#y坐标轴文本
plt.title('Volume and price')#图片标题
plt.grid(True)#显示网格

plt.show()#显示图形

得到相关系数矩阵

#得到相关系数矩阵 babaDf.corr()

接下来将6家公司股价绘制在一张图中。

(三)GAFATA股价走势比较

1、重置索引

#重置谷歌索引 googDf.reset_index(inplace=True) googDf.set_index('Date',inplace=True) #查看索引是否重置成功 googDf.head()

图略。

#重置亚马逊索引 amazDf.reset_index(inplace=True) amazDf.set_index('Date',inplace=True) #查看索引是否重置成功 amazDf.head()

图略。

#重置苹果索引 fbDf.reset_index(inplace=True) fbDf.set_index('Date',inplace=True) #查看索引是否重置成功 fbDf.head()

图略。

#重置腾讯索引 txDf.reset_index(inplace=True) txDf.set_index('Date',inplace=True) #查看索引是否重置成功 txDf.head()

图略。

2、绘图

#绘制谷歌的画纸1 googDf['Date']=googDf.index ax1=googDf.plot(x='Date',y='Close',label='goog') #通过指定画纸ax,在同一张画纸上绘图 #亚马逊 amazDf['Date']=amazDf.index amazDf.plot(ax=ax1,x='Date',y='Close',label='amaz') #Facebook fbDf['Date']=fbDf.index fbDf.plot(ax=ax1,x='Date',y='Close',label='Facebook') #苹果 applDf['Date']=applDf.index applDf.plot(ax=ax1,x='Date',y='Close',label='appl') #阿里巴巴 babaDf['Date']=babaDf.index babaDf.plot(ax=ax1,x='Date',y='Close',label='baba') #腾讯 txDf['Date']=txDf.index txDf.plot(ax=ax1,x='Date',y='Close_dollar',label='tx') #x坐标轴文本 plt.xlabel('time') #y坐标轴文本 plt.ylabel('price(dollar)') #图片标题 plt.title('GAFATA stock is up a bit more in 2018') #显示网格 plt.grid(True) plt.show()


因为谷歌和亚马逊的股价比较高,造成我们看不出其他4家公司的股票走势。所以根据股价我们可以将这6家公司分成2组:一组是股价较高的谷歌和亚马逊;另外一组是股价较低的4家公司。''' 第1组:谷歌,亚马逊 ''' #绘制谷歌的画纸2 googDf['Date']=googDf.index ax1=googDf.plot(x='Date',y='Close',label='goog') #通过指定画纸ax,在同一张画纸上绘图 #亚马逊 amazDf['Date']=amazDf.index amazDf.plot(ax=ax1,x='Date',y='Close',label='amaz') #x坐标轴文本 plt.xlabel('time') #y坐标轴文本 plt.ylabel('price(dollar)') #图片标题 plt.title('GAFATA stock is up a bit more in 2018') #显示网格 plt.grid(True) plt.show()


''' 第2组:4家公司 ''' #绘制Facebook的画纸3 fbDf['Date']=fbDf.index ax1=fbDf.plot(x='Date',y='Close',label='goog') #通过指定画纸ax,在同一张画纸上绘图 #苹果 applDf['Date']=applDf.index applDf.plot(ax=ax1,x='Date',y='Close',label='appl') #阿里巴巴 babaDf['Date']=babaDf.index babaDf.plot(ax=ax1,x='Date',y='Close',label='baba') #腾讯 txDf['Date']=txDf.index txDf.plot(ax=ax1,x='Date',y='Close_dollar',label='tx') #x坐标轴文本 plt.xlabel('time') #y坐标轴文本 plt.ylabel('price(dollar)') #图片标题 plt.title('GAFATA stock is up a bit more in 2018') #显示网格 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 average GAFATA stock price') #x坐标轴文本 plt.xlabel('The name of the company') #y坐标轴文本 plt.ylabel('Average share price (dollar)') plt.grid(True) plt.show()


分析结果:可以看出,仅从股票价格上来判断,亚马逊和谷歌的股票价格要远远的超过了其他四家。但是这里只是算的平均值,下面我们看下用四分位数绘制的箱线图。


(五)箱线图:6家公司股票股价的四分位数

#存放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=['goog','amaz','Facebook','Facebook','baba','txDf'] closeDf.head()#箱线图 closeDf.plot(kind='box') plt.grid(True) plt.show()


附注:

标签组:[股票] [大数据] [阿里巴巴] [谷歌股价] [数据可视化] [苹果股价] [文本分析] [腾讯股价] [date] [date函数] [pandas] [坐标轴

上一篇[转载]MACD指标中的柱状图分析

下一篇蜡烛图技术分析近期大盘「0520盘前计划」

相关阅读

相同话题文章

相关话题