数据预处理之数学建模竞赛(E题)

目录

一、前言

二、数据预处理

1.1数据读取

1.2数据缺失值的查看与处理

1.3重复值处理

1.4异常值处理 


一、前言

        近年来全国数学建模竞赛,参赛的队伍逐渐扩大。专科组也在扩张,而在E题方面则需要一些简单的数据预处理和数据分析。测试环境 Windows11、jupyter Notebook、python3.0,在开始之前我们还需下载   Anaconda里面有我们所需要的大部分库。

二、数据预处理

1.1数据读取


一般情况下数学竞赛的数据文件多为_csv文件与_excel文件,我们若要用python进行分析则需要的导入库才能读取文件,一般读取数据文件多用pandas库,而在安装Anaconda已自带库,不用再另外下载。

我们运行程序时也需要声明导入所需库。

import pandas as pd
import numpy as np

利用pandas读取excel文件


以2023年全国大学数学建模竞赛E题附件1-2016年的数据(数据格式为excel)为例进行演示

导入数据

data=pd.read_excel('附件1.xlsx')

读取出“附件1.xlsx”的数据

利用pandas读取-csv文件



data1= pd.read_csv('附件1.csv')

在导入数据时可能会因为我们的数据文档读取失败的状态,出现以下状态,

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 45: invalid continuation byte

在出现上面这种状态时,我们可以告诉他我们的文件格式

data= pd.read_csv('附件1.csv',encoding='gbk',engine='python')

读取出“附件1.csv”文件数据

1.2数据缺失值的查看与处理


对于缺失值的填补计算有很多方法,例如:

  • 平均,中位数,众数
  • kNN
  • 零或常数等

# 通过序列对象isnull方法

data2=data1#复制表格
print('isnull方法返回值:\n',data2.isnull())
print('每一列的缺失值计数:\n',data2.isnull().sum())

通过isnull方法我们可以看出每一列的空缺值

对于空缺值,建模时候我们要想办法将数据进行填充或删除 ,根据题目要求考虑是否符合我们所做。

删除缺失值

print('情形1:\n',data2.dropna(subset=['月'],how='any'))#根据月空缺值删除
print('情形2:\n',data2.dropna(subset=['年','月'],how='any'))#根据年或月删除
print('情形3:\n',data2.dropna(subset=['年','月'],how='all'))#根据年与月删除

当然在此数据中不需要删除,以上为例子。那么除了删除以外我们也可以利用均值、方差、众数等进行填充

数据填充在表格为null的情况下我们用“2016”进行空值填充(以下为演示进行)。

print('填充数据后:\n',data2.fillna(value='2016'))

当然我们也可以根据不同列填充不同的值,例如我们将年这一列填充2016。


data4 = data1.copy() # 复制一个表格对象
print('表格对象为:\n',data4)
data4['年'].fillna('2016',inplace=True) # inplace设置对原表格data3生效
print('表格对象为:\n',data4)

 

1.3重复值处理


数据集中的重复值包括以下两种情况:

     (1)数据值完全相同的多条数据记录;

     (2)数据主体相同但匹配到的唯一属性值不同。

去重是帮助我们避免同一个对象在系统中到处都被保存一份副本,而冗余是在完全受我们控制的情况下增加这个对象数据的稳定性。

在建模竞赛中我们发现有不合理重复的数据也要进行删除

根据数据进行去重处理

import pandas as pd 
data1= pd.read_excel('书籍评论数据.xls',na_values=None)

data4 = pd.DataFrame(data4, columns=['评论作者', '评论分数', '评论时间', '电影评论'])
data5 = data4.drop_duplicates(subset=['评论作者', '评论分数', '评论时间','电影评论'], keep='first')

根据他们的列名查找重复值,并对其进行删除只保留一条数据。

1.4异常值处理 


常见的异常值检测方法

  1. 简单统计
  2. 3σ原则
  3. 箱线图法

常见的异常值处理方法

  1. 删除
  2. 视为缺失值——用缺失值处理方法处理(填充,插值等)异常值

数模竞赛中所给的数据有一些较大有一些较小,那么我们就可以当做异常数据进行处理,避免对我们所做的内容有影响。对其原数据 进行删除或进行另外的填充。异常值我们可以根据箱线图进行分析,偏离箱线图的便为异常值。
在这里我们就只用箱线图展示,四分位距(IQR)就是上四分位与下四分位的差值。而我们通过IQR的1.5倍为标准,规定:超过上四分位+1.5倍IQR距离,或者下四分位-1.5倍IQR距离的点为异常值。

以下为核心代码:


# 算出上限和下线
q1 = data["列名"].quantile(0.25)
q3 = data["列名"].quantile(0.75)
iqr = q3 - q1
bottom = q1 - 1.5*iqr
upper = q3 + 1.5*iqr

# 筛选异常值
data[(data['列名'] >= bottom) & (data['列名'] <= upper)]

(如有侵权请联系本人) 

参考文献:

数据预处理之数学建模竞赛(E题)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Likeandno/article/details/134838814?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134838814%22%2C%22source%22%3A%22Likeandno%22%7D

数据预处理之异常值处理_交通数据异常值处理-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_46599926/article/details/123879548?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170186646316800222863813%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170186646316800222863813&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-123879548-null-null.142%5Ev96%5Epc_search_result_base8&utm_term=%E5%BC%82%E5%B8%B8%E5%80%BC%E5%A4%84%E7%90%86&spm=1018.2226.3001.4187

  • 16
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值