Python数据分析:对饮食与健康数据的分析与可视化

2024.02前Python学习小结

1、 Python数据分析:对饮食与健康数据的分析与可视化
2、Python机器学习:Scikit-learn简单使用
3、Python深度学习:Tensorflow简单使用



前言

本文旨在对以往学习的相关内容进行总结回顾,通过seaborn对饮食与健康数据进行分析,侧重实现各数量间关系的可视化,因此具备以下特点:

  • 不苛求完全贴切,由于练习目的,不过多追求方法准确
  • 使用多种方法,对同样问题在保证准确情况下使用多种方法
  • 侧重任务描述,更像是说明书

一、数据说明

本文数据包含饮食习惯相关属性和身体状况相关属性,具体内容如下:

符号表示 具体内容 类别
FAVC 频繁食用高热量食物 饮食习惯相关
FCVC 食用蔬菜频率 饮食习惯相关
NCP 主餐数量 饮食习惯相关
CAEC 两餐间食物消耗频率 饮食习惯相关
CH2O 每日饮水量 饮食习惯相关
CALC 饮酒量 饮食习惯相关
SCC 卡路里消耗监测 身体状况相关
FAF 身体活动频率 身体状况相关
TUE 使用技术设备时间 身体状况相关
MTRANS 使用交通工具 身体状况相关
family…weight 家庭成员超重史 其他
NObeyesdad 身体状况评价 其他

身高、体重等简单介绍略,Excel文档一览:
Excel文档一览
数据分为饮食习惯相关和身体状况相关,并且包含不同年龄。首先想到统计对象组内分析和饮食习惯和年龄的组间关系。

原数据给出了身体状况评价指标(NObeyesdad),但未给出详细计算公式,因此计划用BMI反映身体状况,分析饮食习惯和身体状况间关系。所以总结起来,任务就是:

  • 统计样本对象特征
  • 饮食习惯间关系
  • 饮食习惯和身体状况间关系
  • 饮食习惯与身体状况间关系

二、数据清洗

1.相关库调用

导入相关库:

import numpy as np                ## 数据分析
import pandas as pd               ## 数据分析
import matplotlib.pyplot as plt   ## 画图
import seaborn as sns             ## 可视化

Seaborn的函数可选参数很多,图形简洁漂亮,往往一行就能生成热力图、散点图。

2.相关设置

设置数据小数点,忽略提醒,显示中文:

pd.options.display.float_format = '{:.2f}'.format#保留两位

import warnings                    ## 忽略提醒
warnings.filterwarnings('ignore')

#plt中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像显示为方块的问题

Matploblib默认无法使用中文,需要对中文进行设置,也可单独写个说明文件。刚开始使用时往往需要下载字体。可看这个(字体和本文程序放到本系列最后一个文档)

3.数据导入和清洗

导入数据,显示前五行观察是否导入成功

#数据导入
#df = pd.read_csv(r'D:\Pytharm\Practice\sjfenxilast\stib.csv')
df = pd.read_csv(r'stib.csv')#相对路径
#Check
print(df.head(5))

此处可使用相对路径或绝对路径。相对路径较好,当改变文件夹名时不用更改代码。
前五行显示

缺失与重复数据处理,此处最好再检查异常值的,这一步放后面了

#检查重复项和缺少值
print("\033[1;37m检查重复项和缺失值\033[0m")
print(f'\033[94mNumber of records/rows & features/columns in the dataset are: {
     df.shape[0], df.shape[1]}')
print(f'\033[94mNumber of duplicate entries in the dataset are: {
     df.duplicated().sum()}')
print(f'\033[94mNumber missing values in the dataset are: {
     sum(df.isna().sum())}')

## 删除重复项
df.drop_duplicates(keep='first',inplace=True)

## 再次检查
print("\033[1;37m再次检查\033[0m")
print(f'\033[94mNumber of records/rows & features/columns in the dataset are: {
     df.shape[0], df.shape[1]}')
print(f'\033[94mNumber of duplicate entries in the dataset are: {
     df.duplicated().sum()}')

为显示方便可设置文字颜色,具体见Python内容颜色输出。
再次检查不存在重复和缺失
第一次检查,存在24个重复项,不存在缺失值,因此仅对重复项进行处理。
如存在缺失值可使用以下代码进行处理:

## 检查缺失值
missing_val = df.isnull().sum()[df.isnull().sum() > 0]
print('missing values by feature')
print(missing_val)
missing_val_prc = missing_val / len(df)*100
print('missing values by feature, by % of total')
print(missing_val_prc)

若missing_val_prc(缺失比例)较少则直接舍去,太多就得考虑插入了。

检查数据类型

df.info()

为了查看数据是否存在空值以及确定数据类型方便后续操作。
数据类型
相关数据无空值,处理完成。注意到年龄是float类型,可能存在很多小数,若建立年龄的相关分析得注意处理。对于数字型尽量不要弄成标签。

相关设置

#seaborn的颜色设置,或者直接用白色主题
#sns.set(style=’white‘)
sns.set(rc={
   'axes.facecolor':'none','axes.grid':False,'xtick.labelsize':7,'ytick.labelsize':7,
            'figure.autolayout':True, 'figure.dpi':180, 'savefig.dpi':180})
my_col = ('#40E0D0', '#D2B48C','#c7e9b4', '#EEE8AA','#00FFFF','#FAEBD7','#FF6347', 
          '#FAFAD2', '#E0EEEE', '#C1CDCD', '#838B8B'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值