【15个分析维度】用Hadoop+Spark+Python,3步搭建豆瓣高分电影数据分析系统 毕业设计 选题推荐 毕设选题 数据分析

76 阅读7分钟

豆瓣高分电影数据可视化分析系统-简介

本系统全称为“基于Hadoop+Spark的豆瓣高分电影数据可视化分析系统”,它是一个旨在解决海量电影数据处理与价值挖掘问题的综合性平台。面对豆瓣电影上日益庞大的电影条目、用户评分、评论以及演员导演信息,传统的数据处理方式已显得力不从心。为此,本系统构建了一套完整的大数据处理与分析流水线。首先,通过定制化的网络爬虫技术从豆瓣电影网站定向采集高分电影的多维度数据,包括但不限于电影的基本信息、评分分布、类型标签、导演演员阵容以及热门短评等。采集到的原始数据被统一存储在Hadoop分布式文件系统(HDFS)中,利用其高容错性和高吞吐量的特性,为后续的大规模计算提供一个稳定可靠的数据仓库。接着,系统的核心计算层引入了Apache Spark这一先进的内存计算框架,凭借其强大的RDD(弹性分布式数据集)模型和高效的DAG(有向无环图)执行引擎,对存储于HDFS中的海量数据进行快速的清洗、转换、聚合与深度分析。分析任务涵盖了电影类型的热门程度与评分关联分析、高产/高分导演与演员的挖掘、用户评论情感倾向的判断以及关键词词云的生成等。最后,所有经过Spark处理分析得出的结构化结果数据,将被推送至前端,通过ECharts等现代化数据可视化图表库,以动态、交互式的图表形式(如柱状图、饼图、散点图、关系网络图和词云图)直观地呈现在用户面前,让用户可以轻松地通过点击、筛选等操作,从多个维度探索和洞察高分电影背后的趣味规律与商业价值,真正实现了从原始数据到可视化洞见的端到端转换。

豆瓣高分电影数据可视化分析系统-技术

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

豆瓣高分电影数据可视化分析系统-背景

现在咱们想找部好电影看,很多人下意识就会打开豆瓣,看看评分和大家的评论。时间长了,豆瓣上积累的电影数据多得吓人,每部电影都有自己的类型、导演、演员,还有成千上万条观众的评价。这些信息零散地看,能帮我们判断一部电影好不好看,但如果把它们整合起来,其实能发现很多更有意思的东西。比如,是不是某个类型的电影就特别容易出高分?哪些导演或者演员组合是“票房灵药”?观众们在讨论一部好电影时,最常提到的关键词又是什么?靠人脑去想或者用Excel去算是完全不可能的,数据量太大了。所以,这个课题的想法就挺自然的,就是想用现在比较火的大数据技术,比如Hadoop和Spark,把这些海量、杂乱的电影数据给它系统地处理一下,看看能不能挖出一些好玩的规律来,把这些看不见的数据关系变成看得见的图表。

说实在的,就一个毕业设计而言,这个系统的意义可能谈不上多么颠覆行业,但它在几个方面的价值还是挺实在的。对咱们普通影迷来讲,它提供了一个了解电影的新鲜角度,不仅仅是看单个电影的评分,而是能看到整个电影市场的宏观趋势,比如哪类题材正在崛起,或者帮你发现一些被低估的宝藏演员。对我自己来说,这个项目更是一个把理论知识用起来的绝佳机会,把课堂上学的Hadoop、Spark这些听起来很厉害的技术,亲手搭起来,处理真实世界的数据,这个过程本身就是一种非常有价值的锻炼。从技术展示的角度看,这个系统也算是一个完整的大数据应用小案例,它涵盖了从数据抓取、存储、计算分析到最后可视化呈现的全过程,能清晰地展示出大数据技术是怎么把一堆原始数字变成有价值信息的。总的来说,它的意义更多是体现在实践层面,把复杂的技术应用在一个有趣的话题上,让数据说话,变得直观又好玩。

豆瓣高分电影数据可视化分析系统-图片展示

QQ20251028-155840.png

QQ20251028-155959.png

QQ20251028-160021.png

QQ20251028-160044.png

QQ20251028-160107.png

QQ20251028-160125.png

QQ20251028-160141.png

QQ20251028-160205.png

QQ20251028-160349.png

豆瓣高分电影数据可视化分析系统-代码展示

from pyspark.sql.functions import col, split, explode, lower, regexp_replace, avg, count, desc
# 假设有一个包含常用停用词的列表
stop_words = ["的", "了", "在", "是", "我", "你", "他", "她", "它", "我们", "你们", "他们", "这部", "这个", "电影", "一个", "一部", "和", "与", "也", "都", "还", "就", "但", "不", "很", "太"]
def main_processing_functions():
    # ① 初始化SparkSession,这是与大数据平台交互的入口
    spark = SparkSession.builder \
        .appName("DoubanMovieAnalysis") \
        .master("local[*]") \
        .config("spark.some.config.option", "some-value") \
        .getOrCreate()
    # 核心功能一:电影数据加载与预处理
    # 从HDFS加载原始CSV数据,并进行清洗、类型转换等操作
    def process_movie_data(hdfs_path):
        raw_df = spark.read.option("header", "true").csv(hdfs_path)
        processed_df = raw_df.withColumnRenamed("title", "电影名称") \
            .withColumnRenamed("rating", "评分") \
            .withColumnRenamed("votes", "评价人数") \
            .withColumnRenamed("genres", "电影类型") \
            .withColumnRenamed("directors", "导演") \
            .withColumnRenamed("actors", "主演") \
            .withColumnRenamed("summary", "剧情简介") \
            .na.drop(subset=["评分", "评价人数", "电影类型"]) \
            .withColumn("评分", col("评分").cast("float")) \
            .withColumn("评价人数", col("评价人数").cast("int")) \
            .filter(col("评分") >= 8.0) \
            .filter(col("电影类型").isNotNull()) \
            .select("电影名称", "评分", "评价人数", "电影类型", "导演", "主演", "剧情简介")
        print("数据预处理完成,返回高分电影DataFrame。")
        return processed_df
    # 核心功能二:按电影类型进行聚合分析
    # 计算每种电影类型的平均分、影片数量,并排序
    def analyze_genre_performance(movie_df):
        genre_analysis_df = movie_df.withColumn("genre", explode(split(col("电影类型"), "/"))) \
            .groupBy("genre") \
            .agg(
                count("电影名称").alias("影片数量"),
                avg("评分").alias("平均评分")
            ) \
            .withColumn("平均评分", col("平均评分").substr(1, 4).cast("float")) \
            .orderBy(desc("影片数量")) \
            .limit(20)
        print("电影类型分析完成,返回Top20类型及其表现。")
        # 为了方便前端使用,通常会转换为JSON格式
        genre_result = genre_analysis_df.toJSON().collect()
        return genre_result
    # 核心功能三:为评论词云生成关键词词频
    # 对剧情简介或评论进行分词、清洗、统计词频
    def generate_word_cloud_data(movie_df, text_column="剧情简介"):
        # 将DataFrame的特定列转换为RDD进行精细操作
        word_rdd = movie_df.select(text_column).rdd.flatMap(lambda row: row[0].split())
        cleaned_words_rdd = word_rdd.map(lambda word: regexp_replace(lower(word), "[^\u4e00-\u9fa5a-zA-Z]", "")) \
            .filter(lambda word: word != "" and word not in stop_words and len(word) > 1)
        word_counts_rdd = cleaned_words_rdd.map(lambda word: (word, 1)) \
            .reduceByKey(lambda a, b: a + b)
        # 转换回DataFrame并排序
        word_counts_df = word_counts_rdd.toDF(["word", "count"]) \
            .orderBy(desc("count")) \
            .limit(100)
        print("词云数据生成完毕,返回Top100高频词。")
        # 同样,转换为JSON格式方便前端ECharts使用
        word_cloud_result = word_counts_df.toJSON().collect()
        return word_cloud_result
    # 示例调用
    # movie_data_df = process_movie_data("hdfs://namenode:9000/douban/movies.csv")
    # genre_stats = analyze_genre_performance(movie_data_df)
    # word_freq = generate_word_cloud_data(movie_data_df)
    # spark.stop()

豆瓣高分电影数据可视化分析系统-结语

历时数月,从最初构想到最终系统成型,我的毕业设计终于画上了句号。这个过程充满了挑战,但也收获满满,不仅将大数据理论成功应用于实践,更深刻理解了数据驱动决策的魅力。感谢指导老师的悉心教导与同学们的帮助。虽然系统尚有可完善之处,但这段经历无疑是我大学生涯中宝贵的财富。前路漫漫,步履不停。

爆干N个通宵,我的毕业设计【豆瓣高分电影大数据分析系统】终于出炉啦!🚀 用Spark把豆瓣Top电影扒了个底朝天,想知道哪种类型的片子最容易出神作吗?想看哪些演员是真正的“高分保障”吗?所有答案都在动态图表里!#毕业设计 #大数据 #Python #Spark #数据可视化 视频和项目演示都安排上啦,求大家一键三连支持一下!评论区可以聊聊你最想看的数据分析维度哦!