总结一下几次数模

最近参加了国赛,大湾区金融数学建模,美赛。由于都选择了数据处理的题目,所以经常会使用到数据预处理的代码,然而每一次都会忘记,都要重新去查找代码,因此开贴记录一下常用的代码。

excel的读取

数模中最常用的数据存储格式是excel,而我一般常用的编程语言是python和matlab,因此记录一下两个语言的数据读取形式。

python

python读取数据主要是使用了pandas库中read_excel()这个函数,这个函数会在python中生成与excel形式类似的表格dataframe。主要参数及特点如下:

  1. io文件路径,把在同文件夹中的xlsx的名称输入即可

  1. sheet_name= 可以从0开始传入数字,也可以传入字符就是excel中sheet1的具体名称

  1. header= 默认是0就是将第一行作为列索引(列名),可以是其他行,也可以是None,就是默认用012345...来作为列索引

  1. names= 这个参数很有意思,说起来挺鸡肋的,大概就是重新设置列索引,然后功能是覆盖掉header(从这个角度来看,header的作用就是选择哪一行开始作为数据集)

  1. index_col= 这个跟header用法基本一致,只不过是行索引,但是默认值是None

例子如下:

import pandas as pd
df = pd.read_excel('Problem_C_Data_Wordle.xlsx', sheet_name=0, header=0, index_col=None)

很普通的excel读入,基本excel已经操作好了,纯粹就是读入到python中

matlab

matlab读入需要掌握的原因是我的bp神经网络,svm分类器代码都是用matlab跑的,因此也需要掌握一下matlab的excel读取操作,需要注意的是,数值矩阵没有需要设置的索引

matlab读入的数据结构就是单纯的数值矩阵,使用函数xlsread进行读取,参数如下

  1. filename 文件路径

  1. sheetname sheet的名称

  1. range 利用excel的行列索引来选取

例子如下:

x = xlsread('数据分析.xlsx','bp结果','A2:G124');

matlab还有一个方法使用数据,将excel的数据复制到变量区,再另存为mat格式,对于matlab来说就非常容易提取

两种数据结构的索引

上一段落讲述了如何利用编程语言将excel中的数据转换成为dataframe和数值矩阵两种数据结构,下面介绍两种数据结构的常见索引方式,索引是我认为数据分析的必备过程,熟练掌握索引才能对数据进行筛选提取

dataframe

dataframe的索引无疑是非常灵活好用的,但是我认为对于自己这样的初学者来说是较难上手的,下面介绍几种常用的筛选,以及一些常用的操作。

dataframe自身属性的调用

  1. df.values 这是对dataframe中的数据进行ndarray的转换,去掉行列索引,剩下的数据转换成二维ndarray,经常用于对数据进行分析

  1. df.index 显示行索引

  1. df.columns 显示列索引

  1. df.info() 可以查询每一列的数据结构,重要的是统计了每一列的缺失值

  1. df.describe() 探索性分析,主要就是基础的均值方差的基础数据描述

dataframe的切片索引

首先,dataframe是不能直接使用python的切片索引,如果想实现类似操作,应该使用df.values将数据以ndarray的形式呈现,再使用切片索引

dataframe最基础的索引是使用df.loc以及df.iloc函数继续操作

  1. df.loc[] 这个是最接近切片思想的索引器

  1. df.iloc[] 这个是跟dataframe自己设置行列索引配合的索引器,使用是非常灵活的

dataframe的布尔索引

这个内容是我个人觉得是最有意思的部分,非常体现python的代码思想的一个步骤,我的学校只是开设了c++的课程,因此当我开始自学python的时候才发现python的功能封装是非常完善的,很多程序设计的代码思维基本就是我们思考问题的思维。

对于df['column']这样选择了特定列的dataframe, 对其进行逻辑判断,其结果是返回一个布尔类型的series,例子:

df_demo[df_demo['gender'] == '男'] = 1

如果再用df[]中使用这个布尔类型的series,就可以实现布尔索引的过程,使用时非常方便的。常用于字符的数字化,或者是一些特定的值筛选。

dataframe的拼接

  1. 数据list直接拼接

df['column'] = list

  1. dataframe拼接

采用merge或者其他的拼接函数,较复杂,不是很喜欢用

serious

serious自身属性的调用

  1. unique()

  1. value_counts()

数值矩阵

数值矩阵的索引思想和python的切片思想一致,唯一的区别也是值得注意的区别是,matlab的索引是(),而python的索引是[]。

对于matlab来说数据的查看都是直观的

[m, n] = size(x);

可以提取数值矩阵的行和列

excel的写入

python

excel的写入主要用到了dataframe中的df.to_excel()函数,也就是说,一般想将数据写入excel中,首先需要将数据转换成为dataframe的数据结构。

df.to_excel()具体的参数如下:

  1. 文件路径

  1. sheet_name= 保存在excel的sheet的名称或者序号

  1. columns= 可选择dataframe的特定列写入

  1. header= 默认是True,将列索引写在excel第一行

  1. index= 默认是True,将行索引卸载excel第一列,如果没设置特定的行索引,建议参数传入False,因为excel本身就有行索引

matlab

matlab中将数据传入excel中使用的函数是xlswrite()

需要传入的参数如下:

  1. 文件路径

  1. 数据内容

  1. sheetname

  1. range

数模中数据分析的代码思想

参加过几次数模比赛后,我从一开始的只会复制粘贴,到自己学会调试更改别人的代码,再到自己学会分块编写代码,面向过程这一编程思想是我最主要运用的思想,因此接下来的篇幅,我想记录一下自己作为非计算机专业自学编程的一些感悟。

首先是数据分析的一些常见过程,数据提取,缺失值,异常值处理,数据标准化,数据归一化,分类变量的数字化,等等,这些内容的有些可以使用代码块完成,有些可以借助一些软件直接操作,例如excel,spss等。当利用代码块的时候,对编程中的数据结构就要十分清晰,否则调试代码的过程中,就会需要耗费大量时间。

因此,在数模比赛,我认为将数据分类处理是非常重要的,每一问都要有相应的文件夹,以及相应的原始数据,对于处理数据过程中产生的新数据的存储格式也要十分清晰。

在对数据使用函数时,应该尽量使用新变量去接收,这样防止别的代码会因为原始数据的改动而跑不通。所以写每一个函数的输入和输出也需要十分清晰。

以上过程综合起来,建议先使用流程图将数据处理的过程标注,这样可以提高整天编程的效率,当有改动的时候也会十分方便。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值