基于大数据的全球咖啡消费与健康影响分析系统【python、Hadoop、spark、python毕设项目、毕设必备项目、毕设、课设】【附源码+数据集+文档】

13 阅读5分钟

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

@TOC

基于大数据的全球咖啡消费与健康影响分析系统介绍

基于大数据的全球咖啡消费与健康影响分析系统演示视频

演示视频

基于大数据的全球咖啡消费与健康影响分析系统演示图片

健康风险分析.png

咖啡消费分析.png

人群画像分析.png

生活方式分析.png

数据大屏上.png

数据大屏下.png

睡眠质量分析.png

综合健康分析.png

基于大数据的全球咖啡消费与健康影响分析系统代码展示

from pyspark.sql import SparkSession, Window
from pyspark.sql.functions import col, when, avg, count, countDistinct, sum as _sum, lit, round as _round, broadcast, row_number
# 以下代码块展示了核心业务处理逻辑,假设数据已存为parquet格式并从指定路径加载
spark = SparkSession.builder.appName("GlobalCoffeeHealthAnalysis").master("local[*]").getOrCreate()
def analyze_crowd_profile(spark_session, data_path):
    """人群画像分析核心处理函数"""
    df = spark_session.read.parquet(data_path) # 1. 加载用户基础信息和消费数据
    age_binned_df = df.withColumn("age_group", # 2. 创建年龄分段,便于分组统计
                                when(col("age") < 25, "Under 25")
                                .when((col("age") >= 25) & (col("age") < 40), "25-39")
                                .when((col("age") >= 40) & (col("age") < 60), "40-59")
                                .otherwise("60+"))
    profile_df = age_binned_df.groupBy("age_group", "gender") # 3. 按年龄段和性别进行分组
    aggregated_df = profile_df.agg( # 4. 对每个分组进行多维度聚合计算
        _round(avg("cups_per_day"), 2).alias("avg_cups_per_day"), # a. 计算平均每日咖啡消费杯数
        _round(avg("lifestyle_score"), 2).alias("avg_lifestyle_score"), # b. 计算平均生活方式得分
        count("*").alias("total_users"), # c. 统计总人数
        _sum(when(col("has_insomnia") == True, 1).otherwise(0)).alias("insomnia_count") # d. 统计有睡眠问题的人数
    )
    final_profile_df = aggregated_df.withColumn( # 5. 计算每个画像中存在睡眠问题的用户比例
        "insomnia_ratio",
        _round(col("insomnia_count") / col("total_users"), 2)
    )
    result_df = final_profile_df.filter(col("total_users") > 100) # 6. 筛选出用户数大于100的画像,使其更具代表性
    sorted_result = result_df.orderBy(col("avg_cups_per_day").desc()) # 7. 按平均消费杯数降序排列,找出消费主力人群
    result_json = sorted_result.toJSON().collect() # 8. 为了方便前端展示,将结果转换为JSON格式字符串列表
    return result_json # 9. 返回最终处理结果
def analyze_health_risk(spark_session, data_path):
    """健康风险分析核心处理函数"""
    df = spark_session.read.parquet(data_path) # 1. 加载用户的健康指标和消费数据
    risk_df = df.withColumn("risk_level", # 2. 根据业务规则定义健康风险等级
                            when((col("cups_per_day") > 4) & ((col("blood_pressure_systolic") > 140) | (col("heart_rate") > 100)), "High")
                            .when((col("cups_per_day") > 2) & ((col("blood_pressure_systolic") > 130) | (col("heart_rate") > 90)), "Medium")
                            .otherwise("Low"))
    risk_by_coffee_type = risk_df.groupBy("coffee_type", "risk_level").agg(count("*").alias("user_count")) # 3. 统计不同咖啡类型的风险人群分布
    pivoted_df = risk_by_coffee_type.groupBy("coffee_type").pivot("risk_level", ["High", "Medium", "Low"]).sum("user_count") # 4. 使用pivot将风险等级转为列
    final_risk_analysis_df = pivoted_df.na.fill(0) # 5. 将pivoted_df中可能出现的null值填充为0,确保数据完整性
    total_users_per_type = risk_df.groupBy("coffee_type").agg(count("*").alias("total_users")) # 6. 计算每种咖啡类型的总用户数
    joined_df = final_risk_analysis_df.join(broadcast(total_users_per_type), "coffee_type") # 7. 将风险分布数据与总用户数进行连接,使用广播优化
    result_with_ratio = joined_df.withColumn( # 8. 计算高风险人群占比
        "high_risk_ratio",
        _round(col("High") / col("total_users"), 3)
    )
    sorted_result = result_with_ratio.orderBy(col("high_risk_ratio").desc()) # 9. 按高风险比例降序排列,找出风险最高的咖啡类型
    result_json = sorted_result.toJSON().collect() # 10. 收集结果并转换为JSON格式返回
    return result_json # 11. 返回分析结果
def analyze_coffee_consumption(spark_session, data_path):
    """咖啡消费分析核心处理函数"""
    df = spark_session.read.parquet(data_path) # 1. 加载包含国家、消费类型等信息的数据
    country_consumption_df = df.groupBy("country").agg( # 2. 计算每个国家/地区的总消费量和平均消费量
        _sum("cups_per_day").alias("total_cups"),
        _round(avg("cups_per_day"), 2).alias("avg_cups_per_day"),
        countDistinct("user_id").alias("total_consumers")
    )
    type_counts_df = df.groupBy("country", "coffee_type").agg(count("*").alias("type_consumer_count")) # 3. 统计每个国家每种咖啡类型的消费人数
    window_spec = Window.partitionBy("country").orderBy(col("type_consumer_count").desc()) # 4. 定义窗口函数,为每个国家内的咖啡类型按消费人数排名
    ranked_type_df = type_counts_df.withColumn("rank", row_number().over(window_spec)) # 5. 应用窗口函数进行排名
    most_popular_type_df = ranked_type_df.filter(col("rank") == 1).select("country", col("coffee_type").alias("most_popular_type")) # 6. 筛选出每个国家排名第一的咖啡类型
    final_consumption_analysis_df = country_consumption_df.join( # 7. 将国家总体消费数据与最受欢迎类型数据进行左连接
        broadcast(most_popular_type_df),
        "country",
        "left_outer"
    )
    sorted_result = final_consumption_analysis_df.orderBy(col("total_cups").desc()) # 8. 按总消费量对结果进行降序排序
    final_columns = sorted_result.select("country", "total_cups", "avg_cups_per_day", "total_consumers", "most_popular_type") # 9. 选择最终需要展示给前端的列
    result_df_filled = final_columns.na.fill({"most_popular_type": "N/A"}) # 10. 填充可能因left_outer join产生的null值
    result_json = result_df_filled.toJSON().collect() # 11. 收集结果并转换为JSON格式返回
    return result_json # 12. 返回最终分析结果

基于大数据的全球咖啡消费与健康影响分析系统文档展示

文档.png

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