如果标题非常模糊,很难用几句话来表达这个问题。
我最近阅读了“Python For Data Analysis”,并一直试图将它带到现实世界的例子中。我必须将我的Dataframe / images中的一些信息替换为泛型(例如app1,app2)。否则数据和结果都是真实的。
我打了一个日志文件,给我一个带有错误级别的CSV,错误日期和什么应用程序生成错误。我正在尝试创建一个可视化,显示跨越X轴的时间,其中4个(每个应用程序一个)单独的线图表示在指定时间该应用程序的错误计数。我得到的是一个折线图,显示所有应用程序的错误计数为1个值,在一组时间内。
这是我的代码,来自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中拥有所需的所有信息,所以我知道在尝试绘制它之前我必须错过一些关于正确操作的信息。
感谢您提供任何信息。
答案 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')
我将其绘制为条形图,因为每个应用程序在示例数据中只出现1次,因此没有要绘制的线条。只需改变' bar'到了' line'。
值得注意的是,如果您有数千个不同的时间,并希望查看一整天的错误数量,则需要进行更多处理。重新采样功能对此非常有用。