0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常用数据清洗的SQL对比版

人工智能与大数据技术 来源:数据管道 作者:宝器 2022-09-13 10:32 次阅读

日常工作中,分析师会接到一些专项分析的需求,首先会搜索脑中的分析体悉,根据业务需求构建相应的分析模型(不只是机器学习模型),根据模型填充相应维度表,这些维度特征表能够被使用的前提是假设已经清洗干净了。

但真正的原始表是混乱且包含了很多无用的冗余特征,所以能够根据原始数据清洗出相对干净的特征表就很重要。

前两天在Towards Data Science上看到一篇文章,讲的是用Pandas做数据清洗,作者将常用的清洗逻辑封装成了一个个的清洗函数。

公司的业务数据一般存储在数据仓库里面,数据量很大,这时候用Pandas处理是不大方便的,更多时候用的是HiveSQL和MySql做处理。

基于此,我拓展了部分内容,写了一个常用数据清洗的SQL对比版,脚本很简单,重点是这些清洗场景和逻辑,大纲如图:

adc1ad48-3305-11ed-ba43-dac502259ad0.png

01 删除指定列、重命名列

场景

多数情况并不是底表的所有特征(列)都对分析有用,这个时候就只需要抽取部分列,对于不用的那些列,可以删除。

重命名列可以避免有些列的命名过于冗长(比如Case When 语句),且有时候会根据不同的业务指标需求来命名。

删除列Python版:
df.drop(col_names,axis=1,inplace=True)

删除列SQL版:
1、selectcol_namesfromTable_Name

2、altertabletableNamedropcolumncolumnName

重命名列Python版:
df.rename(index={'row1':'A'},columns={'col1':'B'})

重命名列SQL版:
selectcol_namesascol_name_BfromTable_Name

因为一般情况下是没有删除的权限(可以构建临时表),反向思考,删除的另一个逻辑是选定指定列(Select)。

02 重复值、缺失值处理

场景:比如某网站今天来了1000个人访问,但一个人一天中可以访问多次,那数据库中会记录用户访问的多条记录,而这时候如果想要找到今天访问这个网站的1000个人的ID并根据此做用户调研,需要去掉重复值给业务方去回访。

缺失值:NULL做运算逻辑时,返回的结果还是NULL,这可能就会出现一些脚本运行正确,但结果不对的BUG,此时需要将NULL值填充为指定值。

重复值处理Python版:
df.drop_duplicates()

重复值处理SQL版:
1、selectdistinctcol_namefromTable_Name

2、selectcol_namefromTable_Namegroupbycol_name

缺失值处理Python版:
df.fillna(value=0)

df1.combine_first(df2)

缺失值处理SQL版:
1、selectifnull(col_name,0)valuefromTable_Name

2、selectcoalesce(col_name,col_name_A,0)asvaluefromTable_Name

3、selectcasewhencol_nameisnullthen0elsecol_nameendfromTable_Name

03 替换字符串空格、清洗*%@等垃圾字符、字符串拼接、分隔等字符串处理

场景:理解用户行为的重要一项是去假设用户的心理,这会用到用户的反馈意见或一些用研的文本数据,这些文本数据一般会以字符串的形式存储在数据库中,但用户反馈的这些文本一般都会很乱,所以需要从这些脏乱的字符串中提取有用信息,就会需要用到文字符串处理函数。

字符串处理Python版:
##1、空格处理
df[col_name]=df[col_name].str.lstrip()

##2、*%d等垃圾符处理
df[col_name].replace('&#.*','',regex=True,inplace=True)

##3、字符串分割
df[col_name].str.split('分割符')

##4、字符串拼接
df[col_name].str.cat()

字符串处理SQL版:
##1、空格处理
selectltrim(col_name)fromTable_name

##2、*%d等垃圾符处理
selectregexp_replace(col_name,正则表达式)fromTable_name

##3、字符串分割
selectsplit(col_name,'分割符')fromTable_name

##4、字符串拼接
selectconcat_ws(col_name,'拼接符')fromTable_name

04 合并处理

场景:有时候你需要的特征存储在不同的表里,为便于清洗理解和操作,需要按照某些字段对这些表的数据进行合并组合成一张新的表,这样就会用到连接等方法。

合并处理Python版:

左右合并
1、pd.merge(left,right,how='inner',on=None,left_on=None,right_on=None,
left_index=False,right_index=False,sort=True,
suffixes=('_x','_y'),copy=True,indicator=False,
validate=None)
2、pd.concat([df1,df2])

上下合并
df1.append(df2,ignore_index=True,sort=False)

合并处理SQL版:

左右合并
selectA.*,B.*fromTable_aAjoinTable_bBonA.id=B.id

selectA.*fromTable_aAleftjoinTable_bBonA.id=B.id

上下合并
## Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
## Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

selectA.*fromTable_aA
union
selectB.*fromTable_bB

# Union 因为会将各查询子集的记录做比较,故比起Union All ,通常速度都会慢上许多。一般来说,如果使用Union All能满足要求的话,务必使用Union All。
05、窗口函数的分组排序

场景:假如现在你是某宝的分析师,要分析今年不同店的不同品类销售量情况,需要找到那些销量较好的品类,并在第二年中加大曝光,这个时候你就需要将不同店里不同品类进行分组,并且按销量进行排序,以便查找到每家店销售较好的品类。

addca792-3305-11ed-ba43-dac502259ad0.png

Demo数据如上,一共a,b,c三家店铺,卖了不同品类商品,销量对应如上,要找到每家店卖的最多的商品。
窗口分组Python版:

df['Rank']=df.groupby(by=['Sale_store'])['Sale_Num'].transform(lambdax:x.rank(ascending=False))

窗口分组SQL版:

select
*
from
(
Select
*,
row_number()over(partitionbySale_storeorderbySale_Numdesc)rk
from
table_name
)bwhereb.rk=1

ae012900-3305-11ed-ba43-dac502259ad0.png

可以很清晰的看到,a店铺卖的最火的是蔬菜,c店铺卖的最火的是鸡肉,b店铺?

嗯,b店铺很不错,卖了888份宝器狗。

总结,上面的内容核心是掌握这些数据清洗的应用场景,这些场景几乎可以涵盖90%的数据分析前数据清洗的内容。而对于分析模型来说,SQL和Python都是工具,如果熟悉SQL,是能够更快速、方便的将特征清洗用SQL实现。

所以,请别张口闭口数据科学,你竟SQL都不会。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    738

    浏览量

    43460
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    25999
  • 机器学习
    +关注

    关注

    66

    文章

    8116

    浏览量

    130546
  • python
    +关注

    关注

    51

    文章

    4674

    浏览量

    83458

原文标题:5大SQL数据清洗方法!

文章出处:【微信号:TheBigData1024,微信公众号:人工智能与大数据技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    超声波清洗常用的频率及清洗特点

    超声波清洗机是一种利用超声波振动原理进行清洗的设备,广泛应用于工业、医疗、实验室等领域。不同的超声波清洗机使用的频率不同,而频率的不同也会影响到清洗的效果和特点。本文将对超声波
    的头像 发表于 04-15 14:14 171次阅读
    超声波<b class='flag-5'>清洗</b>机<b class='flag-5'>常用</b>的频率及<b class='flag-5'>清洗</b>特点

    oracle执行sql查询语句的步骤是什么

    Oracle数据库是一种常用的关系型数据库管理系统,具有强大的SQL查询功能。Oracle执行SQL查询语句的步骤包括编写
    的头像 发表于 12-06 10:49 404次阅读

    sql数据库入门基础知识

    库开发人员或数据库管理员的重要基础。本文将介绍SQL的入门基础知识,详细介绍SQL的语法、常用操作以及一些实用技巧。 一、SQL的基本概念和
    的头像 发表于 11-23 14:24 1115次阅读

    mysql数据库的增删改查sql语句

    MySQL是一种常用的关系型数据库管理系统,是许多网站和应用程序的首选数据库。在MySQL中,我们可以使用SQL(结构化查询语言)进行数据
    的头像 发表于 11-16 15:41 582次阅读

    labview MS SQL数据库,数据插入问题

    萌新求助,这个SQL数据插入是什么问题啊
    发表于 11-08 14:49

    数据SQL的优化

    数据库执行SQL都会先进行语义解析,然后将SQL分成一步一步可执行的计划,然后逐步执行。通过分析执行计划,我们可以清晰的看到数据库执行的操作,这对于
    的头像 发表于 10-09 15:43 771次阅读
    <b class='flag-5'>数据</b>库<b class='flag-5'>SQL</b>的优化

    SQL常用语句篇

    SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,
    的头像 发表于 10-07 16:22 314次阅读
    <b class='flag-5'>SQL</b><b class='flag-5'>常用</b>语句篇

    数据数据恢复-SQL SERVER数据库MDF (NDF)或LDF损坏的数据恢复方案

    SQL SERVER数据库故障类型: SQL SERVER数据库MDF(NDF)或LDF损坏。 SQL SERVER
    的头像 发表于 09-20 15:00 504次阅读

    PostgreSQL准确且快速的数据对比方法

    MySQL、SQL Server、PostgreSQL、Redis、MongoDB、ClickHouse、Doris 等,可进行数据库间的结构对比数据
    的头像 发表于 09-12 15:46 339次阅读
    PostgreSQL准确且快速的<b class='flag-5'>数据</b><b class='flag-5'>对比</b>方法

    sql怎么用代码创建数据

    sql怎么用代码创建数据SQL是一种结构化查询语言,用于通过编程语言与数据库进行通信。它允许用户从数据库中检索、修改和删除
    的头像 发表于 08-28 17:09 2224次阅读

    932SQL450 数据

    932SQL450 数据
    发表于 07-11 19:13 0次下载
    932<b class='flag-5'>SQL</b>450 <b class='flag-5'>数据</b>表

    932SQL456 数据

    932SQL456 数据
    发表于 07-11 19:13 0次下载
    932<b class='flag-5'>SQL</b>456 <b class='flag-5'>数据</b>表

    9SQL4952-9SQL4954-9SQL4958 系列数据

    9SQL4952-9SQL4954-9SQL4958 系列数据
    发表于 07-05 19:04 0次下载
    9<b class='flag-5'>SQL4952-9SQL4954-9SQL</b>4958 系列<b class='flag-5'>数据</b>表

    PROC SQL介绍

    SQL(Structured Query Language)——结构化查询语言,是用于检索和更新数据的一种标准化语言,SQL在SAS中通过PROC SQL来实现。
    的头像 发表于 05-19 16:10 1592次阅读
    PROC <b class='flag-5'>SQL</b>介绍

    SQL SERVER数据库ndf文件损坏的数据恢复案例

    某公司存储上部署SQL SERVER数据库,数据库中有1000多个文件,该SQL SERVER数据库每10天生成一个NDF文件,
    的头像 发表于 04-27 11:11 496次阅读