走出数据泥沼:数据清理第1步——来个简单粗暴的描述性统计吧

如果你完成了数据的审查,确认了第0步中每个问题的答案,这份数据的确符合你的需求。接下来就要审核一下数据中存在的问题了。

一份原始的脏数据可能存在多少种问题?

那恐怕是数也数不清的,常见的大概有:

  • 空白值与缺失值——数据空白——程序是区分不出空白值和缺失值的,只能由你区分
  • 错误值与极端值——错误或超出合理范围的取值——什么叫“合理”也是你来定义的
  • 重复值——重复变量和重复个案
  • 多值——某个变量在某个个案上有多个值——这是没法进入数据分析的,多半会被程序识别成字符串
  • 数据类型、格式错误

这些问题,如果样本量少,变量也不太多的话,人工扫视过去大概就能发现问题。

但如果有几百个变量,几万条数据呢?

所以,我们需要先搞一个简单粗暴的描述性统计,帮助我们对数据进行一个描摹,找到问题所在。

简单粗暴的描述性统计

这个描述性统计的要求:

1、不需要对原始数据进行太多的处理,比如挨个指定数据类型——如果这样的话,我干嘛不直接用某个统计软件开始处理呢?

2、能够给出所有有价值的描述性统计信息,这包括:

  • 所有变量——样本量、有效值数量、缺失值/空白值数量
  • 所有变量——不同的取值有多少个、重复最多的取值重复了多少次、只出现了一次的值有多少个
  • 数值型变量——最大值、最小值、范围
  • 数值型变量——平均数、标准差、四分位数、众数
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 21 11:58:17 2020
@author: weisssun
"""

import pandas as pd
import numpy as np

input_path = r'D:\Python\data_analysis\原始数据.xlsx'
output_path = r'D:\Python\data_analysis\简单粗暴的描述性统计.xlsx'

input_data = pd.read_excel(input_path)
output_data = pd.DataFrame()

input_col_name = input_data.columns.tolist()
print(input_col_name)

sample_size = len(input_data)
# 总体样本数量
print(sample_size)

def freq_count(var1):
    valid_size = var1.count () 
    print('非空值数量', valid_size)
    # 非空值数量
    values_freq = var1.value_counts()
    print('频数统计', values_freq)
    # 不同取值的频数
    
    #print(type(values_freq))
    #print(values_freq.values)
    
    unique_values = len(values_freq)
    print('不同取值个数', unique_values)
    # 不同取值个数
    one_time_values = len(values_freq[values_freq == 1])
    print('仅出现一次的值个数', one_time_values)
    # 仅出现一次的值个数
    
    max_freq = values_freq.max()
    print('重复最多的值出现次数', max_freq)
    # 重复最多的值出现次数
    min_freq = values_freq.min()
    print('重复最少的值出现次数', min_freq)
    # 重复最少的值出现次数
    
    return valid_size, unique_values, one_time_values, max_freq, min_freq
    
for col in input_col_name:
    data_type = input_data[col].dtypes
    print(col, data_type)
    i = input_col_name.index(col)
    valid_size, unique_values, one_time_values, max_freq, min_freq = freq_count(input_data[col])
    output_data.loc[i, '变量名'] = col
    output_data.loc[i, '数据类型'] = data_type
    output_data.loc[i, '样本数量'] = sample_size
    output_data.loc[i, '非空值数量'] = valid_size
    output_data.loc[i, '覆盖率'] = (valid_size / sample_size)*100
    output_data.loc[i, '不同取值个数'] = unique_values
    output_data.loc[i, '#独特性'] = (unique_values / valid_size)*100
    output_data.loc[i, '仅出现一次的值个数'] = one_time_values
    output_data.loc[i, '重复最多的值出现次数'] = max_freq
    output_data.loc[i, '#重复性'] = (max_freq / valid_size)*100
    output_data.loc[i, '重复最少的值出现次数'] = min_freq
    
    if data_type in ['float64', 'int64']:
        col_des = input_data[col].describe()
        #print(col_des)
        #print(type(col_des))
        output_data.loc[i, '平均值'] = col_des['mean']
        output_data.loc[i, '标准差'] = col_des['std']
        output_data.loc[i, '最小值'] = col_des['min']
        output_data.loc[i, '25%位数'] = col_des['25%']
        output_data.loc[i, '中位数'] = col_des['50%']
        output_data.loc[i, '75%位数'] = col_des['75%']
        output_data.loc[i, '最大值'] = col_des['max']
        output_data.loc[i, '范围'] = col_des['max'] - col_des['min']
        output_data.loc[i, '众数'] = input_data[col].mode()[0]
    
output_data.to_excel(output_path)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值