使用matplotlib可视化用户使用情况

2024-03-28 11:09:41 发布

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

我正在寻找一个python数据帧,其中包含一堆表示我的用户操作的记录,我希望 用一个数字描绘每个用户在我的应用程序中花费的时间

数据帧看起来像:

uid, ts, action
A, 2017-07-01 09:01:10.0000, login
A, 2017-07-01 09:01:20.0000, logout
B, 2017-07-01 09:01:15.0000, login
A, 2017-07-01 09:03:15.0000, login
A, 2017-07-01 09:04:03.0000, logout
B, 2017-07-01 09:05:50.0000, logout

我在找这样的情节:

B |    ************  
A | **      **** 
  +-------------------
    time

Tags: 数据用户应用程序uidtime记录时间login
1条回答
网友
1楼 · 发布于 2024-03-28 11:09:41

你需要的不仅仅是pandas来获得你想要的输出。Pandas是一种数据分析工具,具有数量有限的可视化特性。实际上,它拥有的所有可视化特性都是建立在matplotlib之上的。在这种情况下,我建议使用matplotlib工具箱中的基本散点图。我使用了你的起始数据集来绘制一些类似于你的输出的东西。以下是一个良好的起点:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd


d = {'action': ['login', 'logout', 'login', 'login', 'logout', 'logout'],
 'ts': [pd.Timestamp('2017-07-01 09:01:10'),
  pd.Timestamp('2017-07-01 09:01:20'),
  pd.Timestamp('2017-07-01 09:01:15'),
  pd.Timestamp('2017-07-01 09:03:15'),
  pd.Timestamp('2017-07-01 09:04:03'),
  pd.Timestamp('2017-07-01 09:05:50')],
 'uid': ['A', 'A', 'B', 'A', 'A', 'B']}


df = pd.DataFrame(d)
uuids = {k:v for v, k in enumerate(df.uid.unique(), 1)}

df = df.assign(uid_n = df.uid.apply(lambda v: uuids.get(v)))

fig = plt.figure(figsize=(8,5))
ax = fig.add_subplot(111)
xfmt = mdates.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
ax.set_xlabel('time')
ax.set_xticks(df.ts.values)
ax.set_yticks(df.uid_n)
ax.set_yticklabels(df.uid)
ax.plot_date(x = df.ts, y = df.uid_n, marker='*', color='black')
plt.xticks(rotation=90)
plt.tight_layout()
plt.show()

这里使用的主要工具是matplotlib.pyplotmatplotlib.dates模块。第一个模块允许您创建轴,向它们添加labelsticks,并添加绘图。第二个允许您格式化x轴上的日期值以显示日期值。你知道吗

这里要提到的一件重要的事情是,我创建了一个名为uuid_n的整数列,用于创建散点图的过程。这是因为y轴上不接受字符串值。所以,我创建了一个字典,其中每个唯一的字符串值都映射到一个唯一的整数值。完成后,就可以使用uuid列创建tickslabels。你知道吗

上面的代码段应产生以下结果:

enter image description here

我希望这有帮助。你知道吗

相关问题 更多 >