一、个人简介

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

二、系统介绍

大数据框架:Hadoop+Spark(本次没用Hive,支持定制)
开发语言:Python
后端框架:Django
前端:Vue
详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy
数据库:MySQL

基于大数据的肥胖风险分析与可视化系统通过Hadoop与Spark构建了分布式数据处理架构,能够对海量的健康数据进行存储和计算分析。系统后端采用Django框架开发,前端使用Vue技术实现交互界面,数据存储依托MySQL数据库完成。在数据处理层面,系统运用Spark SQL对HDFS中的肥胖相关数据执行查询操作,结合Pandas与NumPy完成统计分析任务。功能模块涵盖了数据大屏展示、肥胖数据管理、多因素分析等内容,通过生活方式分析模块可以挖掘运动习惯与体重变化之间的关联,饮食习惯分析模块则对膳食结构进行评估,人口统计学分析模块从年龄、性别等维度切入研究肥胖分布特征。系统首页提供了导航入口,个人中心支持用户信息维护,数据大屏以可视化图表的形式呈现分析结果,帮助使用者直观理解肥胖风险的影响因素,为健康管理提供了数据支撑。

三、视频解说

基于大数据的肥胖风险分析与可视化系统–演示视频

四、部分功能展示

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

五、部分代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, count, when, sum as spark_sum, round as spark_round
from django.http import JsonResponse
from django.views import View
import pandas as pd
import numpy as np
import json

spark = SparkSession.builder.appName("ObesityRiskAnalysis").config("spark.sql.warehouse.dir", "/user/hive/warehouse").config("spark.executor.memory", "2g").config("spark.driver.memory", "1g").enableHiveSupport().getOrCreate()

class MultiFactorAnalysisView(View):
    def post(self, request):
        try:
            params = json.loads(request.body)
            age_range = params.get('age_range', [0, 100])
            gender = params.get('gender', 'all')
            hdfs_path = "hdfs://localhost:9000/obesity_data/health_records.csv"
            df = spark.read.csv(hdfs_path, header=True, inferSchema=True)
            filtered_df = df.filter((col("age") >= age_range[0]) & (col("age") <= age_range[1]))
            if gender != 'all':
                filtered_df = filtered_df.filter(col("gender") == gender)
            bmi_df = filtered_df.withColumn("bmi", spark_round(col("weight") / ((col("height") / 100) * (col("height") / 100)), 2))
            bmi_df = bmi_df.withColumn("obesity_level", when(col("bmi") < 18.5, "偏瘦").when((col("bmi") >= 18.5) & (col("bmi") < 24), "正常").when((col("bmi") >= 24) & (col("bmi") < 28), "超重").otherwise("肥胖"))
            correlation_data = bmi_df.select("bmi", "exercise_hours", "sleep_hours", "stress_level").toPandas()
            correlation_matrix = correlation_data.corr()
            obesity_stats = bmi_df.groupBy("obesity_level").agg(count("*").alias("count"), avg("exercise_hours").alias("avg_exercise"), avg("sleep_hours").alias("avg_sleep"), avg("stress_level").alias("avg_stress"))
            stats_result = obesity_stats.collect()
            result_list = []
            for row in stats_result:
                result_list.append({"level": row["obesity_level"], "count": row["count"], "avg_exercise": round(float(row["avg_exercise"]), 2), "avg_sleep": round(float(row["avg_sleep"]), 2), "avg_stress": round(float(row["avg_stress"]), 2)})
            correlation_dict = correlation_matrix.to_dict()
            response_data = {"status": "success", "obesity_distribution": result_list, "correlation_matrix": correlation_dict, "total_records": filtered_df.count()}
            return JsonResponse(response_data)
        except Exception as e:
            return JsonResponse({"status": "error", "message": str(e)})

class LifestyleAnalysisView(View):
    def post(self, request):
        try:
            params = json.loads(request.body)
            user_id = params.get('user_id')
            time_range = params.get('time_range', 30)
            hdfs_lifestyle_path = "hdfs://localhost:9000/obesity_data/lifestyle_records.csv"
            lifestyle_df = spark.read.csv(hdfs_lifestyle_path, header=True, inferSchema=True)
            user_data = lifestyle_df.filter(col("user_id") == user_id).filter(col("record_date") >= f"date_sub(current_date(), {time_range})")
            exercise_analysis = user_data.groupBy("exercise_type").agg(spark_sum("exercise_duration").alias("total_duration"), count("*").alias("frequency"), avg("calories_burned").alias("avg_calories"))
            exercise_result = exercise_analysis.collect()
            exercise_list = []
            for row in exercise_result:
                exercise_list.append({"type": row["exercise_type"], "total_duration": float(row["total_duration"]), "frequency": row["frequency"], "avg_calories": round(float(row["avg_calories"]), 2)})
            sedentary_data = user_data.select("sedentary_hours", "record_date").toPandas()
            sedentary_trend = sedentary_data.groupby("record_date")["sedentary_hours"].mean().to_dict()
            activity_score = user_data.withColumn("activity_score", (col("exercise_duration") * 2 - col("sedentary_hours") * 0.5))
            avg_activity_score = activity_score.agg(avg("activity_score").alias("avg_score")).collect()[0]["avg_score"]
            weight_change = user_data.select("weight", "record_date").orderBy("record_date").toPandas()
            if len(weight_change) > 1:
                weight_change["weight_diff"] = weight_change["weight"].diff()
                weight_trend = weight_change[["record_date", "weight", "weight_diff"]].to_dict(orient="records")
            else:
                weight_trend = []
            response_data = {"status": "success", "exercise_analysis": exercise_list, "sedentary_trend": sedentary_trend, "avg_activity_score": round(float(avg_activity_score), 2) if avg_activity_score else 0, "weight_trend": weight_trend}
            return JsonResponse(response_data)
        except Exception as e:
            return JsonResponse({"status": "error", "message": str(e)})

class DietAnalysisView(View):
    def post(self, request):
        try:
            params = json.loads(request.body)
            user_id = params.get('user_id')
            analysis_days = params.get('days', 7)
            hdfs_diet_path = "hdfs://localhost:9000/obesity_data/diet_records.csv"
            diet_df = spark.read.csv(hdfs_diet_path, header=True, inferSchema=True)
            user_diet = diet_df.filter(col("user_id") == user_id).filter(col("meal_date") >= f"date_sub(current_date(), {analysis_days})")
            nutrition_summary = user_diet.groupBy("meal_type").agg(spark_sum("calories").alias("total_calories"), spark_sum("protein").alias("total_protein"), spark_sum("carbohydrate").alias("total_carbs"), spark_sum("fat").alias("total_fat"), count("*").alias("meal_count"))
            nutrition_result = nutrition_summary.collect()
            nutrition_list = []
            for row in nutrition_result:
                nutrition_list.append({"meal_type": row["meal_type"], "total_calories": float(row["total_calories"]), "total_protein": round(float(row["total_protein"]), 2), "total_carbs": round(float(row["total_carbs"]), 2), "total_fat": round(float(row["total_fat"]), 2), "meal_count": row["meal_count"]})
            daily_intake = user_diet.groupBy("meal_date").agg(spark_sum("calories").alias("daily_calories"), spark_sum("protein").alias("daily_protein"), spark_sum("carbohydrate").alias("daily_carbs"), spark_sum("fat").alias("daily_fat"))
            daily_result = daily_intake.toPandas()
            daily_avg = {"avg_calories": round(daily_result["daily_calories"].mean(), 2), "avg_protein": round(daily_result["daily_protein"].mean(), 2), "avg_carbs": round(daily_result["daily_carbs"].mean(), 2), "avg_fat": round(daily_result["daily_fat"].mean(), 2)}
            food_frequency = user_diet.groupBy("food_name").agg(count("*").alias("frequency")).orderBy(col("frequency").desc()).limit(10)
            top_foods = [{"food": row["food_name"], "frequency": row["frequency"]} for row in food_frequency.collect()]
            calorie_distribution = user_diet.withColumn("calorie_level", when(col("calories") < 300, "低热量").when((col("calories") >= 300) & (col("calories") < 600), "中热量").otherwise("高热量"))
            calorie_stats = calorie_distribution.groupBy("calorie_level").agg(count("*").alias("count"))
            calorie_dist = {row["calorie_level"]: row["count"] for row in calorie_stats.collect()}
            response_data = {"status": "success", "nutrition_by_meal": nutrition_list, "daily_average": daily_avg, "top_foods": top_foods, "calorie_distribution": calorie_dist}
            return JsonResponse(response_data)
        except Exception as e:
            return JsonResponse({"status": "error", "message": str(e)})

六、部分文档展示

在这里插入图片描述

七、END

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐