淘宝用户行为分析-用Spark进行用户行为分析

文章详细介绍了对淘宝用户购物行为数据集的处理过程,包括数据清洗、时间戳转换、数据截取等步骤。然后利用Spark的RDD和DataFrameAPI,以及SQL查询,完成了数据集的基本统计分析,如用户数、商品数、行为类型分布、转化率和漏斗分析等,为后续的深度挖掘和建模提供了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据下载与理解

  • 淘宝用户购物行为数据集https://tianchi.aliyun.com/dataset/649
  • 完整数据文件UserBehavior.csv,3.42G
  • 小测试文件 UserBehaviorSmall.csv 18M
  • 小测试文件用于测试与练习,最后提交的计算用完整的数据文件。
  • 数据集包含了约一亿条随机用户的所有行为。数据集的每一行表示一条用户行为:用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。
  • 行为类型:点击pv、购买buy、加购cart、fav收藏

2.数据预处理:

  1. 原始文件时间戳数据转换为datetime类型,能按日期和时间进行查找。

import numpy as np

import pandas as pd

import matplotlib as  mpl

from matplotlib import pyplot as plt

import seaborn as sns

import warnings

import matplotlib.dates as mdates

from datetime import timedelta

warnings.filterwarnings('ignore')

mpl.rcParams["font.family"] = "SimHei"

mpl.rcParams["axes.unicode_minus"]=False

import datetime

import time

读文件

df=pd.read_csv(r"D:\virtual\sharefile\UserBehavior.csv",header=None,names=['userId','goodsId','goodsTypeID','behaviorType','timeStamp'])

转换时间格式

df['timeStamp']=pd.to_datetime(df['timeStamp'],unit='s')

df['date']=df['timeStamp'].dt.date

df['hour']=df['timeStamp'].dt.time

删除timeStamp列

df=df.drop('timeStamp',axis=1)

截取2017.11.25到2017.12.3时间的数据

temp=df['date']=df['date'][(df['date']>=datetime.date(2017,11,25))(df['date']<=datetime.date(2017,12,3))]

  1. 删除不正常数据(例如日期不是2017年的)

检查是否存在缺失数据。

检查是否存在重复数据并去重

检查时间戳列中是否存在异常数据,获取并删除所有异常数据

删除date数据为nan的

df = df.dropna(axis=0, how='any')

保存

temp.to_csv('./UserBehaviorSample.csv')

  1. 字段解析
  2. 生成RDD

rdd=sc.textFile(r'D:\virtual\sharefile\UserBehaviorSample.csv').map(lambda line:line.split(',')).map(lambda line:[int(line[0]),int(line[1]),int(line[2]),line[3],line[4],int(line[5])])

  1. 生成DataFrame

df=rdd.toDF(['user_id','product_id','category_id','action','date','hour'])

  1. 生成SQL临时表

3.用Spark RDD操作、Spark SQL DataFrame操作和SQL语句三种方法完成以下数据分析。

示例:

问题1):Tom选修的科目和考分

(1)RDD操作:spark.sql('select * from scs where name== "Tom" ')

(2)DF操作:df.where('name=="Tom"')

(3)SQL语句:spark.sql('select * from scs where name== "Tom" ')

1)数据整体概况:数据集中有多少条记录,有多少个用户,有多少件商品,有多少个商品类别,记录了多少个日期的数据。

(1)RDD操作:

数据集中有多少条记录

rdd.count()

有多少个用户

rdd.map(lambda x: x[0]).distinct().count()

有多少件商品

rdd.map(lambda x: x[1]).distinct().count()

有多少个商品类别

rdd.map(lambda x: x[2]).distinct().count()

记录了多少个日期的数据。

rdd.map(lambda x: x[4]).distinct().count()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值