【Python】实验四使用Pandas进行数据预处理

一、实验目的

1、掌握数据合并的原理与方法;
2、掌握数据清洗的基本方法;
3、掌握常用的数据转换方法;
4、理解数据预处理对数据处理的影响。

二、实验要求

1、完成任务5.1-5.4代码操作实现并编程完成第五章实训内容;
2、写出实验报告,内容要求有Python 代码和实验结果
3、鼓励大家给出不同的,更优的代码实现。

三、实验内容

1、读取用户电量数据并插补缺失值(具体要求见第五章实训1的内容)
(1)掌握缺失值识别方法;
(2)掌握对缺失值数据处理的方法。

import pandas as pd
import numpy as np
from scipy.interpolate import lagrange

arr = np.array([0, 1, 2])
missing_data = pd.read_csv(r'C:\Users\xf224\Desktop\第5章数据\missing_data.csv', names=arr)

# 查询缺失值所在位置
print("lagrange插值前(False为缺失值所在位置)", '\n', missing_data.notnull())

for i in range(0, 3):
    la = lagrange(missing_data.loc[:, i].dropna().index, missing_data.loc[:, i].dropna().values)
    list_d = list(set(np.arange(0, 21)).difference(set(missing_data.loc[:, i].dropna().index)))
    missing_data.loc[list_d, i] = la(list_d)

# 输出插值后的数据到CSV文件
missing_data.to_csv("data.csv", index=False)
data = missing_data.fillna(missing_data.mean())
print(data)
print("lagrange插值后的数据已保存到data.csv 文件")

运行图如下图所示:
在这里插入图片描述

2、合并线损、用电量趋势与线路警告数据(具体要求见第五章实训2的内容)。
(1)掌握主键合并的几种方法;
(2)掌握多键值的主键和合并方法。

-*- coding: gbk -*-
import pandas as pd
ele_loss = pd.read_csv(r'C:\Users\xf224\Desktop\第5章数据\ele_loss.csv')
alarm = pd.read_csv(r'C:\Users\xf224\Desktop\第5章数据\alarm.csv', encoding='gbk')
# 查看两个表的形状
print("ele_loss表的形状为", ele_loss.shape)
print("alarm表的形状为", alarm.shape)
# 合并后的数据
merge = pd.merge(ele_loss, alarm, left_on=["ID", "date"], right_on=["ID", "date"], how="inner")
print("合并后的表形状为:", merge.shape)
print("合并后的表为:"'\n', merge)

运行图如下图所示:
在这里插入图片描述

3、标准化建模专家样本数据(具体要求第五章实训3的内容)
(1)掌握数据标准化的基本原理;
(2)掌握数据标准化的Python实现方法。

import pandas as pd

model = pd.read_csv(r'C:\Users\xf224\Desktop\第5章数据\model.csv', encoding="utf-8")
def Standard(data):
    data = (data - data.mean()) / data.std()
    return data
S = Standard(model)
print("标准化后的数据为:", '\n', S.head())

运行图如下图所示:
在这里插入图片描述

4、进一步对数据集Mushroom进行相关操作:
(1)进行特征转换,将文本类型数据转为数值型;
(2)查看转换后的各字段数据分布(可箱型图展示);
(3)归一化(Normalization)、标准化(Standardization)操作;
(4)进行主成份分析(PCA)并可视化展示各属性的贡献度。
(5)将Mushroom数据在标准化前后的PCA后第一、第二维投影,分析数据标准化前后分类精度变化情况并可视化相应结果。

import pandas as pd

model = pd.read_csv(r'C:\Users\xf224\Desktop\第5章数据\model.csv', encoding="utf-8")
def Standard(data):
    data = (data - data.mean()) / data.std()
    return data
S = Standard(model)
print("标准化后的数据为:", '\n', S.head())


import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
data = pd.read_csv(r'C:\Users\xf224\Desktop\第5章数据\mushrooms.csv', header=None)
plt.rcParams['font.sans-serif'] = 'SimHei'

# 特征转换,将文本类型数据转为数值型
label_encoder = LabelEncoder()
for column in data.columns:
    data[column] = label_encoder.fit_transform(data[column])

# 查看转换后的各字段数据分布(箱型图展示)
plt.figure(figsize=(12, 8))
sns.boxplot(data=data, orient="h")
plt.title("Mushroom箱线图")
plt.show()
data.to_csv('mushrooms_numerical.csv', index=False)


import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler
import matplotlib.pyplot as plt
# 加载数值数据
data = pd.read_csv('mushrooms_numerical.csv')
plt.rcParams['font.sans-serif'] = 'SimHei'
target = data.iloc[:, -1]
data = data.iloc[:, :-1]

# 归一化
min_max_scaler = MinMaxScaler()
data_normalized = min_max_scaler.fit_transform(data)
data_normalized = pd.DataFrame(data_normalized, columns=data.columns)
data_normalized = pd.concat([data_normalized, target], axis=1)
data_normalized.to_csv('mushrooms_1.csv', index=False)

# 标准化
standard_scaler = StandardScaler()
data_standardized = standard_scaler.fit_transform(data)
data_standardized = pd.DataFrame(data_standardized, columns=data.columns)
data_standardized = pd.concat([data_standardized, target], axis=1)
data_standardized.to_csv('mushrooms_2.csv', index=False)

# 可视化归一化后的数据
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.title('归一化')
for column in data_normalized.columns[:-1]:
    plt.hist(data_normalized[column], alpha=0.5, label=column)
plt.legend()

# 可视化标准化后的数据
plt.subplot(1, 2, 2)
plt.title('标准化')
for column in data_standardized.columns[:-1]:
    plt.hist(data_standardized[column], alpha=0.5, label=column)
plt.legend()

plt.tight_layout()
plt.show()


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# 加载数据集
data = pd.read_csv('mushrooms_numerical.csv')
plt.rcParams['font.sans-serif'] = 'SimHei'
# 提取目标变量(如果适用)
target = data.iloc[:, -1]
data = data.iloc[:, :-1]

# 标准化数据
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
# 执行PCA
pca = PCA()
pca_result = pca.fit_transform(data_scaled)

# 计算各主成分的方差贡献度
explained_variance_ratio = pca.explained_variance_ratio_

# 绘制累积方差贡献度的可视化图
cumulative_variance = np.cumsum(explained_variance_ratio)
plt.plot(range(1, len(cumulative_variance) + 1), cumulative_variance, marker='o', linestyle='--')
plt.xlabel('主成分数量')
plt.ylabel('累积方差解释比例')
plt.title('主成分数量与累积方差比例')
plt.show()

# 绘制各主成分的方差贡献度
plt.bar(range(1, len(explained_variance_ratio) + 1), explained_variance_ratio)
plt.xlabel('主成分')
plt.ylabel('方差解释比例')
plt.title('各主成分的方差比例')
plt.show()


import pandas as pd
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 加载原始数据集
data_original = pd.read_csv('mushrooms_numerical.csv')

# 提取目标变量(如果适用)
target_original = data_original.iloc[:, -1]
data_original = data_original.iloc[:, :-1]

# 加载标准化后的数据集
data_standardized = pd.read_csv('mushrooms_2.csv')

# 提取目标变量(如果适用)
target_standardized = data_standardized.iloc[:, -1]
data_standardized = data_standardized.iloc[:, :-1]

# 执行PCA(原始数据集)
pca_original = PCA(n_components=2)
pca_result_original = pca_original.fit_transform(data_original)

# 执行PCA(标准化后的数据集)
pca_standardized = PCA(n_components=2)
pca_result_standardized = pca_standardized.fit_transform(data_standardized)

# 绘制原始数据集的PCA结果散点图
plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.scatter(pca_result_original[target_original == 0][:, 0],
            pca_result_original[target_original == 0][:, 1],
            label='可食用', alpha=0.5)
plt.scatter(pca_result_original[target_original == 1][:, 0],
            pca_result_original[target_original == 1][:, 1],
            label='有毒', alpha=0.5)
plt.title('标准化前PCA散点图')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.legend()

# 绘制标准化后的数据集的PCA结果散点图
plt.subplot(1, 2, 2)
plt.scatter(pca_result_standardized[target_standardized == 1][:, 0],
            pca_result_standardized[target_standardized == 1][:, 1],
            label='可食用', alpha=0.5)
plt.scatter(pca_result_standardized[target_standardized == 1][:, 0],
            pca_result_standardized[target_standardized == 1][:, 1],
            label='有毒', alpha=0.5)
plt.title('标准化后PCA散点图')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.legend()

plt.tight_layout()
plt.show()

运行图如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

创作不易,感谢未来首富们的支持与关注!

Pandas数据分析 普林大数据学院 普 林 大 数 据 学 院 P R I N C E T E C H S B I G D A T A C O L L E G E 2 3 目录 第一部分 文件读写 第二部分 变量离散化 第三部分 缺失值填补 普林大数据学院 普 林 大 数 据 学 院 P R I N C E T E C H S B I G D A T A C O L L E G E 第部分 数据标准化 第五部分 数据合并 第六部分 数据组合 第七部分 数字编码 第八部分 OneHot编码 普 林 大 数 据 学 院 P R I N C E T E C H S B I G D A T A C O L L E G E 普林大数据学院 4 数据文件操作——读入数据pandas提供了一些用于将表格型数据读取为DataFrame对象的函数, 常用的函数为read_csvread_table • 函数的选项可以划分为几个大类 • 索引:将一个或多个列当做返回的DataFrame处理,以及是否从文件、用户 获取列名 • 类型推断数据转换:包括用户定义值的转换、缺失值标记列表等 • 日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合起来 • 迭代:支持对大文件进行逐块迭代 • 不规整数据问题:跳过一些行、页脚、注释或其他一些不重要的东西 普 林 大 数 据 学 院 P R I N C E T E C H S B I G D A T A C O L L E G E 普林大数据学院 5 文件读写 Pandas提供了一些用于将表格型数据读取位DataFrame对象的函数。 其中最常用的为read_csvread_table。read_csv 从文件、URL、文件 型对象中加载带分隔符的数据。默认分隔符为逗号。read_table从文件、 URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符 (“\t”) In[19]:df= pd.read_csv('iris.csv') df.head() Out[19]: sepal_len sepal_wh petal_len petal_wh target 0 5.1 3.5 1.4 0.2 0 1 4.9 3.0 1.4 0.2 0 2 4.7 3.2 1.3 0.2 0 3 4.6 3.1 1.5 0.2 0 4 5.0 3.6 1.4 0.2 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值