TableOne 数据分析工具

前面学习了统计描述和统计假设的 Python 方法,分析数据表时,需要先确定因变量 Y,然后对自变量 X 逐一分析,最后将结果组织成数据表作为输出,还是比较麻烦,使用 TableOne 工具可以简化这一过程。

TableOne 是生成统计表的工具,常用于生成论文中的表格,TableOne 底层也基于 scipy 和 statsmodels 模块实现,其代码主要实现了根据数据类型调用不同统计工具,以及组织统计结果的功能。它支持 Python 和 R 两种语言,可使用以下方法安装:

1
$ pip install tableone

TableOne 的核心代码只有 800 多行,建议下载其源码,阅读核心代码文件 tableone.py,以了解其全部功能和工作流程,并从中借鉴统计分析的具体方法。

1
git clone https://github.com/tompollard/tableone

下例中分析了 96 年美国大选数据,用 groupby 参数指定了其因变量,categorical 参数指定了自变量中的分类型变量,使用 pval=True 指定了需要计算假设检验结果,程序最后将结果保存到 excel 文件中。

1
2
3
4
5
6
7
8
9
10
import statsmodels as sm
import tableone

data = sm.datasets.anes96.load_pandas().data
categorical = ['TVnews', 'selfLR', 'ClinLR', 'educ', 'income']
groupby = 'vote'
mytable = tableone.TableOne(data, categorical=categorical,
groupby=groupby, pval=True)
mytable.to_excel("a.xlsx")
# from xieyan jianshu blog

表列出了程序的部分输出结果,对于连续变量 popul,在统计检验中,用两样本 T 检验方法计算出 p 值,在统计描述中,计算出 popul 的均值和标准差;对于分类变量 TWnews,使用卡方检验计算出其 p 值,并统计出其各分类的例数及占比;表中还展示出对于因变量各类别的记数,空值个数,离群点,以及非正态变量的统计结果。

对于分类型因变量,使用 groupby 指定其变量名,对于连续型因变量,一般不指定 groupby 值,TableOne 只进行统计描述。

作为小工具,TableOne 也有它的局限性,比如它只能对分类型的因变量 Y 做统计假设,又如它只能按数据类型自动匹配检验方法,不能手动指定具体的假设检验方法,不支持多变量分析等等,可能解决不了所有数据统计问题。但它使用方便,大大简化了分析流程,能在分析初期展示出数据的概况,尤其对于不太熟悉数据分析方法的编程者给出了较好的统计结果。

技巧

table.cont_table 用于连续变量 -->读取 DataFrame 格式

table.cat_table 用于离散变量 -->读取 DataFrame 格式

table.tableone 用于整体输出 -->读取 DataFrame 格式

选取 P 值小于 0.05 的

1
2
3
4
5
6
7
8
9
10
11
def conv(x):
if isinstance(x, str) and x[0] == '<':
x = x[1:]
try:
return float(x)
except Exception as err:
print(x)

df_result = mytable.tableone['标题xxx']
df_result['P-Value'] = df_result['P-Value'].apply(lambda x: conv(x))
df_result = df_result[df_result['P-Value']<0.05]