一、个人简介
💖💖作者:计算机编程果茶熊
💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
计算机毕业设计选题
💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
大数据框架:Hadoop+Spark(Hive需要定制修改)
开发语言:Java+Python(两个版本都支持)
数据库:MySQL
后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持)
前端:Vue+Echarts+HTML+CSS+JavaScript+jQuery
本《淘宝电商用户行为数据分析与可视化系统》是一个基于B/S架构并采用前后端分离模式开发的综合性数据平台。系统后端技术核心为Python语言与Django框架,负责业务逻辑处理与API接口服务,并深度整合了Hadoop与Spark大数据生态系统。具体而言,系统利用HDFS作为海量淘宝用户行为日志的分布式存储方案,借助Spark及其核心组件Spark SQL进行高效、可扩展的分布式计算与复杂查询,同时结合Pandas和NumPy库对数据进行灵活的预处理、清洗与结构化操作,所有数据分析任务均在Spark集群上完成。分析后的结构化数据存储于MySQL数据库,并通过Django构建的RESTful API向前端提供服务。系统前端则基于Vue全家桶进行开发,利用ElementUI构建了统一、美观且响应式的用户交互界面,最终通过强大的Echarts图表库,将网站流量、用户消费路径、商品热度转化、用户价值分群等多个维度的分析结果,以动态、直观、多样的可视化图表形式呈现在大屏看板上,旨在为电商运营者提供一个从数据洞察到决策支持的一站式解决方案。
三、视频解说
【大数据】淘宝电商用户行为数据分析与可视化系统 计算机毕业设计项目 Hadoop+Spark环境配置 数据科学与大数据技术 附源码+文档+讲解
四、部分功能展示
五、部分代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, when, lit, max as spark_max
from django.http import JsonResponse
# 初始化SparkSession,这是与大数据框架交互的入口
# 在实际Django项目中,这个SparkSession实例通常会作为全局变量或在应用启动时初始化
spark = SparkSession.builder \
.appName("TaobaoBehaviorAnalysis") \
.master("local[*]") \
.getOrCreate()
# 假设这是Django视图函数中的代码
def get_traffic_analysis(request):
"""
核心功能一:网站流量行为分析
计算总体的PV(页面浏览量)、UV(独立访客数)以及分时段的PV,用于观察流量高峰
"""
# 1. 从HDFS读取数据创建DataFrame
df = spark.read.csv("hdfs://namenode:9000/taobao_data/user_behavior.csv", header=True, inferSchema=True) \
.toDF("user_id", "item_id", "category_id", "behavior_type", "timestamp")
# 2. 缓存DataFrame以提高后续计算性能
df.cache()
# 3. 计算PV:筛选出行为类型为'pv'的记录并计数
pv_count = df.filter(df.behavior_type == 'pv').count()
# 4. 计算UV:对用户ID进行去重并计数
uv_count = df.select("user_id").distinct().count()
# 5. 增加时间处理,计算每小时的PV量
from pyspark.sql.functions import from_unixtime, hour
hourly_pv = df.filter(df.behavior_type == 'pv') \
.withColumn("hour", hour(from_unixtime(col("timestamp")))) \
.groupBy("hour") \
.count() \
.orderBy("hour") \
.collect()
# 6. 格式化小时PV数据以便前端Echarts使用
hourly_data = [{"hour": row['hour'], "pv": row['count']} for row in hourly_pv]
# 7. 释放缓存
df.unpersist()
# 8. 组装最终结果
result = {
"total_pv": pv_count,
"total_uv": uv_count,
"hourly_pv": hourly_data
}
# 9. 以JSON格式返回给前端
return JsonResponse(result, status=200)
def get_product_conversion_analysis(request):
"""
核心功能二:商品热度转化分析
分析用户从浏览(pv)到加购(cart)、收藏(fav),最终到购买(buy)的行为转化漏斗
"""
# 1. 从HDFS读取数据
df = spark.read.csv("hdfs://namenode:9000/taobao_data/user_behavior.csv", header=True, inferSchema=True) \
.toDF("user_id", "item_id", "category_id", "behavior_type", "timestamp")
# 2. 使用Spark SQL进行聚合统计,计算各个行为类型的总次数
df.createOrReplaceTempView("user_behavior")
conversion_counts_df = spark.sql("""
SELECT
COUNT(CASE WHEN behavior_type = 'pv' THEN 1 END) as view_count,
COUNT(CASE WHEN behavior_type = 'cart' THEN 1 END) as cart_count,
COUNT(CASE WHEN behavior_type = 'fav' THEN 1 END) as fav_count,
COUNT(CASE WHEN behavior_type = 'buy' THEN 1 END) as buy_count
FROM user_behavior
""")
# 3. 获取计算结果
counts = conversion_counts_df.first()
view_count = counts['view_count']
cart_count = counts['cart_count']
fav_count = counts['fav_count']
buy_count = counts['buy_count']
# 4. 计算转化率,避免除以零的错误
view_to_cart_rate = (cart_count / view_count) * 100 if view_count > 0 else 0
cart_to_buy_rate = (buy_count / cart_count) * 100 if cart_count > 0 else 0
view_to_buy_rate = (buy_count / view_count) * 100 if view_count > 0 else 0
# 5. 准备漏斗图所需的数据结构
funnel_data = [
{"value": view_count, "name": "浏览"},
{"value": cart_count + fav_count, "name": "加购/收藏"},
{"value": buy_count, "name": "购买"}
]
# 6. 组装最终返回的JSON数据
result = {
"funnel_data": funnel_data,
"metrics": {
"view_count": view_count,
"cart_count": cart_count,
"fav_count": fav_count,
"buy_count": buy_count,
"view_to_cart_rate": round(view_to_cart_rate, 2),
"cart_to_buy_rate": round(cart_to_buy_rate, 2),
"overall_conversion_rate": round(view_to_buy_rate, 2)
}
}
return JsonResponse(result, status=200)
def get_user_value_segmentation(request):
"""
核心功能三:用户价值分群分析 (RFM模型简化版,因数据无金额M,使用RF模型)
R(Recency): 最近一次消费时间, F(Frequency): 消费频率
"""
# 1. 加载数据
df = spark.read.csv("hdfs://namenode:9000/taobao_data/user_behavior.csv", header=True, inferSchema=True) \
.toDF("user_id", "item_id", "category_id", "behavior_type", "timestamp")
# 2. 找到整个数据集中的最近日期,作为计算Recency的基准点
max_timestamp = df.select(spark_max(col("timestamp"))).first()[0]
# 3. 计算F值:统计每个用户'buy'行为的次数
frequency_df = df.filter(col("behavior_type") == 'buy') \
.groupBy("user_id") \
.agg(count("*").alias("frequency"))
# 4. 计算R值:计算每个用户最近一次行为(不限类型)距今的天数
recency_df = df.groupBy("user_id") \
.agg(spark_max("timestamp").alias("last_action_ts")) \
.withColumn("recency", (lit(max_timestamp) - col("last_action_ts")) / (24 * 3600))
# 5. 将R和F两个DataFrame合并,对于没有购买记录的用户,F值填充为0
rf_df = recency_df.join(frequency_df, "user_id", "left_outer").na.fill(0, ["frequency"])
# 6. 根据R和F的中位数或平均值进行打分(这里用简化的静态阈值)
r_avg = rf_df.selectExpr("percentile_approx(recency, 0.5)").first()[0]
f_avg = rf_df.selectExpr("percentile_approx(frequency, 0.5)").first()[0]
# 7. 计算R分数和F分数
rf_scored_df = rf_df.withColumn("r_score", when(col("recency") <= r_avg, 2).otherwise(1)) \
.withColumn("f_score", when(col("frequency") >= f_avg, 2).otherwise(1))
# 8. 根据RF分数进行用户分群
def segment_user(r, f):
if r == 2 and f == 2: return "高价值用户"
if r == 1 and f == 2: return "需挽留的核心用户"
if r == 2 and f == 1: return "有潜力的新用户"
if r == 1 and f == 1: return "低价值或流失用户"
return "未知"
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
segment_udf = udf(segment_user, StringType())
segmented_df = rf_scored_df.withColumn("segment", segment_udf(col("r_score"), col("f_score")))
# 9. 统计每个分群的用户数量
segment_distribution = segmented_df.groupBy("segment").count().collect()
# 10. 格式化结果以供前端使用
chart_data = [{"name": row["segment"], "value": row["count"]} for row in segment_distribution if row["segment"]]
result = {
"title": "用户价值分群RF模型",
"distribution": chart_data
}
return JsonResponse(result, status=200)
六、部分文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊