💖💖作者:IT跃迁谷毕设展 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 Java实战项目集 微信小程序实战项目集 Python实战项目集 安卓Android实战项目集 大数据实战项目集
💕💕文末获取源码
@TOC
基于Hadoop+Spark的豆瓣高分电影数据可视化分析系统-功能介绍
基于Hadoop+Spark的豆瓣高分电影数据可视化分析系统是一个集成大数据处理、机器学习分析和前端可视化展示的综合性数据分析平台。该系统采用Hadoop分布式文件系统存储豆瓣高分电影数据,通过Spark分布式计算框架进行数据预处理和深度分析,运用Python数据科学库实现15种维度的统计分析功能,包括电影评分分布、类型热门度、制片国家分布、年份趋势、导演作品统计、主演影响力等多角度数据挖掘。系统后端基于Django框架构建RESTful API接口,前端采用Vue+ElementUI+ECharts技术栈实现交互式数据可视化界面,支持柱状图、折线图、饼图、散点图等多种图表类型。整个系统具备完整的数据上传、预处理、分析计算、结果存储和可视化展示流程,能够处理复杂的非结构化文本数据,提取导演、主演、类型、国家等关键信息,并运用K-means聚类算法识别不同类型的高分电影群体,为用户提供全方位的电影数据洞察和决策支持。
基于Hadoop+Spark的豆瓣高分电影数据可视化分析系统-选题背景意义
随着流媒体平台的快速发展和观影习惯的数字化转变,电影产业正经历着前所未有的数据化变革。豆瓣作为国内最具影响力的文化评分平台,积累了海量的电影评价数据,这些数据蕴含着观众偏好、市场趋势、作品质量等丰富信息。传统的电影分析往往依赖人工统计和小样本调研,难以处理大规模数据集,也无法深入挖掘数据背后的复杂关联关系。大数据技术的成熟为解决这一问题提供了新的思路,Hadoop生态系统能够高效存储和处理TB级别的非结构化数据,Spark框架则在内存计算和机器学习方面表现出色。电影数据分析作为典型的大数据应用场景,需要处理文本解析、多维度统计、趋势预测等复杂任务,正适合运用分布式计算技术来解决。 本课题的研究意义体现在理论探索和实践应用两个方面。在理论层面,通过构建完整的电影数据分析框架,探索了大数据技术在文化娱乐领域的应用模式,验证了Hadoop+Spark技术栈处理中文文本数据和多维度关联分析的可行性,为类似的文化数据挖掘项目提供了参考范例。在实践层面,系统能够为电影爱好者提供基于数据的观影推荐,帮助他们发现符合个人偏好的优质作品;对于影视从业者而言,分析结果可以揭示市场偏好趋势、成功作品特征、优秀创作者表现等商业价值信息,为投资决策和创作方向提供数据支撑;对于学术研究者,系统提供的多维度分析功能可以辅助电影学、传播学等领域的定量研究工作。同时,作为一个毕业设计项目,它也展现了大数据技术与具体业务场景结合的工程实践能力,体现了理论知识向实际应用转化的学习成果。
基于Hadoop+Spark的豆瓣高分电影数据可视化分析系统-技术选型
大数据框架: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
基于Hadoop+Spark的豆瓣高分电影数据可视化分析系统-视频展示
基于Hadoop+Spark的豆瓣高分电影数据可视化分析系统-图片展示
基于Hadoop+Spark的豆瓣高分电影数据可视化分析系统-代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
from pyspark.ml.clustering import KMeans
from pyspark.ml.feature import VectorAssembler
import pandas as pd
import numpy as np
spark = SparkSession.builder.appName("DoubanMovieAnalysis").config("spark.sql.adaptive.enabled", "true").getOrCreate()
def movie_score_distribution_analysis():
df = spark.read.csv("hdfs://localhost:9000/douban/movies.csv", header=True, inferSchema=True)
score_ranges = [
(8.0, 8.5, "8.0-8.5"),
(8.5, 9.0, "8.5-9.0"),
(9.0, 9.5, "9.0-9.5"),
(9.5, 10.0, "9.5-10.0")
]
results = []
total_count = df.count()
for min_score, max_score, range_name in score_ranges:
count = df.filter((col("评分") >= min_score) & (col("评分") < max_score)).count()
percentage = round((count / total_count) * 100, 2)
avg_score = df.filter((col("评分") >= min_score) & (col("评分") < max_score)).agg(avg("评分").alias("avg_score")).collect()[0]["avg_score"]
avg_score = round(avg_score, 2) if avg_score else 0
results.append((range_name, count, percentage, avg_score))
result_df = spark.createDataFrame(results, ["score_range", "movie_count", "percentage", "avg_score"])
result_df.coalesce(1).write.mode("overwrite").option("header", "true").csv("hdfs://localhost:9000/analysis_results/score_distribution_analysis")
pandas_df = result_df.toPandas()
pandas_df.to_csv("/home/analysis/score_distribution_analysis.csv", index=False, encoding="utf-8")
return result_df
def movie_type_popularity_analysis():
df = spark.read.csv("hdfs://localhost:9000/douban/movies.csv", header=True, inferSchema=True)
df_with_types = df.withColumn("types_array", split(regexp_extract(col("人员"), r"类型:\s*([^/]+(?:/[^/]+)*)", 1), "/"))
types_exploded = df_with_types.select(explode("types_array").alias("movie_type")).filter(col("movie_type") != "")
type_counts = types_exploded.groupBy("movie_type").count().orderBy(desc("count"))
total_movies = df.count()
type_stats = type_counts.withColumn("percentage", round((col("count") / total_movies) * 100, 2))
avg_scores = df_with_types.select(explode("types_array").alias("movie_type"), col("评分")).filter(col("movie_type") != "").groupBy("movie_type").agg(avg("评分").alias("avg_score"), count("*").alias("type_count"))
final_result = type_stats.join(avg_scores, "movie_type", "inner")
final_result = final_result.withColumn("avg_score", round(col("avg_score"), 2))
final_result = final_result.select("movie_type", "count", "percentage", "avg_score").orderBy(desc("count"))
final_result.coalesce(1).write.mode("overwrite").option("header", "true").csv("hdfs://localhost:9000/analysis_results/type_popularity_analysis")
pandas_df = final_result.toPandas()
pandas_df.to_csv("/home/analysis/type_popularity_analysis.csv", index=False, encoding="utf-8")
return final_result
def movie_clustering_analysis():
df = spark.read.csv("hdfs://localhost:9000/douban/movies.csv", header=True, inferSchema=True)
df_processed = df.withColumn("year", regexp_extract(col("人员"), r"(\d{4})", 1).cast("int"))
df_processed = df_processed.withColumn("duration", regexp_extract(col("时长"), r"(\d+)分钟", 1).cast("int"))
df_processed = df_processed.filter((col("year").isNotNull()) & (col("duration").isNotNull()) & (col("评分").isNotNull()) & (col("评价数").isNotNull()))
df_processed = df_processed.fillna({"year": 0, "duration": 0, "评分": 0, "评价数": 0})
feature_cols = ["评分", "评价数", "year", "duration"]
assembler = VectorAssembler(inputCols=feature_cols, outputCol="features")
df_features = assembler.transform(df_processed)
kmeans = KMeans(k=4, seed=42, featuresCol="features", predictionCol="cluster")
model = kmeans.fit(df_features)
predictions = model.transform(df_features)
cluster_stats = predictions.groupBy("cluster").agg(
count("*").alias("movie_count"),
avg("评分").alias("avg_score"),
avg("评价数").alias("avg_reviews"),
avg("year").alias("avg_year"),
avg("duration").alias("avg_duration")
)
cluster_stats = cluster_stats.withColumn("avg_score", round(col("avg_score"), 2))
cluster_stats = cluster_stats.withColumn("avg_reviews", round(col("avg_reviews"), 2))
cluster_stats = cluster_stats.withColumn("avg_year", round(col("avg_year"), 0))
cluster_stats = cluster_stats.withColumn("avg_duration", round(col("avg_duration"), 0))
cluster_descriptions = cluster_stats.withColumn("cluster_description",
when(col("cluster") == 0, "经典高分长片群体")
.when(col("cluster") == 1, "现代热门电影群体")
.when(col("cluster") == 2, "小众精品电影群体")
.otherwise("大众娱乐电影群体")
)
final_result = cluster_descriptions.select("cluster", "cluster_description", "movie_count", "avg_score", "avg_reviews", "avg_year", "avg_duration").orderBy("cluster")
final_result.coalesce(1).write.mode("overwrite").option("header", "true").csv("hdfs://localhost:9000/analysis_results/clustering_analysis")
pandas_df = final_result.toPandas()
pandas_df.to_csv("/home/analysis/clustering_analysis.csv", index=False, encoding="utf-8")
return final_result
基于Hadoop+Spark的豆瓣高分电影数据可视化分析系统-结语
💕💕 Java实战项目集 微信小程序实战项目集 Python实战项目集 安卓Android实战项目集 大数据实战项目集 💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。