可以通过修改该小程序,最终实现利用shibor.csv数据中的shibor列中的2000个数据(比如20101130~20181130)作为研究对象,将shibor序列分为5个长度一段(共400段),利用可见图算法将生成每段的图,并统计400段中重复出现次数最多的一个图。 。 import networkx as nx import pandas as pd import numpy as np import matplotlib.pyplot as plt series=[3,4,3.5,3.9,7.8] temp=pd.DataFrame([]) def vg(series): n=len(series)#返回数组中元素的总数 for i in range(2,n+1): temp.loc[i-1,0]=i-1 temp.loc[i-1,1]=i nnn1=n-1 for i in range(1,n-1): for j in range(i+2,n+1): poke=1 slope0=float((series[j-1]-series[i-1]))/(j-i) for k in range(i+1,j): if float((series[k-1]-series[i-1]))/(k-i)<slope0: poke=poke*1 else: poke=poke*0 if poke==1: nnn1=nnn1+1 temp.loc[nnn1,0]=i temp.loc[nnn1,1]=j return temp Re=vg(series) Re=np.array(Re) gg1=list(Re) G=nx.Graph(gg1) nx.draw_networkx(G,node_size = 400)
时间: 2024-02-04 17:03:08 浏览: 155
可以通过修改该小程序实现你的需求。以下是一个修改的示例代码:
```
import networkx as nx
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('shibor.csv')
series = data['shibor'].values
# 将shibor序列分为5个长度一段(共400段)
n = len(series)
m = 400
sub_len = int(np.ceil(n/m))
sub_series = [series[i*sub_len:(i+1)*sub_len] for i in range(m)]
# 统计每段中出现次数最多的一个图
max_count = 0
max_graph = None
for i in range(m):
sub_data = pd.DataFrame({'value': sub_series[i]})
temp = pd.DataFrame([])
Re = vg(sub_series[i])
Re = np.array(Re)
gg1 = list(Re)
G = nx.Graph(gg1)
count = len([c for c in nx.connected_components(G)])
if count > max_count:
max_count = count
max_graph = G
# 绘制出现次数最多的一个图
nx.draw_networkx(max_graph, node_size = 400)
plt.show()
```
需要注意的是,该代码中使用了`shibor.csv`文件,需要将该文件与代码文件放在同一目录下。另外,该代码中的`vg`函数与原始代码中的`vg`函数相同。
阅读全文