各位读者,从本期开始,我将使用Polars对阿里天池中淘宝用户购物行为进行数据实践分析,希望能对大家学习Polars数据分析有所帮助。
一、数据集的选择与下载
具体链接为:淘宝用户购物行为数据集_数据集-阿里云天池 (aliyun.com)。从这里面下载UserBehavior.csv.zip这个文件,大概905.8M,解压后:
3.76G ,horrible的数据集。该数据集的具体信息为:UserBehavior.csv
本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
列名称 | 说明 |
用户ID | 整数类型,序列化后的用户ID |
商品ID | 整数类型,序列化后的商品ID |
商品类目ID | 整数类型,序列化后的商品所属类目ID |
行为类型 | 字符串,枚举类型,包括('pv', 'buy', 'cart', 'fav') |
时间戳 | 行为发生的时间戳 |
注意到,用户行为类型共有四种,它们分别是:
行为类型 | 说明 |
pv | 商品详情页pv,等价于点击 |
buy | 商品购买 |
cart | 将商品加入购物车 |
fav | 收藏商品 |
二、数据导入与初步分析
1. 数据导入
import polars as pl path='UserBehavior.csv' df=pl.read_csv(path) df
这个导入有点暴力了,直接急性API了,如果想用Lazy模式,可以使用以下语句:
import polars as pl path='UserBehavior.csv' df=pl.scan_csv(path,with_column_names=lambda _:['用户ID','商品ID','商品类目ID','行为类型','时间戳'],) df.collect()
导入的数据如下:
重新命名一下:
df1=df.rename({'1': '用户ID','2268318':'商品ID','2520377':'商品类目ID', 'pv':'行为类型', '1511544070':'时间戳'})df1
2. 数据集的各列维度
#用户数量IDnum=len(df1.select(pl.col('用户ID').unique()))print(IDnum)#商品数量Mnum=len(df1.select(pl.col('商品ID').unique()))print(Mnum)#商品类目数量MInum=len(df1.select(pl.col('商品类目ID').unique()))print(MInum)
运行结果为:用户数量:987994;商品数量:4162024;商品类目数量:9439,与数据集中一致。
3. 时间戳的转换
我们使用datatime对时间戳这一列进行转换。Polars中时间戳与datatime之间的转换详见一文读懂Polars中的时间处理:从字符串到时间戳的转换秘籍!
import datetime#时间戳那一栏乘以1000,df1 = df1.with_columns(pl.col("时间戳")*1000000)#将时间戳转换为Datetime类型df1 = df1.with_columns( pl.col("时间戳").cast(pl.Datetime(time_zone="Asia/Shanghai")))df1
运行结果为:
时间戳这一列变正常了(本数据集包含了2017年11月25日至2017年12月3日之间),完美符合,下面我们把日期和小时数提取出来。
df1=df1.with_columns(pl.col("时间戳").dt.date().alias("日期"), pl.col('时间戳').dt.hour().alias('小时'))df1
好了,这下整个数据集变的更顺眼、醒目了,想保存一下的话可以试试保存保存:
df1.write_csv('111.csv')
7.16GB啊,呵呵呵!
三、小结
本期,我们用Polars对阿里——淘宝用户购物行为数据集进行了初步导入及简单分析,验证了Polars确实对于大数据集的处理具有独特的优势,后面,我们将用Polars对其中的数据进行相关分析。
未完待续,敬请期待!