基于指定条件使用DataFrame绘制图表 附示例数据集
我来帮你梳理下如何基于这个示例DataFrame绘制实用的图表,咱们一步步来:
首先先把原始数据整理成更清晰的表格形式,方便后续处理:
| ID | Char | Var | epoch |
|---|---|---|---|
| 1 | sr.r/t & (ted: 15--) | a-rt | 1501569011720 |
| 1 | sr.r/t & (ted: 15--) | a-er | 1501569011820 |
| 1 | sr.r/t & (ted: 15--) | a-er | 1501569011870 |
| 2 | sy.w/f & (ted: *18-) | a-ge | 1501569012945 |
| 2 | sy.w/f & (ted: *18-) | a-ge | 1501569012995 |
| 2 | sy.w/f & (ted: *18-) | b-we | 1501569013945 |
| 3 | sr.r/t & (ted: 19:15)ser | e-we | 1501569013945 |
基于指定DataFrame的图表绘制指南
1. 数据预处理:转换时间戳
首先,epoch字段是毫秒级时间戳,我们需要把它转换成Python的datetime格式,这样才能做时序相关的可视化。用pandas处理的代码如下:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 加载示例数据 data = pd.DataFrame({ 'ID': [1,1,1,2,2,2,3], 'Char': ['sr.r/t & (ted: 15--)','sr.r/t & (ted: 15--)','sr.r/t & (ted: 15--)','sy.w/f & (ted: *18-)','sy.w/f & (ted: *18-)','sy.w/f & (ted: *18-)','sr.r/t & (ted: 19:15)ser'], 'Var': ['a-rt','a-er','a-er','a-ge','a-ge','b-we','e-we'], 'epoch': [1501569011720,1501569011820,1501569011870,1501569012945,1501569012995,1501569013945,1501569013945] }) # 转换epoch为datetime(毫秒级,所以要除以1000) data['datetime'] = pd.to_datetime(data['epoch'], unit='ms')
2. 常见图表绘制示例
2.1 时序趋势图:按ID分组查看Var的时间分布
这个图表可以帮你看到每个ID下,不同Var类型随时间的变化情况,适合观察事件的时序规律:
plt.figure(figsize=(10,6)) # 用seaborn的散点图,按ID和Var区分颜色 sns.scatterplot(data=data, x='datetime', y='ID', hue='Var', s=100) plt.title('Var类型随时间的分布(按ID分组)') plt.xlabel('时间') plt.ylabel('ID') plt.xticks(rotation=45) plt.tight_layout() plt.show()
说明:这里用散点图是因为每个时间点对应的记录不多,能清晰展示每个ID在不同时间点的Var类型;如果数据量更大,也可以改用折线图连接同一ID的时序点。
2.2 频次柱状图:统计各Var/Char的出现次数
如果想直观看到不同Var或Char的出现频率,可以用柱状图:
统计Var的频次
plt.figure(figsize=(8,5)) var_counts = data['Var'].value_counts() sns.barplot(x=var_counts.index, y=var_counts.values) plt.title('各Var类型的出现频次') plt.xlabel('Var类型') plt.ylabel('出现次数') plt.show()
统计每个ID对应的Char分布
plt.figure(figsize=(10,6)) sns.countplot(data=data, x='ID', hue='Char') plt.title('各ID对应的Char类型分布') plt.xlabel('ID') plt.ylabel('记录数') plt.legend(title='Char类型', bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() plt.show()
2.3 分组时序折线图:查看同一ID内的时间间隔
如果想观察同一ID下记录的时间间隔,可以把每个ID的时间点按顺序连接:
plt.figure(figsize=(10,6)) # 按ID和datetime排序 data_sorted = data.sort_values(['ID', 'datetime']) for id_val in data_sorted['ID'].unique(): subset = data_sorted[data_sorted['ID'] == id_val] plt.plot(subset['datetime'], subset['Var'], marker='o', label=f'ID {id_val}') plt.title('各ID内Var类型的时序变化') plt.xlabel('时间') plt.ylabel('Var类型') plt.xticks(rotation=45) plt.legend() plt.tight_layout() plt.show()
3. 自定义图表的思路
如果有特定的分析需求,比如关注Char字段中的ted参数(比如15--、*18-这类),可以先对Char字段做字符串提取,提取出ted的参数后再做可视化:
比如提取ted的值:
# 用正则提取Char中的ted参数 data['ted_param'] = data['Char'].str.extract(r'ted: (.*?)\)')
之后就可以基于ted_param来分组绘制图表,比如查看不同ted参数对应的时间分布。
内容的提问来源于stack exchange,提问作者Roy1245
相关产品推荐
相关产品推荐

