Pandas数据预处理(三)

时间煮雨
@R星校长

3关:标准化数据

本关任务:使用read_csv()加载数据集data1data2,然后按照编程要求对数据进行合并和清洗,最后将数据标准化。

相关知识

数据标准化处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲(将一个物理导出量用若干个基本量的乘方之积表示出来的表达式,称为该物理量的量纲式,简称量纲)和量纲单位,当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。为了消除指标之间的量纲影响,保证结果的可靠性,需要进行数据标准化处理,以解决数据指标之间的可比性。

离差标准化

离差标准化是对原始数据的线性变换,使结果值映射到[0−1]之间。转换函数如下:

X=(xmin(x))/max(x)min(x)

其中max为样本数据的最大值,min为样本数据的最小值。

df = pd.DataFrame(np.random.randn(4,4)* 4 + 3)
df.apply(lambda x:(x-np.min(x))/(np.max(x)-np.min(x)))

输出:

          0         1         2         3
0  0.832395  1.000000  0.952988  0.833941
1  0.957645  0.000000  0.000000  1.000000
2  0.000000  0.344905  1.000000  0.000000
3  1.000000  0.639748  0.852897  0.959804

标准差标准化

标准差标准化方法根据原始数据的均值和标准差进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:

x=(xμ)/σ

其中µ为所有样本的均值,σ为所有样本数据的标准差。

df = pd.DataFrame(np.random.randn(4,4)* 4 + 3)
df.apply(lambda x:(x-np.mean(x))/np.std(x))

输出:

          0         1         2         3
0  0.736830 -1.725856 -1.429933 -0.236415
1  0.110141  0.554950 -0.345422  1.557530
2 -1.665715  0.703648  0.527099 -0.092432
3  0.818745  0.467258  1.248256 -1.228683

编程要求

使用Pandas中的read_csv()读取step3/data1.csvstep3/data2.csv中的数据集;
将两个数据集合并,合并的列名为airline(航空公司名)和avail_seat_km_per_week(飞机飞过的总距离);
填充合并后的数据,将数据中的NA值以0填充;
以航空公司名和飞机总行程为索引显示85-14年致命事故发生的次数;
将透视表中的数据离差标准化,输出最终的结果。
data1.csvdata2.csv数据列名详细说明:

列名 说明
airline(两个csv文件中共有) 航空公司名
avail_seat_km_per_week(共有) 飞机飞过的总距离
incidents_85_99(data1独有) 85-99年飞机发生故障的次数
fatal_accidents_85_99(data1独有) 85-99年致命事故发生的次数
fatalities_85_99(data1独有) 85-99年致命事故导致的死亡人数
incidents_00_14(data2独有) 00-14年飞机发生故障的次数
fatal_accidents_00_14(data2独有) 00-14年致命事故发生的次数
fatalities_00_14(data2独有) 00-14年致命事故导致的死亡人数

测试输入:
预期输出:

在这里插入图片描述

开始你的任务吧,祝你成功!

import pandas as pd
import numpy as np

#该函数读取step3/data1.csv和step3/data2.csv文件并返回需要输出的结果
def data_process():
    #********** Begin *********#
    
    df1 = pd.read_csv("step3/data1.csv")
    df2 = pd.read_csv("step3/data2.csv")
    merge_data = pd.merge(df1, df2, on=["airline", "avail_seat_km_per_week"])

    return merge_data.fillna(0).pivot_table(index=["airline", "avail_seat_km_per_week"],
                                            values=["fatal_accidents_85_99", "fatal_accidents_00_14"]).apply(
    lambda x: (x - np.min(x)) / (np.max(x) - np.min(x)))
    
    #********** End **********#


if __name__ == '__main__':
    print(data_process())


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

猜你喜欢

转载自blog.csdn.net/qq_44745905/article/details/112254673