【发布时间】:2018-05-24 12:29:36
【问题描述】:
我有各种 pandas 数据帧,其中包含多达 2000 个时间序列。显然,一个简单的df.plot() 并没有真正显示出任何有用的东西(并且需要几分钟来绘制)。但至少我可以很容易地得到(并绘制)一个(滚动的)平均值。简单例子:
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
df = pd.DataFrame(np.random.randn(1000, 14), index=ts.index, columns=list('ABCDEFGHIJKLMN'))
mean_df = df.mean(1)
rolling_mean = mean_df.rolling(window = 60, center = True)
ax = df.plot(style=':')
rolling_mean.mean().plot(ax=ax)
通过这个小例子,我们大概可以看到底层数据的“行为”:
它在零附近非常对称,大部分数据在 +1 和 -1 之间,相当多的数据在 +1 和 +2 之间,以及 -1 和 -2 之间,有些事情发生在 2/3括号和一些异常值上升(或下降)到几乎 +(-)4。
为什么可以轻松掌握这一点?显然,这是由于每个区域的线数,以及该区域的强度或阴影。当我变成单色时变得更加清晰:
但是,这缺少对密度或行数的量化。 我怎样才能把它变成量化的东西?
即2-4 括号应该有各种深浅不一的浅灰色,1-2 中灰色,0-1 深灰色,这样平均值就会放在图表中几乎黑色区域的顶部,所以我最终得到 50灰色阴影,也许还有一个彩条。
我可能会尝试使用各种灰度作为基色,看看设置不同的 alpha 值会产生什么效果以获得更好的视觉效果,但这似乎很老套。
另一种选择是执行 max_df = df.max(1) 和 min_df = df.min(1) 之类的操作,然后使用 matplotlib 在 (plt.fill_between(df.index, min_df, max_df)) 之间进行填充,并以某种方式在各个级别(即 1、2 和 3 个标准差之外)重复此操作从平均数),所以我会以某种连续的箱线图结束。
但我想知道是否有更好的方法来做到这一点。
另外:我不确定如何最好地描述我想要/需要的内容,所以,如果您对此问题有任何疑问/cmets,请发表评论,我会看看我可以编辑什么以使自己更清楚.
【问题讨论】:
-
也许是Cross Validated 的问题。它们还涵盖数据可视化。
标签: python pandas matplotlib data-visualization