当前位置: 首页 > news >正文

网站建设遵循原则邢台做wap网站找谁

网站建设遵循原则,邢台做wap网站找谁,谷歌广告上海有限公司,asp网站ftp入侵1.项目背景 在当今社会#xff0c;随着人们对健康和营养的日益关注#xff0c;深入了解食品的营养成分及其对人体的影响变得越来越重要#xff0c;本研究采用了多维度的分析方法#xff0c;包括营养成分比较分析、统计检验、营养密度分析和高斯混合模型#xff08;GMM随着人们对健康和营养的日益关注深入了解食品的营养成分及其对人体的影响变得越来越重要本研究采用了多维度的分析方法包括营养成分比较分析、统计检验、营养密度分析和高斯混合模型GMM聚类分析揭示了不同食品类别在营养成分上的显著差异以及各种营养素之间复杂的相互关系。 2.Python库导入及数据读取 import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt import ipywidgets as widgets from IPython.display import display, clear_output from pyecharts import options as opts from pyecharts.charts import Radar from pyecharts.globals import ThemeType from scipy.stats import spearmanr from scipy import stats from sklearn.preprocessing import StandardScaler from sklearn.mixture import GaussianMixture from sklearn.decomposition import PCAdata pd.read_csv(/home/mw/project/翻译后的食品营养成分数据.csv)3.数据预览及预处理 # 查看数据信息 data.info()class pandas.core.frame.DataFrame RangeIndex: 1171 entries, 0 to 1170 Data columns (total 59 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 食品名称 1171 non-null object 1 类别名称 1171 non-null object 2 钙 1146 non-null float643 热量 1171 non-null int64 4 碳水化合物 1171 non-null int64 5 胆固醇 1116 non-null float646 铜 1092 non-null float647 脂肪 1171 non-null int64 8 纤维 1073 non-null float649 叶酸 1069 non-null float6410 铁 1151 non-null float6411 镁 1111 non-null float6412 单不饱和脂肪 1063 non-null float6413 净碳水化合物 1170 non-null float6414 Omega-3 DHA二十二碳六烯酸 900 non-null float6415 Omega-3 DPA二十二碳五烯酸 893 non-null float6416 Omega-3 EPA二十碳五烯酸 901 non-null float6417 磷 1124 non-null float6418 多不饱和脂肪 1063 non-null float6419 钾 1127 non-null float6420 蛋白质 1171 non-null int64 21 饱和脂肪 1091 non-null float6422 硒 1018 non-null float6423 钠 1150 non-null float6424 反式脂肪 630 non-null float6425 维生素A 1115 non-null float6426 维生素A RAE视黄醇活性当量 1054 non-null float6427 维生素B1硫胺素 1113 non-null float6428 维生素B12 1081 non-null float6429 维生素B2核黄素 1114 non-null float6430 维生素B3烟酸 1113 non-null float6431 维生素B5泛酸 975 non-null float6432 维生素B6吡哆醇 1089 non-null float6433 维生素C 1121 non-null float6434 锌 1106 non-null float6435 胆碱 730 non-null float6436 果糖 301 non-null float6437 组氨酸 709 non-null float6438 异亮氨酸 713 non-null float6439 亮氨酸 713 non-null float6440 赖氨酸 721 non-null float6441 锰 1012 non-null float6442 甲硫氨酸 718 non-null float6443 苯丙氨酸 710 non-null float6444 淀粉 198 non-null float6445 糖 871 non-null float6446 苏氨酸 712 non-null float6447 色氨酸 710 non-null float6448 缬氨酸 713 non-null float6449 维生素D 826 non-null float6450 维生素E 814 non-null float6451 维生素K 789 non-null float6452 Omega-3 ALAα-亚麻酸 176 non-null float6453 Omega-6 二十碳二烯酸 264 non-null float6454 Omega-6 γ-亚麻酸 170 non-null float6455 Omega-3 二十碳三烯酸 113 non-null float6456 Omega-6 二十碳四烯酸 118 non-null float6457 Omega-6 亚油酸 140 non-null float6458 Omega-6 花生四烯酸 1 non-null float64 dtypes: float64(53), int64(4), object(2) memory usage: 539.9 KB数据集包含1171条记录和59个字段有些字段存在缺失值数据纬度是比较大的结合“该营养素是否为人类必需”、“该营养素是否提供能量”对数据集统计的营养素进行了分类重新构建新的数据。 分类必需且供给充足必需但不供给充足非必需且供给充足非必需但不供给充足宏量营养素蛋白质 (含氨基酸: Histidine, Isoleucine, Leucine, Lysine, Methionine, Phenylalanine, Threonine, Tryptophan, Valine)√碳水化合物 (Carbs, Fiber, Starch, Sugar, Fructose, Net carbs)√脂肪 (Fats, Monounsaturated Fat, Polyunsaturated fat, Saturated Fat, Omega-3 - ALA, Omega-6 - Linoleic acid)√反式脂肪 (Trans Fat)√微量营养素钙 (Calcium)√铜 (Copper)√铁 (Iron)√镁 (Magnesium)√锰 (Manganese)√磷 (Phosphorus)√钾 (Potassium)√硒 (Selenium)√锌 (Zinc)√维生素A (Vitamin A, Vitamin A RAE)√维生素B群 (Vitamin B1, Vitamin B2, Vitamin B3, Vitamin B5, Vitamin B6, Vitamin B12, Folate, Choline)√维生素C (Vitamin C)√维生素D (Vitamin D)√维生素E (Vitamin E)√维生素K (Vitamin K)√Omega-3 (DHA, DPA, EPA)√Omega-3 (ALA)√Omega-6 (Linoleic acid)√Omega-6 (其他)√胆固醇 (Cholesterol)√钠 (Sodium)√ 说明 宏量营养素: 这些是人体需要大量摄入的营养素, 用于提供能量和构建身体组织。 蛋白质碳水化合物包括纤维、淀粉、糖脂肪包括饱和脂肪、单不饱和脂肪、多不饱和脂肪、反式脂肪、Omega-3 和 Omega-6 脂肪酸等 微量营养素: 这些是人体只需要少量的营养素主要用于调节生理过程。 维生素如维生素 A、B群、C、D、E、K 等矿物质如钙、镁、锌、铁、锰等 宏量营养素的主要目的是提供能量。碳水化合物、蛋白质和脂肪是三种主要提供能量的营养素。 微量营养素的维生素和矿物质则主要用于促进生理过程。 反式脂肪被认为是有害的脂肪类型应该尽量避免摄入。 胆固醇: 虽然人体自我调节胆固醇, 但胆固醇摄入量过多时可能会提高血胆固醇水平。对某些人群如有高胆固醇血症风险的人仍然需要关注摄入量。 钠: 钠是必需的电解质, 对维持正常的生理功能至关重要。然而, 由于现代饮食中钠摄入量通常过高导致高血压问题钠应视为微量营养素并限制摄入量。 combined_nutrition_data pd.DataFrame()combined_nutrition_data[食品名称] data[食品名称] combined_nutrition_data[类别名称] data[类别名称] combined_nutrition_data[热量] data[热量]# 蛋白质 (含氨基酸) amino_acids [组氨酸, 异亮氨酸, 亮氨酸, 赖氨酸, 甲硫氨酸, 苯丙氨酸, 苏氨酸, 色氨酸, 缬氨酸] combined_nutrition_data[蛋白质] data[[蛋白质] amino_acids].sum(axis1, min_count1)# 碳水化合物 carbs [碳水化合物, 纤维, 淀粉, 糖, 果糖, 净碳水化合物] combined_nutrition_data[碳水化合物] data[carbs].sum(axis1, min_count1)# 脂肪 fats [脂肪, 单不饱和脂肪, 多不饱和脂肪, 饱和脂肪, Omega-3 ALAα-亚麻酸, Omega-6 亚油酸] combined_nutrition_data[脂肪] data[fats].sum(axis1, min_count1)# 反式脂肪 combined_nutrition_data[反式脂肪] data[反式脂肪]# 矿物质 minerals [钙, 铜, 铁, 镁, 锰, 磷, 钾, 硒, 锌, 钠] for mineral in minerals:combined_nutrition_data[mineral] data[mineral]# 维生素A combined_nutrition_data[维生素A] data[[维生素A, 维生素A RAE视黄醇活性当量]].sum(axis1, min_count1)# 维生素B群 vitamin_b [维生素B1硫胺素, 维生素B2核黄素, 维生素B3烟酸, 维生素B5泛酸, 维生素B6吡哆醇, 维生素B12, 叶酸, 胆碱] combined_nutrition_data[维生素B] data[vitamin_b].sum(axis1, min_count1)# 其他维生素 for vit in [维生素C, 维生素D, 维生素E, 维生素K]:combined_nutrition_data[vit] data[vit]# Omega-3 combined_nutrition_data[Omega-3 (DHA, DPA, EPA)] data[[Omega-3 DHA二十二碳六烯酸, Omega-3 DPA二十二碳五烯酸, Omega-3 EPA二十碳五烯酸]].sum(axis1, min_count1) combined_nutrition_data[Omega-3 (ALA)] data[Omega-3 ALAα-亚麻酸]# Omega-6 combined_nutrition_data[Omega-6 (亚油酸)] data[Omega-6 亚油酸] omega6_other [Omega-6 花生四烯酸, Omega-6 γ-亚麻酸, Omega-3 二十碳三烯酸, Omega-6 二十碳二烯酸] combined_nutrition_data[Omega-6 (其他)] data[omega6_other].sum(axis1, min_count1)# 胆固醇 combined_nutrition_data[胆固醇] data[胆固醇] combined_nutrition_data.info()class pandas.core.frame.DataFrame RangeIndex: 1171 entries, 0 to 1170 Data columns (total 28 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 食品名称 1171 non-null object 1 类别名称 1171 non-null object 2 热量 1171 non-null int64 3 蛋白质 1171 non-null float644 碳水化合物 1171 non-null float645 脂肪 1171 non-null float646 反式脂肪 630 non-null float647 钙 1146 non-null float648 铜 1092 non-null float649 铁 1151 non-null float6410 镁 1111 non-null float6411 锰 1012 non-null float6412 磷 1124 non-null float6413 钾 1127 non-null float6414 硒 1018 non-null float6415 锌 1106 non-null float6416 钠 1150 non-null float6417 维生素A 1116 non-null float6418 维生素B 1117 non-null float6419 维生素C 1121 non-null float6420 维生素D 826 non-null float6421 维生素E 814 non-null float6422 维生素K 789 non-null float6423 Omega-3 (DHA, DPA, EPA) 901 non-null float6424 Omega-3 (ALA) 176 non-null float6425 Omega-6 (亚油酸) 140 non-null float6426 Omega-6 (其他) 265 non-null float6427 胆固醇 1116 non-null float64 dtypes: float64(25), int64(1), object(2) memory usage: 256.3 KB考虑有些食品可能由于书写不同实际是同一种食品如 Gewürztraminer 和 Gewurztraminer在ChatGPT给出的翻译都是琼瑶浆而且初步观测发现所含元素也相同因此考虑可能还存在其他类似的食品对新数据检查重复值情况。 # 查看重复值 combined_nutrition_data.duplicated().sum()2存在两条重复值直接删除处理。 combined_nutrition_data combined_nutrition_data.drop_duplicates()plt.figure(figsize(20,12)) # 绘制热图显示缺失值的分布 sns.heatmap(combined_nutrition_data.isna(), cbarFalse, cmapviridis, yticklabelsFalse) plt.title(缺失值热图) plt.xlabel(字段名) plt.ylabel(样本索引) plt.xticks(rotation30) plt.show()通过缺失值热力图可以发现有些行缺失值比较多有些列缺失值比较多现在一步步来分析先看行缺失值的情况。 new_data combined_nutrition_data.copy() # 计算每行的缺失比例 row_missing_proportions new_data.isnull().mean(axis1)# 将缺失比例添加到数据框中以供后续分析 new_data[缺失比例] row_missing_proportions row_missing_proportions_summary new_data[[缺失比例]].describe() row_missing_proportions_summary缺失比例count1169.000000mean0.173805std0.130635min0.00000025%0.10714350%0.14285775%0.250000max0.750000 缺失比例统计 样本数1169平均缺失比例约17.38%最大缺失比例75% # 按照缺失比例从高到低进行排序并展示前5行信息 sorted_new_data new_data.sort_values(by缺失比例, ascendingFalse) sorted_new_data.head()食品名称类别名称热量蛋白质碳水化合物脂肪反式脂肪钙铜铁...维生素C维生素D维生素E维生素KOmega-3 (DHA, DPA, EPA)Omega-3 (ALA)Omega-6 (亚油酸)Omega-6 (其他)胆固醇缺失比例814麝香葡萄酒饮料827.0104.00.00.0NaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaN0.75817法国葡萄酒饮料867.074.00.00.0NaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaN0.75810雷司令饮料807.074.00.00.0NaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaN0.75809赛美蓉葡萄酒饮料827.062.00.00.0NaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaN0.75804灰皮诺葡萄酒饮料837.042.00.00.0NaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaN0.75 5 rows × 29 columns 以下内容由ChatGPT 4o 提供 根据查阅的资料像 灰皮诺葡萄酒Pinot Noir 和 麝香葡萄酒Muscat Wine 这类酒类饮品中维生素和矿物质的含量通常极低甚至可以忽略不计。这些饮品在营养成分表中诸如维生素A、C、D、E和K以及钙、铁、锌等矿物质基本上都是“0”或者“非常低”。 参考文献 详细的灰皮诺与麝香葡萄酒的营养比较关于灰皮诺的更多营养信息 因此大胆假设所有的缺失值均视为该元素含量极低或者未检测出这个元素因此用0来代替缺失值。 combined_nutrition_data combined_nutrition_data.fillna(0)# 查看食品类别情况 print(食品类别情况) print(combined_nutrition_data[类别名称].unique())食品类别情况 [水果 蔬菜 海鲜 乳制品 蘑菇 谷物 肉类 香料 坚果 绿叶蔬菜 甜食 油和酱料 饮料汤类 烘焙食品 快餐 主菜和配菜 婴儿食品]# 选择所有连续变量 continuous_columns combined_nutrition_data.select_dtypes(include[float64, int64]).columnsplt.figure(figsize(20, 20)) # 使用计数器来标识子图位置 for idx, column in enumerate(continuous_columns, 1): # enumerate 从1开始计数plt.subplot(4, 7, idx) # 定义4行7列的布局sns.boxplot(ycombined_nutrition_data[column])plt.title(f{column}的箱线图, fontsize14)plt.ylabel(数值, fontsize12)plt.grid(axisy, linestyle--, alpha0.7)plt.tight_layout() plt.show()输出一些极端异常值看看凭啥那么高。 # 找到“钙”列中最大值的索引 max_calcium_index combined_nutrition_data[钙].idxmax()combined_nutrition_data.loc[[max_calcium_index]]食品名称类别名称热量蛋白质碳水化合物脂肪反式脂肪钙铜铁...维生素B维生素C维生素D维生素E维生素KOmega-3 (DHA, DPA, EPA)Omega-3 (ALA)Omega-6 (亚油酸)Omega-6 (其他)胆固醇1003泡打粉烘焙食品530.058.00.00.05876.01.011.0...0.00.00.00.00.00.00.00.00.00.0 1 rows × 28 columns 在食安通上面查看发现确实没啥问题甚至食安通上面给的钙含量还更高。 # 找到“磷”列中最大值的索引 max_phosphorus_index combined_nutrition_data[磷].idxmax() combined_nutrition_data.loc[[max_phosphorus_index]]食品名称类别名称热量蛋白质碳水化合物脂肪反式脂肪钙铜铁...维生素B维生素C维生素D维生素E维生素KOmega-3 (DHA, DPA, EPA)Omega-3 (ALA)Omega-6 (亚油酸)Omega-6 (其他)胆固醇1003泡打粉烘焙食品530.058.00.00.05876.01.011.0...0.00.00.00.00.00.00.00.00.00.0 1 rows × 28 columns 还是泡打粉同样在食安通上查看发现没啥问题。。 # 找到“钾”列中最大值的索引 max_potassium_index combined_nutrition_data[钾].idxmax() combined_nutrition_data.loc[[max_potassium_index]]食品名称类别名称热量蛋白质碳水化合物脂肪反式脂肪钙铜铁...维生素B维生素C维生素D维生素E维生素KOmega-3 (DHA, DPA, EPA)Omega-3 (ALA)Omega-6 (亚油酸)Omega-6 (其他)胆固醇1004塔塔粉烘焙食品2580.0125.00.00.08.02.037.0...0.00.00.00.00.00.00.00.00.00.0 1 rows × 28 columns 同样塔塔粉在食安通上没问题其他元素也不查了再检查一下维生素A如果没问题就当数据没异常了。 # 找到维生素A含量最大的行 max_vitamin_a_index combined_nutrition_data[维生素A].idxmax() combined_nutrition_data.loc[[max_vitamin_a_index]]食品名称类别名称热量蛋白质碳水化合物脂肪反式脂肪钙铜铁...维生素B维生素C维生素D维生素E维生素KOmega-3 (DHA, DPA, EPA)Omega-3 (ALA)Omega-6 (亚油酸)Omega-6 (其他)胆固醇178鳕鱼肝油海鲜9020.00.0193.00.00.00.00.0...0.00.0250.00.00.0174.00.00.00.0570.0 1 rows × 28 columns 确实鱼肝油中含有大量的维生素A其他元素都不查了说明这个数据确实比较严谨但是在后续分析的时候由于数据是100g食物量变会导致质变在日常饮食摄入中像调料这些根本不可能食用这么多。 4.营养成分比较分析 4.1宏量营养素对比 plt.figure(figsize(20,8)) sns.boxplot(xcombined_nutrition_data[类别名称],ycombined_nutrition_data[蛋白质]) plt.title(不同食品类别中的蛋白质含量分布, fontsize16) plt.xlabel(食品类别) plt.ylabel(蛋白质含量) plt.show()plt.figure(figsize(20,8)) sns.boxplot(xcombined_nutrition_data[类别名称],ycombined_nutrition_data[碳水化合物]) plt.title(不同食品类别中的碳水化合物含量分布, fontsize16) plt.xlabel(食品类别) plt.ylabel(碳水化合物含量) plt.show()plt.figure(figsize(20,8)) sns.boxplot(xcombined_nutrition_data[类别名称],ycombined_nutrition_data[脂肪]) plt.title(不同食品类别中的脂肪含量分布, fontsize16) plt.xlabel(食品类别) plt.ylabel(脂肪含量) plt.show()plt.figure(figsize(20,8)) sns.boxplot(xcombined_nutrition_data[类别名称],ycombined_nutrition_data[反式脂肪]) plt.title(不同食品类别中的反式脂肪含量分布, fontsize16) plt.xlabel(食品类别) plt.ylabel(反式脂肪含量) plt.show()蛋白质含量分布 海鲜、肉类和坚果类食品的蛋白质含量最高中位数大约在300-400之间。水果、蔬菜和饮料的蛋白质含量最低中位数接近0。乳制品和谷物类食品的蛋白质含量居中中位数约为100-200。 碳水化合物含量分布 谷物类、甜食和烘焙制品的碳水化合物含量最高中位数在200左右。海鲜和肉类的碳水化合物含量最低中位数接近0。水果和蔬菜的碳水化合物含量适中中位数约为100-150。 脂肪含量分布 坚果类、油和酱料以及快餐食品的脂肪含量最高中位数在150-200左右。水果、蔬菜和饮料的脂肪含量最低中位数接近0。乳制品、肉类和海鲜的脂肪含量中等中位数约为50-150。 反式脂肪含量分布 大多数食品类别的反式脂肪含量都很低中位数接近0。快餐食品和烘焙制品的反式脂肪含量相对较高尤其是快餐食品有较大的离群值。乳制品也显示出一些反式脂肪含量但大多数样本仍然很低。 4.2热量对比 plt.figure(figsize(20,8)) sns.boxplot(xcombined_nutrition_data[类别名称],ycombined_nutrition_data[热量]) plt.title(不同食品类别中的热量分布, fontsize16) plt.xlabel(食品类别) plt.ylabel(热量) plt.show()高热量食品类别 坚果类食品热量最高中位数约为550-600分布相对集中。油和酱料类食品的热量次之中位数约为500-600且分布范围较广上限最高。甜食类热量分布范围大中位数约为350-400。快餐食品、烘焙产品和一些主菜及配菜的热量也较高中位数大约在300-400之间。 中等热量食品类别 乳制品、肉类和海鲜的热量处于中等水平中位数约为200-300。谷物类食品热量分布较广从低到高都有中位数约为150-200。 低热量食品类别 水果、蔬菜和蘑菇类食品的热量最低中位数都在100以下。绿叶蔬菜的热量尤其低中位数接近50或更低。 4.3同类食品的对比分析 这里食品选择了麦当劳的巨无霸和麦当劳的芝士汉堡然后元素选择了热量、脂肪、蛋白质、碳水化合物、反式脂肪读者感兴趣的话可以自寻选择其他品类的食物或者元素进行对比选择元素的话多选按住ctrl加鼠标左键即可。 def create_food_radar_chart(food_name1, food_name2, features):创建两个食物营养成分对比雷达图参数:food_name1 (str): 第一个选择的食物名称food_name2 (str): 第二个选择的食物名称features (list): 选择的营养特征列表返回:Radar: 生成的雷达图对象# 获取食物类别food_category combined_nutrition_data[combined_nutrition_data[食品名称] food_name1][类别名称].values[0]# 验证所选特征是否有效valid_features [f for f in features if f in combined_nutrition_data.columns]# 获取两个食物的数据和类别平均值food_data1 combined_nutrition_data[combined_nutrition_data[食品名称] food_name1][valid_features].values[0].tolist()food_data2 combined_nutrition_data[combined_nutrition_data[食品名称] food_name2][valid_features].values[0].tolist()category_avg combined_nutrition_data[combined_nutrition_data[类别名称] food_category][valid_features].mean().round().astype(int).tolist()# 计算每个特征的最大值max_values combined_nutrition_data[valid_features].max().round().astype(int).tolist()# 创建雷达图的指示器indicators [opts.RadarIndicatorItem(namefeature, max_max_value) for feature, max_value in zip(valid_features, max_values)]# 初始化雷达图radar Radar(init_optsopts.InitOpts(width800px, height600px, themeThemeType.LIGHT))radar.add_schema(schemaindicators)# 添加两个食物的数据和类别平均值到雷达图radar.add(food_name1, [food_data1], color#FF0000, symbolcircle, label_optsopts.LabelOpts(is_showFalse))radar.add(food_name2, [food_data2], color#00FF00, symbolrect, label_optsopts.LabelOpts(is_showFalse))radar.add(f{food_category} 平均, [category_avg], color#0000FF, symboldiamond, label_optsopts.LabelOpts(is_showFalse))# 设置全局选项radar.set_global_opts(title_optsopts.TitleOpts(titlef{food_name1}与{food_name2}营养成分对比雷达图,pos_top0%,pos_leftcenter),legend_optsopts.LegendOpts(selected_modemultiple, pos_bottom5%))return radardef update_chart(food1, food2, features):更新并显示雷达图参数:food1 (str): 第一个选择的食物名称food2 (str): 第二个选择的食物名称features (list): 选择的营养特征列表clear_output(waitTrue)chart create_food_radar_chart(food1, food2, features)display(chart.render_notebook())# 创建食物类别选择下拉菜单 category_dropdown widgets.Dropdown(optionssorted(combined_nutrition_data[类别名称].unique()),description选择食物类别:,style{description_width: initial} )# 创建两个食物选择下拉菜单初始为空 food_dropdown1 widgets.Dropdown(options[],description选择食物1:,style{description_width: initial} )food_dropdown2 widgets.Dropdown(options[],description选择食物2:,style{description_width: initial} )# 创建特征选择多选框 all_features [col for col in combined_nutrition_data.columns if col not in [食品名称, 类别名称]] feature_checkbox widgets.SelectMultiple(optionsall_features,valueall_features[:5] if len(all_features) 5 else all_features,description选择特征:,disabledFalse,style{description_width: initial} )# 创建更新按钮 update_button widgets.Button(description更新图表)# 定义类别选择变化时的处理函数 def on_category_change(change):category change.new if hasattr(change, new) else changefood_options sorted(combined_nutrition_data[combined_nutrition_data[类别名称] category][食品名称].unique())food_dropdown1.options food_optionsfood_dropdown2.options food_optionsif food_options:food_dropdown1.value food_options[0]food_dropdown2.value food_options[1] if len(food_options) 1 else food_options[0]# 绑定类别选择变化事件 category_dropdown.observe(on_category_change, namesvalue)# 定义按钮点击事件处理函数 def on_button_clicked(b):update_chart(food_dropdown1.value, food_dropdown2.value, feature_checkbox.value)# 绑定按钮点击事件 update_button.on_click(on_button_clicked)# 显示交互控件 display(widgets.VBox([category_dropdown, food_dropdown1, food_dropdown2, feature_checkbox, update_button]))# 初始化类别选择 on_category_change(category_dropdown.options[0])# 初始化显示 update_chart(food_dropdown1.value, food_dropdown2.value, feature_checkbox.value)div ide206d7a13597403989b06370fa3e970a stylewidth:800px; height:600px;/div5.统计检验 5.1Shapiro-Wilk检验 # 创建一个字典来存储每个变量的正态性检验结果 normality_test_results {}# 对每个连续变量进行Shapiro-Wilk正态性检验 for column in continuous_columns:stat, p_value stats.shapiro(combined_nutrition_data[column].dropna())normality_test_results[column] p_value# 将结果转换为DataFrame normality_results_df pd.DataFrame(list(normality_test_results.items()), columns[变量, p值])normality_results_df变量p值0热量6.170575e-281蛋白质1.147125e-302碳水化合物3.141569e-163脂肪1.917447e-174反式脂肪3.373801e-555钙3.768889e-546铜1.010723e-407铁2.930072e-298镁3.449308e-489锰1.848650e-3810磷2.547430e-3911钾1.032824e-5412硒5.586455e-5713锌6.897210e-2814钠6.160968e-5815维生素A1.587604e-5716维生素B2.994721e-4117维生素C9.374602e-5718维生素D1.177952e-5619维生素E2.072728e-3820维生素K1.543556e-5621Omega-3 (DHA, DPA, EPA)2.160020e-5622Omega-3 (ALA)5.922090e-5523Omega-6 (亚油酸)3.331552e-5424Omega-6 (其他)8.499532e-5625胆固醇2.689589e-53 由于所有变量的p值都非常小远小于0.05这些连续变量的数据可以认为是非正态分布的在后续分析中需要考虑非参数统计方法。 5.2斯皮尔曼相关性分析 def plot_spearmanr(data,features,title,wide,height):# 计算斯皮尔曼相关性矩阵和p值矩阵spearman_corr_matrix data[features].corr(methodspearman)pvals data[features].corr(methodlambda x, y: spearmanr(x, y)[1]) - np.eye(len(data[features].columns))# 转换 p 值为星号def convert_pvalue_to_asterisks(pvalue):if pvalue 0.001:return ***elif pvalue 0.01:return **elif pvalue 0.05:return *return # 应用转换函数pval_star pvals.applymap(lambda x: convert_pvalue_to_asterisks(x))# 转换成 numpy 类型corr_star_annot pval_star.to_numpy()# 定制 labelscorr_labels spearman_corr_matrix.to_numpy()p_labels corr_star_annotshape corr_labels.shape# 合并 labelslabels (np.asarray([{0:.2f}\n{1}.format(data, p) for data, p in zip(corr_labels.flatten(), p_labels.flatten())])).reshape(shape)# 绘制热力图fig, ax plt.subplots(figsize(height, wide), dpi100, facecolorw)sns.heatmap(spearman_corr_matrix, annotlabels, fmt, cmapcoolwarm,vmin-1, vmax1, annot_kws{size:10, fontweight:bold},linecolork, linewidths.2, cbar_kws{aspect:13}, axax)ax.tick_params(bottomFalse, labelbottomTrue, labeltopFalse,leftFalse, pad1, labelsize12)ax.yaxis.set_tick_params(labelrotation0)# 自定义 colorbar 标签格式cbar ax.collections[0].colorbarcbar.ax.tick_params(directionin, width.5, labelsize10)cbar.set_ticks([-1, -0.5, 0, 0.5, 1])cbar.set_ticklabels([-1.00, -0.50, 0.00, 0.50, 1.00])cbar.outline.set_visible(True)cbar.outline.set_linewidth(.5)plt.title(title)plt.show()plot_spearmanr(combined_nutrition_data,continuous_columns,各元素之间的斯皮尔曼相关系数热力图,18,20)/tmp/ipykernel_214/1940800490.py:17: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.pval_star pvals.applymap(lambda x: convert_pvalue_to_asterisks(x))热量主要与脂肪含量正相关其次是蛋白质和碳水化合物。这反映了脂肪是主要的热量来源。矿物质之间普遍存在中等到强的正相关特别是镁、磷和钾。这可能反映了它们在食物中的共同存在模式。维生素E和K高度相关表明它们可能常见于相同的食物来源特别是在某些植物性食品中。Omega-3和Omega-6脂肪酸之间存在强相关这可能反映了它们在某些食物如某些鱼类和植物油中的共同存在。蛋白质含量与多种矿物质如磷、硒、锌正相关表明高蛋白食品往往也富含这些矿物质。维生素C与多数其他营养素的相关性较弱或为负这可能反映了其在新鲜水果和蔬菜中的独特分布。胆固醇与碳水化合物的负相关性可能反映了动物性食品高胆固醇和植物性食品高碳水的区别。 5.3Kruskal-Wallis H检验 results {} for continuous_column in continuous_columns:groups [group[continuous_column].values for name, group in combined_nutrition_data.groupby(类别名称)]h_statistic, p_value stats.kruskal(*groups)results[continuous_column] {H-statistic: h_statistic, p-value: p_value}# 将结果转换为DataFrame以便于查看 results_df pd.DataFrame.from_dict(results, orientindex) results_df results_df.sort_values(p-value) results_dfH-statisticp-value胆固醇777.2709143.166506e-154磷629.9530226.423379e-123热量627.4317472.199030e-122钠624.9252637.473284e-122蛋白质540.5621245.272590e-104Omega-3 (DHA, DPA, EPA)506.9181526.595206e-97脂肪474.0252245.549142e-90维生素B464.0355526.988470e-88碳水化合物460.8504733.263461e-87镁453.7110931.031212e-85钙424.3241261.505061e-79硒415.7370019.461438e-78钾400.2288641.660746e-74维生素C385.7818431.731056e-71维生素D364.1124975.708058e-67锰363.7558066.772804e-67铜316.4655764.455027e-57维生素A291.6694115.879180e-52锌251.4196761.070220e-43反式脂肪240.5586781.759120e-41Omega-3 (ALA)191.3734931.541729e-31Omega-6 (亚油酸)171.7194571.279386e-27Omega-6 (其他)157.9524626.726730e-25维生素K150.0193532.426367e-23铁138.5983034.082712e-21维生素E120.5000821.238336e-17 根据Kruskal-Wallis H检验的结果所有营养成分都显示出在不同食品类别之间存在显著差异所有p值都远小于0.05。 6.营养密度分析 热量密度单位质量食物所含的热量值 (kcal/100g) 营养密度 (ND)单位热量食物所含的营养素质量 (NM) 营养密度指数 (NDI)描述食物中特定营养素相对于其热量的含量 NDI 计算公式 N D I N M E n e r g y ( 100 k c a l ) NDI {NM \over Energy (100kcal)} NDIEnergy(100kcal)NM​ 其中 NM: 营养素质量Energy: 食物热量 因为数据存在热量为0的食物可能是四舍五入导致的如一部分香料和饮料所以对热量为0的食品赋予非常小的值0.1以防止计算营养密度时出现inf无穷大值并且考虑到香料食用量比较少如果兑换成100热量的话远远超过其他食物的摄入量了直接剔除吧同样的婴儿食品只有3个样本可能会影响分析这里也是直接剔除。 nutrition_density combined_nutrition_data.copy() nutrition_density[热量] nutrition_density[热量].replace(0, 0.1) # 去除香料和婴儿食品类别 filtered_nutrition_density combined_nutrition_data[[食品名称, 类别名称]].copy() filtered_nutrition_density filtered_nutrition_density[~filtered_nutrition_density[类别名称].isin([香料, 婴儿食品])]# 计算营养密度每100卡路里的营养素含量 for continuous_column in continuous_columns.drop(热量):filtered_nutrition_density[f{continuous_column}密度] nutrition_density[continuous_column] / nutrition_density[热量] * 100# 按食品类别计算平均营养密度 nutrient_density filtered_nutrition_density.groupby(类别名称)[[f{continuous_column}密度 for continuous_column in continuous_columns.drop(热量)]].mean()plt.figure(figsize(20,18)) sns.heatmap(nutrient_density, annotTrue, cmapYlGnBu, fmt.2f) plt.title(不同食品类别的平均营养密度每100卡路里) plt.yticks(rotation0) plt.show()top_categories {}# 对每一列每种营养元素找出排名前3的类别 for column in nutrient_density.columns:top_categories[column] nutrient_density[column].nlargest(3).indexfig, axes plt.subplots(nrows5, ncols5, figsize(20, 20)) # 25种元素5x5网格for i, (element, categories) in enumerate(top_categories.items()):ax axes[i // 5, i % 5]scores nutrient_density.loc[categories, element]sorted_scores scores.sort_values(ascendingTrue)ax.barh(sorted_scores.index, sorted_scores.values, colorskyblue)ax.set_title(f{element}前3类别)ax.set_xlabel(密度值)plt.tight_layout() plt.show()top_food {}# 对每一列每种营养元素找出排名前3的食品 for column in filtered_nutrition_density.columns[2:]:top_indices filtered_nutrition_density[column].nlargest(3).indextop_food[column] filtered_nutrition_density.loc[top_indices, 食品名称] # 使用索引获取食品名称fig, axes plt.subplots(nrows5, ncols5, figsize(20, 20)) # 25种元素5x5网格for i, (element, foods) in enumerate(top_food.items()):ax axes[i // 5, i % 5]scores filtered_nutrition_density.loc[foods.index, element]sorted_scores scores.sort_values(ascendingTrue)ax.barh(foods.values, sorted_scores.values, colorskyblue)ax.set_title(f{element}前3的食物)ax.set_xlabel(密度值)plt.tight_layout() plt.show()营养密度只能做一个参考指标像这个数据中藤菠菜的蛋白质密度特别高比一些优质肉类都高这种情况是由于热量差异因为藤菠菜的热量特别低而优质肉如牛肉的热量比较高就会导致藤菠菜的蛋白质含量相对其热量来说显得特别高虽然藤菠菜的蛋白质密度高于牛肉但在实际食用时人们通常会吃更多的牛肉按重量计从而摄入更多的蛋白质总量因为要获得相同量的蛋白质需要吃大量的藤菠菜而只需少量的牛肉。 7.聚类分析 7.1数据预处理 nutrition_data combined_nutrition_data[continuous_columns] # 标准化数 scaler StandardScaler() scaled_nutrition_data scaler.fit_transform(nutrition_data)7.2确定聚类数 n_components range(1, 11) # 尝试 1 到 10 个聚类 aic_scores [] bic_scores []# 计算每个聚类数的 AIC 和 BIC for n in n_components:gmm GaussianMixture(n_componentsn, random_state15)gmm.fit(scaled_nutrition_data) # 训练 GMM 模型aic_scores.append(gmm.aic(scaled_nutrition_data)) # 计算 AICbic_scores.append(gmm.bic(scaled_nutrition_data)) # 计算 BIC# 绘制 AIC 和 BIC 曲线 plt.figure(figsize(8, 6)) plt.plot(n_components, aic_scores, labelAIC, markero) plt.plot(n_components, bic_scores, labelBIC, markers) plt.xlabel(聚类数) plt.ylabel(得分) plt.title(AIC 和 BIC 分数对比) plt.legend() plt.grid(True) plt.show()AIC值随聚类数增加总体呈下降趋势,在聚类数为9时达到最小值。根据AIC准则,应选择使AIC值最小的模型,因此AIC建议的最佳聚类数为9。BIC值先急剧下降,然后在聚类数为9时达到最小值3593.45,之后又开始上升。根据BIC准则,应选择使BIC值最小的模型,因此BIC也建议最佳聚类数为9。但是AIC和BIC曲线在聚类数为2到4之间有一个明显的拐点,之后下降速度变缓。这可能表明从2个聚类到3或4个聚类时模型改进显著,之后改进幅度减小。虽然AIC和BIC都指向9个聚类,但考虑到模型复杂度和解释性,需要在拐点处和最优值之间做出平衡。聚类数在4到6之间可能是一个较好的折中选择,既能捕捉数据的主要结构,又不会过于复杂因此选择聚类数5此时是极小值点。 7.3高斯混合模型聚类 gmm GaussianMixture(n_components5, random_state15) gmm_labels gmm.fit_predict(scaled_nutrition_data) combined_nutrition_data[Cluster] gmm_labels# 使用PCA将数据降维至2个主成分 pca PCA(n_components2) reduced_data pca.fit_transform(scaled_nutrition_data)# 可视化GMM聚类结果 plt.figure(figsize(10, 7)) sns.scatterplot(xreduced_data[:, 0], yreduced_data[:, 1], huecombined_nutrition_data[Cluster], paletteSet1, s100) plt.title(GMM 聚类结果) plt.xlabel(主成分 1) plt.ylabel(主成分 2) plt.show()# 获取 GMM 的聚类中心基于标准化数据 gmm_cluster_centers gmm.means_# 将聚类中心逆标准化回原始数据空间 original_cluster_centers scaler.inverse_transform(gmm_cluster_centers)# 确保传递的列名数量与聚类中心的列数一致 center_df pd.DataFrame(original_cluster_centers, columnsnutrition_data.columns)# 绘制热力图 plt.figure(figsize(20, 15)) sns.heatmap(center_df, annotTrue, cmapcoolwarm, fmt.2f) plt.title(GMM 聚类中心热力图) plt.xlabel(特征) plt.ylabel(聚类) plt.show()# 计算每个聚类中各类别的数量 cluster_category_counts combined_nutrition_data.groupby([Cluster, 类别名称]).size().unstack(fill_value0) cluster_category_counts类别名称主菜和配菜乳制品坚果婴儿食品快餐水果汤类油和酱料海鲜烘焙食品甜食绿叶蔬菜肉类蔬菜蘑菇谷物饮料香料Cluster0261100364913429251355142312751915825435453584707815178132334201304574191136516420300000000100000000044081020105380607130 聚类0多样化主食和配菜 主要营养特点 热量适中303.90蛋白质177.65、碳水化合物144.26和脂肪171.12含量均衡钠含量较高415.16维生素A含量高1087.77 主要食品类别 主菜和配菜26快餐36烘焙食品29肉类35甜食25 聚类1水果、谷物和饮料 主要营养特点 热量较低180.77碳水化合物含量最高133.18蛋白质99.78和脂肪71.88含量较低钾含量较高228.40维生素A507.39和维生素C123.10含量适中 主要食品类别 水果82饮料78谷物51蔬菜58 聚类2高蛋白食品 主要营养特点 热量适中238.39蛋白质含量最高265.63钙含量高112.29磷含量高211.22维生素B含量最高244.22 主要食品类别 乳制品42肉类74海鲜19 聚类3高脂肪特殊食品 主要营养特点 热量极高902.00脂肪含量极高193.00维生素A含量极高130000.00维生素D含量高250.00Omega-3 (DHA, DPA, EPA) 含量高174.00胆固醇含量高570.00 主要食品类别 油和酱料1根据之前查看的应该是鳕鱼肝油。 聚类4富含矿物质的食品 主要营养特点 热量适中308.18碳水化合物含量高164.78钙含量最高523.28铁含量极高38.41钾含量最高1192.79维生素A含量极高5784.02维生素K含量高156.58 主要食品类别 坚果8香料30绿叶蔬菜5 8.结论 本项目结合“该营养素是否为人类必需”、“该营养素是否提供能量”对数据集统计的营养素进行了分类重新构建新的数据并且对新数据进行营养成分比较分析、统计检验、营养密度分析、高斯混合模型聚类分析得到如下结论 海鲜、肉类和坚果类食品的蛋白质含量最高谷物类、甜食和烘焙制品的碳水化合物含量最高坚果类、油和酱料以及快餐食品的脂肪含量最高快餐食品和烘焙制品的反式脂肪含量相对较高尤其是快餐食品有较大的离群值。坚果类食品热量最高油和酱料类食品的热量次之甜食类热量分布范围大快餐食品、烘焙产品和一些主菜及配菜的热量也较高乳制品、肉类和海鲜的热量处于中等水平谷物类食品热量分布较广从低到高都有水果、蔬菜和蘑菇类食品的热量最低。热量主要与脂肪含量正相关其次是蛋白质和碳水化合物这反映了脂肪是主要的热量来源。矿物质之间普遍存在中等到强的正相关特别是镁、磷和钾。这可能反映了它们在食物中的共同存在模式。维生素E和K高度相关表明它们可能常见于相同的食物来源特别是在某些植物性食品中。Omega-3和Omega-6脂肪酸之间存在强相关这可能反映了它们在某些食物如某些鱼类和植物油中的共同存在。蛋白质含量与多种矿物质如磷、硒、锌正相关表明高蛋白食品往往也富含这些矿物质。维生素C与多数其他营养素的相关性较弱或为负这可能反映了其在新鲜水果和蔬菜中的独特分布。胆固醇与碳水化合物的负相关性可能反映了动物性食品高胆固醇和植物性食品高碳水的区别。根据Kruskal-Wallis H检验的结果所有营养成分都显示出在不同食品类别之间存在显著差异所有p值都远小于0.05。GMM聚类把数据分为5类其中类0是多样化主食和配菜类1是水果、谷物和饮料类2是高蛋白食品类3是鳕鱼肝油由于维A的含量极高导致单独为一类类4是富含矿物质的食品。
http://www.hkea.cn/news/14340993/

相关文章:

  • 做分享衣服网站的初衷是什么沈阳百度seo代理
  • 中国建设部网站官网湖南省做网站的
  • 在线做流程图的网站flash网站 seo
  • 适合设计师的网站一个网站需要几个人做
  • 佳木斯企业网站建设城市网站建设摘要论文
  • 在线教育网站开发文档有没有做任务拿佣金的网站
  • 河北邢台解封了吗seo网站三种链接
  • 注册网站账号审核不通过无法登陆怎么办网站关键词调整 收录
  • 崇明专业做网站自己开一个网站要多少钱
  • 甘肃肃第八建设集团网站1预付网站建设服务费如何入账
  • html商业网站模板网站建设 技术方案
  • 如何建设自己的网站揭阳网站制作建设
  • 网站建设运行环境建站快车用户登录
  • 灵感集网站深圳建设集团地址在哪里
  • 张家港网站开发网页微博怎么下载视频
  • 如何建单页网站栏目建设企业网站企业网上银行登录
  • 网站配色网页设计图片外链
  • 如何进行网站优化设计广西企业响应式网站建设公司
  • 模板网站建设价位玛多县网站建设公司
  • 现在可以用的网站广州网站建设功能
  • 企业网站备案多少钱影视网站策划书
  • 工程信息网站哪家做的较好北京58网站建设
  • 阜阳公司网站建设网站如何不被收录
  • 试客那个网站做的好微信网站怎么做的好
  • 创建网站的优势wordpress 优酷视频
  • 买了个域名 如何自己做网站潍坊高端网站开发
  • 企业网站的功能主要有网站地域分站怎么做
  • 做阿里巴巴网站图片大全公司的企业诚信建设分析
  • 公司网站建app宽带一般多少钱一个月
  • 公众号和网站网站页面打不开