python数据探索/预处理 __机器学习之sklearn数据标准化

本文详细介绍了从数据导入筛选到数据预处理的全流程,包括单变量和多变量数据探索,处理缺失值,类别变量编码及数据标准化、归一化的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流程 : 数据导入筛选 --> 单变量数据探索 --> 多变量数据探索 --> 数据预处理

数据导入筛选

import pandas as pd
# 导入数据
titanic_df=pd.read_csv('train.csv')
titanic_df.head()

在这里插入图片描述

# 查看有多少缺失值,数据类型
titanic_df.info()

# 删除不需要字段
titanic_df=titanic_df.drop(['PassengerId','Name','Ticket'],axis=1)
titanic_df.head()

在这里插入图片描述

单变量数据探索

① 频数分析
Survived_freq=titanic_df.Survived.value_counts()
print(Survived_freq)

# 生成条图和饼图
import matplotlib.pyplot as plt
import seaborn as sns
# 正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
%matplotlib inline
plt.figure(figsize = (12,5))
plt.subplot(121)
# sns.countplot 计数功能
sns.countplot(x='Survived', data=titanic_df) # x字段名 data数据来源
plt.title('生死人数')
plt.subplot(122)
plt.pie(Survived_freq,labels=Survived_freq.index,autopct='%1.0f%%')
plt.title('Percent')

在这里插入图片描述

# 查看各仓人数
Pclass_freq=titanic_df.Pclass.value_counts()
print(Pclass_freq)
# 性别
Sex_freq=titanic_df.Sex.value_counts()
print(Sex_freq)

# 展示
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.figure(figsize = (12,5))
plt.subplot(121)
sns.countplot(x='Pclass', data=titanic_df)
plt.title('仓等级')
plt.subplot(122)
plt.pie(Pclass_freq,labels=Pclass_freq.index,autopct='%1.0f%%')
plt.title('Percent')
plt.show()

在这里插入图片描述

# Age(年龄)直方图分布
plt.figure(figsize=(20,5))
plt.subplot(121)
#使用 hist()方法,把 Age 划分为 20 个区间绘图
titanic_df['Age'].hist(bins = 20)
plt.xlabel('Age')
plt.ylabel('Frequence')
plt.show()

在这里插入图片描述

② 描述性统计
# 查看各字段数据分布
titanic_df.describe()

在这里插入图片描述

多变量数据探索

import matplotlib.pyplot as plt
# 年龄跟船票价格是否有关
plt.scatter(titanic_df.Age,titanic_df.Fare,50,"green")
plt.show()

# 通过图可见  没什么关系

在这里插入图片描述

# 生死跟船仓的关系

# 交叉表 crosstab
pd.crosstab(titanic_df.Survived,titanic_df.Pclass,margins=True) # x,y,是否汇总

# 横向占比 axis=1
pd.crosstab(titanic_df.Survived,titanic_df.Pclass).apply(lambda a:a/a.sum(),axis=1)

data = pd.crosstab(titanic_df.Survived,titanic_df.Pclass)
# 绘制堆栈条图
#print(type(data))
data.plot(kind='barh', stacked=True) # stacked=True 是否堆积 ;bar垂直 barh水平
plt.title("Pclass VS Survived")
plt.ylabel('Frequnce')
plt.show()


在这里插入图片描述
在这里插入图片描述

# 年龄 / 费用 关系
data=titanic_df.groupby('Survived').agg({'Age':'mean','Fare':'mean'})
print(data)

plt.figure(figsize = (12,5))
plt.subplot(121)
data.Age.plot(kind='bar')
plt.title("Age VS Survived")
plt.ylabel('Average')
plt.subplot(122)
data.Fare.plot(kind='bar')
plt.title("Fare VS Survived")
plt.ylabel('Average')
plt.show()

在这里插入图片描述

数据预处理

# 缺失值的处理

# 构造一个新的变量,默认为0, 当其为缺失值时为1,否则为0
titanic_df['Age_isna']=0
titanic_df.loc[titanic_df['Age'].isnull(),'Age_isna']=1
titanic_df['Age_isna'].value_counts()
titanic_df.head(10)

在这里插入图片描述

# 对年龄缺失值进行填充
age_mean=round(titanic_df['Age'].mean()) # round 四舍五入
titanic_df['Age'].fillna(age_mean,inplace=True)
titanic_df.Age.describe()
#titanic_df.head(20)
# 类别变量重新编码(独热编码) -- 把一列分类成多列
Pclass_onehot = pd.get_dummies(titanic_df.Pclass,prefix='Pclass') # 前缀_客舱等级
# 查看前 5 行 
Pclass_onehot.head()
# 等深分箱,分箱数为5
titanic_df["Age_dbin"]=pd.qcut(titanic_df.Age,5)
titanic_df["Age_dbin"].value_counts()
# 对等深分箱列进行独热编码
Age_bin_onehot =pd.get_dummies(titanic_df.Age_dbin,prefix='Age_dbin')
Age_bin_onehot.head()

在这里插入图片描述

# ①标准化
from sklearn import preprocessing
# 使用 Age 变量的数据训练一个标准化转换模型# 特别说明一下:需要使用 titanic_df[['Age']]
# 这样的方式来引用 Age 变量,这样得到的结果是 dataframe
# Age 标准化处理后保存为原数据对象中的新变量 Age_std
titanic_df['Age_std'] = preprocessing.scale(titanic_df[['Age']])
# 查看标准化后的数据 
print(titanic_df['Age_std'].head())
print(titanic_df['Age_std'].mean(axis=0)) # 查看均值 -->0
print(titanic_df['Age_std'].std(axis=0)) # 查看标准差 -->1
# ②归一化
minmaxscaler = preprocessing.MinMaxScaler()
# 使用 Age 变量的数据训练一个归一化转换模型
minmaxscaler.fit(titanic_df[['Age']])
# Age 归一化处理后保存为原数据对象中的新变量 Age_normal
titanic_df['Age_normal'] = minmaxscaler.transform(titanic_df[['Age']])
# 查看归一化后的数据 
titanic_df.head()
# 数据对象拼接 pd.concat
titanic_df_merge = pd.concat([titanic_df,Pclass_onehot], axis=1)
titanic_df_merge.head()

在这里插入图片描述

整个数据就处理结束了,感谢观看!?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值