团队日常任务量、完成率、耗时等数据的统计是管理工作的基础,手动整理Excel表格不仅效率低下,还容易出现计算错误。借助Python的自动化能力,我们可以快速实现从数据读取、清洗、统计到可视化展示的全流程自动化,生成直观的工作量仪表盘。

方案整体流程
整个自动化统计方案分为四个核心步骤,流程清晰且易于扩展:
- 读取团队任务原始数据,支持CSV、Excel等常见格式
- 使用pandas对数据进行清洗,处理缺失值、异常值,按需求维度统计
- 通过matplotlib生成多维度可视化图表,包括任务量趋势、完成率分布等
- 将统计结果与图表整合,输出为HTML仪表盘或本地图片文件
环境准备
首先需要安装方案依赖的Python第三方库,执行以下命令完成安装:
# 安装依赖库 pip install pandas matplotlib openpyxl
原始数据格式要求
为了保证脚本正常运行,团队任务数据需要符合以下标准格式,建议保存为CSV或Excel文件:
| 字段名 | 说明 | 示例值 |
|---|---|---|
| 成员姓名 | 负责任务的团队成员 | 张三 |
| 任务名称 | 具体任务内容 | 用户模块开发 |
| 任务状态 | 任务当前进度 | 已完成 |
| 计划耗时(小时) | 任务预估耗时 | 8 |
| 实际耗时(小时) | 任务实际花费时间 | 7.5 |
| 完成日期 | 任务完成时间 | 2024-05-20 |
核心实现代码
1. 数据读取与清洗
首先编写数据读取和清洗的函数,处理原始数据中的异常内容:
import pandas as pd
def load_and_clean_data(file_path):
# 读取数据,支持CSV和Excel格式
if file_path.endswith('.csv'):
df = pd.read_csv(file_path)
else:
df = pd.read_excel(file_path)
# 处理缺失值,删除任务状态为空的数据行
df = df.dropna(subset=['任务状态'])
# 统一任务状态表述,将完成、已完成统一为已完成
df['任务状态'] = df['任务状态'].replace(['完成', '已完成'], '已完成')
# 转换日期格式,方便后续按时间统计
df['完成日期'] = pd.to_datetime(df['完成日期'], errors='coerce')
return df
# 测试数据加载
data_file = 'team_tasks.xlsx'
task_df = load_and_clean_data(data_file)
print(f"清洗后数据总量:{len(task_df)}条")
2. 工作量统计逻辑
基于清洗后的数据,按成员、时间维度统计核心工作量指标:
def calculate_workload_stats(df):
# 统计每个成员的任务总量、已完成量、完成率
member_stats = df.groupby('成员姓名').agg(
任务总量=('任务名称', 'count'),
已完成量=('任务状态', lambda x: (x == '已完成').sum()),
总实际耗时=('实际耗时(小时)', 'sum')
).reset_index()
# 计算完成率
member_stats['完成率'] = (member_stats['已完成量'] / member_stats['任务总量'] * 100).round(2)
# 按周统计团队任务完成趋势
df['完成周'] = df['完成日期'].dt.isocalendar().week
weekly_stats = df[df['任务状态'] == '已完成'].groupby('完成周').agg(
周完成量=('任务名称', 'count'),
周总耗时=('实际耗时(小时)', 'sum')
).reset_index()
return member_stats, weekly_stats
# 执行统计
member_stats, weekly_stats = calculate_workload_stats(task_df)
print("成员工作量统计:")
print(member_stats)
3. 可视化图表生成
使用matplotlib生成仪表盘所需的多维度图表:
import matplotlib.pyplot as plt
import matplotlib
# 设置中文字体,避免中文乱码
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
def generate_dashboard_charts(member_stats, weekly_stats):
# 创建画布,设置布局
fig = plt.figure(figsize=(12, 8))
# 子图1:成员任务量对比柱状图
ax1 = plt.subplot(2, 2, 1)
ax1.bar(member_stats['成员姓名'], member_stats['任务总量'], label='总任务量')
ax1.bar(member_stats['成员姓名'], member_stats['已完成量'], label='已完成量')
ax1.set_title('成员任务量对比')
ax1.legend()
# 子图2:成员完成率折线图
ax2 = plt.subplot(2, 2, 2)
ax2.plot(member_stats['成员姓名'], member_stats['完成率'], marker='o')
ax2.set_title('成员任务完成率')
ax2.set_ylim(0, 110)
# 子图3:周任务完成趋势
ax3 = plt.subplot(2, 2, 3)
ax3.plot(weekly_stats['完成周'], weekly_stats['周完成量'], marker='s')
ax3.set_title('周任务完成趋势')
ax3.set_xlabel('周数')
ax3.set_ylabel('完成量')
# 子图4:成员耗时分布饼图
ax4 = plt.subplot(2, 2, 4)
ax4.pie(member_stats['总实际耗时'], labels=member_stats['成员姓名'], autopct='%1.1f%%')
ax4.set_title('成员耗时占比')
plt.tight_layout()
# 保存仪表盘图片
plt.savefig('workload_dashboard.png', dpi=300)
plt.show()
# 生成可视化仪表盘
generate_dashboard_charts(member_stats, weekly_stats)
方案扩展建议
上述基础方案可以根据团队实际需求进一步扩展:
- 如果需要实时更新仪表盘,可以结合schedule库设置定时任务,每天自动运行统计脚本
- 若需要更美观的交互式仪表盘,可以替换matplotlib为pyecharts,生成可交互的HTML页面
- 支持从项目管理工具API直接拉取任务数据,无需手动导出文件,进一步提升自动化程度
- 增加异常数据预警逻辑,当成员完成率低于阈值时自动输出提醒信息
注意事项
原始数据中的日期格式需要统一,否则会导致时间维度统计出错;如果团队任务状态有更多分类,需要同步调整统计逻辑中的状态匹配规则;生成图表时注意中文字体的配置,避免出现乱码问题。
整个方案无需复杂的开发基础,只需按照格式准备数据,运行脚本即可快速得到团队工作量统计结果与可视化仪表盘,大幅降低日常统计的工作成本。
Python工作量统计可视化仪表盘pandasmatplotlib修改时间:2026-07-22 07:15:30