2017-01-18 17 views
2

Я пытаюсь изучить некоторые данные, которые я импортировал из .csv. Внутри файла имеется около 100 компаний, каждый из которых имеет метку «SG» и «RG». Данные имеют несколько лет данных для этих показателей по столбцам.Запланирование таймсеров в море с использованием pandas dataframe

Я пытаюсь построить несколько графиков временных рядов, чтобы наложить строки «SG» и «RG» на один и тот же график для данной «Компании». Это изображение должно объяснить, что я имею в виду:

Summary of the lux dataframe

Может кто-нибудь дать мне некоторые рекомендации о том, как создать такой сюжет? Например, построение компании «Барбур» (с изображением выше) с двумя строками, одна для «SG» и одна для «RG».

(обратите внимание, что все типы данных являются поплавки, но с некоторыми NaNs там, и я включил обычные вещи фронт, такие как:

%matplotlib inline 
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 

ответ

0

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

Anyways , в длинной форме каждая строка имеет ровно одно наблюдение, а вспомогательные функции - это только дополнительные столбцы на этих строках. В вашем конкретном случае каждая строка имеет несколько наблюдений (по 1 для каждого y ухо, учитывая компанию и метрику), поэтому мы хотели бы преобразовать это в длинную форму, в которой год является просто еще одной особенностью вашего наблюдения. К счастью, pnd.melt может помочь вам в этом, так как он предназначен именно для этой цели.

Давайте начнем с общим pnd.DataFrame, основанный на ваших:

In [1]: import pandas as pnd 
In [2]: import seaborn as sns 

In [3]: df = DataFrame.from_dict({ 
    ...:  'company': ['A', 'B', 'A', 'B', 'C'], 
    ...:  'metric': ['SG', 'SG', 'RG', 'RG', 'SG'], 
    ...:  '2005': [1, 2, 3, 4, 5], 
    ...:  '2006': [4, 5, 6, 7, 8]})  
In [4]: df 
Out[4]: 
    2005 2006 company metric 
0  1  4  A  SG 
1  2  5  B  SG 
2  3  6  A  RG 
3  4  7  B  RG 
4  5  8  C  SG 

Преобразования в долгосрочную форму с использованием pnd.melt:

In [5]: df_melt = pnd.melt(df, 
          id_vars=['company', 'metric'], 
          value_vars=['2005', '2006'], 
          var_name='year', 
          value_name='value') 
In [6]: df_melt 
Out[6]: 
    company metric year value 
0  A  SG 2005  1 
1  B  SG 2005  2 
2  A  RG 2005  3 
3  B  RG 2005  4 
4  C  SG 2005  5 
5  A  SG 2006  4 
6  B  SG 2006  5 
7  A  RG 2006  6 
8  B  RG 2006  7 
9  C  SG 2006  8 

И, наконец, с sns.factorplot вы можете использовать параметры, такие как, х , hue, row, col, чтобы визуализировать данные, выполнив коэффициент-пробои:

In [7]: sns.factorplot(data=df_melt, 
         x='year', 
         y='value', 
         hue='metric', 
         col='company') 

Out[7]: <seaborn.axisgrid.FacetGrid at 0x7f6286fee890> 

In [8]: from matplotlib import pyplot as plt 
In [9]: plt.show() 

figure1

+0

Peter - Большое вам спасибо за то, что нашли время, чтобы помочь. Я прочитаю это и последую вашему руководству. Будучи новичком в этом сообществе, я очень ценю доброту незнакомцев. Еще раз спасибо. – NickP

+0

Не беспокойтесь, радуйся, удачи! – peterfields