2012-12-13 103 views
0

我有一個節點集羣,其中每個節點產生大約200個關於CPU /網絡/磁盤性能的統計信息。到目前爲止,我已經遍歷了各種節點的日誌文件並解析它們成每個節點的數據幀的對象並投入通過節點ID鍵控一個字典:熊貓字典的數據幀值,需要圖形建議

(此處的第一列是數據幀的索引標籤)

{ 'node00': 
      <DaFrame-display-begin> 
           core 0 core 1 core 2 core 3 group 0 
    Avg IPC (w/ idle)   0.09  0.12  0.06  0.06  0.08 
    Avg CPI (w/ idle)   11.17  8.03 15.62  16.97  12.95 
    Avg IPC (w/o idle)   0.48  0.78  0.64  0.63  0.63 
    Avg CPI (w/o idle)   2.10  1.28  1.56  1.59  1.63 
    User IPC (w/o idle)   0.70  1.02  0.85  0.84  0.85 
    ........................................ 
    , 
    'node01': 
      <DataFrame-display-begin> 
    Avg IPC (w/ idle)   0.05  0.12  0.06  0.06  0.08 
    Avg CPI (w/ idle)   9.17  8.03 15.62  16.97  12.95 
    Avg IPC (w/o idle)   0.48  0.78  0.64  0.63  0.63 
    Avg CPI (w/o idle)   2.10  1.28  1.56  1.59  1.63 
    User IPC (w/o idle)   0.70  1.02  0.85  0.84  0.85 

    } 

我打算寫的通用功能會將統計的名稱作爲參數,然後在集羣中的所有節點上繪製特定統計的條形圖。不同芯的棒可以堆疊或並排。但是x軸會將點指定爲易於比較的節點。

有什麼建議嗎?我是Pandas/matplotlib的新手,所以任何提示都會很棒。

+0

從各種示例中,我可以設法創建條形圖。將統計信息名稱更改爲列而不是索引,後來只允許選擇統計信息與參數匹配的那些行。還將該節點值添加爲列。將所有節點的數據框放入更大的列表中。最後做數據透視表並將樞軸放入一個數據框中,並以bar模式繪製數據框,以創建必要的圖形。 –

回答

3

我認爲最好的方法是將所有的數據框合併在一起,然後你可以使用所有漂亮的熊貓函數來分割和混合你想要的任何東西。

讓我們先創建一些示例數據:

# node1 
index = ['Avg IPC (w/ idle)', 'Avg CPI (w/ idle)', 'Avg IPC (w/o idle)', 'Avg CPI (w/o idle)', 'User IPC (w/o idle)'] 

core0 = [0.09, 11.17, 0.48, 2.10, 0.70] 
core1 = [0.12, 8.03, 0.78, 1.28, 1.02] 
core2 = [0.06, 15.62, 0.64, 1.56, 0.85] 
core3 = [0.06, 16.97, 0.63, 1.59, 0.84] 
group = [0.08, 12.95, 0.63, 1.63, 0.85] 

data = {'core0': core0, 'core1': core1, 'core2': core2, 'core3': core3, 'group': group} 
node01 = pd.DataFrame(data, index=index) 

# node2 
index = ['Avg IPC (w/ idle)', 'Avg CPI (w/ idle)', 'Avg IPC (w/o idle)', 'Avg CPI (w/o idle)', 'User IPC (w/o idle)'] 

core0 = [0.33, 11.17, 0.48, 2.10, 0.70] 
core1 = [0.12, 8.99, 0.78, 1.28, 1.02] 
core2 = [0.06, 15.62, 0.64, 1.56, 9.99] 
core3 = [0.06, 16.99, 9.99, 1.59, 0.84] 
group = [0.08, 12.95, 0.63, 9.99, 0.85] 

data = {'core0': core0, 'core1': core1, 'core2': core2, 'core3': core3, 'group': group} 

node02 = pd.DataFrame(data, index=index) 

alldfs = {'node01': node01, 'node02': node02} 

的alldfs應該是類似的字典。我將它們合併是這樣的:

# create 1 DataFrame 
dfall = pd.concat(alldfs) 

# name the levels for easy access 
dfall.index.names = ['node','stat'] 
dfall.columns.name = 'core' 

# pivot the 'stat' layer to the columns so only the nodes are on the index 
dfall = dfall.unstack('stat') 

這給你一個包含所有數據一個不錯的單數據幀,採用熊貓內建功能的基本繪圖功能可以很簡單的:

def plotstat(df, stat): 
    return df.xs(stat, axis=1, level=1).plot(kind='bar', title=stat) 

plotstat(dfall, 'Avg IPC (w/ idle)') 

其中給出:

enter image description here


你當然可以ü根據數據量和最常用的方式,堆疊/取消堆疊以構建DataFrame有點不同。

+0

太好了,謝謝你的建議,我現在就試試。 –