import numpy as np
import pandas as pd
from pandas_datareader import data
import datetime as dt

数据准备

'''
获取国内股票数据的方式是:“股票代码”+“对应股市”(港股为.hk,A股为.ss)
例如腾讯是港股是:0700.hk
'''
#字典:6家公司的股票
# gafataDict={'谷歌':'GOOG','亚马逊':'AMZN','Facebook':'FB', '苹果':'AAPL','阿里巴巴':'BABA','腾讯':'0700.hk'}
'''
定义函数
函数功能:计算股票涨跌幅=(现在股价-买入价格)/买入价格
输入参数:column是收盘价这一列的数据
返回数据:涨跌幅
'''
def change(column):# 买入价格buyPrice=column[0]# 现在股价curPrice=column[column.size-1]priceChange=(curPrice-buyPrice)/buyPrice# 判断股票是上涨还是下跌if priceChange>0:print('股票累计上涨=',round(priceChange*100,2),'%')elif priceChange==0:print('股票无变化=',round(priceChange*100,2)*100,'%')else:print('股票累计下跌=',round(priceChange*100,2)*100,'%')# 返回数据return priceChange
'''
三星电子每日股票价位信息
Open:开盘价
High:最高加
Low:最低价
Close:收盘价
Volume:成交量因雅虎连接不到,仅以三星作为获取数据示例
'''
sxDf = data.DataReader('005930', 'naver', start='2021-01-01', end='2022-01-01')
sxDf.head()
Open High Low Close Volume
Date
2021-01-04 81000 84400 80200 83000 38655276
2021-01-05 81600 83900 81600 83900 35335669
2021-01-06 83300 84500 82100 82200 42089013
2021-01-07 82800 84200 82700 82900 32644642
2021-01-08 83300 90000 83000 88800 59013307
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    object1   High    248 non-null    object2   Low     248 non-null    object3   Close   248 non-null    object4   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-30
Data columns (total 5 columns):#   Column  Non-Null Count  Dtype
---  ------  --------------  -----  0   Open    248 non-null    float641   High    248 non-null    float642   Low     248 non-null    float643   Close   248 non-null    float644   Volume  248 non-null    int32
dtypes: float64(4), int32(1)
memory usage: 10.7 KB

阿里巴巴

# 读取数据
AliDf=pd.read_excel(r'C:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\阿里巴巴2017年股票数据.xlsx',index_col='Date')
AliDf.tail()
Open High Low Close Adj Close Volume
Date
2017-12-22 175.839996 176.660004 175.039993 176.289993 176.289993 12524700
2017-12-26 174.550003 175.149994 171.729996 172.330002 172.330002 12913800
2017-12-27 172.289993 173.869995 171.729996 172.970001 172.970001 10152300
2017-12-28 173.039993 173.529999 171.669998 172.300003 172.300003 9508100
2017-12-29 172.279999 173.669998 171.199997 172.429993 172.429993 9704600
# 查看基本信息及数据类型
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    float641   High       251 non-null    float642   Low        251 non-null    float643   Close      251 non-null    float644   Adj Close  251 non-null    float645   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()
Date
2017-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(r'C:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\谷歌2017年股票数据.xlsx',index_col='Date')
GoogleDf.tail()
Open High Low Close Adj Close Volume
Date
2017-12-22 1061.109985 1064.199951 1059.439941 1060.119995 1060.119995 755100
2017-12-26 1058.069946 1060.119995 1050.199951 1056.739990 1056.739990 760600
2017-12-27 1057.390015 1058.369995 1048.050049 1049.369995 1049.369995 1271900
2017-12-28 1051.599976 1054.750000 1044.770020 1048.140015 1048.140015 837100
2017-12-29 1046.719971 1049.699951 1044.900024 1046.400024 1046.400024 887500
# 计算涨跌幅
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()
Date
2017-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(r'C:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\苹果2017年股票数据.xlsx',index_col='Date')
AppleDf.tail()
Open High Low Close Adj Close Volume
Date
2017-12-22 174.679993 175.419998 174.500000 175.009995 174.299362 16349400
2017-12-26 170.800003 171.470001 169.679993 170.570007 169.877396 33185500
2017-12-27 170.100006 170.779999 169.710007 170.600006 169.907272 21498200
2017-12-28 171.000000 171.850006 170.479996 171.080002 170.385315 16480200
2017-12-29 170.520004 170.589996 169.220001 169.229996 168.542831 25999900
# 计算涨跌幅
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()
Date
2017-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(r'C:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\腾讯2017年股票数据.xlsx',index_col='Date')
TencentDf.tail()
Open High Low Close Adj Close Volume
Date
2017-12-22 403.799988 405.799988 400.799988 405.799988 405.799988 16146080
2017-12-27 405.799988 407.799988 401.000000 401.200012 401.200012 16680601
2017-12-28 404.000000 408.200012 402.200012 408.200012 408.200012 11662053
2017-12-29 408.000000 408.000000 403.399994 406.000000 406.000000 16601658
2018-01-02 406.000000 406.000000 406.000000 406.000000 406.000000 0
# 腾讯是港股,转换为美元,汇率:0.1277
TencentDf[['Open','High','Low','Close','Adj Close']]=TencentDf[['Open','High','Low','Close','Adj Close']]*0.1277
TencentDf.tail()
Open High Low Close Adj Close Volume
Date
2017-12-22 51.565258 51.820658 51.182158 51.820658 51.820658 16146080
2017-12-27 51.820658 52.076058 51.207700 51.233242 51.233242 16680601
2017-12-28 51.590800 52.127142 51.360942 52.127142 52.127142 11662053
2017-12-29 52.101600 52.101600 51.514179 51.846200 51.846200 16601658
2018-01-02 51.846200 51.846200 51.846200 51.846200 51.846200 0
# 计算涨跌幅
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()
Date
2017-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(r'C:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\亚马逊2017年股票数据.xlsx',index_col='Date')
AmazonDf.tail()
Open High Low Close Adj Close Volume
Date
2017-12-22 1172.079956 1174.619995 1167.829956 1168.359985 1168.359985 1585100
2017-12-26 1168.359985 1178.319946 1160.550049 1176.760010 1176.760010 2005200
2017-12-27 1179.910034 1187.290039 1175.609985 1182.260010 1182.260010 1867200
2017-12-28 1189.000000 1190.099976 1184.380005 1186.099976 1186.099976 1841700
2017-12-29 1182.349976 1184.000000 1167.500000 1169.469971 1169.469971 2688400
# 计算涨跌幅
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()
Date
2017-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

Facebook

# 读取数据
FacebookDf=pd.read_excel(r'C:\Users\EDY\Desktop\吧哩吧啦\学习\Untitled Folder\Facebook2017年股票数据.xlsx',index_col='Date')
FacebookDf.tail()
Open High Low Close Adj Close Volume
Date
2017-12-22 177.139999 177.529999 176.229996 177.199997 177.199997 8509500
2017-12-26 176.630005 177.000000 174.669998 175.990005 175.990005 8897300
2017-12-27 176.550003 178.440002 176.259995 177.619995 177.619995 9496100
2017-12-28 177.949997 178.940002 177.679993 177.919998 177.919998 12220800
2017-12-29 178.000000 178.850006 176.460007 176.460007 176.460007 10261500
# 计算涨跌幅
FacebookChange=change(FacebookDf['Close'])
股票累计上涨= 51.0 %
'''增加一列每日增长百分比'''
# .pct_change()返回变化百分比,第一行因没有可对比的,返回Nan,填充为0
FacebookDf['pct_change']=FacebookDf['Close'].pct_change(1).fillna(0)
FacebookDf['pct_change'].head()
Date
2017-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()
Date
2017-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
Open 1.000000 0.999281 0.998798 0.998226 0.998226 0.424686 0.998226
High 0.999281 1.000000 0.998782 0.999077 0.999077 0.432467 0.999077
Low 0.998798 0.998782 1.000000 0.999249 0.999249 0.401456 0.999249
Close 0.998226 0.999077 0.999249 1.000000 1.000000 0.415801 1.000000
Adj Close 0.998226 0.999077 0.999249 1.000000 1.000000 0.415801 1.000000
Volume 0.424686 0.432467 0.401456 0.415801 0.415801 1.000000 0.415801
sum_pct_change 0.998226 0.999077 0.999249 1.000000 1.000000 0.415801 1.000000

查看各个公司的股价平均值

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%。

Python | 股票数据可视化相关推荐

  1. python 图表美化_你的图表不美观怎么办,Python实现数据可视化帮你实现

    之前突然看到一个用Python实现数据可视化的技术,小编觉得解决了生活中的好多问题,大家一起来看看这个神器.1.主页 首先,这个主页的设计就是我非常喜欢的风格,简单清晰,第一眼就让人有特别清爽的感觉, ...

  2. 基于大数据的股票数据可视化分析与预测系统

    温馨提示:文末有 CSDN 平台官方提供的博主 Wechat / QQ 名片 :) 1. 项目简介 股票市场行情分析与预测是数据分析领域里面的重头戏,其符合大数据的四大特征:交易量大.频率高.数据种类 ...

  3. python与excel做数据可视化-用Python进行数据可视化的10种方法

    原标题:用Python进行数据可视化的10种方法 2015-11-19 关于转载授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+转载&quo ...

  4. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  5. 【Python】数据可视化教程来了!

    来自:Datawhale????数据可视化小组 开源初衷 Matplotlib可以说是python数据可视化最重要且常见的工具之一,几乎每个和数据打交道的人都不可避免,还有大量可视化工具是基于它的二次 ...

  6. 【Python实现数据可视化】创建3D柱状图

    虽然matplotlib主要专注于绘图,并且主要是二维的图形,但是它也有一些不同的扩展,能让我们在地理图上绘图,让我们把Excel和3D图表结合起来.在matplotlib的世界里,这些扩展叫做工具包 ...

  7. 『数据可视化』基于Python的数据可视化工具

    刘宇宙,现在一家创业型公司做技术总负责,做爬虫和数据处理相关工作,曾从事过卡系统研发.金融云计算服务系统研发,物联网方向大数据研发,著书一本,<Python3.5从零开始学> 如何做Pyt ...

  8. python股票查询可视化代码

    Python股票查询可视化_哔哩哔哩_bilibili 三连视频获取源码, 播放量500出教程,三连总数500逐行讲代码. 功能:数据获取,可视化,过滤

  9. python画图代码大全-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  10. 【教程】Python科研数据可视化、MATLAB科研数据可视化

    在过去的20年中,随着社会产生数据的大量增加,对数据的理解.解释与决策的需求也随之增加.而固定不变是人类本身,所以我们的大脑必须学会理解这些日益增加的数据信息.所谓"一图胜千言", ...

最新文章

  1. CentOS设置程序开机自启动的方法
  2. Oracle新建表时,复制另一张旧表的结构和数据
  3. uva-10305-水题-拓扑排序
  4. Java提高篇 —— Java内部类详解
  5. zabbix监控操纵系统日志
  6. iframe高度自适应 1
  7. 用python的tkinter做游戏(六)—— 坦克大战或射击游戏Demo 篇
  8. 给年轻工程师的10大忠告
  9. springboot2 druid监控控制台去掉下面的图片广告和powered by
  10. 【原】在vc中实现获取汉字拼音的首字母 - lixiaosan的专栏 - CSDNBlog
  11. scratch 有趣的加减法
  12. node 对接微信支付的踩坑记录(服务端)
  13. 如何对网站关键词进行合理布局?
  14. 【转载】Python遍历pandas数据方法总结
  15. Google账户设置
  16. 基于JavaWeb实现的师生交流系统平台
  17. 【Eigen】【Eigen实践】【Eigen的使用学习记录】
  18. “直播+”时代,品牌服装电商之路
  19. OSChina 周四乱弹 ——不是二奶不是寡妇,老娘的男人是程序员
  20. OpenStack-国基北盛搭建,跑脚本安装各组件步骤详解

热门文章

  1. 【修复版】ONE兔3.0版本社交社区交友婚恋视频即时通讯双端APP原生源码
  2. 视觉媒体通信作业记录(四)视频网络传输
  3. 音频放大电路设计与制作
  4. Latex:字体设置
  5. platform.pk8,platform.x509.pem生成keystore的方法
  6. 泛微OA的SQL语句大全
  7. oracle把字段选为候选键,Oracle数据库试题及答案
  8. VS2015 Visual Assist X 破解版安装教程
  9. 学生社区(学校交流社区)网站源码推荐
  10. python编写txt阅读器程序_Python 制作简易小说阅读器