💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
@TOC
基于大数据的全球咖啡消费与健康影响分析系统介绍
基于大数据的全球咖啡消费与健康影响分析系统演示视频
基于大数据的全球咖啡消费与健康影响分析系统演示图片
基于大数据的全球咖啡消费与健康影响分析系统代码展示
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. 返回最终分析结果
基于大数据的全球咖啡消费与健康影响分析系统文档展示
💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目