python数据分析与可视化代码,基于股票大数据分析的Python入门实战
本文主要详细介绍Python股票数据可视化。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。
00-1010数据准备阿里巴巴谷歌苹果腾讯亚马逊脸书数据可视化查看各公司平均股价查看各公司股价分布对比汇总股价走势导入numpy作为np
进口熊猫作为pd
从pandas_datareader导入数据
将日期时间作为dt导入
目录
获取国内股票数据的方式是“股票代码”和“对应的股票行情”(。hk代表港股和。a股的ss)。
比如腾讯是一只港股:0700.hk。
#字典:6家公司的股票
# gafataDict={ 谷歌 :GOOG ,亚马逊 3360 AMZN ,脸书 3360 FB ,苹果 :AAPL ,阿里巴巴 : 巴巴,腾讯 3360
定义函数
功能:计算股票涨跌=(当前股价-买入价)/买入价。
Input: column是收盘价列的数据。
数据:起伏
定义变更(列):
#购买价格
buyPrice=列[0]
#现在的股价
curPrice=column[column.size-1]
价格变化=(curPrice-buyPrice)/buyPrice
#判断股票是上涨还是下跌
如果价格改变0:
Print(累计库存增加=,round(priceChange*100,2), % )
elif价格变化==0:
Print(无库存变化=,round(价格变化* 100,2) * 100, % )
else:
Print(累计库存下降=,round (PriceChange * 100,2) * 100, % )
#返回数据
退货价格变化
三星电子
每日股票价格信息
Open:开盘价
High:最大plus
低:最低价格
收盘:收盘价
体积:体积
因为雅虎无法连接,所以仅以三星为例获取数据。
sxDf=数据。DataReader(005930 , naver ,start=2021-01-01 ,end=2022-01-01 )
sxDf.head()
openhighlowclosevolumedate 21-01-0481000844008020083000386552762021-01-05816008390353535692021-01-0683300845008204 20821-001
/td>
sxDf.info()
<class pandas.core.frame.DataFrame>DatetimeIndex: 248 entries, 2021-01-04 to 2021-12-30
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Open 248 non-null object
1 High 248 non-null object
2 Low 248 non-null object
3 Close 248 non-null object
4 Volume 248 non-null object
dtypes: object(5)
memory usage: 11.6+ KB
sxDf.iloc[:,0:4]=sxDf.iloc[:,0:4].astype(float)sxDf.iloc[:,-1]=sxDf.iloc[:,-1].astype(int)
sxDf.info()
<class pandas.core.frame.DataFrame>DatetimeIndex: 248 entries, 2021-01-04 to 2021-12-30Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Open 248 non-null float64 1 High 248 non-null float64 2 Low 248 non-null float64 3 Close 248 non-null float64 4 Volume 248 non-null int32 dtypes: float64(4), int32(1)memory usage: 10.7 KB<class pandas.core.frame.DataFrame>DatetimeIndex: 248 entries, 2021-01-04 to 2021-12-30
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Open 248 non-null float64
1 High 248 non-null float64
2 Low 248 non-null float64
3 Close 248 non-null float64
4 Volume 248 non-null int32
dtypes: float64(4), int32(1)
memory usage: 10.7 KB
阿里巴巴
# 读取数据AliDf=pd.read_excel(rC:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\阿里巴巴2017年股票数据.xlsx,index_col=Date)
AliDf.tail()
Open High Low Close Adj Close Volume Date
# 查看基本信息及数据类型AliDf.info()
<class pandas.core.frame.DataFrame>DatetimeIndex: 251 entries, 2017-01-03 to 2017-12-29
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Open 251 non-null float64
1 High 251 non-null float64
2 Low 251 non-null float64
3 Close 251 non-null float64
4 Adj Close 251 non-null float64
5 Volume 251 non-null int64
dtypes: float64(5), int64(1)
memory usage: 13.7 KB
# 计算涨跌幅AliChange=change(AliDf[Close])
股票累计上涨= 94.62 %
增加一列累计增长百分比#一开始的股价
Close1=AliDf[Close][0]
# # .apply(lambda x: format(x, .2%))
AliDf[sum_pct_change]=AliDf[Close].apply(lambda x: (x-Close1)/Close1)
AliDf[sum_pct_change].tail()
Date2017-12-22 0.989729
2017-12-26 0.945034
2017-12-27 0.952257
2017-12-28 0.944695
2017-12-29 0.946162
Name: sum_pct_change, dtype: float64
谷歌
# 读取数据GoogleDf=pd.read_excel(rC:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\谷歌2017年股票数据.xlsx,index_col=Date)
GoogleDf.tail()
Open High Low Close Adj Close Volume Date
# 计算涨跌幅GoogleChange=change(GoogleDf[Close])
股票累计上涨= 33.11 %
增加一列累计增长百分比#一开始的股价
Close1=GoogleDf[Close][0]
# # .apply(lambda x: format(x, .2%))
GoogleDf[sum_pct_change]=GoogleDf[Close].apply(lambda x: (x-Close1)/Close1)
GoogleDf[sum_pct_change].tail()
Date2017-12-22 0.348513
2017-12-26 0.344213
2017-12-27 0.334839
2017-12-28 0.333274
2017-12-29 0.331061
Name: sum_pct_change, dtype: float64
苹果
# 读取数据AppleDf=pd.read_excel(rC:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\苹果2017年股票数据.xlsx,index_col=Date)
AppleDf.tail()
Open High Low Close Adj Close Volume Date
# 计算涨跌幅AppleChange=change(AppleDf[Close])
股票累计上涨= 45.7 %
增加一列累计增长百分比#一开始的股价
Close1=AppleDf[Close][0]
# # .apply(lambda x: format(x, .2%))
AppleDf[sum_pct_change]=AppleDf[Close].apply(lambda x: (x-Close1)/Close1)
AppleDf[sum_pct_change].tail()
Date2017-12-22 0.506758
2017-12-26 0.468532
2017-12-27 0.468790
2017-12-28 0.472923
2017-12-29 0.456995
Name: sum_pct_change, dtype: float64
腾讯
# 读取数据TencentDf=pd.read_excel(rC:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\腾讯2017年股票数据.xlsx,index_col=Date)
TencentDf.tail()
Open High Low Close Adj Close Volume Date
# 读取数据TencentDf=pd.read_excel(rC:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\腾讯2017年股票数据.xlsx,index_col=Date)
TencentDf.tail()
Open High Low Close Adj Close Volume Date
# 计算涨跌幅TencentChange=change(TencentDf[Close])
股票累计上涨= 114.36 %
增加一列累计增长百分比#一开始的股价
Close1=TencentDf[Close][0]
# # .apply(lambda x: format(x, .2%))
TencentDf[sum_pct_change]=TencentDf[Close].apply(lambda x: (x-Close1)/Close1)
TencentDf[sum_pct_change].tail()
Date2017-12-22 1.142555
2017-12-27 1.118268
2017-12-28 1.155227
2017-12-29 1.143611
2018-01-02 1.143611
Name: sum_pct_change, dtype: float64
亚马逊
# 读取数据AmazonDf=pd.read_excel(rC:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\亚马逊2017年股票数据.xlsx,index_col=Date)
AmazonDf.tail()
Open High Low Close Adj Close Volume Date
# 计算涨跌幅AmazonChange=change(AmazonDf[Close])
股票累计上涨= 55.17 %
增加一列累计增长百分比#一开始的股价
Close1=AmazonDf[Close][0]
# # .apply(lambda x: format(x, .2%))
AmazonDf[sum_pct_change]=AmazonDf[Close].apply(lambda x: (x-Close1)/Close1)
AmazonDf[sum_pct_change].tail()
Date2017-12-22 0.550228
2017-12-26 0.561373
2017-12-27 0.568671
2017-12-28 0.573766
2017-12-29 0.551700
Name: sum_pct_change, dtype: float64
# 读取数据FacebookDf=pd.read_excel(rC:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\Facebook2017年股票数据.xlsx,index_col=Date)
FacebookDf.tail()
Open High Low Close Adj Close Volume Date
# 计算涨跌幅FacebookChange=change(FacebookDf[Close])
股票累计上涨= 51.0 %
增加一列每日增长百分比# .pct_change()返回变化百分比,第一行因没有可对比的,返回Nan,填充为0
FacebookDf[pct_change]=FacebookDf[Close].pct_change(1).fillna(0)
FacebookDf[pct_change].head()
Date2017-01-03 0.000000
2017-01-04 0.015660
2017-01-05 0.016682
2017-01-06 0.022707
2017-01-09 0.012074
Name: pct_change, dtype: float64
增加一列累计增长百分比#一开始的股价
Close1=FacebookDf[Close][0]
# .apply(lambda x: format(x, .2%))
FacebookDf[sum_pct_change]=FacebookDf[Close].apply(lambda x: (x-Close1)/Close1)
FacebookDf[sum_pct_change].tail()
Date2017-12-22 0.516344
2017-12-26 0.505990
2017-12-27 0.519938
2017-12-28 0.522506
2017-12-29 0.510012
Name: sum_pct_change, dtype: float64
数据可视化
import matplotlib.pyplot as plt
# 查看成交量与股价之间的关系fig=plt.figure(figsize=(10,5))
AliDf.plot(x=Volume,y=Close,kind=scatter)
plt.xlabel(成交量)
plt.ylabel(股价)
plt.title(成交量与股价之间的关系)
plt.show()
<Figure size 720x360 with 0 Axes>
# 查看各个参数之间的相关性,与股价与成交量之间呈中度相关AliDf.corr()
Open High Low Close Adj Close Volume sum_pct_change
查看各个公司的股价平均值
AliDf[Close].mean()
141.79179260159364
数据准备# 计算每家公司的收盘价平均值
Close_mean={Alibaba:AliDf[Close].mean(),
Google:GoogleDf[Close].mean(),
Apple:AppleDf[Close].mean(),
Tencent:TencentDf[Close].mean(),
Amazon:AmazonDf[Close].mean(),
Facebook:FacebookDf[Close].mean()}
CloseMeanSer=pd.Series(Close_mean)
CloseMeanSer.sort_values(ascending=False,inplace=True)
绘制柱状图
# 创建画板
fig=plt.figure(figsize=(10,5))
# 绘图
CloseMeanSer.plot(kind=bar)
# 设置x、y轴标签及标题
plt.xlabel(公司)
plt.ylabel(股价平均值(美元))
plt.title(2017年各公司股价平均值)
# 设置y周标签刻度
plt.yticks(np.arange(0,1100,100))
# 显示y轴网格
plt.grid(True,axis=y)
# 显示图像
plt.show()
亚马逊和谷歌的平均股价很高,远远超过其他4家,但是仅看平均值并不能代表什么,下面从分布和走势方面查看
查看各公司股价分布情况
数据准备# 将6家公司的收盘价整合到一起
CloseCollectDf=pd.concat([AliDf[Close],
GoogleDf[Close],
AppleDf[Close],
TencentDf[Close],
AmazonDf[Close],
FacebookDf[Close]],axis=1)
CloseCollectDf.columns=[Alibaba,Google,Apple,Tencent,Amazon,Facebook]
绘制箱型图
# 创建画板
fig=plt.figure(figsize=(20,10))
fig.suptitle(2017年各公司股价分布,fontsize=18)
# 子图1
ax1=plt.subplot(121)
CloseCollectDf.plot(ax=ax1,kind=box)
plt.xlabel(公司)
plt.ylabel(股价(美元))
plt.title(2017年各公司股价分布)
plt.grid(True,axis=y)
# 因谷歌和亚马逊和两外四家的差别较大,分开查看,
# 子图2
ax2=plt.subplot(222)
CloseCollectDf[[Google,Amazon]].plot(ax=ax2,kind=box)
# 设置x、y轴标签及标题
plt.ylabel(股价(美元))
plt.title(2017年谷歌和亚马逊股价分布)
# 设置y周标签刻度
# plt.yticks(np.arange(0,1300,100))
# 显示y轴网格
plt.grid(True,axis=y)
# 子图3
ax3=plt.subplot(224)
CloseCollectDf[[Alibaba,Apple,Tencent,Facebook]].plot(ax=ax3,kind=box)
# 设置x、y轴标签及标题
plt.xlabel(公司)
plt.ylabel(股价(美元))
plt.title(2017年阿里、苹果、腾讯、Facebook股价分布)
# 设置y周标签刻度
# plt.yticks(np.arange(0,1300,100))
# 显示y轴网格
plt.grid(True,axis=y)
plt.subplot
# 显示图像
plt.show()
从箱型图看,谷歌和亚马逊的股价分布较广,且中位数偏上,腾讯股价最为集中,波动最小,相对稳定。
股价走势对比
# 创建画板并设置大小,constrained_layout=True设置自动调整子图之间间距fig=plt.figure(figsize=(15,10),constrained_layout=True)
# ax=plt.subplots(2,1,sharex=True)
fig.suptitle(股价走势对比,fontsize=18)
绘制图像1
ax1=plt.subplot(211)
plt.plot(AliDf.index,AliDf[Close],label=Alibaba)
plt.plot(GoogleDf.index,GoogleDf[Close],label=Google)
plt.plot(AppleDf.index,AppleDf[Close],label=Apple)
plt.plot(TencentDf.index,TencentDf[Close],label=Tencent)
plt.plot(AmazonDf.index,AmazonDf[Close],label=Amazon)
plt.plot(FacebookDf.index,FacebookDf[Close],label=Facebook)
# # 设置xy轴标签
plt.xlabel(时间)
plt.ylabel(股价)
# 设置标题
# plt.title(股价走势对比)
# 图例显示位置、大小
plt.legend(loc=upper left,fontsize=12)
# 设置x,y轴间隔,设置旋转角度,以免重叠
plt.xticks(AliDf.index[::10],rotation=45)
plt.yticks(np.arange(0, 1300, step=100))
# 显示网格
plt.grid(True)
绘制图像2
ax2=plt.subplot(212)
plt.plot(AliDf.index,AliDf[sum_pct_change],label=Alibaba)
plt.plot(GoogleDf.index,GoogleDf[sum_pct_change],label=Google)
plt.plot(AppleDf.index,AppleDf[sum_pct_change],label=Apple)
plt.plot(TencentDf.index,TencentDf[sum_pct_change],label=Tencent)
plt.plot(AmazonDf.index,AmazonDf[sum_pct_change],label=Amazon)
plt.plot(FacebookDf.index,FacebookDf[sum_pct_change],label=Facebook)
# 设置xy轴标签
plt.xlabel(时间)
plt.ylabel(累计增长率)
# 设置标题
# plt.title(股价走势对比)
# 图例显示位置、大小
plt.legend(loc=upper left,fontsize=12)
# 设置x,y轴间隔,设置旋转角度,以免重叠
plt.xticks(AliDf.index[::10],rotation=45)
plt.yticks(np.arange(0, 1.2, step=0.1))
# 显示网格
plt.grid(True)
# 调整子图间距,subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=None)
# 显示图像
plt.show()
可以看出,在2017年间,亚马逊和谷歌的股价虽然偏高,涨幅却不如阿里巴巴和腾讯。
总结
观察以上图形,可以得出一下结果:
1、2017年谷歌和亚马逊股价偏高,波动较大,但其涨幅并不高;
2、2017年阿里巴巴和腾讯的股价平均值相对较小,股价波动比较小,其涨幅却很高,分别达到了94.62%和114.36%。
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注盛行IT软件开发工作室的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。