You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算每日二分类目标占比并绘制时间散点图?

解决方法

第一步:确保日期列格式正确

如果你的time_of_post还不是datetime类型,先转换并提取纯日期(若已有date_joined列可跳过):

import pandas as pd

# 转换为datetime类型
df_combined['time_of_post'] = pd.to_datetime(df_combined['time_of_post'])
# 提取日期部分作为单独列
df_combined['date_joined'] = df_combined['time_of_post'].dt.date

第二步:计算每日目标值为1的帖子占比

这里提供两种实用方法:

方法一:聚合统计后直接计算

按日期分组,分别统计当日总帖子数和目标值为1的帖子数,再计算占比:

# 分组聚合,得到每日总帖数和目标为1的帖数
daily_stats = df_combined.groupby('date_joined')['binary_target'].agg(
    总帖子数='count',
    目标为1的帖子数='sum'
).reset_index()

# 计算百分比(保留两位小数)
daily_stats['占比(%)'] = (daily_stats['目标为1的帖子数'] / daily_stats['总帖子数'] * 100).round(2)

方法二:利用value_counts直接获取占比

借助value_counts(normalize=True)参数,直接得到分组内的比例,再筛选目标值为1的结果:

# 按日期分组,计算每组内0/1的占比
daily_ratio = df_combined.groupby('date_joined')['binary_target'].value_counts(normalize=True)
# 筛选出目标值为1的行,转为DataFrame并重置索引
daily_ratio = daily_ratio.xs(1, level='binary_target').reset_index(name='占比(%)')
# 转换为百分比格式(可选)
daily_ratio['占比(%)'] = (daily_ratio['占比(%)'] * 100).round(2)

第三步:绘制散点图

用Matplotlib或Seaborn都能快速实现,以下是两种示例:

Matplotlib版本

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))
# 绘制散点图
plt.scatter(daily_stats['date_joined'], daily_stats['占比(%)'], color='#1f77b4', alpha=0.7)

# 设置图表标签和标题
plt.xlabel('日期')
plt.ylabel('目标值为1的帖子占比 (%)')
plt.title('每日论坛帖子目标分类占比')
# 旋转X轴日期标签,避免重叠
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

Seaborn版本

import seaborn as sns

plt.figure(figsize=(12, 6))
sns.scatterplot(data=daily_stats, x='date_joined', y='占比(%)', alpha=0.7)
plt.xlabel('日期')
plt.ylabel('目标值为1的帖子占比 (%)')
plt.title('每日论坛帖子目标分类占比')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者Connor95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:32:39