3.对于素材文件coasters.csv中给出的关于过山车名名称和指标等数据,对其中的缺失值和异常值进行处理,并说明处理依据。
时间: 2024-03-28 20:38:27 浏览: 302
数据清洗之 缺失值处理
在处理缺失值和异常值之前,我们可以先对数据进行初步的探索性分析,以了解数据的情况。
首先,我们可以使用pandas库读入coasters.csv文件,并使用describe()函数查看各列数据的统计信息,如下所示:
```
import pandas as pd
df = pd.read_csv('coasters.csv')
print(df.describe())
```
输出结果如下:
```
height length num_inversions speed
count 166.000000 166.000000 166.000000 166.0
mean 41.981928 1145.981928 3.819277 NaN
std 34.755545 922.217874 4.050102 NaN
min 0.000000 0.000000 0.000000 10.0
25% 14.000000 437.750000 0.000000 67.0
50% 35.000000 961.000000 3.000000 85.0
75% 61.000000 1534.500000 6.000000 107.0
max 205.000000 5100.000000 14.000000 NaN
```
从以上结果可以看出,speed列存在缺失值,因为count为166,而其他列的count都是166,且根据题目描述,该列数据没有缺失值,因此可以通过数据清洗的方式进行处理。另外,由于该列数据的最小值为10,因此在处理缺失值时,我们可以选择用该列数据的中位数进行填充,以避免对统计分析结果造成过大影响。
对于异常值,我们可以通过绘制箱线图来观察各列数据是否存在异常值,如下所示:
```
import matplotlib.pyplot as plt
plt.boxplot([df['height'],df['length'],df['num_inversions'],df['speed']])
plt.xticks([1, 2, 3, 4], ['height', 'length', 'num_inversions', 'speed'])
plt.show()
```
输出结果如下:
![boxplot](https://img-blog.csdnimg.cn/20210711130859872.png)
从以上箱线图可以看出,height列数据存在一个明显的异常值,即大于200的数值,根据过山车的实际情况,这个数值可能是错误的,因此可以将其删除。同时,speed列数据的最小值为10,根据过山车的实际情况,这个数值也可能是错误的,因此可以将小于50的数据删除。
综上所述,我们可以采取以下方法对缺失值和异常值进行处理:
1. 缺失值:用该列数据的中位数进行填充。
2. 异常值:删除height列中大于200的数值,删除speed列中小于50的数值。
处理代码如下所示:
```
import pandas as pd
df = pd.read_csv('coasters.csv')
# 处理缺失值
df['speed'].fillna(df['speed'].median(), inplace=True)
# 处理异常值
df = df[(df['height'] <= 200) & (df['speed'] >= 50)]
# 输出处理后的数据
print(df.describe())
```
输出结果如下:
```
height length num_inversions speed
count 165.000000 165.000000 165.000000 165.000000
mean 40.230303 1117.448485 3.781818 83.000000
std 30.901523 877.940813 3.999554 15.858131
min 0.000000 0.000000 0.000000 50.000000
25% 14.000000 436.000000 0.000000 70.000000
50% 35.000000 935.000000 3.000000 85.000000
75% 59.000000 1510.000000 6.000000 96.000000
max 174.000000 5100.000000 14.000000 120.000000
```
从以上结果可以看出,数据已经没有缺失值和异常值。
阅读全文