-
1、掌握数据的统计指标
2、利用Python制作数据诊断工具
3、数据诊断工具的应用
数据大纲
1、依赖包介绍
2、基本描述统计值
3、特殊值描述值
4、缺失值 情况多,需要单端处理
5、功能整合
查看全部 -
数据诊断
查看全部 -
定义缺失值。np.nan是Numpy缺失的一个表示
计数值,
len来计数
apply函数遍历每一列
df.iloc[指定的行数开头:指定的行数结尾,指定的列数] unique函数看这一个特征有多少个不同的值
找0值
df.iloc[:,0:3] ==0 会返回每一个值是否是0的一个数组True或者False np.sum对数组取和(True当作1,False当作0)算出有多少个True
查看全部 -
统计指标可以自己去构建,以上是常规指标
查看全部 -
读取下载的数据。把数据集都进来命名df
lable属于预测目标,‘TARGET’就是特征的名字。在df中把因变量TARGET取出来命名为lable
删除掉一些不需要的值。把ID,TARGET这两列去掉重新赋值为df
查看全部 -
依赖包:Numpy
Pandas
Scipy
查看全部 -
依赖包:1、numpy 2、pandas 3、scipy
查看全部 -
数据诊断的目的:1、了解特征的分布,缺失和异常等情况 2、统计指标可直接用于数据预处理
查看全部 -
测试
查看全部 -
统计指标介绍
查看全部 -
数据获取与读取1
查看全部 -
数据诊断目的
查看全部 -
数据诊断的目的
查看全部 -
python 制作数据分析工具查看全部
-
课程目标,掌握数据的统计指标
查看全部 -
1.# 2.Calculating Running time
import timeit
start = timeit.default_timer()
df_eda_summary = eda_analysis(missSet=[np.nan, 9999999999, -999999], df=df.iloc[:, 0:3])
print('EDA Running Time: {0:.2f} seconds'.format(timeit.default_timer() - start))
上面是时间的测试示例,我们去测试每一块所用时间,由此可以判断我们的优化重点,经过测试可知,众数部分的时间较长,所以我们后期可对这一部分进行优化,优化的方法有:1)注释掉没用的代码 2)使用更好的方法去替代原有方法。
查看全部 -
# 数据分析工具 from __future__ import division # 除的结果是小数 import pandas as pd import numpy as np from scipy import stats def fill_fre_top_5(x): # 频数前五位的函数:若不足5,则nan补齐 if (len(x)) <= 5: new_array = np.full(5, np.nan) new_array[0:len(x)] = x return new_array def eda_analysis(missSet=[np.nan, 9999999999, -999999], df=None): # 种类计数 count_un = df.apply(lambda x: len(x.unique())) count_un = count_un.to_frame('count') # 转成dataframe # 零的计数 count_zero = df.apply(lambda x: np.sum(x == 0)) count_zero = count_zero.to_frame('count_zero') # 均值 df_mean = df.apply(lambda x: np.mean(x[~np.isin(x, missSet)])) df_mean = df_mean.to_frame('mean') # 中位数 df_median = df.apply(lambda x: np.median(x[~np.isin(x, missSet)])) df_median = df_median.to_frame('median') # 众数 df_mode = df.apply(lambda x: stats.mode(x[~np.isin(x, missSet)])[0][0]) df_mode = df_mode.to_frame('mode') # 众数的频数和比例 df_mode_count = df.apply(lambda x: stats.mode(x[~np.isin(x, missSet)])[1][0]) df_mode_count = df_mode_count.to_frame('mode_count') df_mode_perct = df_mode_count / df.shape[0] df_mode_perct.columns = ['mode_perct'] # 最小值 df_min = df.apply(lambda x: np.min(x[~np.isin(x, missSet)])) df_min = df_min.to_frame('min') # 最大值 df_max = df.apply(lambda x: np.min(x[~np.isin(x, missSet)])) df_max = df_max.to_frame('max') # 分位数 json_quantile = {} for i, name in enumerate(df.columns): json_quantile[name] = np.percentile(df[name][~np.isin(df[name], missSet)], (1, 5, 25, 50, 75, 95, 99)) df_quantile = pd.DataFrame(json_quantile)[df.columns].T df_quantile.columns = ['quan01', 'quan05', 'quan25', 'quan50', 'quan75', 'quan95', 'quan99'] # 频数(产出为数组,不能使用apply) json_fre_name = {} json_fre_count = {} for i, name in enumerate(df.columns): # 频数前五的数 index_name = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5, ].index.values index_name = fill_fre_top_5(index_name) json_fre_name[name] = index_name # 频数前五的数的频数 value_count = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5, ].values value_count = fill_fre_top_5(value_count) json_fre_count[name] = value_count df_fre_name = pd.DataFrame(json_fre_name)[df.columns].T df_fre_count = pd.DataFrame(json_fre_count)[df.columns].T df_fre = pd.concat([df_fre_name, df_fre_count], axis=1) # 合并 df_fre.columns = ['Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'freq1', 'freq2', 'freq3', 'freq4', 'freq5'] # 缺失值 df_miss = df.apply(lambda x: np.sum(np.isin(x, missSet))) df_miss = df_miss.to_frame('freq_miss') # 合并所有统计指标 df_eda_summary = pd.concat( [count_un, count_zero, df_mean, df_median, df_mode, df_mode_count, df_mode_perct, df_min, df.max, df_fre, df_miss], axis=1) return df_eda_summary
查看全部 -
工具 整合
查看全部 -
1.统计指标示例-缺失值
# (12)Miss Value
np.sum(np.in1d(df.iloc[:, 0], missSet)) # 统计缺失值
df_miss = df.iloc[:, 0:3].apply(lambda x: np.sum(np.in1d(x, missSet))) # 遍历每一个遍历的缺失值情况,因为返回的是一个值,所以直接用apply遍历
查看全部 -
#(11)Frequent Values
df.iloc[:,0].value_counts().iloc[0:5,]
df.iloc[:,0][~np.isin(df.iloc[:,0], missSet)]
df.iloc[:,0][~np.isin(df.iloc[:,0], missSet)].value_counts()[0:5,]
json_fre_name = {}
json_fre_count = {}
def fill_fre_top_5(x):
if len(x) <= 5:
new_array = np.full(5, np.nan)
new_array[0:len(x)] = x
return new_array
df['ind_var1_0'].value_counts()
len(df['imp_sal_var16_ult1'].value_counts())
for i,name in enumerate(df[['ind_var1_0','imp_sal_var16_ult1']].columns):
index_name = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5,].index.values
index_name = fill_fre_top_5(index_name)
json_fre_name[name] = index_name
values_count = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5,].values
values_count = fill_fre_top_5(values_count)
json_fre_count[name] = values_count
df_fre_name = pd.DataFrame(json_fre_name)[df[['ind_var1_0','imp_sal_var16_ult1']].columns].T
查看全部 -
特殊描述值
查看全部 -
1.统计指标示例-最小值/最大值
# (8)Min Value
np.min(df.iloc[:, 0])
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] # 去除缺失值
np.min(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]) # 去除缺失值后进行最小值计算
df_min = df.iloc[:, 0:3].apply(lambda x: np.min(x[~np.in1d(x, missSet)]))
# (9)Max Value
np.max(df.iloc[:, 0])
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] # 去除缺失值
np.max(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]) # 去除缺失值后进行最大值计算
df_max = df.iloc[:, 0:3].apply(lambda x: np.max(x[~np.in1d(x, missSet)]))
查看全部 -
统计指标实例-众数
# (6)Mode Value
df_mode = df.iloc[:, 0:3].apply(lambda x: stats.mode(x[~np.in1d(x, missSet)])[0][0]) # mode这个函数返回的是一个数组,对应每一列出现频率最高的数以及它出现的频数,[0][0]表示取的是这个数字。
# (7)Mode Percetage
df_mode_count = df.iloc[:, 0:3].apply(lambda x: stats.mode(x[~np.in1d(x, missSet)])[1][0]) # [1][0]表示取的这个众数出现的频数
df_mode_perct = df_mode_count/df.shape[0] # df.shape[0]确定有多少个样本
查看全部 -
查看全部
-
1.# (4)Mean Value 均值
np.mean(df.iloc[:, 0]) # 没有去除缺失值之前的均值很低
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] # 去除缺失值,np.in1d(df.iloc[:, 0], missSet)找到缺失值的位置,是缺失值返回true,但我们要找的是去除缺失值之后的数据
np.mean(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]) # 去除缺失值后进行均值计算
df_mean = df.iloc[:, 0:3].apply(lambda x: np.mean(x[~np.in1d(x, missSet)]))
# (5)Median Value 中位数
np.median(df.iloc[:, 0]) # 没有去除缺失值之前
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] # 去除缺失值
np.median(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]) # 去除缺失值后进行计算
df_median = df.iloc[:, 0:3].apply(lambda x: np.median(x[~np.in1d(x, missSet)]))
重点是如何去除缺失值。
查看全部 -
1.统计指标示例-计数类
##1.Basic Analysis##
# (1)Missing Value 缺失值
missSet = [np.nan, 9999999999, -999999] # np.nan是numpy中缺失值的表示,后面两个数是分析得到的缺失值
# (2)Count distinct 统计值出现多少
len(df.iloc[:, 0].unique()) # df.iloc[:, 0]取第一列,unique()看这一列哪些不同的值,返回一个类似数组,然后len看有多少个
count_un = df.iloc[:, 0:3].apply(lambda x: len(x.unique())) # df.iloc[:, 0:3]取前三列,apply用于遍历,看看前三列每一列有多少个不同的值
# (3)Zero Value 看看每一列有多少个值为0
np.sum(df.iloc[:, 0] == 0) # 第一列==0,返回True或False的数组
count_zero = df.iloc[:, 0:3].apply(lambda x: np.sum(x == 0))
查看全部
举报