💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
基于大数据的历届奥运会数据可视化分析系统介绍
本系统是一个基于大数据技术构建的历届奥运会数据可视化分析平台,采用Hadoop分布式存储和Spark大数据处理引擎作为核心技术架构。系统通过收集整理历届夏季和冬季奥运会的比赛数据、奖牌数据、运动员信息等多维度数据源,运用Spark SQL进行大规模数据清洗和预处理,结合Pandas和NumPy进行深度数据挖掘分析。后端采用Django框架构建RESTful API接口,前端使用Vue.js配合ElementUI组件库和Echarts图表库实现数据可视化展示。系统具备系统首页、个人中心、系统介绍、竞争格局分析、综合评价分析、国家实力分析、历史趋势分析、奖牌分布分析、时序聚类分析等九大功能模块,能够从多个维度对奥运会数据进行深入挖掘和直观展示,为用户提供全面的奥运会数据分析视角。
基于大数据的历届奥运会数据可视化分析系统演示视频
基于大数据的历届奥运会数据可视化分析系统演示图片
基于大数据的历届奥运会数据可视化分析系统代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, avg, count, desc, asc, when, max, min
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.clustering import KMeans
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views import View
spark = SparkSession.builder.appName("OlympicsDataAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
class CountryPowerAnalysis(View):
def post(self, request):
olympics_df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs://localhost:9000/olympics/medals_data.csv")
country_medals = olympics_df.groupBy("Country").agg(sum("Gold").alias("total_gold"), sum("Silver").alias("total_silver"), sum("Bronze").alias("total_bronze"), count("*").alias("participation_count"))
country_medals = country_medals.withColumn("total_medals", col("total_gold") + col("total_silver") + col("total_bronze"))
country_medals = country_medals.withColumn("weighted_score", col("total_gold") * 3 + col("total_silver") * 2 + col("total_bronze") * 1)
country_medals = country_medals.withColumn("avg_medals_per_participation", col("total_medals") / col("participation_count"))
country_medals = country_medals.withColumn("power_level", when(col("weighted_score") >= 500, "超强").when(col("weighted_score") >= 200, "强").when(col("weighted_score") >= 50, "中等").otherwise("一般"))
top_countries = country_medals.orderBy(desc("weighted_score")).limit(50)
result_data = []
for row in top_countries.collect():
country_info = {"country": row["Country"], "gold": row["total_gold"], "silver": row["total_silver"], "bronze": row["total_bronze"], "total": row["total_medals"], "score": row["weighted_score"], "avg_medals": round(row["avg_medals_per_participation"], 2), "level": row["power_level"], "participation": row["participation_count"]}
result_data.append(country_info)
return JsonResponse({"status": "success", "data": result_data, "count": len(result_data)})
class HistoricalTrendAnalysis(View):
def post(self, request):
olympics_df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs://localhost:9000/olympics/historical_data.csv")
yearly_stats = olympics_df.groupBy("Year").agg(count("*").alias("total_events"), sum("Gold").alias("total_gold_medals"), sum("Silver").alias("total_silver_medals"), sum("Bronze").alias("total_bronze_medals"), countDistinct("Country").alias("participating_countries"))
yearly_stats = yearly_stats.withColumn("total_medals", col("total_gold_medals") + col("total_silver_medals") + col("total_bronze_medals"))
yearly_stats = yearly_stats.withColumn("avg_medals_per_country", col("total_medals") / col("participating_countries"))
yearly_stats = yearly_stats.withColumn("decade", (col("Year") / 10).cast("int") * 10)
decade_trends = olympics_df.groupBy("decade").agg(avg("total_medals").alias("avg_decade_medals"), avg("participating_countries").alias("avg_decade_countries"), avg("total_events").alias("avg_decade_events"))
growth_analysis = yearly_stats.withColumn("prev_year_medals", lag("total_medals").over(Window.orderBy("Year")))
growth_analysis = growth_analysis.withColumn("growth_rate", when(col("prev_year_medals").isNotNull(), ((col("total_medals") - col("prev_year_medals")) / col("prev_year_medals") * 100)).otherwise(0))
trend_data = []
for row in yearly_stats.orderBy("Year").collect():
year_info = {"year": row["Year"], "events": row["total_events"], "medals": row["total_medals"], "countries": row["participating_countries"], "avg_medals": round(row["avg_medals_per_country"], 2), "gold": row["total_gold_medals"], "silver": row["total_silver_medals"], "bronze": row["total_bronze_medals"]}
trend_data.append(year_info)
return JsonResponse({"status": "success", "data": trend_data, "summary": {"max_medals_year": yearly_stats.orderBy(desc("total_medals")).first()["Year"], "max_countries_year": yearly_stats.orderBy(desc("participating_countries")).first()["Year"]}})
class MedalDistributionAnalysis(View):
def post(self, request):
olympics_df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs://localhost:9000/olympics/distribution_data.csv")
sport_distribution = olympics_df.groupBy("Sport").agg(sum("Gold").alias("sport_gold"), sum("Silver").alias("sport_silver"), sum("Bronze").alias("sport_bronze"), count("*").alias("sport_events"))
sport_distribution = sport_distribution.withColumn("sport_total", col("sport_gold") + col("sport_silver") + col("sport_bronze"))
sport_distribution = sport_distribution.withColumn("gold_ratio", col("sport_gold") / col("sport_total") * 100)
region_distribution = olympics_df.groupBy("Region").agg(sum("Gold").alias("region_gold"), sum("Silver").alias("region_silver"), sum("Bronze").alias("region_bronze"), countDistinct("Country").alias("region_countries"))
region_distribution = region_distribution.withColumn("region_total", col("region_gold") + col("region_silver") + col("region_bronze"))
region_distribution = region_distribution.withColumn("medals_per_country", col("region_total") / col("region_countries"))
gender_distribution = olympics_df.groupBy("Gender").agg(sum("Gold").alias("gender_gold"), sum("Silver").alias("gender_silver"), sum("Bronze").alias("gender_bronze"))
continent_medals = olympics_df.groupBy("Continent").agg(sum("Gold").alias("continent_gold"), sum("Silver").alias("continent_silver"), sum("Bronze").alias("continent_bronze"))
distribution_result = {"sports": [], "regions": [], "gender": [], "continents": []}
for row in sport_distribution.orderBy(desc("sport_total")).collect():
sport_info = {"sport": row["Sport"], "gold": row["sport_gold"], "silver": row["sport_silver"], "bronze": row["sport_bronze"], "total": row["sport_total"], "events": row["sport_events"], "gold_percentage": round(row["gold_ratio"], 2)}
distribution_result["sports"].append(sport_info)
for row in region_distribution.orderBy(desc("region_total")).collect():
region_info = {"region": row["Region"], "gold": row["region_gold"], "silver": row["region_silver"], "bronze": row["region_bronze"], "total": row["region_total"], "countries": row["region_countries"], "avg_per_country": round(row["medals_per_country"], 2)}
distribution_result["regions"].append(region_info)
for row in gender_distribution.collect():
gender_info = {"gender": row["Gender"], "gold": row["gender_gold"], "silver": row["gender_silver"], "bronze": row["gender_bronze"], "total": row["gender_gold"] + row["gender_silver"] + row["gender_bronze"]}
distribution_result["gender"].append(gender_info)
for row in continent_medals.orderBy(desc("continent_gold")).collect():
continent_info = {"continent": row["Continent"], "gold": row["continent_gold"], "silver": row["continent_silver"], "bronze": row["continent_bronze"], "total": row["continent_gold"] + row["continent_silver"] + row["continent_bronze"]}
distribution_result["continents"].append(continent_info)
return JsonResponse({"status": "success", "data": distribution_result, "analysis": {"total_sports": sport_distribution.count(), "total_regions": region_distribution.count()}})
基于大数据的历届奥运会数据可视化分析系统文档展示
💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目