💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐
基于大数据的近8年软科中国大学排名数据可视化分析系统介绍
本系统是一个基于Hadoop+Spark大数据框架开发的软科中国大学排名数据可视化分析平台,系统采集并整理了2017年至2024年近8年的软科中国大学排名真实数据,通过Spark SQL进行数据清洗与预处理,利用HDFS分布式存储海量排名数据,实现了对国内高校发展态势的深度挖掘与多维度分析。系统后端采用Spring Boot框架构建RESTful API接口,前端使用Vue+ElementUI+Echarts技术栈实现交互式数据可视化展示,涵盖高校个体发展分析、高校排名总体分析、高校区域分布分析、高校类型层次分析等7大核心分析模块。系统通过Pandas和NumPy进行数据统计计算,结合Echarts图表库生成柱状图、折线图、饼图、地图等多种可视化图表,直观呈现高校排名变化趋势、地域分布特征、院校类型差异等关键信息。管理员可以通过后台管理模块对排名数据进行增删改查操作,普通用户登录后能够查看各类分析报告并进行个性化数据检索,为教育研究者、高校管理者、考生家长提供了一个便捷的高校排名数据分析工具。
基于大数据的近8年软科中国大学排名数据可视化分析系统演示视频
基于大数据的近8年软科中国大学排名数据可视化分析系统演示图片
基于大数据的近8年软科中国大学排名数据可视化分析系统代码展示
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.functions;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class UniversityRankingAnalysisService {
private SparkSession spark = SparkSession.builder().appName("UniversityRankingAnalysis").master("local[*]").config("spark.sql.warehouse.dir", "hdfs://localhost:9000/spark-warehouse").getOrCreate();
public Map<String, Object> analyzeIndividualUniversityDevelopment(String universityName) {
Map<String, Object> result = new HashMap<>();
Dataset<Row> rankingData = spark.read().format("jdbc").option("url", "jdbc:mysql://localhost:3306/university_db").option("dbtable", "ranking_info").option("user", "root").option("password", "123456").load();
rankingData.createOrReplaceTempView("ranking_table");
Dataset<Row> universityHistory = spark.sql("SELECT year, ranking, total_score, teaching_score, research_score, citation_score, industry_income FROM ranking_table WHERE university_name = '" + universityName + "' ORDER BY year ASC");
List<Row> historyList = universityHistory.collectAsList();
List<Integer> yearList = new ArrayList<>();
List<Integer> rankingList = new ArrayList<>();
List<Double> totalScoreList = new ArrayList<>();
List<Double> teachingScoreList = new ArrayList<>();
List<Double> researchScoreList = new ArrayList<>();
List<Double> citationScoreList = new ArrayList<>();
List<Double> industryIncomeList = new ArrayList<>();
for (Row row : historyList) {
yearList.add(row.getInt(0));
rankingList.add(row.getInt(1));
totalScoreList.add(row.getDouble(2));
teachingScoreList.add(row.getDouble(3));
researchScoreList.add(row.getDouble(4));
citationScoreList.add(row.getDouble(5));
industryIncomeList.add(row.getDouble(6));
}
double avgRankingChange = 0.0;
if (rankingList.size() > 1) {
int totalChange = rankingList.get(0) - rankingList.get(rankingList.size() - 1);
avgRankingChange = (double) totalChange / (rankingList.size() - 1);
}
double totalScoreGrowthRate = 0.0;
if (totalScoreList.size() > 1 && totalScoreList.get(0) != 0) {
totalScoreGrowthRate = ((totalScoreList.get(totalScoreList.size() - 1) - totalScoreList.get(0)) / totalScoreList.get(0)) * 100;
}
result.put("universityName", universityName);
result.put("yearList", yearList);
result.put("rankingList", rankingList);
result.put("totalScoreList", totalScoreList);
result.put("teachingScoreList", teachingScoreList);
result.put("researchScoreList", researchScoreList);
result.put("citationScoreList", citationScoreList);
result.put("industryIncomeList", industryIncomeList);
result.put("avgRankingChange", String.format("%.2f", avgRankingChange));
result.put("totalScoreGrowthRate", String.format("%.2f", totalScoreGrowthRate) + "%");
return result;
}
public Map<String, Object> analyzeOverallRankingDistribution(int year) {
Map<String, Object> result = new HashMap<>();
Dataset<Row> rankingData = spark.read().format("jdbc").option("url", "jdbc:mysql://localhost:3306/university_db").option("dbtable", "ranking_info").option("user", "root").option("password", "123456").load();
rankingData.createOrReplaceTempView("ranking_table");
Dataset<Row> yearData = spark.sql("SELECT * FROM ranking_table WHERE year = " + year);
long totalUniversities = yearData.count();
Dataset<Row> top10Universities = spark.sql("SELECT university_name, ranking, total_score, province FROM ranking_table WHERE year = " + year + " AND ranking <= 10 ORDER BY ranking ASC");
Dataset<Row> top50Universities = spark.sql("SELECT university_name, ranking, total_score, province FROM ranking_table WHERE year = " + year + " AND ranking > 10 AND ranking <= 50 ORDER BY ranking ASC");
Dataset<Row> top100Universities = spark.sql("SELECT university_name, ranking, total_score, province FROM ranking_table WHERE year = " + year + " AND ranking > 50 AND ranking <= 100 ORDER BY ranking ASC");
Dataset<Row> scoreStats = spark.sql("SELECT AVG(total_score) as avg_score, MAX(total_score) as max_score, MIN(total_score) as min_score, STDDEV(total_score) as std_score FROM ranking_table WHERE year = " + year);
Row statsRow = scoreStats.first();
double avgScore = statsRow.getDouble(0);
double maxScore = statsRow.getDouble(1);
double minScore = statsRow.getDouble(2);
double stdScore = statsRow.getDouble(3);
Dataset<Row> rankingChangeData = spark.sql("SELECT a.university_name, a.ranking as current_ranking, b.ranking as last_year_ranking, (b.ranking - a.ranking) as ranking_change FROM (SELECT university_name, ranking FROM ranking_table WHERE year = " + year + ") a LEFT JOIN (SELECT university_name, ranking FROM ranking_table WHERE year = " + (year - 1) + ") b ON a.university_name = b.university_name ORDER BY ranking_change DESC LIMIT 20");
result.put("year", year);
result.put("totalUniversities", totalUniversities);
result.put("top10List", top10Universities.collectAsList());
result.put("top50List", top50Universities.collectAsList());
result.put("top100List", top100Universities.collectAsList());
result.put("avgScore", String.format("%.2f", avgScore));
result.put("maxScore", String.format("%.2f", maxScore));
result.put("minScore", String.format("%.2f", minScore));
result.put("stdScore", String.format("%.2f", stdScore));
result.put("rankingChangeList", rankingChangeData.collectAsList());
return result;
}
public Map<String, Object> analyzeRegionalDistribution(int year) {
Map<String, Object> result = new HashMap<>();
Dataset<Row> rankingData = spark.read().format("jdbc").option("url", "jdbc:mysql://localhost:3306/university_db").option("dbtable", "ranking_info").option("user", "root").option("password", "123456").load();
rankingData.createOrReplaceTempView("ranking_table");
Dataset<Row> provinceCount = spark.sql("SELECT province, COUNT(*) as university_count FROM ranking_table WHERE year = " + year + " GROUP BY province ORDER BY university_count DESC");
List<Row> provinceList = provinceCount.collectAsList();
Map<String, Integer> provinceCountMap = new HashMap<>();
for (Row row : provinceList) {
provinceCountMap.put(row.getString(0), (int) row.getLong(1));
}
Dataset<Row> provinceAvgScore = spark.sql("SELECT province, AVG(total_score) as avg_score FROM ranking_table WHERE year = " + year + " GROUP BY province ORDER BY avg_score DESC");
List<Row> avgScoreList = provinceAvgScore.collectAsList();
Map<String, Double> provinceAvgScoreMap = new HashMap<>();
for (Row row : avgScoreList) {
provinceAvgScoreMap.put(row.getString(0), row.getDouble(1));
}
Dataset<Row> provinceTop10Count = spark.sql("SELECT province, COUNT(*) as top10_count FROM ranking_table WHERE year = " + year + " AND ranking <= 10 GROUP BY province ORDER BY top10_count DESC");
List<Row> top10List = provinceTop10Count.collectAsList();
Map<String, Integer> provinceTop10Map = new HashMap<>();
for (Row row : top10List) {
provinceTop10Map.put(row.getString(0), (int) row.getLong(1));
}
Dataset<Row> provinceTop100Count = spark.sql("SELECT province, COUNT(*) as top100_count FROM ranking_table WHERE year = " + year + " AND ranking <= 100 GROUP BY province ORDER BY top100_count DESC");
List<Row> top100List = provinceTop100Count.collectAsList();
Map<String, Integer> provinceTop100Map = new HashMap<>();
for (Row row : top100List) {
provinceTop100Map.put(row.getString(0), (int) row.getLong(1));
}
Dataset<Row> regionDistribution = spark.sql("SELECT CASE WHEN province IN ('北京', '天津', '河北', '山西', '内蒙古') THEN '华北地区' WHEN province IN ('辽宁', '吉林', '黑龙江') THEN '东北地区' WHEN province IN ('上海', '江苏', '浙江', '安徽', '福建', '江西', '山东') THEN '华东地区' WHEN province IN ('河南', '湖北', '湖南') THEN '华中地区' WHEN province IN ('广东', '广西', '海南') THEN '华南地区' WHEN province IN ('重庆', '四川', '贵州', '云南', '西藏') THEN '西南地区' WHEN province IN ('陕西', '甘肃', '青海', '宁夏', '新疆') THEN '西北地区' ELSE '其他地区' END as region, COUNT(*) as region_count, AVG(total_score) as region_avg_score FROM ranking_table WHERE year = " + year + " GROUP BY region ORDER BY region_count DESC");
List<Row> regionList = regionDistribution.collectAsList();
Map<String, Map<String, Object>> regionDataMap = new HashMap<>();
for (Row row : regionList) {
Map<String, Object> regionData = new HashMap<>();
regionData.put("count", (int) row.getLong(1));
regionData.put("avgScore", row.getDouble(2));
regionDataMap.put(row.getString(0), regionData);
}
result.put("year", year);
result.put("provinceCountMap", provinceCountMap);
result.put("provinceAvgScoreMap", provinceAvgScoreMap);
result.put("provinceTop10Map", provinceTop10Map);
result.put("provinceTop100Map", provinceTop100Map);
result.put("regionDataMap", regionDataMap);
return result;
}
}
基于大数据的近8年软科中国大学排名数据可视化分析系统文档展示
💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐