如何计算每日二分类目标占比并绘制时间散点图?
解决方法
第一步:确保日期列格式正确
如果你的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
相关产品推荐
相关产品推荐

