【大数据】奥运会金牌榜可视化分析系统 Hadoop+Spark技术 计算机毕业设计项目 Anaconda环境配置 附源码+文档+讲解
一、个人简介
💖💖作者:计算机编程果茶熊
💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
计算机毕业设计选题
💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
大数据框架:Hadoop+Spark(本次没用Hive,支持定制)
开发语言:Python
后端框架:Django
前端:Vue
详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy
数据库:MySQL
基于大数据的奥运会金牌榜可视化分析系统采用了Hadoop与Spark作为核心的大数据处理框架,通过HDFS实现海量奥运数据的分布式存储,利用Spark SQL完成对历届奥运会奖牌数据的快速查询与统计分析。系统后端基于Django框架搭建,前端采用Vue技术实现交互界面的开发,数据处理环节结合Pandas和NumPy库对奥运奖牌数据进行清洗、转换以及多维度的计算,最终将分析结果存储在MySQL数据库中供前端调用展示。平台提供了个人信息管理、用户管理等基础功能模块,核心业务涵盖奥运金牌管理、国家奖牌实力分析、奥运奖牌效率分析、地缘政治格局分析以及奥运历史趋势分析这些模块,管理员可以通过系统公告管理模块发布相关通知;在国家奖牌实力分析模块中,系统能够对各个国家在不同届次奥运会上的金牌、银牌、铜牌数量进行统计对比,奖牌效率分析则从人口基数、经济投入等维度评估各国的竞技表现,地缘政治格局分析模块尝试挖掘奖牌分布与地理位置、政治因素之间可能存在的关联,历史趋势分析通过时间序列的方式呈现奥运会奖牌榜的演变规律,帮助使用者从宏观层面理解奥运竞技格局的变迁过程。
三、视频解说
四、部分功能展示









五、部分代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, avg, count, desc, row_number, when
from pyspark.sql.window import Window
from django.http import JsonResponse
from django.views import View
import pandas as pd
import numpy as np
from datetime import datetime
spark = SparkSession.builder.appName("OlympicMedalAnalysis").config("spark.sql.warehouse.dir", "/user/hive/warehouse").config("spark.executor.memory", "2g").config("spark.driver.memory", "1g").getOrCreate()
class CountryMedalStrengthAnalysis(View):
def post(self, request):
try:
year_start = request.POST.get('year_start')
year_end = request.POST.get('year_end')
country_list = request.POST.getlist('countries')
medal_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/olympic_db").option("driver", "com.mysql.jdbc.Driver").option("dbtable", "olympic_medals").option("user", "root").option("password", "123456").load()
filtered_df = medal_df.filter((col("year") >= year_start) & (col("year") <= year_end))
if country_list and len(country_list) > 0:
filtered_df = filtered_df.filter(col("country").isin(country_list))
country_medal_stats = filtered_df.groupBy("country").agg(sum(when(col("medal_type") == "Gold", 1).otherwise(0)).alias("gold_count"),sum(when(col("medal_type") == "Silver", 1).otherwise(0)).alias("silver_count"),sum(when(col("medal_type") == "Bronze", 1).otherwise(0)).alias("bronze_count"),count("*").alias("total_medals"))
country_medal_stats = country_medal_stats.withColumn("weighted_score", col("gold_count") * 3 + col("silver_count") * 2 + col("bronze_count") * 1)
window_spec = Window.orderBy(desc("weighted_score"))
country_medal_stats = country_medal_stats.withColumn("rank", row_number().over(window_spec))
result_pd = country_medal_stats.toPandas()
result_pd['gold_count'] = result_pd['gold_count'].astype(int)
result_pd['silver_count'] = result_pd['silver_count'].astype(int)
result_pd['bronze_count'] = result_pd['bronze_count'].astype(int)
result_pd['total_medals'] = result_pd['total_medals'].astype(int)
result_pd['weighted_score'] = result_pd['weighted_score'].astype(int)
result_pd['rank'] = result_pd['rank'].astype(int)
result_dict = result_pd.to_dict('records')
return JsonResponse({'code': 200, 'msg': '国家奖牌实力分析完成', 'data': result_dict})
except Exception as e:
return JsonResponse({'code': 500, 'msg': f'分析过程出现异常: {str(e)}'})
class MedalEfficiencyAnalysis(View):
def post(self, request):
try:
target_year = request.POST.get('year')
medal_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/olympic_db").option("driver", "com.mysql.jdbc.Driver").option("dbtable", "olympic_medals").option("user", "root").option("password", "123456").load()
country_info_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/olympic_db").option("driver", "com.mysql.jdbc.Driver").option("dbtable", "country_info").option("user", "root").option("password", "123456").load()
year_medal_df = medal_df.filter(col("year") == target_year)
country_medal_count = year_medal_df.groupBy("country").agg(sum(when(col("medal_type") == "Gold", 1).otherwise(0)).alias("gold_medals"),count("*").alias("total_medals"))
joined_df = country_medal_count.join(country_info_df, country_medal_count.country == country_info_df.country_name, "inner")
efficiency_df = joined_df.withColumn("medal_per_million", (col("total_medals") / col("population")) * 1000000)
efficiency_df = efficiency_df.withColumn("medal_per_gdp", col("total_medals") / (col("gdp") / 1000000000))
efficiency_df = efficiency_df.withColumn("efficiency_score", col("medal_per_million") * 0.6 + col("medal_per_gdp") * 0.4)
efficiency_df = efficiency_df.select("country", "gold_medals", "total_medals", "population", "gdp", "medal_per_million", "medal_per_gdp", "efficiency_score")
efficiency_df = efficiency_df.orderBy(desc("efficiency_score"))
result_pd = efficiency_df.toPandas()
result_pd['gold_medals'] = result_pd['gold_medals'].astype(int)
result_pd['total_medals'] = result_pd['total_medals'].astype(int)
result_pd['population'] = result_pd['population'].astype(int)
result_pd['medal_per_million'] = np.round(result_pd['medal_per_million'], 4)
result_pd['medal_per_gdp'] = np.round(result_pd['medal_per_gdp'], 6)
result_pd['efficiency_score'] = np.round(result_pd['efficiency_score'], 4)
result_dict = result_pd.
六、部分文档展示

七、END
💕💕文末获取源码联系计算机编程果茶熊
更多推荐



所有评论(0)