数据预处理实验报告

实验要求:

  1. 创建一个有50个元素的Series对象,其values数组中的数据随机生成,数据总体上满足均值为1000, 标准差为200的正态分布。
    • 自定义异常值为:小于QL-1.25IQR或大于QU+1.25IQR的值。绘制箱线图,检测生成的数据中是否包含大于上限和小于下限的异常值,并且要求这两类异常值都要有。如果不满足要求,那么就重新生成数据,直到满足要求为止;
    • 利用箱线图获取并输出异常值的索引;
    • 编写一个通用函数,其功能为将一个Series对象中大于上限的异常值用QU替换,而小于下限的异常值用QL替换。(原地操作)
    • 用该函数处理满足(1)要求的Series对象,输出QU、QL的值。然后,创建一个如下所示的DataFrame对象,其index为异常值的索引,Before列上的数据为替换前的值,After列上的数据为替换后的值。最后,输出该DataFrame对象。
      QU = 1153.800, QL= 897.075
      Before After
      31 518.7 897.075
      32 1525.1 1153.800
      38 495.0 897.075
      47 1657.5 1153.800
      注意:由于Series对象中的数据是随机生成的,所以你的运行结果中的数据不会和上面的示例数据相同。此外,DataFrame对象中的某些数据需要在数值替换前去获取。
  2. 读取通过第九章第1个作业获得的“Scores.xlsx”文件中的数据。编写3个通用函数,分别实现最小-最大标准化、标准差标准化和小数定标标准化的功能。然后,按最小-最大标准化处理“C++成绩”列上的数据,按标准差标准化处理“Java成绩”列上的数据,按小数定标标准化处理“Python成绩”列上的数据。最后,输出处理后的结果。(请自行检验结果的正确性)
  3. 随机生成20个[50, 100)之间的成绩,分别按下面的要求离散化。
    • 指定区间边界为[0, 60, 70, 80, 90, 100],输出分箱结果(左闭右开)并统计各区间数据的个数,然后,依次把各区间的标签改为E、D、C、B、A,再次查看各区间数据的个数。
    • 使用等宽法离散化数据,5个区间。查看分箱后的区间间隔并统计各区间数据的个数。
    • 使用等频法离散化数据,5个区间。查看分箱后的区间间隔并统计各区间数据的个数。

实验内容和实验结果:

    • 导入所需库与设置中文显示
      首先,导入numpy, pandas, 和 matplotlib.pyplot` 这三个库,用于数据分析和绘图。然后设置matplotlib的字体配置,使得图表中的中文能够正常显示。
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    • 生成随机数据并绘制箱线图直至出现上下界外的异常值
      • 使用while循环不断生成一个长度为50、均值为1000、标准差为200的正态分布随机数序列。
      • 计算该序列的四分位数Q1(25%分位点)和Q3(75%分位点),以及四分位距IQR(Q3-Q1)。
      • 根据IQR定义上下界,超出这上下界的数值被视为异常值。
      • 当找到同时有超过上界和下界的数据点时(即存在异常值),退出循环。
      • 绘制这个序列的箱线图,并在图中用红色虚线标出异常值界限。
    while True :
    	s = pd.Series(np.random.normal(1000, 200, 50))
     	q1, q3 = s.quantile(0.25), s.quantile(0.75)
    	iqr = q3 - q1
    	lower_bound = q1 - 1.25 * iqr
    	upper_bound = q3 + 1.25 * iqr
    	upout = s[s > upper_bound]
    	downout = s[s < lower_bound]
    	if not upout.empty and not downout.empty:
        	break
    plt.figure(figsize=(10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值