Matplotlib 数据帧值的定义,需要图形化建议

Matplotlib 数据帧值的定义,需要图形化建议,matplotlib,pandas,Matplotlib,Pandas,我有一个节点集群,每个节点产生大约200个关于CPU/网络/磁盘等性能的统计数据。到目前为止,我已经循环了各个节点的日志文件,并将它们解析为每个节点的数据帧对象,然后放入由节点id键入的dict中: (这里第一列是数据帧的索引标签) {'node00': 核心0核心1核心2核心3组0 平均仪表板组合仪表(带怠速)0.09 0.12 0.06 0.06 0.08 平均消费物价指数(带怠速)11.17 8.03 15.62 16.97 12.95 平均仪表板组合仪表(不带怠速)0.48 0.78 0

我有一个节点集群,每个节点产生大约200个关于CPU/网络/磁盘等性能的统计数据。到目前为止,我已经循环了各个节点的日志文件,并将它们解析为每个节点的数据帧对象,然后放入由节点id键入的dict中:

(这里第一列是数据帧的索引标签)

{'node00':
核心0核心1核心2核心3组0
平均仪表板组合仪表(带怠速)0.09 0.12 0.06 0.06 0.08
平均消费物价指数(带怠速)11.17 8.03 15.62 16.97 12.95
平均仪表板组合仪表(不带怠速)0.48 0.78 0.64 0.63 0.63
平均消费物价指数(不带怠速)2.101.281.561.591.63
用户仪表板组合仪表(不带怠速)0.70 1.02 0.85 0.84 0.85
........................................
,
“node01”:
平均仪表板组合仪表(带怠速)0.05 0.12 0.06 0.06 0.08
平均消费物价指数(带怠速)9.17 8.03 15.62 16.97 12.95
平均仪表板组合仪表(不带怠速)0.48 0.78 0.64 0.63 0.63
平均消费物价指数(不带怠速)2.101.281.561.591.63
用户仪表板组合仪表(不带怠速)0.70 1.02 0.85 0.84 0.85
}
我计划编写一个通用函数,将统计信息的名称作为参数,然后在集群中的所有节点上绘制特定统计信息的条形图。不同芯线的钢筋可以堆叠或并排。但x轴上的点必须是节点,以便于比较


有什么建议吗?我不熟悉Panda/matplotlib,所以任何提示都很好。

我认为最好的方法是将所有数据帧合并在一起,然后您可以使用所有漂亮的Panda函数进行切片、混合和匹配

让我们首先创建一些示例数据:

# 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应该与您的dict类似。我将按如下方式合并它们:

# 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')
这为您提供了一个包含所有数据的漂亮数据框,使用Pandas内置功能的基本绘图功能可以简单到:

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

plotstat(dfall, 'Avg IPC (w/ idle)')
其中:



当然,您可以使用stack/unstack来构造数据帧,根据数据量和使用方式的不同而有所不同。

我认为最好的方法是将所有数据帧合并在一起,然后您可以使用所有漂亮的Panda函数进行切片、混合和匹配

让我们首先创建一些示例数据:

# 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应该与您的dict类似。我将按如下方式合并它们:

# 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')
这为您提供了一个包含所有数据的漂亮数据框,使用Pandas内置功能的基本绘图功能可以简单到:

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

plotstat(dfall, 'Avg IPC (w/ idle)')
其中:



当然,您可以使用stack/unstack来构建数据帧,这取决于数据量和最常用的使用方式。

通过各种示例,我可以创建条形图。将stats名称更改为列而不是索引,这样以后只允许选择statitis与参数匹配的行。还将节点值添加为列。将所有节点的数据帧追加到更大的列表中。最后做数据透视表,将数据透视放入数据框,并在条形模式下绘制数据框,创建了必要的图形。将stats名称更改为列而不是索引,这样以后只允许选择statitis与参数匹配的行。还将节点值添加为列。将所有节点的数据帧追加到更大的列表中。最后,执行数据透视表,将数据透视放入数据框,并在条形模式下绘制数据框,即可创建必要的图形。