Python中如何分析序列数据?求大佬指点
我有一个超级长的 list,正常情况下,里面包含的数字是这样的[3,1,0,2,3,1,0,2。。。。] 总之就是一直循环 3102 就对了。注意 list 第一个数字不一定是 3 呢,可以是 3、1、0、2 四个数中的一个。
但是有 bug 修改了这个 list,我想分析出,如果以一个完整或者不完整的一个循环(完整的循环就是 3、1、0、2 )为一步,这个被修改过的 list 里有多少步是连续不完整的。(完整的定义就是有连续的 3、1、0、2 四个数字)
Python中如何分析序列数据?求大佬指点
抛砖:
’’.join(map(str,your_list)).split(‘3102’)
Python里分析序列数据,最直接的就是用pandas。你先把数据读到DataFrame里,然后就能用各种方法看它的统计特征和变化趋势了。
比如,假设你有个时间序列数据,可以这样快速上手:
import pandas as pd
import numpy as np
# 创建示例时间序列数据
dates = pd.date_range('2023-01-01', periods=100, freq='D')
data = pd.DataFrame({
'date': dates,
'value': np.random.randn(100).cumsum() + 50 # 模拟随机游走
})
data.set_index('date', inplace=True)
# 基本统计信息
print("基本统计:")
print(data.describe())
# 滚动窗口分析(比如7天移动平均)
data['rolling_mean'] = data['value'].rolling(window=7).mean()
# 重采样(比如按周汇总)
weekly_data = data['value'].resample('W').mean()
print("\n周平均值:")
print(weekly_data.head())
# 可视化(需要matplotlib)
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 1, figsize=(10, 6))
data['value'].plot(ax=axes[0], title='原始序列')
data['rolling_mean'].plot(ax=axes[1], title='7天移动平均')
plt.tight_layout()
plt.show()
关键操作就这几点:用describe()看统计概况,rolling()做滑动窗口分析,resample()进行重采样。如果数据有季节性,还可以用statsmodels库做更专业的时序分解。
总结:pandas配合简单统计方法就能解决大部分序列分析需求。
楼主描述问题不是太清楚,让人听了云里雾里的。
思路很简单,把 list 按 4 个元素分割 然后 用每个子 list 做 set 和 set((3,1,0,2))比较
if (set((3,1,0,2)) - set([2,0,1,3]))
或者 if len(set((3,1,0,2)) & set([2,0,1,3]))==4 就可以判断出来了。
骚断腿
“不完整” 可以任意长吗?如果长度不定,还存在确定的步数吗?
这么做有 bug
感觉问题没有良好定义
不过要分析直接遍历就行了吧?
用 cur 标记当前应该是什么值
用 startIndex 标记计算起始 index
用 curIndex 标记当前计算的 index
然后开始遍历, 直到结束
cur = 3, startIndex=0, curIndex=0
如果当前值和 cur 不等, 那么就是不符合的值, 记录 startIndex 和 curIndex, 标记这一段都是不符合的, cur 重置回 3
如果值相等并且不是 2, 那么 curIndex++, 同时 cur 往后走一位
如果值相等是 2, 那么 startIndex 和 curIndex 是满足条件的序列, 同时 ++ 开始新的判定, 并且 cur 重置回 3
#5 原文:“hjq98765 这么做有 bug ”
======
回复:嗯,忘了 split 里面是每个字符单独视为分隔符,不是整体作为分隔符……
有个小毛病, 如果相等而且是 2 应该是 curIndex++ 并且 startIndex = curIndex
1 楼++
import re
re.split(‘3102’, ‘’.join(map(str,your_list)))
然后去数连续非 ‘’ 元素的个数。方法很多~

