Python中的時序分析和可視化案例詳解
每個數(shù)據(jù)集都有自己的特征,我們使用它們的特征作為特征來深入了解數(shù)據(jù)。在本文中,我們將討論一種重要的數(shù)據(jù)集,即時間序列數(shù)據(jù)。
什么是時間序列數(shù)據(jù)
時間序列數(shù)據(jù)是按連續(xù)時間順序列出的一系列數(shù)據(jù)點(diǎn),或者我們可以說時間序列數(shù)據(jù)是時間上連續(xù)等間隔點(diǎn)的序列。時間序列分析包括分析時間序列數(shù)據(jù)的方法,以提取有意義的見解和數(shù)據(jù)的其他有價值的特征。
時間序列數(shù)據(jù)是按連續(xù)時間順序列出的一系列數(shù)據(jù)點(diǎn),或者我們可以說時間序列數(shù)據(jù)是時間上連續(xù)等間隔點(diǎn)的序列。時間序列分析包括分析時間序列數(shù)據(jù)的方法,以提取有意義的見解和數(shù)據(jù)的其他有價值的特征。
使用Python實(shí)現(xiàn)時間序列數(shù)據(jù)可視化
我們將使用Python庫來可視化數(shù)據(jù)。數(shù)據(jù)集的鏈接可以在這里找到。
https://github.com/Neelu-Tiwari/dataset/blob/main/stock_data.csv
我們將像在任何時間序列數(shù)據(jù)項目中一樣一步一步地執(zhí)行可視化。
導(dǎo)入庫
我們將在一個地方導(dǎo)入本文中使用的所有庫,這樣就不必每次使用時都導(dǎo)入,這將保存我們的時間和精力。
Numpy -一個用于數(shù)值數(shù)學(xué)計算和處理多維ndarray的Python庫,它也有一個非常大的數(shù)學(xué)函數(shù)集合來操作這個數(shù)組。
Pandas -一個構(gòu)建在NumPy之上的Python庫,用于有效的矩陣乘法和矩陣操作,它也用于數(shù)據(jù)清理,數(shù)據(jù)合并,數(shù)據(jù)整形和數(shù)據(jù)聚合。
Matplotlib -它用于繪制2D和3D可視化圖,它還支持各種輸出格式,包括數(shù)據(jù)圖形。
import pandas as pd import numpy as np import matplotlib.pyplot as plt
加載數(shù)據(jù)集
為了將數(shù)據(jù)集加載到一個框架中,我們將使用pandas read_csv()函數(shù)。我們將使用head()函數(shù)打印數(shù)據(jù)集的前五行。在這里,我們將在read_csv函數(shù)中使用’parse_dates’參數(shù)將’Date’列轉(zhuǎn)換為DatetimeIndex格式。默認(rèn)情況下,日期以字符串格式存儲,這不是時間序列數(shù)據(jù)分析的正確格式。
# reading the dataset using read_csv df = pd.read_csv("stock_data.csv", parse_dates=True, index_col="Date") # displaying the first five rows of dataset df.head()
輸出
Unnamed: 0 Open High Low Close Volume Name
Date
2006-01-03 NaN 39.69 41.22 38.79 40.91 24232729 AABA
2006-01-04 NaN 41.22 41.90 40.77 40.97 20553479 AABA
2006-01-05 NaN 40.93 41.73 40.85 41.53 12829610 AABA
2006-01-06 NaN 42.88 43.57 42.80 43.21 29422828 AABA
2006-01-09 NaN 43.10 43.66 42.82 43.42 16268338 AABA
刪除不需要的列
我們將從數(shù)據(jù)集中刪除對我們的可視化不重要的列。
# deleting column df.drop(columns='Unnamed: 0')
輸出
Open High Low Close Volume Name
Date
2006-01-03 39.69 41.22 38.79 40.91 24232729 AABA
2006-01-04 41.22 41.90 40.77 40.97 20553479 AABA
2006-01-05 40.93 41.73 40.85 41.53 12829610 AABA
2006-01-06 42.88 43.57 42.80 43.21 29422828 AABA
2006-01-09 43.10 43.66 42.82 43.42 16268338 AABA
繪制時間序列數(shù)據(jù)的線圖
df['Volume'].plot()
在這里,我們繪制了“Volume”列數(shù)據(jù)。
現(xiàn)在讓我們使用子圖繪制所有其他列。
df.plot(subplots=True, figsize=(4, 4))
上面使用的線圖很好地顯示了季節(jié)性。
季節(jié)性:在時間序列數(shù)據(jù)中,季節(jié)性是指在小于一年的特定規(guī)則時間間隔(如每周、每月或每季度)發(fā)生的變化。
重采樣:重采樣是一種經(jīng)濟(jì)地使用數(shù)據(jù)樣本來提高總體參數(shù)的準(zhǔn)確性和量化總體參數(shù)的不確定性的方法。采樣幾個月或幾個星期,制作條形圖是另一種非常簡單和廣泛使用的尋找季節(jié)性的方法。在這里,我們將繪制2016年和2017年月份數(shù)據(jù)的條形圖。
重采樣并繪制數(shù)據(jù)
# Resampling the time series data based on monthly 'M' frequency df_month = df.resample("M").mean() # using subplot fig, ax = plt.subplots(figsize=(6, 6)) # plotting bar graph ax.bar(df_month['2016':].index, df_month.loc['2016':, "Volume"], width=25, align='center')
圖中有24個條形,每個條形代表一個月。
差分:差分用于計算指定區(qū)間的值之間的差異。默認(rèn)情況下,它是一個,我們可以為圖指定不同的值。這是刪除數(shù)據(jù)中趨勢的最常用方法。
df.Low.diff(2).plot(figsize=(6, 6))
df.High.diff(2).plot(figsize=(10, 6))
數(shù)據(jù)集中的趨勢
我們可以在數(shù)據(jù)集中看到趨勢的變化,趨勢可以幫助我們看到我們正在考慮的數(shù)據(jù)的價值從長遠(yuǎn)來看是上升還是下降。
# Finding the trend in the "Open" # column using moving average method window_size = 50 rolling_mean = df['Open'].rolling\ (window_size).mean() rolling_mean.plot()
繪制數(shù)據(jù)隨時間的變化
我們還可以繪制數(shù)據(jù)隨時間發(fā)生的變化。有幾種方法可以繪制數(shù)據(jù)的變化。
Shift:Shift函數(shù)可用于在指定的時間間隔之前或之后移動數(shù)據(jù)。我們可以指定時間,默認(rèn)情況下將數(shù)據(jù)移動一天。這意味著我們將獲得前一天的數(shù)據(jù)。同時查看前一天的數(shù)據(jù)和今天的數(shù)據(jù)是有幫助的。
在這段代碼中,.div()函數(shù)幫助填充缺少的數(shù)據(jù)值。如果我們使用df.div(6)它將把df中的每個元素除以6。我們這樣做是為了避免’shift()'操作創(chuàng)建的null或缺失值。
在這里,我們使用了.div(df.Close.shift()),它會將df的每個值除以df.Close.shift()以去除空值。
df['Change'] = df.Close.div(df.Close.shift()) df['Change'].plot(figsize=(10, 8), fontsize=16)
我們也可以采取一個特定的時間間隔使圖形有一個更清晰的外觀。這里我們只繪制了2017年的數(shù)據(jù)。
df['2017']['Change'].plot(figsize=(10, 6))
時間序列數(shù)據(jù)集中的箱形圖
我們還可以使用箱線圖來查看特定列中值的分布。讓我們以任務(wù)為例。在這里,我們使用datetime獲取一個名為Year的新列。然后我們在Y軸上取“Open”列。
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # reading the dataset using read_csv df = pd.read_csv("stock_data.csv", parse_dates=True) df.drop(columns='Unnamed: 0', inplace=True) df['Date']= pd.to_datetime(df['Date']) # extract year from date column df["Year"] = df["Date"].dt.year # box plot grouped by year sns.boxplot(data=df, x="Year", y="Open")
到此這篇關(guān)于Python中的時序分析和可視化案例詳解的文章就介紹到這了,更多相關(guān)Python時序分析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解用Python調(diào)用百度地圖正/逆地理編碼API
這篇文章主要介紹了詳解用Python調(diào)用百度地圖正/逆地理編碼API,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Python數(shù)據(jù)分析模塊pandas用法詳解
這篇文章主要介紹了Python數(shù)據(jù)分析模塊pandas用法,結(jié)合實(shí)例形式詳細(xì)分析了Python數(shù)據(jù)分析模塊pandas的功能、常見用法及相關(guān)操作注意事項,需要的朋友可以參考下2019-09-09Python實(shí)現(xiàn)ssh批量登錄并執(zhí)行命令
本篇文章主要是介紹了Python實(shí)現(xiàn)ssh批量登錄并執(zhí)行命令,有一些任務(wù)可以進(jìn)行批量完成,Python就可以完成,有需要的同學(xué)可以了解一下。2016-10-10Python+Pygame實(shí)戰(zhàn)之英文版猜字游戲的實(shí)現(xiàn)
這篇文章主要為大家介紹了如何利用Python中的Pygame模塊實(shí)現(xiàn)英文版猜單詞游戲,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python游戲開發(fā)有一定幫助,需要的可以參考一下2022-08-08如何修復(fù)使用 Python ORM 工具 SQLAlchemy 時的常見陷阱
SQLAlchemy 是一個 Python ORM 工具包,它提供使用 Python 訪問 SQL 數(shù)據(jù)庫的功能。這篇文章主要介紹了如何修復(fù)使用 Python ORM 工具 SQLAlchemy 時的常見陷阱,需要的朋友可以參考下2019-11-11Python編程實(shí)現(xiàn)tail-n查看日志文件的方法
這篇文章主要介紹了Python編程實(shí)現(xiàn)tail-n查看日志文件的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07