@R星校长
第3
关:标准化数据
本关任务:使用read_csv()
加载数据集data1
和data2
,然后按照编程要求对数据进行合并和清洗,最后将数据标准化。
相关知识
数据标准化处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲(将一个物理导出量用若干个基本量的乘方之积表示出来的表达式,称为该物理量的量纲式,简称量纲)和量纲单位,当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。为了消除指标之间的量纲影响,保证结果的可靠性,需要进行数据标准化处理,以解决数据指标之间的可比性。
离差标准化
离差标准化是对原始数据的线性变换,使结果值映射到[0−1]
之间。转换函数如下:
X=(x−min(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.csv
和step3/data2.csv
中的数据集;
将两个数据集合并,合并的列名为airline
(航空公司名)和avail_seat_km_per_week
(飞机飞过的总距离);
填充合并后的数据,将数据中的NA
值以0
填充;
以航空公司名和飞机总行程为索引显示85-14
年致命事故发生的次数;
将透视表中的数据离差标准化,输出最终的结果。
data1.csv
和data2.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())