【数据分析】基于大数据的电影评分人气数据可视化分析系统 | 大数据可视化大屏 大数据毕设实战项目 大数据选题推荐 文档指导 Hadoop SPark

电影评分大数据可视化分析
#【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道!#

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

基于大数据的电影评分人气数据可视化分析系统介绍

基于大数据的电影评分人气数据可视化分析系统是一个综合运用Hadoop分布式存储和Spark大数据处理技术的智能分析平台,该系统采用Python语言开发,基于Django框架构建后端服务,前端运用Vue+ElementUI+Echarts技术栈实现数据的直观展示。系统核心功能涵盖电影评分人气数据的采集、存储、处理与分析,通过Spark SQL和Pandas、NumPy等数据处理库对海量电影数据进行深度挖掘,实现发行趋势分析、特征关联分析、评分人气分析和市场深度分析等多维度数据解读。系统提供用户管理、数据管理、大屏可视化等完整业务模块,能够处理大规模电影评分数据集,通过HDFS分布式文件系统确保数据存储的可靠性,利用Spark的内存计算优势提升数据处理效率,最终通过丰富的图表和可视化组件将分析结果以直观、易懂的方式呈现给用户,为电影行业的市场分析和决策支持提供有力的数据支撑。

基于大数据的电影评分人气数据可视化分析系统演示视频

【数据分析】基于大数据的电影评分人气数据可视化分析系统 | 大数据可视化大屏 大数据毕设实战项目 大数据选题推荐 文档指导 Hadoop SPark

基于大数据的电影评分人气数据可视化分析系统演示图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基于大数据的电影评分人气数据可视化分析系统代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, count, sum, desc, asc, when, isnan, isnull
from pyspark.sql.types import StructType, StructField, StringType, DoubleType, IntegerType
from django.http import JsonResponse
from django.views import View
import pandas as pd
import numpy as np
from datetime import datetime
import json

class MovieDataProcessor(View):
    def __init__(self):
        self.spark = SparkSession.builder.appName("MovieRatingAnalysis").master("local[*]").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
    
    def process_movie_rating_data(self, request):
        movie_schema = StructType([
            StructField("movie_id", StringType(), True),
            StructField("movie_name", StringType(), True),
            StructField("rating", DoubleType(), True),
            StructField("popularity", IntegerType(), True),
            StructField("release_date", StringType(), True),
            StructField("genre", StringType(), True),
            StructField("user_count", IntegerType(), True)
        ])
        raw_data = self.spark.read.option("header", "true").schema(movie_schema).csv("hdfs://localhost:9000/movie_data/raw_ratings.csv")
        cleaned_data = raw_data.filter(col("rating").isNotNull() & col("popularity").isNotNull() & (col("rating") >= 0) & (col("rating") <= 10))
        cleaned_data = cleaned_data.withColumn("rating_level", when(col("rating") >= 8.0, "高分").when(col("rating") >= 6.0, "中等").otherwise("低分"))
        cleaned_data = cleaned_data.withColumn("popularity_level", when(col("popularity") >= 1000, "热门").when(col("popularity") >= 100, "一般").otherwise("冷门"))
        processed_data = cleaned_data.groupBy("genre", "rating_level", "popularity_level").agg(
            count("movie_id").alias("movie_count"),
            avg("rating").alias("avg_rating"),
            sum("user_count").alias("total_users"),
            avg("popularity").alias("avg_popularity")
        ).orderBy(desc("movie_count"))
        result_df = processed_data.toPandas()
        processed_data.write.mode("overwrite").option("header", "true").csv("hdfs://localhost:9000/movie_data/processed_ratings")
        return JsonResponse({
            "status": "success",
            "total_records": len(result_df),
            "processed_data": result_df.to_dict('records'),
            "summary": {
                "total_movies": cleaned_data.count(),
                "avg_overall_rating": cleaned_data.agg(avg("rating")).collect()[0][0],
                "most_popular_genre": result_df.iloc[0]['genre'] if len(result_df) > 0 else None
            }
        })
    
    def analyze_release_trend(self, request):
        trend_data = self.spark.read.option("header", "true").csv("hdfs://localhost:9000/movie_data/processed_ratings")
        trend_data = trend_data.withColumn("release_year", col("release_date").substr(1, 4).cast(IntegerType()))
        trend_data = trend_data.filter(col("release_year").between(2010, 2024))
        yearly_stats = trend_data.groupBy("release_year").agg(
            count("movie_id").alias("release_count"),
            avg("rating").alias("avg_yearly_rating"),
            avg("popularity").alias("avg_yearly_popularity"),
            sum("user_count").alias("total_yearly_users")
        ).orderBy("release_year")
        genre_yearly = trend_data.groupBy("release_year", "genre").agg(
            count("movie_id").alias("genre_count"),
            avg("rating").alias("genre_avg_rating")
        ).orderBy("release_year", desc("genre_count"))
        trend_analysis = yearly_stats.join(
            genre_yearly.groupBy("release_year").agg(
                col("genre").alias("dominant_genre"),
                col("genre_count").alias("max_genre_count")
            ).filter(col("max_genre_count") == genre_yearly.groupBy("release_year").agg(col("genre_count").alias("max_count")).select("max_count")),
            "release_year", "left"
        )
        pandas_trend = trend_analysis.toPandas()
        pandas_trend['growth_rate'] = pandas_trend['release_count'].pct_change() * 100
        pandas_trend['rating_trend'] = np.where(pandas_trend['avg_yearly_rating'].diff() > 0, "上升", np.where(pandas_trend['avg_yearly_rating'].diff() < 0, "下降", "持平"))
        trend_analysis.write.mode("overwrite").option("header", "true").csv("hdfs://localhost:9000/movie_data/release_trends")
        return JsonResponse({
            "status": "success",
            "trend_data": pandas_trend.fillna(0).to_dict('records'),
            "insights": {
                "peak_year": pandas_trend.loc[pandas_trend['release_count'].idxmax(), 'release_year'] if len(pandas_trend) > 0 else None,
                "highest_rated_year": pandas_trend.loc[pandas_trend['avg_yearly_rating'].idxmax(), 'release_year'] if len(pandas_trend) > 0 else None,
                "overall_trend": "增长" if pandas_trend['growth_rate'].mean() > 0 else "下降"
            }
        })
    
    def analyze_rating_popularity_correlation(self, request):
        correlation_data = self.spark.read.option("header", "true").csv("hdfs://localhost:9000/movie_data/processed_ratings")
        correlation_data = correlation_data.filter(col("rating").isNotNull() & col("popularity").isNotNull())
        rating_bins = correlation_data.withColumn("rating_bin", 
            when(col("rating") < 3.0, "1-3").
            when(col("rating") < 5.0, "3-5").
            when(col("rating") < 7.0, "5-7").
            when(col("rating") < 9.0, "7-9").
            otherwise("9-10")
        )
        popularity_stats = rating_bins.groupBy("rating_bin").agg(
            avg("popularity").alias("avg_popularity"),
            count("movie_id").alias("movie_count"),
            avg("user_count").alias("avg_user_engagement"),
            sum("popularity").alias("total_popularity")
        ).orderBy("rating_bin")
        genre_correlation = correlation_data.groupBy("genre").agg(
            avg("rating").alias("avg_genre_rating"),
            avg("popularity").alias("avg_genre_popularity"),
            count("movie_id").alias("genre_movie_count"),
            (avg("rating") * avg("popularity")).alias("rating_popularity_score")
        ).orderBy(desc("rating_popularity_score"))
        correlation_analysis = popularity_stats.toPandas()
        genre_analysis = genre_correlation.toPandas()
        correlation_coefficient = np.corrcoef(correlation_data.select("rating").rdd.map(lambda x: x[0]).collect(), 
                                            correlation_data.select("popularity").rdd.map(lambda x: x[0]).collect())[0, 1]
        high_rating_popular = correlation_data.filter((col("rating") >= 8.0) & (col("popularity") >= 500)).count()
        total_high_rating = correlation_data.filter(col("rating") >= 8.0).count()
        popularity_ratio = (high_rating_popular / total_high_rating * 100) if total_high_rating > 0 else 0
        genre_correlation.write.mode("overwrite").option("header", "true").csv("hdfs://localhost:9000/movie_data/correlation_analysis")
        return JsonResponse({
            "status": "success",
            "correlation_data": correlation_analysis.to_dict('records'),
            "genre_analysis": genre_analysis.to_dict('records'),
            "correlation_metrics": {
                "correlation_coefficient": round(correlation_coefficient, 4),
                "high_rating_popular_ratio": round(popularity_ratio, 2),
                "strongest_correlation_genre": genre_analysis.iloc[0]['genre'] if len(genre_analysis) > 0 else None,
                "total_analyzed_movies": correlation_data.count()
            }
        })

基于大数据的电影评分人气数据可视化分析系统文档展示

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值