继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

学习笔记(一)-python制作数据分析工具

段云琦
关注TA
已关注
手记 2
粉丝 2
获赞 18

本文使用numpy、pandas、scipy等依赖包,利用python制作数据分析工具,了解数据的特征分布、缺失、异常情况,实现数据的预处理。常用的描述性统计指标主要包括基本均值、中位数、最大最小值、计数类等。
图片描述

数据获取:https://www.kaggle.com/c/santander-customer-satisfaction/data

0、依赖包导入

# -*-coding:utf-8-*-
from __future__ import  division
import pandas as pd
import numpy as np
from scipy import  stats

1、数据读取

##Read Data##
df = pd.read_csv("train.csv")
label = df['TARGET']
df = df.drop(['ID','TARGET'],axis=1)

2、缺失值设置

##Basic Analysis##
#Missing Value#
missSet = [np.nan,9999999999,-999999]

3、计数类

#Count distinct#
len(df.iloc[:,0].unique())
count_un = df.iloc[:,0:3].apply(lambda x:len(x.unique())) #apply函数:遍历每一列

4、0值出现次数

#Zero Values#
np.sum(df.iloc[:,0] ==0)
count_zreo = df.iloc[:,0:3].apply(lambda x:np.sum(x == 0))

5、均值

#Mean Values#
np.mean(df.iloc[:,0]) #没有去除缺失值之前的均值很低
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)] #去除缺失值
np.mean(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]) #去除缺失值后进行均值计算
df_mean=df.iloc[:,0:3].apply(lambda x:np.mean(x[~np.isin(x,missSet)]))

6、中位数

#Median Values#
np.median(df.iloc[:,0]) #没有去除缺失值之前
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)] #去除缺失值
np.median(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)])
df_median=df.iloc[:,0:3].apply(lambda x:np.median(x[~np.isin(x,missSet)])) #去除缺失值之后进行计算

7、众数和众数比例

#Mode Values#
df_mode = df.iloc[:,0:3].apply(lambda x: stats.mode(x[~np.isin(x,missSet)])[0][0])
#Mode Percentage#
df_mode_count = df.iloc[:,0:3].apply(lambda x: stats.mode(x[~np.isin(x,missSet)])[1][0])
df_mode_perct = df_mode_count/df.shape[0]

8、最大最小值

#Min Values#
np.min(df.iloc[:,0])
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)] #去除缺失值
np.min(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)])
df_min = df.iloc[:,0:3].apply(lambda x:np.min(x[~np.isin(x,missSet)]))
#Max Values#
np.max(df.iloc[:,0])
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]
np.max(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)])
df_max=df.iloc[:,0:3].apply(lambda x:np.max(x[~np.isin(x,missSet)]))

9、分位点

#quantile values分位点#
np.percentile(df.iloc[:,0],(1,5,25,50,75,95,99))
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]
np.percentile(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)],(1,5,25,50,75,90,99))

#无法做apply操作
json_quantile = {} #定义一个字典存储遍历结果

for i,name in enumerate(df.iloc[:,0:3].columns):
    print('the {} columns: {}'.format(i,name))
    json_quantile[name]= np.percentile(df[name][~np.isin(df[name],missSet)],(1,5,15,25,75,95,99))
#对返回结果重新排序并转置,便于后期拼接
df_quantile = pd.DataFrame(json_quantile)[df.iloc[:,0:3].columns].T

10、频数

#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()
df['imp_sal_var16_ult1'].value_counts()

for i,name in enumerate(df[['ind_var1_0','imp_sal_var16_ult1']].columns):
    #Index Name
    index_name = df[name][~np.isin(df[name],missSet)].value_counts().iloc[0:5,].index.values
    #if the length of array is less than 5
    index_name = fill_fre_top_5(index_name)

    json_fre_name[name]=index_name

    #Value Count
    values_count = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5,].values
    #if the length of array is less than 5
    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
df_fre_count = pd.DataFrame(json_fre_count)[df[['ind_var1_0','imp_sal_var16_ult1']].columns].T

df_fre = pd.concat([df_fre_name,df_fre_count],axis =1)

11、缺失值统计

#Miss Values
np.sum(np.isin(df.iloc[:,0],missSet))#统计缺失值
df_miss = df.iloc[:,0:3].apply(lambda x:np.sum(np.isin(x,missSet)))#遍历每个遍历的缺失值情况

12、方差和标准差
标准差(或方差)分为 总体标准差(方差)和 样本标准差(方差)。
其中,前者分母为n,后者为n-1。后者是无偏的。
pandas里的 .std() 和 .var() 都是无偏的;.values.mean(),.values.std(), .values.var()都是有偏的。

#方差
np.std(df.iloc[:,0]) #没有去除缺失值之前的方差
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)] #去除缺失值
np.std(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]) #去除缺失值后进行均值计算
df_std=df.iloc[:,0:3].apply(lambda x:np.std(x[~np.isin(x,missSet)]))
#标准差
np.var(df.iloc[:,0]) #没有去除缺失值之前的方差
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)] #去除缺失值
np.var(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]) #去除缺失值后进行均值计算
df_var=df.iloc[:,0:3].apply(lambda x:np.var(x[~np.isin(x,missSet)]))
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP