美文网首页报告自动化生成
8. 文件结构设计与模块化

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

作者: 数据成长之路 | 来源:发表于2018-07-27 17:20 被阅读20次

    知识基础

    学习目标

    • 可以基于报告内容和形式组织报告自动化脚本的文档结构
    • 在编写不同报告的数据分析模块时产生技术积累
    • 对分析模块进行泛用话处理,以便于积累更多通用模块

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

    1. 文件组织形式

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

    格式:

    • 文件夹 : 加粗倾斜
    • 数据文件 : 倾斜
    • 执行模块 : 加粗
    • 未分类文件 : 无
    • report 自动化报告的工作目录

      • _init_.py

      • main.ipynb 文件的主执行和调试文件,显示内容和结果,及进行自定义

      • data 保存数据文件 Save data to be used or generated

        • dynamic_data.csv

        dynamic_data.csv是经常变化的,每篇报告都会使用不同的数据

        • static_data.csv

        static_data.csv是更新频率很低的,或者数据虽然会更新但是被所有报告所共用,比如存储了做预测时使用的拟合参数,文本关联矩阵,或者随着报告制作而变化的总体均值方差,用于纵向比较。而在多人协作时,此类数据放在共用数据库更佳。

      • image 存放生成的图片文件 Save image

      • report 存放生成的报告

      • template 存放报告生成需要的模板

        • template.html 生成HTML形式报告所用模板
        • template.tex 生成PDF报告需要的模板,这里我们使用python先生成Tex,然后Tex再生成PDF

        模板的后缀只影响用编辑器打开模板时的格式,不影响Jinja2生成模板,因为这些内容都是使用python来进行的文件读取

      • tools.py 保存工具型函数,可多次复用并且功能单一

      • datapipeline.py 数据读取和预处理,可从中直接取出清洗后数据

      • ImageFactory.py 图片工具包,可以把设置完毕的图片模板保存在此处,方便多次使用

      • models.py 定义文档结构

      • items.py 定义分析时会使用的数据结构

      • analysis.py 存放成熟的分析方法,多是从main.ipynb中提取出来

      • configs.py 设置报告的参数,比如作者,日期,数据源等等,每次使用时可以仅仅修改设置便生成不同报告

      • readme.txt 报告的说明文件

      类似于此处的文档结构说明可加入之后的readme文件中,具体说明文件目录中各文件功能,还可以更加详细地说明内含方法

      • requirements.txt 关于报告生成所用python环境中所用包及其版本的规定,为之后使用环境配置方便,直接pip install -r requirements.txt安装

    2. 报告产生流程

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

    • 数据获取后存入data,数据获取方式业务之间各有不同,再次不做说明,爬虫和数据库的教程网上应该有做好的可用

    • datapipeline.py中的模块可以对data中的数据自动进行数据清洗工作,可能会需要configs.py中的设置

    • models.py中已经定义好的数据结构可以对从datapipeline.py导入的清洗好的数据进行进一步处理

    • main.ipynb

      configs.py导入设置

      models.py导入文档结构和数据结构

      ImageFactory.py导入image模板

      datapipeline.py导入处理好的数据

      tools.py导入数据分析工具

      分析数据

      生成图片

      添加说明和人工分析

      保存到document类

      使用template中的模板渲染document生成report

    • 当main.ipynb的方法稳定成熟后,可以模块化后提取出所使用的数据结构放入items.py,提取出所使用的分析方法放入analysis.py,把半自动化报告中的自定义部分依旧留在main.ipynb中

    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

    
    

    相关文章

      网友评论

        本文标题:8. 文件结构设计与模块化

        本文链接:https://www.haomeiwen.com/subject/nspgmftx.html