数学建模中的数据预处理问题(Python语言)

数学建模中的数据预处理问题(Python语言)

以2023年C题的数据处理为例

数据读取

常见的数据集有两种,可能是.csv文件或者.xlsx文件。这里用的是.csv文件。

.csv文件的数据读取

import pandas as pd

# 文件路径
file_path1 = '附件1.csv'  # 使用逗号分隔的文件
file_path2 = '附件2.csv'  # 使用空格分隔的文件
file_path3 = '附件3.csv'  # 使用空格分隔的文件
file_path4 = '附件4.csv'  # 使用逗号分隔的文件

# 读取附件1和附件4,使用逗号分隔
df1 = pd.read_csv(file_path1, encoding='utf-8')  # 读取附件1
df4 = pd.read_csv(file_path4, encoding='utf-8')  # 读取附件4

# 读取附件2和附件3,使用空格分隔
df2 = pd.read_csv(file_path2, sep='\s+', encoding='utf-8')  # 读取附件2
df3 = pd.read_csv(file_path3, sep='\s+', encoding='utf-8')  # 读取附件3·

上面代码是通过pandas库读取了.csv文件,同时读取了两类文件(使用逗号分割的和使用空格分割的)

对于.xlsx文件的读取

import pandas as pd

# 指定Excel文件的路径
file_path1 = '附件1.xlsx'  
file_path2 = '附件2.xlsx'  
file_path3 = '附件3.xlsx'  
file_path4 = '附件4.xlsx'

# 读取Excel文件
df1 = pd.read_excel(file_path1)  
df2 = pd.read_excel(file_path2)
df3 = pd.read_excel(file_path3)
df4 = pd.read_excel(file_path4)

如果.xlsx文件存在多个工作表,可以这样读取

df = pd.read_excel(file_path,sheet_name='工作表名')  

查看数据信息

head方法查看前几行数据(默认为5行)

df1.head()

tail方法查看后几行数据

df1.tail()

查看数据框的行数和列数

df1.shape

查看数据框的列名

df1.columns

查看数据框的信息,包括列名、数据类型、非空值数量

df1.info()

查看数据框的索引

df1.index

查看数据框的统计信息,包括均值、标准差、最大值、最小值等

df2.describe()

缺失值处理

删除有缺失值的行或列

df1.dropna()

将缺失值用指定元素来填充

df1.fillna(value)#value表示指定元素

将旧的列名改为新的列名

df7.rename(columns={'单品名称_x':'单品名称'})

数据处理

数据合并

使用merge方法进行数据的合并,merge(数据1,数据2,相同列

df5=pd.merge(df1,df2,on='单品编码')
df6=pd.merge(df5,df4,on='单品编码')
df7=pd.merge(df6,df3,left_on=['单品编码','销售日期'],right_on=['单品编码','日期'])
df7

这样,我们把题目所给的四个附件进行了合并,根据’单品编号’相同进行合并。

按列名进行分组(分为六类)

#数据按照列名(销售日期,分类名称)进行分组,计算和(即日销量)
df8=df7.groupby(['销售日期', '分类名称']).agg({'销量(千克)': ['sum']})

求销量的综合

df8.groupby(['分类名称']).sum().reset_index()

蔬菜六大品类日销量统计学指标的计算

# 重设列索引
df8.columns = df8.columns.get_level_values(0)
# 按销售日期和分类名称分组,并计算每个分类的日平均销量
df9 = df8.groupby('分类名称').agg(
    最大值=('销量(千克)', 'max'),
    最小值=('销量(千克)', 'min'),
    均值=('销量(千克)', 'mean'),
    中位数=('销量(千克)', 'median'),
    峰度=('销量(千克)', lambda x: x.kurtosis()),
    偏度=('销量(千克)', lambda x: x.skew()),
    标准差=('销量(千克)', 'std')
).reset_index()

同理计算单品销售量的统计学指标

#数据按照列名(销售日期,分类名称)进行分组,计算和(即日销量)
df10=df7.groupby(['销售日期', '单品名称_x']).agg({'销量(千克)': ['sum']})
# 重设列索引
df10.columns = df10.columns.get_level_values(0)
# 按销售日期和分类名称分组,并计算每个分类的日平均销量
df11 = df10.groupby('单品名称_x').agg(
    最大值=('销量(千克)', 'max'),
    最小值=('销量(千克)', 'min'),
    均值=('销量(千克)', 'mean'),
    中位数=('销量(千克)', 'median'),
    峰度=('销量(千克)', lambda x: x.kurtosis()),
    偏度=('销量(千克)', lambda x: x.skew()),
    标准差=('销量(千克)', 'std')
).reset_index()

数据写入

把数据写入.csv文件中

df = pd.DataFrame(df7)
# 将 DataFrame 写入 CSV 文件
df.to_csv('output1.csv', index=False, encoding='utf-8')

把数据写入.xlsx文件中

df = pd.DataFrame(df7)
# 将 DataFrame 写入 xlsx 文件
df.to_excel('output2.xlsx', index=False)

数据集链接
通过百度网盘分享的文件:新建文件夹
链接:https://pan.baidu.com/s/1ijrqPHoV5CFI8h9GNHOZaA
提取码:1111

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你好!针对2023全国大学生数学建模比赛的C题数据预处理,我可以为你提供一些常见的方法和步骤。请注意,以下是一般性的建议,具体处理方式可能需要根据数据的具体特点和要求进行调整。 1. 数据导入:将原始数据导入到一个适合的数据分析环境,例如Python的pandas库或者R语言。确保数据的格式正确,并对缺失值进行处理。 2. 数据清洗:删除不需要的列或者行,根据任务需求进行筛选和过滤。如果有重复数据,则进行去重操作。 3. 数据转换:将需要处理的数据进行转换,例如将文本型数据转换为数值型数据,或者进行单位转换等。 4. 缺失值处理:对于存在缺失值的数据,可以选择删除含有缺失值的行或者列,或者使用插补方法填充缺失值。 5. 异常值处理:检查数据是否存在异常值,如极大值、极小值或者超出合理范围的数值。可以选择删除异常值或者通过插补等方法进行处理。 6. 数据归一化:对于不同量纲的数据,可以进行归一化处理,使得不同特征具有可比性。 7. 特征工程:根据问题需求和业务背景,对原始数据进行特征构建和选择,可以使用统计学方法、数据挖掘技术或者领域知识。 8. 数据可视化:通过绘制图表,对数据进行可视化分析,探索数据的分布、变化趋势和相关关系。这有助于进一步理解数据。 9. 数据分割:根据建模需求,将数据集划分为训练集、验证集和测试集等,以便进行模型训练和评估。 以上是一般性的数据预处理步骤,具体实施时需要根据具体情况进行调整和选择。希望对你有所帮助!如果你有更具体的问题或者需要进一步的指导,请告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自由自在2004

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值