新知榜官方账号
2023-09-18 19:10:54
Python在数据处理分析和AI中得到了广泛应用,但Sql作为传统数据统计分析编程语言在日常数据提取分析、ETL开发和后台存储过程开发中主要用到。由于Python丰富的类库使其在数据挖掘、机器学习等方面用得十分广泛,基本将java在这一领域剔出,同时由于其自带数值科学计算Pandas和Numpy等包的特性,在数据处理分析领域也是小露锋芒,应用的越来越广,这样也与Sql有了交集。
数据处理和分析是一个基于业务实际场景需求对数据进行操作的过程,常见的有数仓的ETL(即对关系数据的抽取、合并转换和数据不同分层的载入)、指标的统计即针对数据集的聚合计算、数据的预处理即对空值的填充和异常值的剔除等。下面针对实际应用场景做一些比较分析,也希望有同样思考的志同道合者一起讨论。
数据分析需要比较和组合不同的数据集生成新的数据集,SQL中提供了大量的集合操作符支持上述需求。集合操作符支持对比性操作,可有条件连接数据集。SQL集合操作符包括UNION、UNIONALL、INTERSECT和EXCEPT(或者MINUS),INTERSECT是返回位于两个待比较的查询结果集中行,EXCEPT(或者MINUS)返回到非待比较的查询语句结果集中的行。Python中Dataframe和Series对象为二维表格数据集,通过concat等函数可实现集合关联操作。如需要将商品购买和出售用户进行重复与并集合并,Sql示例如下:
--SQL实现
select user_id
from data_dwd.buyers
union all
select user_id
from data_dwd.sellers
在Python中,可使用pandas.concat()函数实现上边重复合并集合操作,沿选定轴连接Dataframes或Series。
#Python实现
users=pd.concat([buyers,sellers])
上边为重复合并,要实现并集合并只需要Python中.drop_duplicates()函数对应Sql中UNION即可。如果进一步想做交集,分析既是商品买家又是卖家的用户,则Python中.merge()方法对应Sql中INTERSECT操作符就可以。
Sql的聚合函数如sum()、avg()、count()、max()和min()等,只能用在select和groupby、having子句的组合中,groupby分组后聚合函数可以作用于每一个组,对每一个组的数据做一些统计。Python中DataFrame的grouby()函数+agg()函数可以实现聚合统计功能。如统计不同店铺不同产品的月销售量
#Python实现
data_set.groupby(['date_block_num','shop_id','item_id']).agg({'item_cnt_day':'sum'})
总结思考:两者的优劣如何并且在实际中怎么选择呢?Python代码实现简单,Sql则要写一大堆,如果遇到筛选很多字段的情况,则经常出现sql脚本很多行的情况,再加上后续会还有各种关联会让人看的眼花缭乱。但是Python存储数据集有内存开销,再加上目前结合Sql的Hive可以实现分布式计算,性能上是比Python强大很多的,上亿的交易表都可以实现聚合分析,这也是目前在数仓和报表数据处理分析中仍然Sql为主的重要原因。但Python不是没有可以发挥的余地,在数据量不是特别大,另外如果是Python的框架也部署在分布式环境,资源分配足够的情况下也是可以使用的,因为随着Python版本的升级,底层基本都用C++来重构实现,以解决计算时性能问题。
Python在数据处理分析真正强大之处在于可以实现Sql所不能的地方,如需要对要分组的条件归并后再对数值按照归并后的组进行聚合统计。对于归属不同门店不同小微企业所有产品月购买金额的统计,因为门店与购买企业,每个购买企业对应产品都是不确定的,无法用sql实现筛选统计,但python可以合并分组条件,计算金额,然后重新连接成一个数据集。
#Python示例
data_set2=data_set1.groupby(['date','shop_id',shop_name','corp_nm'])['prod'].apply(lambda x:'|'.join(x[:]))
data_set2=data_set2.reset_index()
data_set3=data_set1.groupby(['date','shop_id',shop_name','corp_nm'])['amt'].sum()
data_set3=data_set3.reset_index()
data_set=pd.concat([data_set2,data_set3['amt']],axis=1)
此外在数据校验方面,Python可直接对数据集使用函数或自定义函数判断,不像Sql需要按条件去寻找和定位,限制了灵活发挥的空间。随着数据应用的扩展和深入和各公司基础技术开发平台的日益完善,相信在数仓数据开发和运维、数据治理和报表智能化等场景中Python会发挥越来越大的作用,Python不再是算法工程师的御用语言。
以上就是我的一点思考,我是程序媛阿芳,学院路某技校毕业后在大厂搬砖,感谢各位老铁关注,关注我公众号【码农知秋】,一起交流学习。
相关工具
相关文章
推荐
亲测真香!这6个AI工具让工作效率翻倍,同事追着问链接
2025-06-17 16:21
FLUX.1 Kontext 一出,AI生图领域 “地震” 了!
2025-06-06 15:38
用Deepseek写AI绘图提示词,像呼吸一样简单!
2025-02-19 16:12
你以为AI绘画是黑科技?其实早成了“路边摊生意”!
2025-02-19 10:15
Flux爆火,全网最全面最详细的Flux使用教程!
2025-02-18 14:19
用AI如何创作音乐,实战教学来啦!
2025-02-17 17:23
MidJourney让你秒变绘画大神,从零开始画哪吒!
2025-02-17 14:56
AI应用新境界:让人工智能成为你的得力助手
2025-02-14 15:45
AI短片革命:当创作遇上智能,人人都能成为导演
2025-02-14 14:53
AI狂潮下的人类职场:是失业危机还是进化契机?
2025-02-13 16:53