Отметьте внезапные изменения цен во временных рядах данных и раскрасьте их - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть данные цен Pandas для разных месяцев и лет (временных рядов), 80 столбцов.Я хочу иметь возможность обнаруживать существенные изменения цен либо вверх, либо вниз и по-разному окрашивать их в кадре данных.Возможно ли это и какой будет наилучший подход?

Jan-2001 Feb-2001 Jan-2002 Feb-2002 ....
  100      30         10     ...
  110      25          1      ...
   40       5         50
   70      11          4
   120     35          2

Здесь в первом столбце 40 и 70 должны быть отмечены, во втором столбце 5 и 11 должны быть отмечены, в третьем столбце не совсем уверенно, вероятно, 1, 50, 4, 2 ...

1 Ответ

0 голосов
/ 11 декабря 2018

Ваш вопрос связан с двумя проблемами, которые я вижу.

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

  2. Идентификация выбросов на основе данных столбца.Его сложно интерпретировать, если вы хотите, чтобы он основывался на всем наборе данных, и наоборот, наоборот: предыдущие данные в столбце выглядят как скользящий выброс, т. Е. Предыдущие данные рассчитываются, чтобы определить, вышла ли следующая вещь из строя.

В приведенном ниже примере я предоставляю метод для обработки данных с помощью std dev / zscoring на основе среднего значения данных во всем столбце.Вам нужно будет настроить элементы> <, чтобы добраться до желаемого состояния, есть много тонкостей, связанных с этой концепцией, и я бы посоветовал взглянуть на несколько ресурсов по этому вопросу.</p>

Для ваших данных:

Jan-2001,Feb-2001,Jan-2002
100,30,10
110,25,1
40,5,50
70,11,4
120,35,20000

Мне известны способы выделения, но не в терминале.Метод https://pandas.pydata.org/pandas-docs/stable/style.html работает в нескольких программах.

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

Пример кода:

df = pd.read_csv("full.txt")
original = df.columns
print(df)
for col in df.columns:
    col_zscore = col + "_zscore"
    df[col_zscore] = (df[col] - df[col].mean())/df[col].std(ddof=0)
    print(df[col].loc[(df[col_zscore] > 1.5) | (df[col_zscore] < -.5)])


print(df)

Выход 1: # печатает исходный кадр данных

   Jan-2001  Feb-2001  Jan-2002
     100       30        10      
     110       25         1       
      40        5        50      
      70       11         4       
     120       35         20000       

Выход 2: # Идентифицирует выбросы

2    40
3    70
Name:     Jan-2001, dtype: int64
2    5 
3    11
Name: Feb-2001, dtype: int64
0    10   
1    1    
3    4    
4    20000
Name: Jan-2002, dtype: int64

Выход 3: # Печатает полный созданный кадр данных с zscore каждого элемента на основе столбца

       Jan-2001  Feb-2001  Jan-2002      Jan-2001_std      Jan-2001_zscore  \
0  100           30        10        32.710854         0.410152              
1  110           25        1         32.710854         0.751945              
2  40            5         50        32.710854        -1.640606              
3  70            11        4         32.710854        -0.615227              
4  120           35        2         32.710854         1.093737              

   Feb-2001_std  Feb-2001_zscore  Jan-2002_std  Jan-2002_zscore  
0  12.735776     0.772524         20.755722    -0.183145         
1  12.735776     0.333590         20.755722    -0.667942         
2  12.735776    -1.422147         20.755722     1.971507         
3  12.735776    -0.895426         20.755722    -0.506343         
4  12.735776     1.211459         20.755722    -0.614076    

Ресурсы для zscore находятся здесь: https://statistics.laerd.com/statistical-guides/standard-score-2.php

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