栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【学习记录】阿里天池SQL练习题

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【学习记录】阿里天池SQL练习题

合并数据,汇总统计 数据来源:天池新人实战赛o2o优惠券使用预测赛题与数据-天池大赛-阿里云天池 使用Coupon Usage Data for O2O中的数据集《ccf_online_stage1_train.csv》和《ccf_offline_stage1_train.csv》 试找出在2016年6月期间,线上线下累计优惠券使用次数最多的顾客。

概要:此题卡壳比较严重,乍看要求很简单,用python很实现容易。但过程中发现python相比SQL有一些不同,导致在处理此题反而不容易理解

先导入数据。此次数量较大,同时需要导入2个数据集,直接从本地下载导入。

import pandas as pd
import numpy as np
df_online=pd.read_csv('../data/阿里天池/ccf_online_stage1_train.csv')
df_offline=pd.read_csv('../data/阿里天池/ccf_offline_stage1_train.csv')

先处理数据量较小的offline数据集

首先把NaN数据进行处理,筛出2016年6月期间的数据集

同时新增一列number,并统一赋值1。原因是这样的,此题是要求按User_id作为分组索引,然后汇总统计优惠券的使用次数,但数据集中没有对应的优惠券ID的list(见数据集字段详情)无法直接用count函数。而在SQL中没有此困恼,SQL中可以直接group by User_id,接着order by count(User_id)。这样就把User_id出现的次数汇总,其实就等同于优惠券的使用次数。但python里不能这么写,python中groupby User_id后是无法再次对User_id用count汇总的。

这里卡壳很久一度不能理解。后面对比了SQL代码,再仔细看了题目要求:优惠券使用次数

最后我理解成:当一个User_id每用一次优惠券,就等于新增1行(User_id可以重复),用笨办法等于计数1,等同于使用了1次优惠券,这样汇总计数后再Sum求和得到总数即是每个User_id的使用次数,而不用count直接汇总。等于我自己新增了一列叫做‘优惠券ID’。最终用笨办法解决这个汇总问题

s1=df_offline[df_offline['Date'].notnull()]
s2=s1['Date'].astype('int')
df1=s1.set_index(s2).sort_index(ascending=False).loc[20160631:20160601]
df1['number']=1
offline_users=df1.groupby('User_id')[['number']].sum().sort_values(by='number',ascending=False)

 接下来online数据就比较容易处理

a1=df_online[df_online['Date'].notnull()]
a2=a1['Date'].astype('int')
df2=a1.set_index(a2).sort_index(ascending=False).loc[20160631:20160601]
df2['number']=1
online_users=df2.groupby('User_id')[['number']].sum().sort_values(by='number',ascending=False)

然后把两组数据拼接,最后筛选最大值

累计优惠券使用次数最多的顾客id=pd.concat([online_users,offline_users]).head(1).index[0]
print('累计优惠券使用次数最多的顾客id:',累计优惠券使用次数最多的顾客id)

SQL代码

SELECt User_id,COUNT(user_id) FROM 
(SELECt User_id FROM `ccf_online_stage1_train`
WHERe YEAR(DATE)=2016 AND MONTH(DATE)=6
UNIOn ALL
sELECt User_id FROM `ccf_offline_stage1_train`
WHERe YEAR(DATE)=2016 AND MONTH(DATE)=6) AS union_talbe
GROUP BY user_id
ORDER By COUNT(user_id) DESC
LIMIT 1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/932414.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号