У меня есть различные фреймы данных панд, содержащие до 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 оттенков серого и, возможно, цветную полосу для загрузки.
Я мог бы поиграть с различными оттенками серого в качестве основного цветаи посмотрите, что делает установка различных альфа-каналов для лучшего визуального эффекта, но это выглядит странно.
Другой вариант - сделать что-то вроде max_df = df.max(1)
и min_df = df.min(1)
, а затем использовать matplotlib для заполнения между (plt.fill_between(df.index, min_df, max_df)
) и настройте некоторый способ повторить это для различных уровней (то есть на 1, 2 и 3 стандартных отклонения от среднего значения), чтобы я закончил каким-то непрерывным рамочным графиком.
Но ямне интересно, есть ли лучший способ сделать это.
Кроме того: я не совсем уверен, как лучше описать то, что я хочу / нуждаюсь, поэтому, пожалуйста, если у вас есть какие-либо вопросы / комментарии по поводувопрос,Прокомментируйте, пожалуйста, и я посмотрю, что я могу отредактировать, чтобы прояснить ситуацию.