【大数据】最佳电子游戏排行数据可视化分析系统 计算机毕业设计项目 Hadoop+Spark环境配置 数据科学与大数据技术 附源码+文档+讲解

46 阅读6分钟

一、个人简介

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

二、系统介绍

大数据框架:Hadoop+Spark(Hive需要定制修改) 开发语言:Java+Python(两个版本都支持) 数据库:MySQL 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持) 前端:Vue+Echarts+HTML+CSS+JavaScript+jQuery

《最佳电子游戏排行数据可视化分析系统》是一个基于大数据技术的游戏行业数据分析平台,采用Hadoop+Spark分布式计算框架作为核心技术架构,通过Python语言开发,后端使用Django框架构建RESTful API服务,前端采用Vue.js结合ElementUI组件库和ECharts可视化库实现交互式数据展示界面。系统利用HDFS分布式文件系统存储海量游戏数据,通过Spark SQL进行高效的数据查询与分析,结合Pandas和NumPy进行深度数据处理,将复杂的游戏评分数据、发行信息、平台分布等多维度数据转化为直观的可视化图表。平台提供完整的用户权限管理、游戏数据维护、多角度统计分析功能,包括基础评分统计、时间趋势变化、平台发行情况、游戏特征挖掘、综合对比分析等核心模块,最终通过可视化大屏展示游戏行业的整体发展态势和热门游戏的数据洞察,为游戏开发者、发行商和研究人员提供数据支撑和决策参考。

三、视频解说

最佳电子游戏排行数据可视化分析系统

四、部分功能展示

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

五、部分代码展示


from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, count, sum, desc, asc, when, year, month
from pyspark.sql.types import StructType, StructField, StringType, FloatType, IntegerType, DateType
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json

spark = SparkSession.builder.appName("GameDataAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()

@csrf_exempt
def game_rating_analysis(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        platform_filter = data.get('platform', 'all')
        genre_filter = data.get('genre', 'all')
        year_range = data.get('year_range', [2000, 2024])
        game_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/gamedb").option("dbtable", "games").option("user", "root").option("password", "password").load()
        filtered_df = game_df.filter((col("release_year") >= year_range[0]) & (col("release_year") <= year_range[1]))
        if platform_filter != 'all':
            filtered_df = filtered_df.filter(col("platform") == platform_filter)
        if genre_filter != 'all':
            filtered_df = filtered_df.filter(col("genre") == genre_filter)
        rating_stats = filtered_df.agg(avg("user_score").alias("avg_user_score"), avg("critic_score").alias("avg_critic_score"), count("game_id").alias("total_games"), avg("sales").alias("avg_sales")).collect()[0]
        score_distribution = filtered_df.select(when(col("user_score") >= 9.0, "优秀").when(col("user_score") >= 7.0, "良好").when(col("user_score") >= 5.0, "一般").otherwise("较差").alias("score_level")).groupBy("score_level").count().collect()
        platform_ratings = filtered_df.groupBy("platform").agg(avg("user_score").alias("avg_score"), count("game_id").alias("game_count")).orderBy(desc("avg_score")).collect()
        top_rated_games = filtered_df.select("game_name", "user_score", "critic_score", "platform", "genre").orderBy(desc("user_score")).limit(20).collect()
        score_correlation = filtered_df.select("user_score", "critic_score").toPandas()
        correlation_coef = score_correlation['user_score'].corr(score_correlation['critic_score'])
        genre_performance = filtered_df.groupBy("genre").agg(avg("user_score").alias("avg_user_score"), avg("critic_score").alias("avg_critic_score"), avg("sales").alias("avg_sales"), count("game_id").alias("game_count")).orderBy(desc("avg_user_score")).collect()
        result_data = {"basic_stats": {"avg_user_score": float(rating_stats.avg_user_score or 0), "avg_critic_score": float(rating_stats.avg_critic_score or 0), "total_games": int(rating_stats.total_games), "avg_sales": float(rating_stats.avg_sales or 0), "score_correlation": float(correlation_coef)}, "score_distribution": [{"level": row.score_level, "count": row.count} for row in score_distribution], "platform_analysis": [{"platform": row.platform, "avg_score": float(row.avg_score), "game_count": row.game_count} for row in platform_ratings], "top_games": [{"name": row.game_name, "user_score": float(row.user_score), "critic_score": float(row.critic_score), "platform": row.platform, "genre": row.genre} for row in top_rated_games], "genre_performance": [{"genre": row.genre, "avg_user_score": float(row.avg_user_score), "avg_critic_score": float(row.avg_critic_score), "avg_sales": float(row.avg_sales), "game_count": row.game_count} for row in genre_performance]}
        return JsonResponse({"status": "success", "data": result_data})

@csrf_exempt
def time_trend_analysis(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        start_year = data.get('start_year', 2000)
        end_year = data.get('end_year', 2024)
        analysis_dimension = data.get('dimension', 'yearly')
        platform_filter = data.get('platform', 'all')
        game_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/gamedb").option("dbtable", "games").option("user", "root").option("password", "password").load()
        time_filtered_df = game_df.filter((col("release_year") >= start_year) & (col("release_year") <= end_year))
        if platform_filter != 'all':
            time_filtered_df = time_filtered_df.filter(col("platform") == platform_filter)
        if analysis_dimension == 'yearly':
            yearly_trends = time_filtered_df.groupBy("release_year").agg(count("game_id").alias("game_count"), avg("user_score").alias("avg_score"), avg("sales").alias("avg_sales"), avg("critic_score").alias("avg_critic_score")).orderBy("release_year").collect()
            yearly_genre_trends = time_filtered_df.groupBy("release_year", "genre").agg(count("game_id").alias("count"), avg("user_score").alias("avg_score")).orderBy("release_year", desc("count")).collect()
            peak_years = time_filtered_df.groupBy("release_year").agg(count("game_id").alias("release_count")).orderBy(desc("release_count")).limit(5).collect()
            score_evolution = time_filtered_df.groupBy("release_year").agg(avg("user_score").alias("user_score"), avg("critic_score").alias("critic_score")).orderBy("release_year").collect()
            sales_trends = time_filtered_df.groupBy("release_year").agg(sum("sales").alias("total_sales"), avg("sales").alias("avg_sales")).orderBy("release_year").collect()
            platform_yearly_data = time_filtered_df.groupBy("release_year", "platform").agg(count("game_id").alias("count")).orderBy("release_year", "platform").collect()
            trend_analysis_result = []
            yearly_data = [row.asDict() for row in yearly_trends]
            for i in range(1, len(yearly_data)):
                current_year = yearly_data[i]
                prev_year = yearly_data[i-1]
                growth_rate = ((current_year['game_count'] - prev_year['game_count']) / prev_year['game_count']) * 100 if prev_year['game_count'] > 0 else 0
                score_change = current_year['avg_score'] - prev_year['avg_score'] if current_year['avg_score'] and prev_year['avg_score'] else 0
                trend_analysis_result.append({"year": current_year['release_year'], "growth_rate": round(growth_rate, 2), "score_change": round(float(score_change), 2)})
            genre_trend_dict = {}
            for row in yearly_genre_trends:
                year = row.release_year
                if year not in genre_trend_dict:
                    genre_trend_dict[year] = []
                genre_trend_dict[year].append({"genre": row.genre, "count": row.count, "avg_score": float(row.avg_score or 0)})
            result_data = {"yearly_overview": [{"year": row.release_year, "game_count": row.game_count, "avg_score": float(row.avg_score or 0), "avg_sales": float(row.avg_sales or 0), "avg_critic_score": float(row.avg_critic_score or 0)} for row in yearly_trends], "genre_trends": genre_trend_dict, "peak_years": [{"year": row.release_year, "count": row.release_count} for row in peak_years], "score_evolution": [{"year": row.release_year, "user_score": float(row.user_score or 0), "critic_score": float(row.critic_score or 0)} for row in score_evolution], "sales_trends": [{"year": row.release_year, "total_sales": float(row.total_sales or 0), "avg_sales": float(row.avg_sales or 0)} for row in sales_trends], "platform_yearly": [{"year": row.release_year, "platform": row.platform, "count": row.count} for row in platform_yearly_data], "trend_analysis": trend_analysis_result}
        return JsonResponse({"status": "success", "data": result_data})

@csrf_exempt
def platform_distribution_analysis(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        year_filter = data.get('year', 'all')
        genre_filter = data.get('genre', 'all')
        analysis_type = data.get('analysis_type', 'comprehensive')
        game_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/gamedb").option("dbtable", "games").option("user", "root").option("password", "password").load()
        platform_filtered_df = game_df
        if year_filter != 'all':
            platform_filtered_df = platform_filtered_df.filter(col("release_year") == year_filter)
        if genre_filter != 'all':
            platform_filtered_df = platform_filtered_df.filter(col("genre") == genre_filter)
        platform_distribution = platform_filtered_df.groupBy("platform").agg(count("game_id").alias("game_count"), avg("user_score").alias("avg_user_score"), avg("critic_score").alias("avg_critic_score"), avg("sales").alias("avg_sales"), sum("sales").alias("total_sales")).orderBy(desc("game_count")).collect()
        platform_genre_matrix = platform_filtered_df.groupBy("platform", "genre").agg(count("game_id").alias("count"), avg("user_score").alias("avg_score")).collect()
        exclusive_games = platform_filtered_df.groupBy("game_name").agg(count("platform").alias("platform_count")).filter(col("platform_count") == 1).join(platform_filtered_df, "game_name").groupBy("platform").agg(count("game_id").alias("exclusive_count")).collect()
        platform_performance_metrics = platform_filtered_df.groupBy("platform").agg(avg("user_score").alias("avg_user_score"), avg("critic_score").alias("avg_critic_score"), count(when(col("user_score") >= 8.0, 1)).alias("high_rated_count"), count("game_id").alias("total_count")).collect()
        cross_platform_analysis = platform_filtered_df.groupBy("game_name").agg(count("platform").alias("platform_count"), avg("user_score").alias("avg_score")).filter(col("platform_count") > 1).orderBy(desc("platform_count")).limit(50).collect()
        platform_market_share = []
        total_games = platform_filtered_df.count()
        for row in platform_distribution:
            market_share = (row.game_count / total_games) * 100 if total_games > 0 else 0
            platform_market_share.append({"platform": row.platform, "market_share": round(market_share, 2), "game_count": row.game_count})
        platform_evolution = platform_filtered_df.groupBy("platform", "release_year").agg(count("game_id").alias("yearly_count")).orderBy("platform", "release_year").collect()
        genre_platform_preference = {}
        for row in platform_genre_matrix:
            genre = row.genre
            if genre not in genre_platform_preference:
                genre_platform_preference[genre] = []
            genre_platform_preference[genre].append({"platform": row.platform, "count": row.count, "avg_score": float(row.avg_score or 0)})
        for genre in genre_platform_preference:
            genre_platform_preference[genre] = sorted(genre_platform_preference[genre], key=lambda x: x['count'], reverse=True)
        result_data = {"platform_overview": [{"platform": row.platform, "game_count": row.game_count, "avg_user_score": float(row.avg_user_score or 0), "avg_critic_score": float(row.avg_critic_score or 0), "avg_sales": float(row.avg_sales or 0), "total_sales": float(row.total_sales or 0)} for row in platform_distribution], "market_share": platform_market_share, "exclusive_games": [{"platform": row.platform, "exclusive_count": row.exclusive_count} for row in exclusive_games], "performance_metrics": [{"platform": row.platform, "avg_user_score": float(row.avg_user_score or 0), "avg_critic_score": float(row.avg_critic_score or 0), "high_rated_ratio": round((row.high_rated_count / row.total_count) * 100, 2) if row.total_count > 0 else 0} for row in platform_performance_metrics], "cross_platform_games": [{"game_name": row.game_name, "platform_count": row.platform_count, "avg_score": float(row.avg_score or 0)} for row in cross_platform_analysis], "genre_platform_preference": genre_platform_preference, "platform_evolution": [{"platform": row.platform, "year": row.release_year, "count": row.yearly_count} for row in platform_evolution]}
        return JsonResponse({"status": "success", "data": result_data})

六、部分文档展示

在这里插入图片描述

七、END

💕💕文末获取源码联系计算机编程果茶熊