今天学到pandas的一个扩展库- pandas-profiling ,该库可以从dataframe中生成报告文件。实际上df.describe()就是能实现类似的功能,但是对于数据分析初期的数据探索略微有些鸡肋。 pandas-profiling 可以在html动态交互页面中呈现如下统计信息:
安装!pip3 install pandas_profiling
pandas-profiling例子这里我们使用气象学会的综合数据集,该数据集包含所有已知陨石着陆的信息。 由Javier de la Torre收集,提供了一个由34,513个陨石组成的XLS文件,其中包括以下字段: location
type_of_meteorite
mass_g
fell_found
year
database
coordinate_1
coordinate_1
coordinates_2
cartodb_id
created_at
updated_at
year_date
longitude
latitude
geojson
我们先读取数据看看 import pandas as pd
import pandas_profiling
import numpy as np
df = pd.read_csv('Meteorite_Landings.csv', parse_dates=['year'])
df.head()
生成一些实验数据
为了方便学习pandas_profiling库,我们生成一些缺失值、随机值、高度自相关等特点的信息。 #pandas不支持1880年之前的日期,所以遇到errors我们需要设置处理方式。
#pandas中errors有raise、ignore和coerce三种。coerce是将不支持的日期设置为NaN
df['year'] = pd.to_datetime(df['year'], errors='coerce')
# 常量
df['source'] = "NASA"
#随机生成df.shape[0]个布尔值
df['boolean'] = np.random.choice([True, False], df.shape[0])
# 随机生成df.shape[0]个1或者A
df['mixed'] = np.random.choice([1, "A"], df.shape[0])
# 新建一个与reclat高度相关的reclat_city变量
df['reclat_city'] = df['reclat'] + np.random.normal(scale=5,size=(len(df)))
duplicates_to_add[u'name'] = pd.DataFrame(df.iloc[0:10][u'name']) + " copy"
df = df.append(duplicates_to_add, ignore_index=True)
df.tail(5)
输出分析报告
在notebook的Cell内输出dataframe的分析报告 pandas_profiling.ProfileReport(df)
具体我们看看详细的报告,注意图片中的Toggle Detail也是可以点击查看更详细的信息。
报告真的很详细美观,很适合用到数据探索阶段。
将报告输出到html文件中有时候我们需要将分析报告分享给其他人,这时候我们就需要将报告输出为html文件方便其他人查看。 pfr = pandas_profiling.ProfileReport(df)
pfr.to_file("report.html")
profiling对象行内显示
刚刚上面的pfr变量是profiling对象,可以直接在行内显示具体的报告信息 pfr
高级用法
pandas_profiling.ProfileReport()函数有以下参数,我们可以根据需要自定义 相关性设置: check_correlation: 布尔型值,是否检验相关性,默认为True correlation_threshold: 浮点值(值域0-1),该值用来设置判定两个变量之间是否为相关。默认阈值为0.9,在社科类中,这个参数可以用来诊断变量间的共线性问题 correlation_overrides: (list): Variable names not to be rejected because they are correlated (None by default). check_recoded (boolean): 布尔型值,用来诊断记录间是否存在相关性,因为这种计算比较消耗计算能力,所以建议只在小样本量的情况下使用。 pool_size:整数型,并行加快计算,该参数默认与CPU的个数相等。
|