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.mzph.cn/news/207951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。 一般越权漏洞容易出现在权限页面(需要登…

周星驰 互联网3.0 团队下个月将上线独立 App

2023年12月7日,新浪科技报道指出,周星驰旗下的互联网3.0团队透露,Moonbox,这家周星驰创立的互联网3.0初创公司,计划在明年1月份完成Moonbox App的上线,届时该应用将免费向用户提供服务。 目前,…

zotero关闭翻译自动创建标签

zotero中文社区:https://plugins.zotero-chinese.com/#/

代码迁移到gltlab仓库,包含全部分支和提交记录

老仓库所有分支都完整拉取 git clone --mirror 原仓库地址文件名:xxx.git 进入下载的目录,设置新的仓库地址 git remote set-url origin 新仓库地址推送到新仓库 git push -f origin --mirror问题一:remote: GitLab: The default branch …

Jmeter用于接口测试中,关联如何实现

Jmeter用于接口测试时,后一个接口经常需要用到前一次接口返回的结果,应该如何获取前一次请求的结果值,应用于后一个接口呢,拿一个登录的例子来说明如何获取。 1、打开jmeter, 使用的3.3的版本,新建一个测试计划&#…

maven学习笔记总结

目录 一、maven简介 二、GAVP属性 三、基于 IDLE 的 Maven 工程创建 1)java标准工程(Javase)的创建 2)java企业工程(Javaee)的创建 a)手动创建 b)插件方式创建(fil…

数据结构与算法(六)分支限界法(Java)

目录 一、简介1.1 定义1.2 知识回顾1.3 两种解空间树1.4 三种分支限界法1.5 回溯法与分支线定法对比1.6 使用步骤 二、经典示例:0-1背包问题2.1 题目2.2 分析1)暴力枚举2)分支限界法 2.3 代码实现1)实现广度优先策略遍历2&#xf…

力扣题:字符的统计-12.4

力扣题-12.4 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:657. 机器人能否返回原点 解题思想:进行统计即可 class Solution(object):def judgeCircle(self, moves):""":type moves: str:rtype: bool""&qu…

GeoPandas初体验:它是什么,我用它展示一下shp矢量数据

GeoPandas 是一个开源的 Python 库,用于处理地理空间数据。它扩展了 Pandas 这个流行的 Python 数据操作库,增加了对地理数据类型和操作的支持。GeoPandas 结合了 Pandas、Matplotlib 和 Shapely 的功能,提供了一个易于使用且高效的工具&…

c语言实例:计算并输出一个整数数组的平均值

大家好,今天给大家介绍一个c语言实例:计算并输出一个整数数组的平均值,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 以下是一个使用C语言实现的实例&am…

怎么将用户引流到你的私域中?

微信私域运营是一种利用微信平台建立与用户深度联系的营销方式,可在私域中触达并服务用户。 那么如何将在将用户引流至你的私域中呢? 可以从以下几个小方法入手。 ①打造一个吸引人的个人品牌形象非常重要。在社交媒体上展示真实、独特、专业的一面&a…

喜讯!云起无垠上榜《成长型初创企业推荐10强》

近期,由中国计算机学会抗恶劣环境计算机专业委员会、信息产业信息安全测评中心和安全牛联合发起的第十一版《中国网络安全企业100强》榜单正式发布。在这份备受关注的榜单中,云起无垠凭借其创新的技术能力,荣登《成长型初创企业推荐10强》榜单…

网络知识学习(笔记三)(传输层的TCP)

前面已经介绍了传输层的UDP协议的报文以及一下相关的知识点,本次主要是传输层的TCP协议,包括TCP报文的详细介绍;可靠传输、流量控制、拥塞控制等;建立连接、释放连接。 一、TCP基本知识点介绍 1.1、TCP协议的几个重要的知识点 …

网安领域含金量最高的证书有哪些?看这1篇就足够了!

文章目录 一、前言二、CISP三、CISAW四、NISP五、为什么很多人考不下来 一、前言 现在想找网络安全之类的工作,光有技术是不够的,还得有东西证明自己,网安三大敲门砖:CTF、漏洞证明和专业证书。 对于CTF的话只是少数人能参加的&…

uc_14_IP地址_套接字_字节序转换

1 计算机网络 计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络协议是一种特…

AtCoder ABC周赛2023 11/4 (Sat) E题题解

目录 原题截图: 原题翻译 题目大意: 主要思路: 代码: 原题截图: 原题翻译 题目大意: 给你一个数组,给你一个公式,让你选k个元素,用公式算出最终得分。 主要思路&am…

X86汇编语言:从实模式到保护模式(代码+注释)--c6

X86汇编语言:从实模式到保护模式(代码注释)–c6 标志寄存器FLAGS: 6th:ZF位(Zero Flag):零标志,执行算数或者逻辑运算之后,会将该位置位。10th:D…