来自 威尼斯国际官方网站 2019-11-21 04:13 的文章
当前位置: 威尼斯国际官方网站 > 威尼斯国际官方网站 > 正文

分析报告的工具包,把时间还给洞察

reportgen v0.1.8 更新介绍

这段时间,我对 reportgen 进行了大工程量的修改和更新。将之前在各个文章中出现的函数进行了封装,同时也对现有工具包的一些逻辑进行了调整。

文/JSong @2017.02.28

1、reportgen 简介

reportgen 的底层是 pptx 文件生成接口,它能非常方便的将DataFrame等数据导出为pptx上的图表。你可以自定义图表的类型(条形图、饼图、折线图等),也可以全部交给工具包来自动化。另外不排除后期会增加其他文件形式(如可交互的 html 等)接口的可能性,但短期内估计比较难。

在这些接口上是一些辅助函数,包括特征类型的判断、sklearn中缺少的预处理函数、一些特殊的度量函数、模型评估报告函数、关联分析函数等。工具包的愿景是对数据的自动分析,自动出报告,这期间缺乏的函数我都可能加进去。这次更新,主要就是完善了这一层。

工具包的最外层就是各类数据的分析报告生成。目前已经完成的是问卷型数据和通用性数据。其中问卷型数据已经很完善,基本只需要修bug了,单独作为一个子包放在 reportgen中,大家可以 import reportgen.questionnaire as ques 来使用。至于通用性数据,目前已经完成了第一步,即描述统计型的分析报告,大家可以用rpt.AnalysisReport 来实现。第二步准备实现给定目标变量后的分析,包含交叉分析、各特征的重要性、监督学习模型等。

另外,这次我放了一些案例在github上,用于大家下载后的测试和学习用,网址是 https://github.com/gasongjian/reportgen/tree/master/example

在数据分析里面有一句话是说,80%的时间要用于数据清洗和整理,而我觉得理想的状态应该是把更多的把时间花在数据背后的洞察当中。去年11月在简书占了个坑,说要自己写一个工具来解决,今天我来填坑了。

2、通用数据的分析

在这个分析报告中,我会对DataFrame数据的每一个字段进行分析,判断它们的类型,然后画出合适的图表。对于因子变量,自动绘制柱状图或条形图;对于数值型变量,自动绘制出拟合的分布图;对于一般的文本,自动绘制词云。同时也会给出一个统计表格,内含各个变量的场景统计数据,如最大值、最小值、均值、标准差、唯一数个数、缺失率等。下面是一个例子,代码和数据可在我的github中寻找。

import pandas as pd
import reportgen as rpt
# 数据导入
# 数据的网址:https://github.com/gasongjian/reportgen/tree/master/example/datasets/LendingClub_Sample.xlsx
data=pd.read_excel('.\datasets\LendingClub_Sample.xlsx')
# 数据预览
rpt.AnalysisReport(data.copy(),filename='LendingClub 数据预览');

它会生成如下 pptx 文件

图片 1

图片 2

另外这里有一些过程函数也推荐给大家

1、解决方案概述

  1. 工具包:reportgen
  2. 项目地址:github,欢迎star 或者folk
  3. 软件依赖:python3(兼容python2,但中文部分需要手动修改一个第三方包的2行代码)
  4. 数据需求:调研数据,包括但不仅限于问卷星原始数据、问卷网原始数据
  5. 主要功能1: 自动生成概述性质的报告(ppt格式,针对每道题目给出频数统计,并绘制ppt图表)
  6. 主要功能2:自动交叉分析,并生成报告(自动卡方检验、TGI、CHI指标计算、简单结论提取等)

特征统计分析

# 返回各个特征的数据类型
var_type=rpt.type_of_var(data)
#返回一个统计表格,内含数据各个特征的一些统计值
summary=rpt.describe(data)

2、准备工作

依赖环境:

  1. python科学计算所需的包,建议直接安装anaconda(强烈推荐使用python3版本)
  2. 安装第三方包python-pptx: 在cmd中输入:"pip install python-pptx"
  3. 安装report包: 下载reportreport.py, 然后放在工作目录即可(省心点可以直接扔进 C:Anaconda3Libsite-packages 中,这样在任何地方都能使用该工具包啦)

数据预处理

# 只作工具包测试,所以不区分训练集和测试集
y=data['target']
X=data.drop(['target'],axis=1)
categorical_var=list(set(X.columns[X.apply(pd.Series.nunique)<30])|set(X.select_dtypes(include=['O']).columns))
continuous_var=list(set(X.columns)-set(categorical_var))

# ===========【WOE 编码】=============
woe=rpt.preprocessing.WeightOfEvidence(categorical_features=categorical_var,encoder_na=False)
X=woe.fit_transform(X,y)

# ===========【离散:卡方分箱】=============
dis=rpt.preprocessing.Discretization(continous_features=continuous_var)
X2=dis.fit_transform(X,y)

备注

py2.7版本的pptx包对中文支持有 bug, 请按照如下方式修改

  1. 打开文件 ".pptxchartxmlwriter.py"
  2. 将大约1338行和1373行的 "escape(str(name))" 改为"escape(unicode(name))"

信息论相关度量函数

# 离散因子变量的熵
rpt.metrics.entropy.entropy(p)
# 连续数值变量的熵(基于k近邻算法的近似估计)
rpt.metrics.entropyc.kl_div(p,q)

3、快速上手

【不懂或者不想学python3的请看这】

为了方便更多人使用,我给windows用户提供了一个很简单的使用方法,大家下载项目地址中的文件夹reportgen[无python经验的下载]即可,使用说明也在其中,非常简单。这里也提供一个百度云盘地址:reportgen简易使用版本链接(密码: as84): https://pan.baidu.com/s/1dEPT72p

图片 3

reportgen简易使用教程

机器学习模型辅助建模函数

clfs={'LogisticRegression':LogisticRegressionCV(),
'RandomForest':RandomForestClassifier(),'GradientBoosting':GradientBoostingClassifier()}
y_preds,y_probas={},{}
for clf in clfs:
    clfs[clf].fit(X, y)
    y_preds[clf] =clfs[clf].predict(X)
    y_probas[clf] = clfs[clf].predict_proba(X)[:,1]

# 函数会输出一个或多个二分类模型的性能评估结果,包含ROC曲线、PR曲线、密度函数、auc等统计指标、混淆矩阵等
models_report,conf_matrix=rpt.ClassifierReport(y,y_preds,y_probas)
print(models_report)

3.1 三行代码解决描述统计报告:

import report as rpt
#  数据编码和导入
# 300_300_0.xls是问卷星的按文本数据,300_300_2.xls是问卷星的按序号数据.
# 如果将他们放在“.\data\”中,则文件名可以缺省,即:`data,code=rpt.wenjuanxing()`
data,code=rpt.wenjuanxing(['300_300_0.xls','300_300_2.xls'])
# 描述统计报告生成
rpt.summary_chart(data,code,filename=u'调研报告初稿');

如上代码可以在.out文件夹下生成两个文件

  1. 调研报告初稿.pptx: 针对每个题目描述统计,支持单选题、多选题、排序题、矩阵单选题等
  2. 调研报告初稿.xlsx: 生成每个题目的统计数据,包括频数和占比

3、问卷型数据分析

问卷数据涉及到各种题型,包括单选题、多选题、填空题、矩阵多选题、排序题等等。不管是
频数统计还是交叉分析,单选题都很好处理, 但其他题目就相对复杂的多,比如单选题和多选题
之间的交叉统计,多选题和多选题之间的交叉统计等。

为了能使用统一的函数进行常规分析,本工具包使用专门针对问卷设计的数据类型(或者说编码方式)。在这种类型中,每一份问卷都有两个文件,data 和 code ,它们的含义如下:

1). data:按选项序号编码的数据(csv、xlsx等都可以)。具体的示例如下:

Q1 Q2 Q3_A1 Q3_A2 Q3_A3 Q3_A4
1 1 1 0 1 0
1 2 0 0 1 0
1 1 1 0 0 1
2 3 0 1 1 0
1 2 1 0 1 0
1 4 0 1 0 1
2 2 1 0 1 0
1 1 0 1 0 1
2 2 1 0 1 0

其中 Q1、Q2是单选题,在Q1中,1代表男,2代表女。Q3是多选题,一共有四个选项,分别代表 Q3_A1:'旅游',Q3_A2:'健身',Q3_A3:'艺术',Q3_A4:'养生'. 多选题常用这种01矩阵存储。

2). code:编码文件( json格式,就是 python中的字典类型), 给定每道题的题号、选项编码等信息。

每一个题目都有如下字段:

  • content: 题目内容
  • code: 题目对应的编码
  • code_r: 题目对应的编码(矩阵单选题专有)
  • qtype: 题目类型,单选题、多选题、矩阵单选题、排序题、填空题等
  • qlist: 该题的索引,如多选题的 ['Q1_A1','Q1_A2',..]
  • code_order: 非必须,题目类别的顺序,用于PPT报告的生成[一般后期添加]
  • name: 非必须,特殊题型的标注
  • weight: 非必须,dict,每个选项的权重,用于如月收入等的平均数统计

具体示例如下:

code={'Q1':{
      'content':'性别',
      'code':{
          1:'男',
          2:'女'
      }
      'qtype':'单选题',
      'qlist':['Q1']
  },
  'Q2':{
      'content':'年龄',
      'code':{
          1:'17岁以下',
          2:'18-25岁',
          3:'26-35岁',
          4:'36-46岁'
      },
      'qtype':'单选题',
      'qlist':['Q2']
  },
  'Q3':{
      'content':'爱好',
      'code':{
          'Q3_A1':'旅游',
          'Q3_A2':'健身',
          'Q3_A3':'艺术',
          'Q3_A4':'养生'
      },
      'qtype':'多选题',
      'qlist':['Q3_A1','Q3_A2','Q3_A3','Q3_A4']
  }
  }

该工具包包含如下函数:

3.2 四行代码解决交叉统计报告

import report as rpt
#  数据编码和导入
data,code=rpt.wenjuanxing()
# 交叉统计报告生成(假设第一道题Q1是性别选择题)
save_dstyle=['FE','TGI','CHI']#自由选择需要保存的指标(FE:期望频数等)
rpt.cross_chart(data,code,cross_class='Q1',filename=u'性别差异分析',save_dstyle=save_dstyle);

如上代码可以在.out文件夹下生成5个文件

  1. 性别差异分析.pptx: 考虑每个题目在性别上的差异
  2. 性别差异分析_百分比.xlsx:
  3. 性别差异分析_FE.xlsx:
  4. 性别差异分析_TGI.xlsx:
  5. 性别差异分析_CHI.xlsx:

图片 4

交叉分析报告

本文由威尼斯国际官方网站发布于威尼斯国际官方网站,转载请注明出处:分析报告的工具包,把时间还给洞察

关键词: