我已经将一些日志数据聚合成一种简单的CSV格式,这本质上是API调用。每个令牌都有一个限制/配额,有时我会收到增加配额或配额的请求。我希望能够直观地查看流量吞吐量,以了解每种类型API调用的吞吐量以及所有API调用的总吞吐量
我在pandas中使用了数据,可以在一个表式结构中获得它,该结构将每秒的api调用计数分组
token
api timestamp
ActivateAPI 2020-07-13 14:09:30 1
2020-07-13 14:09:31 2
SuspendAPI 2020-07-13 14:09:23 1
2020-07-13 14:09:31 2
2020-07-13 14:09:32 2
TerminateAPI 2020-07-13 14:09:29 2
2020-07-13 14:09:39 1
2020-07-13 14:09:49 1
我还使用了matplotlib示例,以便了解如何制作堆叠面积图的概念
然而,在我的一生中,我似乎无法将我的数据帧映射到一个堆叠的面积图中,该图将给出沿底部(x轴)的时间视图,并向上计数左侧(y轴),然后每个面积堆栈表示一个API。下面是我的代码,它执行数据帧并手动生成堆叠图表,但需要帮助才能从我的数据帧生成图表,以便为任何Web服务器日志生成图形
import matplotlib.pyplot as plt
import pandas as pd
from io import StringIO
date_format = "%m.%d.%Y %H:%M:%S,%f"
data = """timestamp~api~token
07.13.2020 14:09:23,928~SuspendAPI~TOKEN1
07.13.2020 14:09:29,324~TerminateAPI~TOKEN1
07.13.2020 14:09:29,424~TerminateAPI~TOKEN1
07.13.2020 14:09:30,678~ActivateAPI~TOKEN1
07.13.2020 14:09:31,678~ActivateAPI~TOKEN1
07.13.2020 14:09:31,886~SuspendAPI~TOKEN1
07.13.2020 14:09:31,886~SuspendAPI~TOKEN1
07.13.2020 14:09:31,978~ActivateAPI~TOKEN1
07.13.2020 14:09:32,786~SuspendAPI~TOKEN1
07.13.2020 14:09:32,886~SuspendAPI~TOKEN1
07.13.2020 14:09:39,324~TerminateAPI~TOKEN1
07.13.2020 14:09:49,324~TerminateAPI~TOKEN1"""
df = pd.read_csv(StringIO(data), sep='~')
df['timestamp'] = pd.to_datetime(df['timestamp'], format=date_format)
df.timestamp = df.timestamp.map(lambda x: x.replace(microsecond=0))
df.set_index('timestamp', inplace=True)
grouped = df.groupby([df.api, df.index]).count()
print(grouped)
x = range(1, 6)
y = [[1, 4, 6, 4, 1], [2, 2, 7, 5, 4], [2, 8, 5, 1, 6]]
# Basic stacked area chart.
plt.stackplot(x, y, labels=['ActivateAPI', 'SuspendAPI', 'TerminateAPI'])
plt.legend(loc='upper left')
plt.show()
Pandas具有
.plot.area()
函数,用于绘制面积图,其中x
-轴是索引,列是类别,默认情况下是堆叠的在本例中,您希望取消对
api
的堆栈,以便它们成为列,并使用提供的plot.area()
函数。还请注意,您可以将索引的名称传递给groupby
。因此,您可以:相关问题 更多 >
编程相关推荐