项目简介
项目数据集是一个音乐服务的用户日志,包含了用户信息,歌曲信息,用户活动,时间戳等。大小128M。需要通过数据集中信息,预测出可能流失的用户,以便后续对相应用户采取挽留措施
项目思路
为了预测可能流失的用户,对日志进行分析,探索并提取与用户流失相关的变量;根据变量,使用Spark建立机器学习模型进行预测。具如下:
1.加载所需的库并实例化
2.加载与清洗数据
3.探索性数据分析
4.构建预特征
5.建模预测
6.结论汇总
项目实现
1.加载所需的库并实例化
加载所需的库:
项目涉及的库
1、pyspark.sql:进行类似SQL操作
2、pyspark.ml:进行机器学习
3、pandas 、numpy:对dataframe操作
4、matplotlib、seaborn: 绘图
5、time:记录代码块运行时间的库
实例化
spark=SparkSession.builder.getOrCreate()
2.加载与清洗数据
加载数据集
原始数据集是json格式,由于需上传github,压缩为bz2格式。
df=spark.read.json('mini_sparkify_event_data.json.bz2')
评估数据集
对数据先查看整体情况,再查看重点希望了解的列的情况。
1、查看整体情况:
(1)查看数据前几行的值,了解数据集概况,对数据集有整体认识。主要使用show()函数
(2)查看列数、每列的名称以及类型,并结合以上了解每列的含义。主要使用printSchema()函数
(3)查看数据行数。主要使用.count()函数
通过以上观察,我们可了解到:数据集共有286500行,18列;主要包含了用户信息,歌曲信息,用户活动,时间戳等信息。变量含义推测如下:
|-- artist: string (歌手)
|-- auth: string (含义暂不明确)
|-- firstName: string (名字)
|-- gender: string (性别)
|-- itemInSession: long (含义暂不明确)
|-- lastName: string (姓氏)
|-- length: double (听歌时长)
|-- level: string (等级)
|-- location: string (地区)
|-- method: string (具体含义暂不明确)
|-- page: string (页面)
|-- registration: long (注册时间)
|-- sessionId: long (页面ID)
|-- song: string (歌名)
|-- status: long (含义暂不明确)
|-- ts: long (含义暂不明确)
|-- userAgent: string (用户使用平台信息)
|-- userId: string (用户ID)
2、查看某一列的值分布:
通过dropDuplicates()去重查看唯一值;sort对于有数值的进行排序,便于查看
df.select('userId').dropDuplicates().sort('userId').show()
+------+
|userId|
+------+
| |
| 10|
| 100|
|100001|
|100002|
+------+
only showing top 5 rows
通过对各列进行查看,我们发现:
userId列存在非NA的空值,需要删除
清理数据集
处理空值
先通过dropna(),处理userId、sessionId列空值;
df_clean=df.dropna(how="any",subset=[