#针对变量较多,describe方法无法完全显示,因此写自定义函数,查看数值型数据中的数据分布情况
#需要计算的指标:均值mean、方差std、最小值min、
import numpy as np
import pandas as pd
from scipy import stats
data=pd.read_csv()
def desc(data):
#筛选出数值型的数据
df=data.copy()
#新建一个DataFrame,记载各变量的数据类型,便于后续筛选
df_var=pd.DataFrame(df.columns,columns=['var'])
df_type=pd.DataFrame(df.dtypes,columns=['type'])
#合并
df_var_type=pd.merge(df_var,df_type,how='left',left_on='var',right_index=True)
#数值型变量
list_num=list(df_var_type[(df_var_type['type']=='int64')|(df_var_type['type']=='float64')]['var'])
#数值型数据集
df_num=pd.DataFrame(df,columns=list_num)
#计算各类指标
counts=[]
means=[]
stds=[]
medians=[]
mods=[]
mins=[]
per25=[]
per50=[]
per75=[]
maxs=[]
for i in df_num.columns:
#数量
count=df_num[i].count()
counts.append(count)
#均值
mean=np.mean(df_num[i])
means.append(mean)
#方差
std=np.std(df_num[i])
stds.append(std)
#中位数
median=np.median(df_num[i])
medians.append(median)
#众数
mod=stats.mode(df_num[i])[0][0]
mods.append(mod)
#最小值
min1=min(df_num[i])
mins.append(min1)
## 25%分位数--计算分位数,对空值敏感
df_num_i=df_num[i].dropna()
per_25=np.percentile(df_num_i,25)
per25.append(per_25)
## 50%分位数
per_50=np.percentile(df_num_i,50)
per50.append(per_50)
## 75%分位数
per_75=np.percentile(df_num_i,75)
per75.append(per_75)
#最大值
max1=max(df_num[i])
maxs.append(max1)
desc=pd.DataFrame({"count":counts,
"mean":means,
"std":stds,
"median":medians,
"mod":mods,
"min":mins,
"per25":per25,
"per50":per50,
"per75":per75,
"max":maxs
})
desc.index=df_num.columns
return desc
fi=desc(data)