对标大厂数据分析流程:基于大数据的快手用户活跃度分析系统,让你的毕设项目更具含金量

54 阅读8分钟

💖💖作者:计算机编程小央姐 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜

💕💕文末获取源码

@TOC

基于大数据的快手用户活跃度分析系统,让你的毕设项目更具含金量-系统功能介绍

《基于大数据的快手平台用户活跃度分析系统》旨在模拟并实践一套完整的大厂级数据分析流程。本系统并非一个传统的业务管理软件,其核心价值在于后端强大的数据处理与分析能力。技术架构上,我们采用Hadoop HDFS作为分布式文件系统来存储海量的用户行为日志数据,利用Spark作为核心计算引擎,通过其内存计算的优势高速处理和分析数据。后端服务我们选择Java语言结合SpringBoot框架,构建稳定高效的API接口,负责调度数据处理任务并将分析结果返回给前端。前端则采用Vue全家桶技术,配合Echarts图表库,将复杂的数据分析结果以直观、动态、可交互的仪表盘(Dashboard)形式进行可视化呈现。整个系统打通了从数据存储、数据清洗、分布式计算、多维度分析到最终可视化展现的全链路,具体实现了包括平台整体活跃度评估、基于性别与操作系统的用户画像对比、全国高校及省份的活跃度排行与地理空间分析,乃至利用简单的机器学习算法进行用户分群等四大维度十余项核心分析功能,为理解大学生群体的短视频使用行为提供了数据驱动的决策支持,也完整地锻炼了从零到一构建一个大数据分析项目的综合能力。

基于大数据的快手用户活跃度分析系统,让你的毕设项目更具含金量-系统技术介绍

大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 开发语言:Python+Java(两个版本都支持) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy 数据库:MySQL

基于大数据的快手用户活跃度分析系统,让你的毕设项目更具含金量-系统背景意义

现在短视频早就不是什么新鲜事儿了,它已经完全融入了我们,特别是大学生群体的日常生活里。像快手这样的平台,每天都会产生山一样多的数据,这些数据不仅仅是简单的数字,背后其实藏着大量关于用户行为、兴趣偏好和使用习惯的信息。以前我们做毕设,可能做一个小商城就够了,但现在数据量这么大,传统的单机MySQL数据库处理起来会非常吃力,甚至根本处理不了。这就引出了一个新的问题:怎么才能高效、准确地从这些海量数据里挖出有价值的东西呢?这时候,大数据技术就派上用场了。所以,这个课题的背景就是基于这样一个真实的技术需求,我们不再局限于简单的增删改查,而是尝试用像Hadoop和Spark这些在工业界已经很成熟的技术,去解决一个真实世界里存在的数据分析问题,也就是分析快手在大学生用户中的活跃度状况,这让我们的毕业设计更有挑战性,也更贴近当前的技术发展趋势。说实话,做这个毕业设计,对我自己来说,最大的意义可能就是一次非常宝贵的实践机会。它让我不再是纸上谈兵地去了解Hadoop和Spark是什么,而是亲手去配置环境、编写代码,把一个完整的大数据处理流程跑通。从最开始的数据采集、存到HDFS里,然后用Spark SQL去做各种清洗、转换和聚合计算,最后把结果给到前端展示,这个过程让我对大数据技术栈的理解深刻了很多。同时,这个项目也锻炼了我的数据分析思维。它不只是写代码就完事了,我还需要去思考从哪些维度去分析数据才是有意义的,比如为什么要去对比不同省份的活跃度,或者为什么要去分析异地和本地学生的差异。这种从业务需求出发,再用技术去实现的能力,我觉得比单纯会用某个框架要重要得多。当然,这个系统本身也能提供一些挺有意思的洞察,比如哪个省份的大学生最爱用快手,或者用iOS和安卓的同学活跃度有没有差别,这些分析结果虽然只是基于我们拿到的数据,但也算是一次有价值的数据探索,算是对自己大学四年专业知识的一个不错的总结和交代。

基于大数据的快手用户活跃度分析系统,让你的毕设项目更具含金量-系统演示视频

演示视频

基于大数据的快手用户活跃度分析系统,让你的毕设项目更具含金量-系统演示图片

在这里插入图片描述转存失败,建议直接上传图片文件 在这里插入图片描述转存失败,建议直接上传图片文件 在这里插入图片描述转存失败,建议直接上传图片文件 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

基于大数据的快手用户活跃度分析系统,让你的毕设项目更具含金量-系统部分代码


from pyspark.sql import SparkSession
from pyspark.sql.functions import col, when, sum as _sum, avg as _avg, count as _count
from pyspark.ml.feature import VectorAssembler, StringIndexer
from pyspark.ml.clustering import KMeans
from pyspark.sql.types import DoubleType
# 初始化SparkSession,这是所有Spark应用的入口点
spark = SparkSession.builder \
    .appName("KuaishouUserActivityAnalysis") \
    .master("local[*]") \
    .getOrCreate()
# 假设数据已从HDFS加载到名为df的DataFrame中
# df.show() # 示例数据结构: student_num, near_week_active_days, school_province, gender, os_type
# df = spark.read.csv("hdfs://namenode:9000/path/to/your/data.csv", header=True, inferSchema=True)
# 为了演示,我们创建一个虚拟的DataFrame
data = [(100, 7, "北京", "男", "iOS"), (200, 2, "上海", "女", "Android"),
        (50, 5, "北京", "女", "iOS"), (150, 6, "广东", "男", "Android"),
        (80, 1, "上海", "男", "Android"), (120, 4, "广东", "女", "iOS")]
columns = ["student_num", "near_week_active_days", "school_province", "gender", "os_type"]
df = spark.createDataFrame(data, columns)
# --- 核心功能1: 平台用户活跃度等级分布 ---
# 根据近一周活跃天数划分高、中、低活跃度等级
# 7天为高活跃,3-6天为中活跃,1-2天为低活跃
# 使用when().otherwise()链式调用来创建新列'activity_level'
df_with_level = df.withColumn("activity_level",
    when(col("near_week_active_days") == 7, "高活跃用户")
    .when((col("near_week_active_days") >= 3) & (col("near_week_active_days") <= 6), "中活跃用户")
    .otherwise("低活跃用户")
)
# 按活跃度等级分组,并计算每个等级的总学生人数
activity_level_distribution = df_with_level.groupBy("activity_level") \
    .agg(_sum("student_num").alias("total_students")) \
    .orderBy(col("total_students").desc())
print("--- 1. 用户活跃度等级分布 ---")
activity_level_distribution.show()
# --- 核心功能2: 全国各省份用户活跃度分析(计算加权平均活跃天数) ---
# 加权平均活跃天数 = SUM(每个学校的活跃天数 * 该校学生数) / SUM(总学生数)
# 首先计算每个记录的“总活跃天数”
df_with_total_active_days = df.withColumn("total_active_days", col("near_week_active_days") * col("student_num"))
# 按省份分组,同时计算总活跃天数之和与总学生数之和
province_activity_stats = df_with_total_active_days.groupBy("school_province") \
    .agg(
        _sum("total_active_days").alias("sum_total_active_days"),
        _sum("student_num").alias("total_students_in_province")
    )
# 计算最终的加权平均活跃天数
province_weighted_avg_activity = province_activity_stats.withColumn(
    "weighted_avg_active_days",
    col("sum_total_active_days") / col("total_students_in_province")
).select("school_province", "weighted_avg_active_days").orderBy(col("weighted_avg_active_days").desc())
print("--- 2. 各省份用户加权平均活跃度 ---")
province_weighted_avg_activity.show()
# --- 核心功能3: 用户分群聚类分析 (K-Means) ---
# K-Means需要数值型特征,我们将分类特征(性别、操作系统)转换为数值
# 使用StringIndexer将字符串列转换为索引列
gender_indexer = StringIndexer(inputCol="gender", outputCol="gender_index")
os_indexer = StringIndexer(inputCol="os_type", outputCol="os_index")
df_indexed = gender_indexer.fit(df).transform(df)
df_indexed = os_indexer.fit(df_indexed).transform(df_indexed)
# 将所有需要参与聚类的特征合并为一个特征向量
# 特征选择:近一周活跃天数、性别索引、操作系统索引
assembler = VectorAssembler(
    inputCols=["near_week_active_days", "gender_index", "os_index"],
    outputCol="features"
)
df_vector = assembler.transform(df_indexed)
# 创建KMeans模型实例,设定聚类数量k=3
kmeans = KMeans(k=3, seed=1, featuresCol="features", predictionCol="cluster_id")
# 训练模型
model = kmeans.fit(df_vector)
# 使用模型对数据进行预测,生成带有聚类ID的新DataFrame
clustered_df = model.transform(df_vector)
print("--- 3. 用户K-Means聚类结果 ---")
# 显示聚类结果,选取关键列
clustered_df.select("student_num", "near_week_active_days", "gender", "os_type", "cluster_id").show()
# 停止SparkSession
spark.stop()

基于大数据的快手用户活跃度分析系统,让你的毕设项目更具含金量-结语

💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。