基于大数据的体脂数据可视化分析系统【Hadoop、spark、Django、课程毕设、毕业选题、数据分析、数据爬取、数据可视化】

37 阅读6分钟

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

@TOC

基于大数据的体脂数据可视化分析系统介绍

《基于大数据的体脂数据可视化分析系统》是一套融合现代大数据处理技术与健康数据分析的综合性平台,采用Hadoop分布式存储架构结合Spark大数据计算引擎作为核心技术支撑,通过HDFS实现海量体脂数据的可靠存储,运用Spark SQL进行高效的数据查询与处理,并集成Pandas、NumPy等数据科学库实现复杂的统计分析计算。系统前端采用Vue框架配合ElementUI组件库构建现代化用户界面,通过Echarts图表库实现丰富的数据可视化效果,后端基于Django或Spring Boot框架提供稳定的API服务支持,数据持久化层采用MySQL数据库确保数据安全性。系统核心功能涵盖大屏可视化展示、核心指标分布分析、年龄结构体脂分析、BMI健康评估分析、BMI与体脂率一致性分析、腰臀比健康风险分析等多维度健康评估模块,特别集成了K-Means聚类算法实现不同体型簇群特征分析,通过密度与体脂关系分析、腹围与体脂率回归分析、关键围度相关性分析、身体围度均值分析以及腰围身高比健康风险分析等高级分析功能,为用户提供科学、全面的体脂健康评估报告,同时支持个人信息管理、密码修改等基础管理功能,实现了大数据技术与健康管理领域的深度融合应用。

基于大数据的体脂数据可视化分析系统演示视频

演示视频

基于大数据的体脂数据可视化分析系统演示图片

BMI与体脂率一致性分析.png

关键围度相关性分析.png

核心指标分布分析.png

年龄结构体脂分析.png

数据大屏.png

腰臀比健康风险分析.png

基于大数据的体脂数据可视化分析系统代码展示

from pyspark.sql import SparkSession
from pyspark.ml.clustering import KMeans
from pyspark.ml.feature import VectorAssembler
from pyspark.sql.functions import col, avg, stddev, corr, when, count
import pandas as pd
import numpy as np
from django.http import JsonResponse
spark = SparkSession.builder.appName("BodyFatAnalysisSystem").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
def kmeans_clustering_analysis(request):
    df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/bodyfat_db").option("dbtable", "body_measurements").option("user", "root").option("password", "password").option("driver", "com.mysql.cj.jdbc.Driver").load()
    feature_cols = ["height", "weight", "body_fat_rate", "waist_circumference", "hip_circumference", "bmi"]
    assembler = VectorAssembler(inputCols=feature_cols, outputCol="features")
    feature_df = assembler.transform(df)
    kmeans = KMeans(k=5, seed=42, featuresCol="features", predictionCol="cluster")
    model = kmeans.fit(feature_df)
    predictions = model.transform(feature_df)
    cluster_stats = predictions.groupBy("cluster").agg(avg("body_fat_rate").alias("avg_body_fat"), avg("bmi").alias("avg_bmi"), avg("waist_circumference").alias("avg_waist"), count("*").alias("count"))
    cluster_centers = model.clusterCenters()
    result_data = []
    for i, center in enumerate(cluster_centers):
        stats = cluster_stats.filter(col("cluster") == i).collect()[0]
        cluster_info = {"cluster_id": i, "center_height": round(center[0], 2), "center_weight": round(center[1], 2), "center_body_fat": round(center[2], 2), "center_waist": round(center[3], 2), "center_hip": round(center[4], 2), "center_bmi": round(center[5], 2), "avg_body_fat": round(stats["avg_body_fat"], 2), "avg_bmi": round(stats["avg_bmi"], 2), "avg_waist": round(stats["avg_waist"], 2), "member_count": stats["count"]}
        result_data.append(cluster_info)
    silhouette_score = model.computeCost(feature_df)
    return JsonResponse({"status": "success", "clusters": result_data, "silhouette_score": round(silhouette_score, 4), "total_samples": df.count()})
def bmi_bodyfat_consistency_analysis(request):
    df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/bodyfat_db").option("dbtable", "body_measurements").option("user", "root").option("password", "password").option("driver", "com.mysql.cj.jdbc.Driver").load()
    bmi_categorized = df.withColumn("bmi_category", when(col("bmi") < 18.5, "underweight").when((col("bmi") >= 18.5) & (col("bmi") < 24), "normal").when((col("bmi") >= 24) & (col("bmi") < 28), "overweight").otherwise("obese"))
    bodyfat_categorized = bmi_categorized.withColumn("bodyfat_category", when((col("gender") == "male") & (col("body_fat_rate") < 10), "low").when((col("gender") == "male") & (col("body_fat_rate") >= 10) & (col("body_fat_rate") < 20), "normal").when((col("gender") == "male") & (col("body_fat_rate") >= 20), "high").when((col("gender") == "female") & (col("body_fat_rate") < 16), "low").when((col("gender") == "female") & (col("body_fat_rate") >= 16) & (col("body_fat_rate") < 25), "normal").otherwise("high"))
    consistency_matrix = bodyfat_categorized.groupBy("bmi_category", "bodyfat_category").count()
    total_count = df.count()
    consistency_stats = consistency_matrix.withColumn("percentage", (col("count") / total_count * 100))
    correlation_coeff = df.select(corr("bmi", "body_fat_rate").alias("correlation")).collect()[0]["correlation"]
    consistent_records = bodyfat_categorized.filter(((col("bmi_category") == "underweight") & (col("bodyfat_category") == "low")) | ((col("bmi_category") == "normal") & (col("bodyfat_category") == "normal")) | ((col("bmi_category") == "overweight") & (col("bodyfat_category") == "high")) | ((col("bmi_category") == "obese") & (col("bodyfat_category") == "high"))).count()
    consistency_rate = (consistent_records / total_count) * 100
    matrix_data = consistency_stats.collect()
    matrix_result = [{"bmi_category": row["bmi_category"], "bodyfat_category": row["bodyfat_category"], "count": row["count"], "percentage": round(row["percentage"], 2)} for row in matrix_data]
    return JsonResponse({"status": "success", "consistency_matrix": matrix_result, "correlation_coefficient": round(correlation_coeff, 4), "consistency_rate": round(consistency_rate, 2), "total_samples": total_count})
def core_indicators_distribution_analysis(request):
    df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/bodyfat_db").option("dbtable", "body_measurements").option("user", "root").option("password", "password").option("driver", "com.mysql.cj.jdbc.Driver").load()
    core_stats = df.agg(avg("body_fat_rate").alias("avg_bodyfat"), stddev("body_fat_rate").alias("std_bodyfat"), avg("bmi").alias("avg_bmi"), stddev("bmi").alias("std_bmi"), avg("waist_circumference").alias("avg_waist"), stddev("waist_circumference").alias("std_waist"), avg("hip_circumference").alias("avg_hip"), stddev("hip_circumference").alias("std_hip"))
    stats_result = core_stats.collect()[0]
    bodyfat_distribution = df.withColumn("bodyfat_range", when(col("body_fat_rate") < 10, "0-10%").when((col("body_fat_rate") >= 10) & (col("body_fat_rate") < 15), "10-15%").when((col("body_fat_rate") >= 15) & (col("body_fat_rate") < 20), "15-20%").when((col("body_fat_rate") >= 20) & (col("body_fat_rate") < 25), "20-25%").when((col("body_fat_rate") >= 25) & (col("body_fat_rate") < 30), "25-30%").otherwise("30%+")).groupBy("bodyfat_range").count()
    bmi_distribution = df.withColumn("bmi_range", when(col("bmi") < 18.5, "underweight").when((col("bmi") >= 18.5) & (col("bmi") < 24), "normal").when((col("bmi") >= 24) & (col("bmi") < 28), "overweight").otherwise("obese")).groupBy("bmi_range").count()
    gender_stats = df.groupBy("gender").agg(avg("body_fat_rate").alias("avg_bodyfat"), avg("bmi").alias("avg_bmi"), avg("waist_circumference").alias("avg_waist"), count("*").alias("count"))
    age_group_stats = df.withColumn("age_group", when(col("age") < 25, "18-25").when((col("age") >= 25) & (col("age") < 35), "25-35").when((col("age") >= 35) & (col("age") < 45), "35-45").otherwise("45+")).groupBy("age_group").agg(avg("body_fat_rate").alias("avg_bodyfat"), avg("bmi").alias("avg_bmi"), count("*").alias("count"))
    bodyfat_dist_data = [{"range": row["bodyfat_range"], "count": row["count"]} for row in bodyfat_distribution.collect()]
    bmi_dist_data = [{"range": row["bmi_range"], "count": row["count"]} for row in bmi_distribution.collect()]
    gender_data = [{"gender": row["gender"], "avg_bodyfat": round(row["avg_bodyfat"], 2), "avg_bmi": round(row["avg_bmi"], 2), "avg_waist": round(row["avg_waist"], 2), "count": row["count"]} for row in gender_stats.collect()]
    age_data = [{"age_group": row["age_group"], "avg_bodyfat": round(row["avg_bodyfat"], 2), "avg_bmi": round(row["avg_bmi"], 2), "count": row["count"]} for row in age_group_stats.collect()]
    return JsonResponse({"status": "success", "overall_stats": {"avg_bodyfat": round(stats_result["avg_bodyfat"], 2), "std_bodyfat": round(stats_result["std_bodyfat"], 2), "avg_bmi": round(stats_result["avg_bmi"], 2), "std_bmi": round(stats_result["std_bmi"], 2), "avg_waist": round(stats_result["avg_waist"], 2), "std_waist": round(stats_result["std_waist"], 2), "avg_hip": round(stats_result["avg_hip"], 2), "std_hip": round(stats_result["std_hip"], 2)}, "bodyfat_distribution": bodyfat_dist_data, "bmi_distribution": bmi_dist_data, "gender_analysis": gender_data, "age_group_analysis": age_data})

基于大数据的体脂数据可视化分析系统文档展示

文档.png

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