数据框中的堆叠面积图

2024-06-16 11:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经将一些日志数据聚合成一种简单的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示例,以便了解如何制作堆叠面积图的概念

enter image description here

然而,在我的一生中,我似乎无法将我的数据帧映射到一个堆叠的面积图中,该图将给出沿底部(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()


Tags: 数据importapidfplt吞吐量timestamppd
1条回答
网友
1楼 · 发布于 2024-06-16 11:47:12

Pandas具有.plot.area()函数,用于绘制面积图,其中x-轴是索引,列是类别,默认情况下是堆叠的

在本例中,您希望取消对api的堆栈,以便它们成为列,并使用提供的plot.area()函数。还请注意,您可以将索引的名称传递给groupby。因此,您可以:

grouped = df.groupby(['timestamp','api']).size()

grouped.unstack('api', fill_value=0).plot.area()

相关问题 更多 >