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

数据预处理和探索性数据分析(上)

目录

数据预处理

数据清洗

处理缺失值:

异常值检测与处理:

类别特征编码:

特征工程

创建新特征:

特征缩放:

探索性数据分析 (EDA)

使用Matplotlib进行可视化

绘制直方图:

绘制箱线图:

绘制散点图:

构建简单的机器学习模型

准备数据

划分训练集和测试集:

特征缩放:

训练模型

使用线性回归模型:

评估模型

计算模型的性能指标:

实战项目

项目步骤

 代码实操示例

生成图片

单变量分析:

多变量分析:

条形图:

散点图:

热力图:


数据预处理

数据预处理是机器学习流程中非常重要的一步,它包括数据清洗、特征工程等步骤。

数据清洗
  • 处理缺失值
    # 使用中位数填充缺失值
    df['Age'].fillna(df['Age'].median(), inplace=True)
  • 异常值检测与处理
    # 使用IQR方法检测异常值
    Q1 = df['Age'].quantile(0.25)
    Q3 = df['Age'].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    df = df[(df['Age'] >= lower_bound) & (df['Age'] <= upper_bound)]
  • 类别特征编码
    # 使用one-hot编码
    df = pd.get_dummies(df, columns=['Gender'], drop_first=True)
特征工程
  • 创建新特征
    df['Total_Pay'] = df['Base_Pay'] + df['Bonus']
  • 特征缩放
    from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
    scaled_features = scaler.fit_transform(df[['Age', 'Salary']])
    df[['Age', 'Salary']] = scaled_features

探索性数据分析 (EDA)

EDA 是为了更好地理解数据集的特性。我们可以使用可视化工具来辅助这一过程。

使用Matplotlib进行可视化
  • 绘制直方图
    import matplotlib.pyplot as pltplt.hist(df['Age'], bins=20)
    plt.title('Age Distribution')
    plt.xlabel('Age')
    plt.ylabel('Count')
    plt.show()
  • 绘制箱线图
    df.boxplot(column='Salary')
    plt.title('Salary Distribution')
    plt.show()
  • 绘制散点图
    plt.scatter(df['Age'], df['Salary'])
    plt.title('Age vs Salary')
    plt.xlabel('Age')
    plt.ylabel('Salary')
    plt.show()

构建简单的机器学习模型

现在我们有了清理过后的数据,可以开始构建机器学习模型了。这里我们将使用线性回归模型作为示例。

准备数据
  • 划分训练集和测试集
    from sklearn.model_selection import train_test_splitX = df[['Age', 'Experience']]
    y = df['Salary']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • 特征缩放
    from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)
训练模型
  • 使用线性回归模型
    from sklearn.linear_model import LinearRegressionmodel = LinearRegression()
    model.fit(X_train, y_train)
评估模型
  • 计算模型的性能指标
    from sklearn.metrics import mean_squared_error, r2_scorey_pred = model.predict(X_test)
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)print(f'Mean Squared Error: {mse}')
    print(f'R2 Score: {r2}')

实战项目

为了更好地巩固所学的知识,你可以尝试完成一个小的实战项目。例如,这下面是我从Kaggle网站下载一个数据集,对其进行预处理、特征工程、EDA,并最终训练一个简单的机器学习模型。

项目步骤
  1. 数据加载:使用Pandas加载数据。
  2. 数据清洗:处理缺失值、异常值。
  3. 特征工程:创建新特征、进行特征缩放。
  4. EDA:使用Matplotlib进行可视化。
  5. 模型训练:使用Scikit-Learn训练模型。
  6. 模型评估:使用适当的指标评估模型性能。
 代码实操示例
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#加载数据
data_path=r'D:\机器学习\数据集:国家划分的生活成本\Cost_of_Living_Index_by_Country_2024.csv'
df=pd.read_csv(data_path)
#显示数据前几行
print(df.head())
#检查是否有缺失值
print(df.isnull().sum())
#基本统计信息
print(df.describe())
#可视化
#单变量分析
df.hist(bins=20,figsize=(12,10),color='blue')
plt.tight_layout()  #调整子图参数,使之填充整个图像区域
plt.show()
#多变量分析
numeric_df = df.select_dtypes(include=['float64', 'int64'])
corr_matrix=numeric_df.corr()
sns.heatmap(corr_matrix,annot=True,cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()
# #保存图片
# plt.savefig('8.11Cost_of_Living_Index_by_Country_2024.png')
#柱状图-排名前十的国家的生活成本指数
top_10_countries=df.head(10)
plt.figure(figsize=(12,6))
sns.barplot(x='Country',y='Cost of Living Index',data=top_10_countries)
plt.xticks(rotation=90)#旋转x轴标签
plt.title('Top 10 Countries by Cost of Living Index')
plt.show()
#散点图-生活成本指数与租金指数关系
plt.figure(figsize=(10,6))
sns.scatterplot(x='Cost of Living Index',y='Rent Index',data=df)#添加标题和标签
plt.title('Cost of Living Index vs Rent Index')
plt.show()
#热力图-各个指标之间的相关性
plt.figure(figsize=(10,6))
numeric1_df = df.select_dtypes(include=['float64', 'int64'])
sns.heatmap(numeric1_df.corr(),annot=True,cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()
生成图片
单变量分析:

多变量分析:

条形图:

散点图:

热力图:

数据加载与初步检查
  1. 加载数据

    • 使用Pandas加载csv文件。
    • 查看数据的前几行,了解数据结构。
  2. 数据清洗

    • 检查是否有缺失值。
    • 确认所有数值列的数据类型是否正确。
  3. 基本统计信息

    计算每列的基本统计量,如均值、中位数、最小值、最大值等。
探索性数据分析 (EDA)
  1. 单变量分析

    对于每个指标,绘制直方图或箱线图,以了解其分布情况。
  2. 多变量分析

    绘制相关性矩阵,以了解各指标之间的关联程度。
数据可视化
  1. 柱状图:展示排名前10的国家的生活成本指数。
  2. 散点图:生活成本指数与租金指数的关系。
  3. 热力图:各指标之间的相关性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络分段如何增强 OT 网络的可见性
  • 数据库原理面试-核心概念-问题理解
  • php strtr其他语言实现
  • RSA加密
  • 接口基础知识6:详解http request body(一篇讲完常见请求体)
  • 电商系统价格字段的后端存储设计
  • 【C语言】位段详解
  • 基于Android aosp系统的云手机chrome浏览器定制
  • 十三、代理模式
  • 八问八答搞懂Transformer内部运作原理
  • 贪心算法part03
  • 中场接杀放网前小球
  • VSCode 使用总结
  • HTTP状态码_五类
  • ComsolMatlab 螺旋孔多孔超材料高温吸声性能研究
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 345-反转字符串中的元音字母
  • exports和module.exports
  • gitlab-ci配置详解(一)
  • tensorflow学习笔记3——MNIST应用篇
  • webpack+react项目初体验——记录我的webpack环境配置
  • 测试如何在敏捷团队中工作?
  • 记一次和乔布斯合作最难忘的经历
  • 爬虫模拟登陆 SegmentFault
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 入门到放弃node系列之Hello Word篇
  • 入门级的git使用指北
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 少走弯路,给Java 1~5 年程序员的建议
  • 双管齐下,VMware的容器新战略
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • $.proxy和$.extend
  • (39)STM32——FLASH闪存
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (javascript)再说document.body.scrollTop的使用问题
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (分布式缓存)Redis哨兵
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (三)elasticsearch 源码之启动流程分析
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (十三)Maven插件解析运行机制
  • (算法)Game
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)SvelteKit教程:hello world
  • (转载)(官方)UE4--图像编程----着色器开发
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • /bin/bash^M: bad interpreter: No such file or directory
  • ::前边啥也没有
  • @RequestMapping处理请求异常
  • [ Algorithm ] N次方算法 N Square 动态规划解决