SQL数据整理

定义和类比

定义

整理是一个奇怪的词。我们来看看定义。这就是我第一次听到这个词时的感受,和你们现在一样感到困惑。

Google 搜索 "整理"

因此,wrangle ("整理") 是意思是围拢、饲养,或负责牲畜,比如马或羊。我们来以羊为例。

一个牧羊人的主要任务是把羊带到牧场,让羊在牧场吃草,把它们赶到市场剪毛,最后再把它们赶到畜棚里睡觉。但是,在此之前,必须将它们赶到一个良好组织的羊群中。但如果没有这样做呢?那么完成上面这些任务可能需要更长的时间。如果羊群分散了,一些羊可能会跑掉,丢失,甚至狼可能会偷偷溜进羊群,享受肥羊美餐。

类比

执行操作前,组织数据的想法对于那些牧羊人来说是一样的。为了获取满意的结果,我们需要整理数据,否则可能会出现一些意外后果。如果我们在整理之前就开始分析、设想或建模数据,结果可能会出现错误,缺乏冷静的思考,从而浪费掉了宝贵的时间。所以最好的做法是先整理,而且应该始终如此。

Python 及其库的发展使得数据整理变得更加容易。

 

windows下 cmd中  输入   ipython notebook

  

import zipfile

# 从压缩文件中提取所有内容
with zipfile.ZipFile('name.zip', 'w') as myzip:
    myzip.extractall()

解压缩文件

pandas参考文档

https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

质量

低质量数据通常被称为脏数据。脏数据存在内容问题。

设想你有一个两列的表:Name 和 Height,如下所示:

一个标题为姓名和身高的表

常见的数据质量问题包括:

  • 数据丢失,如 Juan 缺少的身高值。
  • 数据无效,如单元格中的值不符合常规,例如像 Kwasi 的身高为负数。从技术角度来说,身高中具有 "英寸" 和 “厘米" 也是无效的,因为如果存在身高条目时,身高的数据类型变为字符串。身高的数据类型应为整数或浮点数。
  • 数据不准确,比如,Jane 的实际身高是 58 英寸,而不是 55 英寸。
  • 数据不一致,比如,使用不同的长度单位(英寸和厘米)。

 

数据质量指查看或评估数据在特定情境下是否能准确表示其目的。但这是一个模糊不清的定义,很重要的是:数据质量是没有一个精确标准的。一个数据集可能非常适用于一个应用,但不一定也适用于另一个。

整洁度

不整洁数据通常被称为 "杂乱" 数据。杂乱数据存在结构问题。

据说 80% 的数据分析用于清洗和准备数据。这不仅仅是第一步,但必须在分析过程中重复多次,因为会出现新的问题或收集到新的数据。为了解决这些问题,我将其称之为数据整理:构造数据集,以进行分析。

数据集是杂乱还是具有条理,这取决于行、列和表如何与观察值、变量和类型匹配。具有条理的数据具有以下特征:

  • 每个变量构成一列。
  • 每个观察结果构成一行。
  • 每种类型的观察单位构成一个表格。

 

  • 非描述性的列标题
  • 缺少值(即 NaN)
  • 值表示法不一致,特别是数据集的 tartDate 中存在"尽可能快"和其他类似于 "ASAP" 的值
  • 数据集杂乱(即没有整洁度)

 

提高质量的例子包括:

  • 数据不正确时进行校正,如将老鼠的体重修改为 0.023 公斤,而不是 230 公斤
  • 移除不相关数据,删除苹果一行,原因是苹果是一种水果,而不是动物
  • 补充缺少的数据,比如,腕龙的脑重数据丢失,应该补充
  • 结合,如下面所示,连接 more_animals DataFrame 中缺失的行

 

 

提高整洁度

提高整洁度指转换数据集,使每个变量成一列,每个观察结果成一行,每种类型的观察单位构成一个表格。

 

df.Year.value_counts()

 

df_clean = df.copy()

df_clean = df_clean.rename(columns={'ApplicationP': 'ApplicationProcedure',
                                    'AboutC': 'AboutCompany',
                                    'RequiredQual': 'RequiredQualifications',
                                    'JobRequirment': 'JobRequirements'})

asap_list = ['Immediately', 'As soon as possible', 'Upon hiring',
             'Immediate', 'Immediate employment', 'As soon as possible.', 'Immediate job opportunity',
             '"Immediate employment, after passing the interview."',
             'ASAP preferred', 'Employment contract signature date',
             'Immediate employment opportunity', 'Immidiately', 'ASA',
             'Asap', '"The position is open immediately but has a flexible start date depending on the candidates earliest availability."',
             'Immediately upon agreement', '20 November 2014 or ASAP',
             'immediately', 'Immediatelly',
             '"Immediately upon selection or no later than November 15, 2009."',
             'Immediate job opening', 'Immediate hiring', 'Upon selection',
             'As soon as practical', 'Immadiate', 'As soon as posible',
             'Immediately with 2 months probation period',
             '12 November 2012 or ASAP', 'Immediate employment after passing the interview',
             'Immediately/ upon agreement', '01 September 2014 or ASAP',
             'Immediately or as per agreement', 'as soon as possible',
             'As soon as Possible', 'in the nearest future', 'immediate',
             '01 April 2014 or ASAP', 'Immidiatly', 'Urgent',
             'Immediate or earliest possible', 'Immediate hire',
             'Earliest  possible', 'ASAP with 3 months probation period.',
             'Immediate employment opportunity.', 'Immediate employment.',
             'Immidietly', 'Imminent', 'September 2014 or ASAP', 'Imediately']

for phrase in asap_list:
    df_clean.StartDate.replace( phrase, 'ASAP', inplace=True)

df_clean.StartDate.value_counts()

for phrase in asap_list:
    assert 'ASAP' not in df_clean.StartDate.values

asap_counts = df_clean.StartDate.value_counts()['ASAP']
asap_counts

non_empty_counts = df_clean.StartDate.count()
non_empty_counts

asap_counts/non_empty_counts

0.7086304909560723

 

%matplotlib inline
df_clean.StartDate.value_counts().plot(kind='pie')

%matplotlib inline
import numpy as np
labels=np.full(len(df_clean.StartDate.value_counts()),"",dtype=object)
labels[0]='ASAP'
df_clean.StartDate.value_counts().plot(kind='pie',labels=labels)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值