Нормализация огромных числовых данных для создания ценного линейного графика - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть следующий фрейм данных:

Year           Month    Value
2005               9    1127.080000
2016               3    9399.000000
                   5    3325.000000
                   6    120.000000
                   7    40.450000
                   9    3903.470000
                   10   2718.670000
                   12   12108501.620000
2017               1    981879341.949982
                   2    500474730.739911
                   3    347482199.470025
                   4    1381423726.830030
                   5    726155254.759981
                   6    750914893.859959
                   7    299991712.719955
                   8    133495941.729959
                   9    27040614303.435833
                   10   26072052.099796
                   11   956680303.349909
                   12   755353561.609832
2018               1    1201358930.319930
                   2    727311331.659607
                   3    183254376.299662
                   4    9096130.550197
                   5    972474788.569924
                   6    779912460.479959
                   7    1062566320.859962
                   8    293262028544467.687500
                   9    234792487863.501495

Как видите, у меня есть огромные значения, сгруппированные по месяцам и годам. Моя проблема в том, что я хочу создать линейный сюжет, но когда я делаю это, для меня это не имеет никакого смысла:

df.plot(kind = 'line', figsize = (20,10))

enter image description here

Визуальное представление данных не имеет большого смысла, принимая во внимание, что значения колеблются в течение месяцев и лет, но для большей части периода и большой вершины в конце показана плоская линия.

Я полагаю, что проблема может быть в шкале оси Y, которая некорректно подгоняет данные. Я попытался применить преобразование журнала к оси y, но это не добавляет никаких изменений, я также попытался нормализовать данные между 0 и 1 только для теста, но график все тот же. Любые идеи о том, как получить более точное представление моих данных за период времени? А также, как я могу отобразить название месяца и года на оси х?

РЕДАКТИРОВАТЬ:

Вот как я применил преобразование журнала:

df.plot(kind = 'line', figsize = (20,10), logy = True)

и вот результат:

enter image description here

для меня этот график все еще не очень читабелен, учитывая, что нанесенные значения представляют доход за определенное время, и применение логарифмического преобразования к денежным значениям для меня все равно не имеет большого смысла.

Вот как я нормализовал данные:

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
df_scaled.set_index(df.index, inplace = True)

А потом я построил это:

df_scaled.plot(kind = 'line', figsize = (20, 10), logy = True)

enter image description here

Как вы можете заметить, при этом, кажется, что ситуация меняется, я немного растерялся из-за того, как правильно визуализировать эти данные за заданные периоды времени.

1 Ответ

0 голосов
/ 07 ноября 2018

Проблема в том, что одно значение намного больше, чем другие, вызывая этот всплеск. Вместо этого используйте полулоговой график

df.plot(y='Value', logy=True)

выходы

Чтобы сделать это, используйте дату как x-axis do

df['Day'] = 1  # we need a day
df['Date'] = pd.to_datetime(df[['Year', 'Month', 'Day']])
df.plot(x='Date', y='Value', logy=True)

который выводит

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...