Python - Pandas - 按组绘制列的计数 - 随时间绘制每个组的图形

时间:2014-08-05 16:45:19

标签: python matplotlib pandas

如果标题非常模糊,很难用几句话来表达这个问题。

我最近阅读了“Python For Data Analysis”,并一直试图将它带到现实世界的例子中。我必须将我的Dataframe / images中的一些信息替换为泛型(例如app1,app2)。否则数据和结果都是真实的。

我打了一个日志文件,给我一个带有错误级别的CSV,错误日期和什么应用程序生成错误。我正在尝试创建一个可视化,显示跨越X轴的时间,其中4个(每个应用程序一个)单独的线图表示在指定时间该应用程序的错误计数。我得到的是一个折线图,显示所有应用程序的错误计数为1个值,在一组时间内。 counts = df['APP'].groupby(df['DATE']).count() counts = df['APP'].groupby([df['DATE'], df['APP']]).count()

这是我的代码,来自iPython

from pandas import DataFrame, Series
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('clean.txt')
counts = df['APP'].groupby([df['DATE'], df['APP']]).count()
counts.plot(rot=45)

这是我的DataFrame

    LEVEL                      DATE   APP
0   ERROR   2014-07-29 12:35:55.916   app1
1   ERROR   2014-07-29 12:35:55.916   app1
2   ERROR   2014-07-29 12:35:55.916   app1
3   ERROR   2014-07-29 12:35:55.874   app2
4   ERROR   2014-07-29 12:35:55.908   app3
5   ERROR   2014-07-29 12:35:55.908   app3
6   ERROR   2014-07-29 12:35:55.908   app3
7   ERROR   2014-07-29 12:35:55.908   app3
8   ERROR   2014-07-29 12:35:55.908   app3
9   ERROR   2014-07-29 12:35:55.975   app4

这是我的DataFrame,当分组时。

DATE                      APP 
 2014-07-29 12:35:56.028   app1    6
 2014-07-29 12:35:56.029   app1    3
 2014-07-29 12:35:56.030   app1    3
 2014-07-29 12:35:56.031   app1    6
 2014-07-29 12:35:56.032   app1    3
...
 2014-07-30 13:08:57.769   app2    1
                           app1    6
                           app4    2
 2014-07-30 13:08:57.770   app2    5

我哪里错了?我在DataFrame中拥有所需的所有信息,所以我知道在尝试绘制它之前我必须错过一些关于正确操作的信息。

感谢您提供任何信息。

1 个答案:

答案 0 :(得分:0)

d = {'level' : ['ERROR', 'ERROR', 'ERROR', 'ERROR', 'ERROR', 'ERROR', 'ERROR', 'ERROR', 'ERROR', 'ERROR'], 
 'DATE' : ['2014-07-29 12:35:55.916', '2014-07-29 12:35:55.916', '2014-07-29 12:35:55.916', '2014-07-29 12:35:55.874', '2014-07-29 12:35:55.908', '2014-07-29 12:35:55.908', '2014-07-29 12:35:55.908', '2014-07-29 12:35:55.908', '2014-07-29 12:35:55.908', '2014-07-29 12:35:55.975'],
 'APP' : ['app1', 'app1', 'app1', 'app2', 'app3', 'app3', 'app3', 'app3', 'app3', 'app4']}
df = pd.DataFrame(d)

然后,创建一个数据透视表:

df.pivot_table(values='level', index='DATE', columns='APP', aggfunc=len).plot(kind='bar')

enter image description here

我将其绘制为条形图,因为每个应用程序在示例数据中只出现1次,因此没有要绘制的线条。只需改变' bar'到了' line'。

值得注意的是,如果您有数千个不同的时间,并希望查看一整天的错误数量,则需要进行更多处理。重新采样功能对此非常有用。