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文档一览:
数据分为饮食习惯相关和身体状况相关,并且包含不同年龄。首先想到统计对象组内分析和饮食习惯和年龄的组间关系。
原数据给出了身体状况评价指标(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'