Python繪制幾種常見的時序分析圖

時間序列數據是一種按照時間順序排列的觀測值集合,每個觀測值對應于一個特定的時間點。這種數據在許多領域中都具有重要的應用價值,如金融、經濟、氣候科學等。通過分析時間序列數據,可以幫助我們掌握潛在的模式、發現趨勢和季節性波動等重要信息。

時間序列分析是一種技術,用于評估時間序列數據,旨在確定相關的統計數據和其他數據屬性。其主要目標是研究市場趨勢和經濟周期的關鍵思想,任何受到影響的具有重復模式的時間序列都可能受到影響。

可視化對于從時間序列數據中獲取有洞察力的信息至關重要,它可以幫助我們理解復雜的關系并做出明智的決策。本文將介紹如何使用Python繪制幾種常見的時序分析圖。

數據集

數據集地址:https://github.com/jbrownlee/Datasets/blob/master/monthly-sunspots.csv
數據集變量:數據集由 2 列組成 - 從 1749 年到 1983 年的“月份”和“太陽黑子”。它基本上描述了該數據集中記錄的每個月在太陽上看到的太陽黑子的數量。

1、Statsmodels庫

本次用到了Statsmodels,Statsmodels庫是Python中一個強大的統計分析庫,包含假設檢驗、回歸分析、時間序列分析等功能,能夠很好的和Numpy和Pandas等庫結合起來,提高工作效率。支持Python3.8、3.9和3.10。

安裝方法

Anaconda

conda install -c conda-forge statsmodels

PyPI (pip)

pip install statsmodels

如果不能下載,則加上國內源,命令如下:

pip install statsmodels -i https://pypi.tuna.tsinghua.edu.cn/simple

從源代碼安裝

您需要安裝C編譯器來構建統計模型。如果您是從github源代碼而不是源代碼版本構建的,那么您還需要Cython。您可以按照下面的說明獲得Windows的C編譯器設置。

如果你的系統已經安裝了pip、編譯器和git,你可以試試:

pip install git+https://github.com/statsmodels/statsmodels

依賴庫

Python >= 3.8NumPy >= 1.18SciPy >= 1.4Pandas >= 1.0Patsy >= 0.5.2

例子

import statsmodels.formula.api as smf
import pandas as pd
import numpy as np
import matplotlib.pyplot as pltdata = pd.DataFrame({"X":np.arange(10,100,0.5)})
data["Y"] = 2 * data["X"] + 1 + np.random.randn(180)
mod = smf.ols("Y ~ X", data).fit()
print(mod.summary())data.plot(x="X", y="Y",kind="scatter",figsize=(8,5))
plt.plot(data["X"], mod.params[0] + mod.params[1]*data["X"],"r")
plt.text(10, 38, "y="+str(round(mod.params[1],4)) + "*x" + str(round(mod.params[0],4)))
plt.title("linear regression")
plt.show()

print(mod.summary())的輸出結果:

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      Y   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                  1.000
Method:                 Least Squares   F-statistic:                 4.744e+05
Date:                Mon, 13 Nov 2023   Prob (F-statistic):          7.49e-307
Time:                        11:25:51   Log-Likelihood:                -256.52
No. Observations:                 180   AIC:                             517.0
Df Residuals:                     178   BIC:                             523.4
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept      1.0831      0.176      6.157      0.000       0.736       1.430
X              1.9993      0.003    688.746      0.000       1.994       2.005
==============================================================================
Omnibus:                        0.781   Durbin-Watson:                   2.104
Prob(Omnibus):                  0.677   Jarque-Bera (JB):                0.462
Skew:                           0.075   Prob(JB):                        0.794
Kurtosis:                       3.198   Cond. No.                         141.
==============================================================================

在這里插入圖片描述

時間圖

代碼如下:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf# 加載每月太陽黑子數據集
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/monthly-sunspots.csv"
data = pd.read_csv(url, parse_dates=['Month'], index_col='Month')
print(data)
# 時間圖
plt.figure(figsize=(7, 5))
plt.plot(data.index, data['Sunspots'], marker='o', linestyle='-', markersize=5)
plt.xlabel('Date')
plt.ylabel('Number of Sunspots')
plt.title('Monthly Sunspots Time Plot')
plt.grid(True)
plt.show()

在這里插入圖片描述

折線圖

折線圖是一種常見的數據可視化方式,它通過連接一系列數據點形成一條或多條線段來展示數據隨時間或其他變量的變化趨勢。折線圖通常用于展示時間序列數據或其他有序數據的變化情況,例如股票價格、氣溫變化、銷售數據等。

在折線圖中,每個數據點通常表示為一個標記(如圓點、方塊等),并通過直線段連接相鄰的數據點。折線圖的x軸通常表示時間或其他有序變量,而y軸則表示要展示的數據值。通過觀察折線圖的形狀、趨勢和波動情況,我們可以得出一些有用的信息和結論。

例如,在股票市場分析中,折線圖可以用來展示股票價格的走勢,幫助投資者判斷股票的趨勢和買賣時機;在氣象學中,折線圖可以用來展示氣溫、降雨量等氣象數據的變化趨勢,幫助人們更好地了解氣候變化和預測天氣情況。此外,折線圖還可以通過添加多條折線來展示不同變量之間的關系和對比情況,例如展示不同地區的銷售數據或不同產品的受歡迎程度等。

折線圖是一種直觀、簡單的數據可視化方式,可以幫助我們更好地了解數據的變化趨勢和規律,從而做出更明智的決策。
代碼如下:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf# 加載每月太陽黑子數據集
data = pd.read_csv("monthly-sunspots.csv", parse_dates=['Month'], index_col='Month')
print(data)
# 折線圖
import matplotlib.pyplot as plt
plt.figure(figsize=(7, 5))
plt.plot(data)
plt.xlabel('Date')
plt.ylabel('Number of Sunspots')
plt.title('Monthly Sunspots Line Plot')
plt.grid(True)
plt.show()

在這里插入圖片描述

季節性圖

季節性圖是一種可視化時間序列數據的方式,它能夠展示在特定時間間隔(如年、月、日等)內數據的重復模式。這種圖通常用于觀察和分析時間序列數據中的季節性變化,例如氣候、銷售、人口動態等。

季節性圖通常以時間序列數據為x軸,以表現數值為y軸,將數據點在圖上表示出來。為了更清晰地展示季節性變化,可以使用不同顏色或標記來表示每個季節的數據點。此外,可以使用趨勢線或平滑曲線來擬合數據點,以幫助識別季節性模式的長期趨勢。

季節性圖可以用于各種領域,例如氣候學、銷售分析、人口統計學等。例如,在氣候學中,季節性圖可以用來展示氣溫、降雨量等氣象數據的季節性變化;在銷售分析中,季節性圖可以用來觀察商品銷售在不同季節內的變化情況;在人口統計學中,季節性圖可以用來展示人口數量在不同時間點的變化情況。

季節性圖是一種強大的可視化工具,可以幫助我們更好地理解和分析時間序列數據中的季節性變化。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf# 加載每月太陽黑子數據集
data = pd.read_csv("monthly-sunspots.csv", parse_dates=['Month'], index_col='Month')
print(data)# 季節性圖
plt.figure(figsize=(7, 5))
sns.lineplot(x=data.index.month, y=data['Sunspots'], ci=None)
plt.xlabel('Month')
plt.ylabel('Number of Sunspots')
plt.title('Seasonal Plot')
plt.xticks(range(1, 13), labels=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])
plt.grid(True)
plt.show()

在這里插入圖片描述

直方圖和密度圖

直方圖和密度圖是兩種用于可視化數據分布的圖形。

直方圖是一種條形圖,它顯示了數據分布的頻率。每個條形的高度表示數據值出現的次數,條形的寬度表示數據值的范圍。通過觀察直方圖,我們可以了解數據的集中趨勢、離散程度以及可能存在的異常值。在繪制直方圖時,可以選擇不同的顏色和柱狀寬度以增強視覺效果。

密度圖則是一種用于顯示數據分布密度的圖形。與直方圖不同,密度圖顯示的是數據點在某個范圍內的密集程度,而不是具體的數值。密度圖通常用于展示數據的概率密度,特別是在大數據集或連續變量的情況下。通過觀察密度圖,我們可以了解數據的分布情況以及是否存在集中或離散的趨勢。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf# 加載每月太陽黑子數據集
data = pd.read_csv("monthly-sunspots.csv", parse_dates=['Month'], index_col='Month')
print(data)# 直方圖和密度圖
plt.figure(figsize=(7, 5))
sns.histplot(data['Sunspots'], kde=True)
plt.xlabel('Number of Sunspots')
plt.ylabel('Frequency')
plt.title('Histogram and Density Plot')
plt.grid(True)
plt.show()

在這里插入圖片描述

自相關圖

自相關圖是一個平面二維坐標懸垂線圖。橫坐標表示延遲階數,縱坐標表示自相關系數。它是一個重要的統計工具,用于分析時間序列數據的重復模式和周期性趨勢。通過觀察自相關圖,我們可以確定數據之間的相似性如何隨時間變化,并以此為基礎進行預測或解釋。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf# 加載每月太陽黑子數據集
data = pd.read_csv("monthly-sunspots.csv", parse_dates=['Month'], index_col='Month')
print(data)# 自相關圖
# plt.figure(figsize=(7,5))
plot_acf(data['Sunspots'], lags=50)
plt.xlabel('Lags')
plt.ylabel('Autocorrelation')
plt.title('Autocorrelation Plot')
plt.grid(True)
plt.show()

在這里插入圖片描述

PACF圖

PACF圖是指偏自相關函數圖,它衡量的是任意時間點與該時間點前的一段時間內的觀測值的相關程度,并消除了其他滯后值的影響。偏自相關函數(PACF)衡量的是在控制了所有更短滯后的影響后,一個時間序列和它自身滯后版本之間的相關性。

在PACF圖中,x軸代表滯后數,y軸代表偏自相關系數。與ACF圖類似,PACF圖中的每一個滯后數都有一個代表偏自相關系數的垂直線,同時還有兩條水平藍線表示置信區間。

通過對ACF圖和PACF圖的分析,可以得出數據可能適合的模型。例如,如果ACF圖在某個點上截尾,而PACF圖在該點后呈現出拖尾的形式,那么數據可能適合AR模型。如果ACF圖在某個點后呈現出拖尾的形式,而PACF圖在該點上截尾,那么數據可能適合MA模型。如果ACF圖和PACF圖都呈現出拖尾的形式,那么數據可能適合ARMA模型。

PACF圖是一種分析時間序列數據的重要工具,可以幫助我們更好地理解數據的內在結構和關系。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf# 加載每月太陽黑子數據集
data = pd.read_csv("monthly-sunspots.csv", parse_dates=['Month'], index_col='Month')
print(data)# PACF圖
# plt.figure(figsize=(7, 5))
plot_pacf(data['Sunspots'], lags=50)
plt.xlabel('Lags')
plt.ylabel('Partial Autocorrelation')
plt.title('Partial Autocorrelation Function (PACF) Plot')
plt.grid(True)
plt.show()

極坐標圖

極坐標圖是一種用于表示方向性和距離信息的圖形,常用于表示地理信息系統中的數據。在極坐標圖中,每個點都有一個相對于極點的距離和角度信息,可以用來表示地理信息中的經緯度、方向和高度等數據。

在極坐標圖中,角度通常以正北方向為0度,順時針方向增加角度值。距離則通常以極點為原點,向各個方向延伸,單位可以根據需要進行設定。

極坐標圖可以用于各種領域,例如物理學、工程學、地球物理學等。在地球物理學中,極坐標圖可以用于表示地震數據、地磁數據等,以便更好地分析和研究地球的物理性質。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf# 加載每月太陽黑子數據集
data = pd.read_csv("monthly-sunspots.csv", parse_dates=['Month'], index_col='Month')
print(data)# 從上述數據集“Monthly Sunspots”的索引中提取月份和年份
data['Month_Num'] = data.index.month# 按月份對數據進行分組,計算每個月的平均太陽黑子數
monthly_average = data.groupby('Month_Num')['Sunspots'].mean()# 極坐標圖θ(角度)和半徑(長度)設置
theta = np.linspace(0, 2 * np.pi, len(monthly_average))
radii = monthly_average.values# 極坐標圖
plt.figure(figsize=(7, 5))
plt.polar(theta, radii)
plt.title('Polar Plot of Monthly Average Sunspots')
plt.xticks(theta, ['Jan', 'Feb', 'Mar', 'Apr', 'May','Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])# 設置y軸限制以適應數據
plt.ylim(0, radii.max() + 10)
plt.show()

在這里插入圖片描述

移動平均線圖

移動平均線圖是一種常用的技術分析工具,它通過計算一系列連續價格數據的平均值,以反映市場趨勢和價格波動情況。在移動平均線圖中,通常會繪制一組不同周期的移動平均線,以反映市場在不同時間段內的平均成本和趨勢。

移動平均線圖可以用于股票、期貨、外匯等交易市場,以幫助交易者更好地把握市場趨勢和價格波動情況。在移動平均線圖中,不同周期的移動平均線會以不同顏色的線條表示,以方便交易者進行比較和分析。

通過觀察移動平均線圖,交易者可以發現市場中的趨勢和轉折點,以及價格波動的情況。例如,當短期移動平均線向上穿過長期移動平均線時,可能預示著市場即將上漲;而當短期移動平均線向下穿過長期移動平均線時,可能預示著市場即將下跌。此外,交易者還可以通過觀察不同周期的移動平均線來分析市場的支撐和壓力位,以及趨勢的持續時間和強度。

移動平均線圖是一種重要的技術分析工具,可以幫助交易者更好地理解市場趨勢和價格波動情況,從而做出更明智的交易決策。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf# 加載每月太陽黑子數據集
data = pd.read_csv("monthly-sunspots.csv", parse_dates=['Month'], index_col='Month')
print(data)# 移動平均線圖
plt.figure(figsize=(7, 5))
values = data['Sunspots']# 7天移動平均線
rolling_mean = values.rolling(window=7).mean()
plt.plot(values, label='Original')
plt.plot(rolling_mean, label='7-day Moving Average', color='red')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Moving Average Plot')
plt.legend()
plt.grid(True)
plt.show()

在這里插入圖片描述

參考文章:https://mp.weixin.qq.com/s/4tZan5-1X94oITmCCLshOw

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207951.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【力扣】160.相交鏈表

160.相交鏈表 這個題目因為我之前在學指針的時候沒學好,所以總感覺有一種畏難,我害怕。但是當真正的開始學習之后,發現現在的腦袋還是能用的,所以不要放棄,你可以的! 題解: 總的來說還是挺簡…

CSGO游戲盲盒開箱源碼 盲盒對戰、幸運開箱、積分商城、Fl盲盒

源碼介紹: CSGO游戲盲盒開箱源碼 盲盒對戰、幸運開箱、積分商城、Fl盲盒。這個是一個新花樣玩法的盲盒程序。 僅供學習,請勿商用!請購買正版程序運營。 代碼下載:百度網盤

2、Linux_遠程操作

遠程操作 1.配置ifconfig 1.1輸入 ifconfig 查看 ip 的命令( ifconfig ) 1.2搜索 ifconfig 命令(yum search ifconfig) 1.3配置網卡 進入如下目錄配置網卡 cd /etc/syscofig/network-scripts編輯 ifcfg-ens33 vi ifcfg-ens33按 i 鍵進入編輯模式 按 …

Java第二十一章

一.網絡程序設計基礎 1.網絡協議 網絡協議規定了計算機之間連接的物理、機械(網線與網卡的連接規定)、電氣(有效的電平范圍)等特征,計算機之間的相互尋址規則,數據發送沖突的解決方式,長數據如何分段傳送與接收等內容.就像不同的國家有不同的…

邏輯漏洞與越權

邏輯漏洞與越權 越權 如果使用A用戶的權限去操作B用戶的數據,A的權限小于B的權限,如果能夠成功操作,則稱之為越權操作。 越權漏洞形成的原因是后臺使用了 不合理的權限校驗規則導致的。 一般越權漏洞容易出現在權限頁面(需要登…

掌握VUE中localStorage的使用

文章目錄 🍁localStorage的使用🌿設置數據🌿獲取數據🌿更新數據🌿刪除數據 🍁代碼示例🍁使用場景🍁總結 localStorage是一種Web瀏覽器提供的本地存儲機制,允許開發者在用…

java中ReentrantLock的實現原理是什么?

ReentrantLock 的實現原理主要涉及到兩個關鍵概念:同步器(Sync)和 AQS(AbstractQueuedSynchronizer,抽象隊列同步器)。 ReentrantLock 使用 AQS 來實現可重入鎖的機制。AQS 是 Java 并發包中的一個抽象基類…

周星馳 互聯網3.0 團隊下個月將上線獨立 App

2023年12月7日,新浪科技報道指出,周星馳旗下的互聯網3.0團隊透露,Moonbox,這家周星馳創立的互聯網3.0初創公司,計劃在明年1月份完成Moonbox App的上線,屆時該應用將免費向用戶提供服務。 目前,…

C現代方法(第25章)筆記——國際化特性

文章目錄 第25章 國際化特性25.1 <locale.h>: 本地化25.1.1 類項25.1.2 setlocale函數25.1.3 localeconv函數 25.2 多字節字符和寬字符25.2.1 多字節字符25.2.2 寬字符25.2.3 Unicode和通用字符集25.2.4 Unicode編碼25.2.5 多字節/寬字符轉換函數25.2.6 多字節/寬字符串轉…

Academic accumulation|行政管理方向的文章

一、評西方的“新公共管理”范式 文獻來源&#xff1a;[1]陳振明.評西方的“新公共管理”范式[J].中國社會科學,2000(06):73-82207. 下載鏈接&#xff1a;https://pan.baidu.com/s/1M1jDT-5tsJ0ES46j4pb7Cg 提取碼&#xff1a;mj54 在當代西方政府改革浪潮的沖擊下 ,世紀之交的…

zotero關閉翻譯自動創建標簽

zotero中文社區&#xff1a;https://plugins.zotero-chinese.com/#/

代碼遷移到gltlab倉庫,包含全部分支和提交記錄

老倉庫所有分支都完整拉取 git clone --mirror 原倉庫地址文件名&#xff1a;xxx.git 進入下載的目錄&#xff0c;設置新的倉庫地址 git remote set-url origin 新倉庫地址推送到新倉庫 git push -f origin --mirror問題一&#xff1a;remote: GitLab: The default branch …

Jmeter用于接口測試中,關聯如何實現

Jmeter用于接口測試時&#xff0c;后一個接口經常需要用到前一次接口返回的結果&#xff0c;應該如何獲取前一次請求的結果值&#xff0c;應用于后一個接口呢&#xff0c;拿一個登錄的例子來說明如何獲取。 1、打開jmeter, 使用的3.3的版本&#xff0c;新建一個測試計劃&#…

acme.sh自動配置免費SSL泛域名證書并續期(Aliyun + Debian + nginx)

acme.sh自動配置免費SSL泛域名證書并續期&#xff08;Aliyun Debian nginx&#xff09; 以前使用Certbot自動配置SSL證書&#xff0c;需要安裝snap管理器再安裝Certbot&#xff0c;期間還要去找AliDNS腳本&#xff0c;比較麻煩。如果不想如此&#xff0c;推薦使用acme.sh自動…

maven學習筆記總結

目錄 一、maven簡介 二、GAVP屬性 三、基于 IDLE 的 Maven 工程創建 1&#xff09;java標準工程&#xff08;Javase&#xff09;的創建 2&#xff09;java企業工程&#xff08;Javaee&#xff09;的創建 a&#xff09;手動創建 b&#xff09;插件方式創建&#xff08;fil…

數據結構與算法(六)分支限界法(Java)

目錄 一、簡介1.1 定義1.2 知識回顧1.3 兩種解空間樹1.4 三種分支限界法1.5 回溯法與分支線定法對比1.6 使用步驟 二、經典示例&#xff1a;0-1背包問題2.1 題目2.2 分析1&#xff09;暴力枚舉2&#xff09;分支限界法 2.3 代碼實現1&#xff09;實現廣度優先策略遍歷2&#xf…

力扣題:字符的統計-12.4

力扣題-12.4 [力扣刷題攻略] Re&#xff1a;從零開始的力扣刷題生活 力扣題1&#xff1a;657. 機器人能否返回原點 解題思想&#xff1a;進行統計即可 class Solution(object):def judgeCircle(self, moves):""":type moves: str:rtype: bool""&qu…

GeoPandas初體驗:它是什么,我用它展示一下shp矢量數據

GeoPandas 是一個開源的 Python 庫&#xff0c;用于處理地理空間數據。它擴展了 Pandas 這個流行的 Python 數據操作庫&#xff0c;增加了對地理數據類型和操作的支持。GeoPandas 結合了 Pandas、Matplotlib 和 Shapely 的功能&#xff0c;提供了一個易于使用且高效的工具&…

c語言實例:計算并輸出一個整數數組的平均值

大家好&#xff0c;今天給大家介紹一個c語言實例&#xff1a;計算并輸出一個整數數組的平均值&#xff0c;文章末尾附有分享大家一個資料包&#xff0c;差不多150多G。里面學習內容、面經、項目都比較新也比較全&#xff01;可進群免費領取。 以下是一個使用C語言實現的實例&am…

Day18——JDK新特性

1.JDK8的新特性 1.1 Lambda表達式 1.1.1 舉例 public class LambdaTest {Testpublic void test1(){Runnable r1 new Runnable() {Overridepublic void run() {System.out.println("test1");}};r1.run();//Lambda表達式的寫法Runnable r2 () ->{System.out.pr…