日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python | 股票数据可视化

發布時間:2023/12/10 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python | 股票数据可视化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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() OpenHighLowCloseVolumeDate2021-01-042021-01-052021-01-062021-01-072021-01-08
8100084400802008300038655276
8160083900816008390035335669
8330084500821008220042089013
8280084200827008290032644642
8330090000830008880059013307
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() OpenHighLowCloseAdj CloseVolumeDate2017-12-222017-12-262017-12-272017-12-282017-12-29
175.839996176.660004175.039993176.289993176.28999312524700
174.550003175.149994171.729996172.330002172.33000212913800
172.289993173.869995171.729996172.970001172.97000110152300
173.039993173.529999171.669998172.300003172.3000039508100
172.279999173.669998171.199997172.429993172.4299939704600
# 查看基本信息及數據類型 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() OpenHighLowCloseAdj CloseVolumeDate2017-12-222017-12-262017-12-272017-12-282017-12-29
1061.1099851064.1999511059.4399411060.1199951060.119995755100
1058.0699461060.1199951050.1999511056.7399901056.739990760600
1057.3900151058.3699951048.0500491049.3699951049.3699951271900
1051.5999761054.7500001044.7700201048.1400151048.140015837100
1046.7199711049.6999511044.9000241046.4000241046.400024887500
# 計算漲跌幅 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() OpenHighLowCloseAdj CloseVolumeDate2017-12-222017-12-262017-12-272017-12-282017-12-29
174.679993175.419998174.500000175.009995174.29936216349400
170.800003171.470001169.679993170.570007169.87739633185500
170.100006170.779999169.710007170.600006169.90727221498200
171.000000171.850006170.479996171.080002170.38531516480200
170.520004170.589996169.220001169.229996168.54283125999900
# 計算漲跌幅 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() OpenHighLowCloseAdj CloseVolumeDate2017-12-222017-12-272017-12-282017-12-292018-01-02
403.799988405.799988400.799988405.799988405.79998816146080
405.799988407.799988401.000000401.200012401.20001216680601
404.000000408.200012402.200012408.200012408.20001211662053
408.000000408.000000403.399994406.000000406.00000016601658
406.000000406.000000406.000000406.000000406.0000000
# 騰訊是港股,轉換為美元,匯率:0.1277 TencentDf[['Open','High','Low','Close','Adj Close']]=TencentDf[['Open','High','Low','Close','Adj Close']]*0.1277 TencentDf.tail() OpenHighLowCloseAdj CloseVolumeDate2017-12-222017-12-272017-12-282017-12-292018-01-02
51.56525851.82065851.18215851.82065851.82065816146080
51.82065852.07605851.20770051.23324251.23324216680601
51.59080052.12714251.36094252.12714252.12714211662053
52.10160052.10160051.51417951.84620051.84620016601658
51.84620051.84620051.84620051.84620051.8462000
# 計算漲跌幅 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() OpenHighLowCloseAdj CloseVolumeDate2017-12-222017-12-262017-12-272017-12-282017-12-29
1172.0799561174.6199951167.8299561168.3599851168.3599851585100
1168.3599851178.3199461160.5500491176.7600101176.7600102005200
1179.9100341187.2900391175.6099851182.2600101182.2600101867200
1189.0000001190.0999761184.3800051186.0999761186.0999761841700
1182.3499761184.0000001167.5000001169.4699711169.4699712688400
# 計算漲跌幅 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() OpenHighLowCloseAdj CloseVolumeDate2017-12-222017-12-262017-12-272017-12-282017-12-29
177.139999177.529999176.229996177.199997177.1999978509500
176.630005177.000000174.669998175.990005175.9900058897300
176.550003178.440002176.259995177.619995177.6199959496100
177.949997178.940002177.679993177.919998177.91999812220800
178.000000178.850006176.460007176.460007176.46000710261500
# 計算漲跌幅 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() OpenHighLowCloseAdj CloseVolumesum_pct_changeOpenHighLowCloseAdj CloseVolumesum_pct_change
1.0000000.9992810.9987980.9982260.9982260.4246860.998226
0.9992811.0000000.9987820.9990770.9990770.4324670.999077
0.9987980.9987821.0000000.9992490.9992490.4014560.999249
0.9982260.9990770.9992491.0000001.0000000.4158011.000000
0.9982260.9990770.9992491.0000001.0000000.4158011.000000
0.4246860.4324670.4014560.4158010.4158011.0000000.415801
0.9982260.9990770.9992491.0000001.0000000.4158011.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 | 股票数据可视化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。