报告自动化生成

8. 文件结构设计与模块化

2018-07-27  本文已影响20人  数据成长之路

知识基础

学习目标

在7.1的数据读取章节我们有出现一个把函数分类放置的处理:
把str2num放入tools模块,数据读取放入datapipeline模块,在此我们同样是要进行类似的工作,把不同的函数进行分类处理

1. 文件组织形式

一般来说自动化报告的组织形式如下:

格式:

2. 报告产生流程

作报告,原材料就是数据,数据分析就是一个个加工步骤,且产出的报告或者说结论就是最终的产品,接下来要介绍数据是怎么在这个框架中变成产品的

3. 工作流程

  1. 把需要使用的数据文件放入data文件夹中,
    数据分两种,一种是生成报告使用的支持数据,更新变动很慢,但每次作报告都需要使用,比如行业均值方差啊,拟合结果的参数啊,这种建议建立数据库使用sql管理;一种是和报告一一对应的,这种放在data文件夹中很合适。
  2. 对configs.py进行设置
  3. 执行main.py在ipynb中显示图片和文字结果,若是半自动则进行人工文字补充
  4. 执行main.py中导出report.html

4. 添加注释

依旧使用7.1数据读取章节中的例子,当时是很粗略地说“把str2num放入tools模块,数据读取放入datapipeline模块”,但是具体操作的时候仅仅是复制粘贴是不够的,为了方便复用和泛用,还需要加下注释。

def str2num(string):
    """
    str2num(string)
    
    Get number for a string.
    
    Parameters
    ----------
    string : a string with the format like '$2.1', '$1, 333' or '&4,3'
    
    Returns
    -------
    out : float
    
    Examples
    --------
    >>> str2num('$2.3')
    2.3
    """
    if not isinstance(string, str):
        string = str(string)
    string = string.replace(',','')
    regular_expression = '\d+\.?\d*'
    pattern = re.compile(regular_expression)
    match = pattern.search(string)
    if match:
        return float(match.group())
    else:
        return float('nan')

可以使用str2num查看效果

?str2num
Object `str2num` not found.

5. 数据读取独立

一般的数据读取步骤,可以简单地按照数据读取顺序放入文件datapipeline.py文件,之后使用时可以直接从datapipeline导入:

from datapipeline import data

而数据的预处理过程同样在datapipeline.py中完成

import pandas as pd
converters = {'Price':str2num,
              'Rank':str2num,
              'Rating':str2num,
              'Sales':str2num,
              'Revenue':str2num,
              'Reviews':str2num
             }
try:
    data = pd.read_csv('./data/data.csv', converters=converters, header=7, index_col=0)
except BaseException as e:
    print(e)

而在Example_1中我们把数据的读取放在了分析模块中,虽然数据已经是处理好的pkl数据,也可以这么直接读取,但是进行解耦操作,单独出来更好。

6. 功能单一的方法(func)加入Class中

像是2. 报告结构规定中print_structure这种打印document结构的方法是依赖于document使用的,因此不适合放入tools.py,放入Document中和实例绑定更合适。
还有6. 报告内容生成中生成html的方法,同样放入Document中

进行修改后的结果请参照Example_3


上一篇下一篇

猜你喜欢

热点阅读