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

    文章

    789

    浏览量

    46369
  • MySQL
    +关注

    关注

    1

    文章

    897

    浏览量

    29233
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136233
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89583

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    竞品数据对比接口技术解析

    与劣势,优化产品策略。本文将逐步解析其设计原理、实现方案和最佳实践,确保内容真实可靠,基于行业通用技术栈(如Python和RESTful架构)。 1. 核心概念与重要性 竞品数据对比接口是一种API服务,用于自动化收集、清洗和比
    的头像 发表于 10-23 16:16 162次阅读
    竞品<b class='flag-5'>数据</b><b class='flag-5'>对比</b>接口技术解析

    不用编程不用联网,实现倍福(BECKHOFF)PLC对接SQL数据库,上报和查询数据的案例

    ​IGT-DSER智能网关模块,支持各种PLC、智能仪表、远程IO与数据库之间双向通讯,既可以读取设备的数据上报到SQL数据库,也可以从数据
    发表于 10-10 11:14

    工业超声波清洗常用清洗哪类工件

    。常见清洗工件类型工业超声波清洗机的应用范围极为广泛几乎涵盖了所有需要高质量清洗的工业领域。在机械制造与汽车行业超声波清洗常用
    的头像 发表于 09-16 16:30 762次阅读
    工业超声波<b class='flag-5'>清洗</b>机<b class='flag-5'>常用</b>于<b class='flag-5'>清洗</b>哪类工件

    SQL 通用数据类型

    SQL 通用数据类型 数据库表中的每个列都要求有名称和数据类型。Each column in a database table is required to have a name a
    的头像 发表于 08-18 09:46 576次阅读

    半导体封装清洗工艺有哪些

    半导体封装过程中的清洗工艺是确保器件可靠性和性能的关键环节,主要涉及去除污染物、改善表面状态及为后续工艺做准备。以下是主流的清洗技术及其应用场景:一、按清洗介质分类湿法清洗
    的头像 发表于 08-13 10:51 1603次阅读
    半导体封装<b class='flag-5'>清洗</b>工艺有哪些

    超声波清洗机相对于传统清洗方法有哪些优势?

    超声波清洗机相对于传统清洗方法的优势超声波清洗机是一种高效、环保的清洗技术,相对于传统清洗方法具有多项显著的优势。本文将深入分析超声波
    的头像 发表于 06-26 17:23 450次阅读
    超声波<b class='flag-5'>清洗</b>机相对于传统<b class='flag-5'>清洗</b>方法有哪些优势?

    数据数据恢复—SQL Server数据库被加密如何恢复数据

    SQL Server数据库故障: SQL Server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。
    的头像 发表于 06-25 13:54 507次阅读
    <b class='flag-5'>数据</b>库<b class='flag-5'>数据</b>恢复—<b class='flag-5'>SQL</b> Server<b class='flag-5'>数据</b>库被加密如何恢复<b class='flag-5'>数据</b>?

    达梦数据常用管理SQL命令详解

    达梦数据常用管理SQL命令详解
    的头像 发表于 06-17 15:12 6573次阅读
    达梦<b class='flag-5'>数据</b>库<b class='flag-5'>常用</b>管理<b class='flag-5'>SQL</b>命令详解

    大促数据库压力激增,如何一眼定位 SQL 执行来源?

    你是否曾经遇到过这样的情况:在大促活动期间,用户访问量骤增,数据库的压力陡然加大,导致响应变慢甚至服务中断?更让人头疼的是,当你试图快速定位问题所在时,却发现难以确定究竟是哪个业务逻辑中的 SQL
    的头像 发表于 06-10 11:32 411次阅读
    大促<b class='flag-5'>数据</b>库压力激增,如何一眼定位 <b class='flag-5'>SQL</b> 执行来源?

    超声波清洗设备的清洗效果如何?

    超声波清洗设备是一种常用清洗各种物体的技术,它通过超声波振荡产生的微小气泡在液体中破裂的过程来产生高能量的冲击波,这些冲击波可以有效地去除表面和细微裂缝中的污垢、油脂、污染物和杂质。超声波
    的头像 发表于 06-06 16:04 600次阅读
    超声波<b class='flag-5'>清洗</b>设备的<b class='flag-5'>清洗</b>效果如何?

    超声波清洗机是否需要使用清洗剂?如何选择合适的清洗剂?

    超声波清洗机是一种常用清洗物品的设备,通过利用超声波的震动效应来去除污垢和污染物。使用超声波清洗机是否需要配合清洗剂呢?如何选择合适的
    的头像 发表于 05-15 16:20 732次阅读
    超声波<b class='flag-5'>清洗</b>机是否需要使用<b class='flag-5'>清洗</b>剂?如何选择合适的<b class='flag-5'>清洗</b>剂?

    如何一眼定位SQL的代码来源:一款SQL染色标记的简易MyBatis插件

    作者:京东物流 郭忠强 导语 本文分析了后端研发和运维在日常工作中所面临的线上SQL定位排查痛点,基于姓名贴的灵感,设计和开发了一款SQL染色标记的MyBatis插件。该插件轻量高效,对业务代码无
    的头像 发表于 03-05 11:36 734次阅读
    如何一眼定位<b class='flag-5'>SQL</b>的代码来源:一款<b class='flag-5'>SQL</b>染色标记的简易MyBatis插件

    Devart: dbForge Compare Bundle for SQL Server—比较SQL数据库最简单、最准确的方法

      dbForge Compare Bundle For SQL Server:包含两个工具,可帮助您节省用于手动数据库比较的 70% 的时间 dbForge数据比较 帮助检测和分析实时SQL
    的头像 发表于 01-17 11:35 865次阅读

    dbForge Studio For SQL Server:用于有效开发的最佳SQL Server集成开发环境

    dbForge Studio For SQL Server:用于有效开发的最佳SQL Server集成开发环境 SQL编码助手 SQL代码分析 查询分析器 可视化查询生成器
    的头像 发表于 01-16 10:36 1081次阅读

    通过Skyvia Connect SQL终端节点访问任何数据

    通过 Skyvia Connect SQL 终端节点访问任何数据   通过 Skyvia Connect SQL 终端节点访问任何数据ADO.NET
    的头像 发表于 01-02 09:31 594次阅读
    通过Skyvia Connect <b class='flag-5'>SQL</b>终端节点访问任何<b class='flag-5'>数据</b>