项目管理之燃尽图

2019年9月28日发布新文章时更新:

本篇文章内容需作补充。

最近工作上的事情很多,学习燃尽图的绘制、查看项目并进行进度管理成为了空余时间的必做之事。

概览

燃尽图(burn dowm chart)是敏捷开发中的数据可视化跟进工具之一。

可以查看项目管理的进度,显示方式有很多:Excel、Numbers+Python、还有专门的工具Leangoo以及项目管理工具Teambition[1](都可以生成。

笔者为Mac端,使用Numbers+Python进行显示,其他方法不一一赘述但会在文中带过。

准备/回顾

Python——Mac自带2.X版python。

检查Python版本:

Mac自带2.7版本,此处使用Python3.

python3

回车,出现版本:

此处也可以检查Python2的版本,代码则是python2

终端退出Python:quit()exit()

Jupyter初见

官方网站:Jupyter

Jupyter是什么?

官方解释:

Project Jupyter exists to develop open-source software, open-standards, and services for interactive computing across dozens of programming languages.

我们主要使用Jupyter中的Notebook:

The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.

开始安装Jupyter NoteBook,以下代码直接在终端窗口里输入。

使用Anaconda安装Jupyter NoteBook

参考的链接中推荐使用Anaconda进行安装,也可以使用pip进行安装,由于自己使用熟悉的pip安装时遇到了缺少模块的问题,所以这里直接使用Anaconda。

官方网站:Anaconda

The World’s Most Popular Python/R Data Science Platform

安装完成界面:

启动与关闭

终端输入下列代码,即可启动Jupter Nootbook。

jupyter nootbook

关闭,按住control-c后,点击y即可关闭。

Excel制作

如之前所述,燃尽图X轴为时间,纵轴为时间。

每一个表格内可以填入实际的工时/完成进度。关于工时可以使用Tower、秒表等方法记录自己的工时,此处也可以增加一列使用Excel公式进行计算(理想工时)。

示例图片

表格撰写完毕后找到文件路径,保存为xlsx格式。

打开Jupyter Notebook,找到分析文件

首先打开Jupyter Notebook:

下载GitHub上的ipynb文件,修改引号中开始和截止日期并添加文件路径(此处为原稿):

回到之前打开的Jupyter Notebook,找到ipynb文件存储路径,点击服务-重启并运行所有

出现以下报错。

结果与曾经报错

按道理说此处应该顺利出现燃尽图,参考链接1中成功。

在做爬虫的同事的电脑上运行成功。

报错1

此处我进行到第4步时:

work_load = df.loc[df.index[0]].sum()
work_load

报错信息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
//anaconda3/lib/python3.7/site-packages/pandas/core/nanops.py in _f(*args, **kwargs)
     75                 with np.errstate(invalid='ignore'):
---> 76                     return f(*args, **kwargs)
     77             except ValueError as e:

//anaconda3/lib/python3.7/site-packages/pandas/core/nanops.py in nansum(values, axis, skipna, min_count, mask)
    434         dtype_sum = np.float64
--> 435     the_sum = values.sum(axis, dtype=dtype_sum)
    436     the_sum = _maybe_null_out(the_sum, axis, mask, min_count=min_count)

//anaconda3/lib/python3.7/site-packages/numpy/core/_methods.py in _sum(a, axis, dtype, out, keepdims, initial)
     35          initial=_NoValue):
---> 36     return umr_sum(a, axis, dtype, out, keepdims, initial)
     37 

pandas/_libs/tslibs/timestamps.pyx in pandas._libs.tslibs.timestamps._Timestamp.__add__()

ValueError: Cannot add integral value to Timestamp without freq.

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
<ipython-input-4-366603652da3> in <module>
----> 1 work_load = df.loc[df.index[0]].sum()
      2 work_load

//anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in stat_func(self, axis, skipna, level, numeric_only, min_count, **kwargs)
  10929                                       skipna=skipna, min_count=min_count)
  10930         return self._reduce(f, name, axis=axis, skipna=skipna,
> 10931                             numeric_only=numeric_only, min_count=min_count)
  10932 
  10933     return set_function_name(stat_func, name, cls)

//anaconda3/lib/python3.7/site-packages/pandas/core/series.py in _reduce(self, op, name, axis, skipna, numeric_only, filter_type, **kwds)
   3628                                           'numeric_only.'.format(name))
   3629             with np.errstate(all='ignore'):
-> 3630                 return op(delegate, skipna=skipna, **kwds)
   3631 
   3632         # TODO(EA) dispatch to Index

//anaconda3/lib/python3.7/site-packages/pandas/core/nanops.py in _f(*args, **kwargs)
     81                 # object arrays that contain strings
     82                 if is_object_dtype(args[0]):
---> 83                     raise TypeError(e)
     84                 raise
     85 

TypeError: Cannot add integral value to Timestamp without freq.

在查阅Starkoverflow相关链接以及网友葉棟的帮助下

此处也可能是我表格制作的问题,Python也需要深入进行学习。

此处应修改为:


报错2

可能是pandas版本错误:

PIP安装遇到的坑

我首先尝试使用PIP进行安装,PIP是Python包的安装程序。官网:https://pip.pypa.io/en/stable/

以下代码统一于终端直接输入。

首先升级PIP:

pip3 install --upgrade pip

其次安装Jupyer NoteBook:

pip3 install jupyter notebook

经历了一番下载之后,出现上述图片,即提示安装完成。

在启动并运行的过程中进行到第2步时:

import pandas as pd
df = pd.read_excel(excel_path, header=1)

报错3

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-2-f1b6b0b8a6b4> in <module>
----> 1 import pandas as pd
      2 df = pd.read_excel(excel_path, header=1)

ModuleNotFoundError: No module named 'pandas'

由于缺少pandas模块,所以这里我使用Anaconda进行安装。

之后需要卸载PIP安装的Jupyter防止和Anaconda冲突:

pip install pip-autoremove

pip-autoremove jupyter -y

pip-autoremove可以删除掉packege以及无用的依赖。

参考

jupyter安装与卸载

燃尽图做项目管理,你想了解的全部在这里

报错链接相关

Python error: cannot add integral value to Timestamp without freq

pandas.Timestamp


  1. Sprint 燃尽图分析 ↩︎

 wechat
产品北里,讲述产品和人性、涉及设计、技术和运营的公众号。
你们的赞赏是我更新的动力~