Python人工智能 使用可视图方法转换时间序列为复杂网络

news2025/5/13 3:19:13

基于可视图方法的时间序列复杂网络转换实践

引言

在人工智能与数据科学领域,时间序列分析是一项基础且重要的技术。本文将介绍一种创新的时间序列分析方法——可视图方法,该方法能将时间序列转换为复杂网络,从而利用复杂网络理论进行更深入的分析。本文基于Python编程实践,详细阐述该方法的实现步骤,并对实验结果进行分析。

技术背景

可视图方法的核心思想是将时间序列中的每个数据点视为网络中的节点,而节点之间的连接(边)则基于数据点之间的“可见性”判断。具体规则如下:

对于时间序列中的任意两点 a a a b b b(假设 a a a b b b之前,即 x a < x b x_a<x_b xa<xb),若它们之间的所有其他点 c c c(满足 x a < x c < x b x_a<x_c<x_b xa<xc<xb)均满足以下条件,则 a a a b b b具有可见性:
y c < y a + ( y b − y a ) ( x c − x a ) x b − x a y_c < y_a + \frac{(y_b - y_a)(x_c - x_a)}{x_b - x_a} yc<ya+xbxa(ybya)(xcxa)
其中, x a , x b , x c x_a,x_b, x_c xa,xb,xc 为时间坐标, y a , y b , y c y_a, y_b, y_c ya,yb,yc 为对应的数值。

实验步骤与代码实现
1. 数据准备

给定时间序列为:
{ 0.87 , 0.49 , 0.36 , 0.83 , 0.87 , 0.49 , 0.36 , 0.83 , 0.87 , 0.49 , 0.36 , 0.83 } \{0.87, 0.49, 0.36, 0.83, 0.87, 0.49, 0.36, 0.83, 0.87, 0.49, 0.36, 0.83\} {0.87,0.49,0.36,0.83,0.87,0.49,0.36,0.83,0.87,0.49,0.36,0.83}

2. 时间序列可视化

在这里插入图片描述

使用 matplotlib 绘制时间序列的条形图:

import matplotlib.pyplot as plt

time_series = [0.87, 0.49, 0.36, 0.83, 0.87, 0.49, 0.36, 0.83, 0.87, 0.49, 0.36, 0.83]
plt.figure(figsize=(10, 6))
node_order = list(range(len(time_series)))
plt.bar(node_order, time_series, width=0.5, color='gray')
plt.title('Time Series Bar Chart')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()
3. 构建复杂网络

利用 networkx 库构建复杂网络:

import numpy as np
import networkx as nx

def construct_network(time_series):
    G = nx.Graph()
    G.add_nodes_from(range(len(time_series)))
    for i in range(len(time_series)):
        for j in range(i + 1, len(time_series)):
            # 计算斜率
            kab = (time_series[j] - time_series[i]) / (j - i)
            # 检查可见性条件
            visible = True
            for k in range(i + 1, j):
                y_cc = kab * (k - i) + time_series[i]
                if y_cc <= time_series[k]:
                    visible = False
                    break
            if visible:
                G.add_edge(i, j)
    return G

network = construct_network(time_series)
4. 网络结构可视化与度分析

在这里插入图片描述

可视化网络结构并分析节点度:

# 计算节点度
degree = dict(nx.degree(network))
print("各个时间点的度:", degree)

# 可视化网络
plt.figure(figsize=(10, 6))
pos = nx.circular_layout(network)
nx.draw(network, pos, with_labels=True, node_color='gray', node_size=700, edge_color='black', linewidths=5, font_size=10)
plt.title('Complex Network Visualization')
plt.show()
实验结果与分析
1. 节点度分析

通过计算节点度(即每个节点连接的边数),结果如下:
{ 0 : 4 , 1 : 3 , 2 : 3 , 3 : 4 , 4 : 6 , 5 : 3 , 6 : 3 , 7 : 4 , 8 : 5 , 9 : 3 , 10 : 3 , 11 : 3 } \{0: 4, 1: 3, 2: 3, 3: 4, 4: 6, 5: 3, 6: 3, 7: 4, 8: 5, 9: 3, 10: 3, 11: 3\} {0:4,1:3,2:3,3:4,4:6,5:3,6:3,7:4,8:5,9:3,10:3,11:3}

  • 观察:除首尾节点外,每个节点的度至少为2,符合复杂网络特性。
  • 解释:节点度反映了时间序列中数据点的局部波动特征,度越高表明该点在网络中越“重要”。
2. 网络结构可视化

通过网络可视化图(如图),可以直观观察到:

  • 时间序列中的峰值(如第3、7点)具有较高的节点度,成为网络中的关键节点。
  • 网络呈现明显的模块化结构,反映了时间序列的周期性特征。
完整代码
1. 时间序列可视化
import matplotlib.pyplot as plt

time_series = [0.87, 0.49, 0.36, 0.83, 0.87, 0.49, 0.36, 0.83, 0.87, 0.49, 0.36, 0.83]
plt.figure(figsize=(10, 6))
node_order = list(range(len(time_series)))
plt.bar(node_order, time_series, width=0.5, color='gray')
plt.title('Time Series Bar Chart')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()
2. 网络结构可视化与度分析
import numpy as np
import networkx as nx

def construct_network(time_series):
    G = nx.Graph()
    G.add_nodes_from(range(len(time_series)))
    for i in range(len(time_series)):
        for j in range(i + 1, len(time_series)):
            # 计算斜率
            kab = (time_series[j] - time_series[i]) / (j - i)
            # 检查可见性条件
            visible = True
            for k in range(i + 1, j):
                y_cc = kab * (k - i) + time_series[i]
                if y_cc <= time_series[k]:
                    visible = False
                    break
            if visible:
                G.add_edge(i, j)
    return G

network = construct_network(time_series)
# 计算节点度
degree = dict(nx.degree(network))
print("各个时间点的度:", degree)

# 可视化网络
plt.figure(figsize=(10, 6))
pos = nx.circular_layout(network)
nx.draw(network, pos, with_labels=True, node_color='gray', node_size=700, edge_color='black', linewidths=5, font_size=10)
plt.title('Complex Network Visualization')
plt.show()
结论与展望
  1. 方法有效性验证:实验结果表明,可视图方法能有效将时间序列转换为复杂网络,且节点度分析提供了对数据动态特性的新视角。
  2. 应用前景:该方法在金融数据分析、气候模式识别和生物医学信号分析等领域具有潜在应用价值。
  3. 改进方向:可结合机器学习算法(如节点嵌入、图神经网络)进一步挖掘网络特征。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338384.html

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

相关文章

spring:加载配置类

在前面的学习中&#xff0c;通过读取xml文件将类加载&#xff0c;或他通过xml扫描包&#xff0c;将包中的类加载。无论如何都需要通过读取xml才能够进行后续操作。 在此创建配置类。通过对配置类的读取替代xml的功能。 配置类就是Java类&#xff0c;有以下内容需要执行&#…

从零搭建一套前端开发环境

一、基础环境搭建 1.NVM(Node Version Manager)安装 简介 nvm&#xff08;Node Version Manager&#xff09; 是一个用于管理多个 Node.js 版本的工具&#xff0c;允许开发者在同一台机器上轻松安装、切换和使用不同版本的 Node.js。它特别适合需要同时维护多个项目&#xff…

金融数据库转型实战读后感

荣幸收到老友太保科技有限公司数智研究院首席专家林春的签名赠书。 这是国内第一本关于OceanBase数据库实际替换过程总结的的实战书。打个比方可以说是从战场上下来分享战斗经验。读后感受颇深。我在这里讲讲我的感受。 第三章中提到的应用改造如何降本。应用改造是国产化替换…

代码审计系列2:小众cms oldcms

目录 sql注入 1. admin/admin.php Login_check 2. admin/application/label/index.php 3. admin/application/hr/index.php 4. admin/application/feedback/index.php 5. admin/application/article/index.php​ sql注入 1. admin/admin.php Login_check 先看一下p…

Cursor + MCP,实现自然语言操作 GitLab 仓库

本分分享如何使用 cursor mcp 来操作极狐GitLab 仓库&#xff0c;体验用自然语言在不接触极狐GitLab 的情况下来完成一些仓库操作。 极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitL…

Vue el-from的el-form-item v-for循环表单如何校验rules(一)

实际业务需求场景&#xff1a; 新增或编辑页面&#xff08;基础信息表单&#xff0c;一个数据列表的表单&#xff09;&#xff0c;数据列表里面的表单数是动态添加的。数据可新增、可删除&#xff0c;在表单保存前&#xff0c;常常需要做表单必填项的校验&#xff0c;校验通过以…

【Reading Notes】(8.3)Favorite Articles from 2025 March

【March】 雷军一度登顶中国首富&#xff0c;太厉害了&#xff08;2025年03月02日&#xff09; 早盘&#xff0c;小米港股一路高歌猛进&#xff0c;暴涨4%&#xff0c;股价直接飙到52港元的历史新高。这一波猛如虎的操作&#xff0c;直接把雷军的身家拉到了2980亿元&#xff0c…

从PDF到播客:MIT开发的超越NotebookLM的工具

NotebookLM是谷歌推出的更具创意的AI产品之一,几个月前刚刚推出。 许多人对它的能力感到惊叹——尤其是将长文本转化为两位播客主持人之间有趣对话的功能。 NotebookLM提供的不仅仅是这些,还包括聊天(问答)甚至生成思维导图。 如果你还没有尝试过NotebookLM,我强烈建议…

Kotlin协程Semaphore withPermit约束并发任务数量

Kotlin协程Semaphore withPermit约束并发任务数量 import kotlinx.coroutines.* import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import kotlinx.coroutines.launch import kotlinx.coroutines.runBlockingfun main() {val permits 1 /…

Redis的下载安装和使用(超详细)

目录 一、所需的安装包资源小编放下述网盘了&#xff0c;提取码&#xff1a;wshf 二、双击打开文件redis.desktop.manager.exe 三、点击next后&#xff0c;再点击i agree 四、点击箭头指向&#xff0c;选择安装路径&#xff0c;然后点击Install进行安装 五、安装完后依次点…

无线网络入侵检测系统实战 | 基于React+Python的可视化安全平台开发详解

随着无线网络的普及&#xff0c;网络攻击风险也日益严峻。本项目旨在构建一个实时监测、智能识别、高效防护的无线网络安全平台&#xff0c;通过结合前后端技术与安全算法&#xff0c;实现对常见攻击行为的有效监控和防御。 一、项目简介与功能目的 本系统是一款基于 React 前…

[经验总结]Linux双机双网卡Keepalived高可用配置及验证细节

1. 前言 这种配置需求比较少见&#xff0c;在网上也很少有相关文章&#xff0c;于是记录在此&#xff0c;供有需要的朋友参考。 本篇重点介绍配置的关键点&#xff0c;基础部分简单提及&#xff0c;不赘述。 2. 需求描述 如上图&#xff0c;即给两个主机配置两对高可用主从配…

2025.04.17【Dendrogram】生信数据可视化:Dendrogram图表详解

Dendrogram customization Go further with ggraph: edge style, general layout, node features, adding labels, and more. Customized circular dendrogram Learn how to build a circular dendrogram with proper labels. 文章目录 Dendrogram customizationCustomized c…

Linux下的网络管理

一、ipv4原理 网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口&#xff0c;一般是指计算机的网络接口即网卡设备 从RHEL7开始引入了一种新的“一致网络设备命名”的方式为网络接口命名&#xff0c;该方式可以根据固件、设备拓扑、设备类型和位置信息分配固…

Zookeeper介绍与安装配置

1.综述 1.1.Zookeeper介绍 Zookeeper 是一个分布式协调服务&#xff0c;由 Apache 开发&#xff0c;主要用于管理分布式应用中的配置信息、命名服务、分布式同步和组服务。它通过简单的接口提供高性能、高可用性和严格的顺序访问控制&#xff0c;广泛应用于分布式系统的协调与…

实验五 内存管理实验

实验五 内存管理实验 一、实验目的 1、了解操作系统动态分区存储管理过程和方法。 2、掌握动态分区存储管理的主要数据结构--空闲表区。 3、加深理解动态分区存储管理中内存的分配和回收。 4、掌握空闲区表中空闲区3种不同放置策略的基本思想和实现过程。 5、通过模拟程…

用Webpack 基础配置快速搭建项目开发环境

Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具&#xff0c;但是Webpack有大量的配置项&#xff0c;对新手不太友好&#xff0c;但是我们可以根据webpack-cli的init命令根据项目需求快速生成webpack的配置文件&#xff0c;本文将手把手教你如何用 Webpack 和 npm 快…

Axios 介绍及使用指南

本文将基于 Axios 原理&#xff0c;安装及封装方面展开描述&#xff0c;话不多说&#xff0c;现在发车&#xff01; 一、原理 Axios 中文文档&#xff1a;起步 | Axios中文文档 | Axios中文网 赛前科普&#xff1a; 下文将涉及到三个关键词&#xff1a;Axios&#xff0c;Ajax…

接口自动化测试(二)

一、接口测试流程&#xff1a;接口文档、用例编写 拿到接口文档——编写接口用例以及评审——进行接口测试——工具/自动化框架进行自动化用例覆盖(70%)——输出测试报告 自动化的目的一般是为了回归 第一件事情&#xff1a;理解需求&#xff0c;学会看接口文档 只需要找到我…

Arduino+ESP826601s模块连接阿里云并实现温湿度数据上报

ArduinoESP826601s模块连接阿里云并实现温湿度数据上报 一、前言二、准备工作三、程序代码1. Arduino的程序2. ESP826601的程序3. 上面程序需要注意的地方 四、运行结果五、结束语 一、前言 看完我这三篇文章&#xff0c;相信各位朋友对于阿里云物联网平台的使用都有了一定的认…