用matlab进行xlsx表格的提取和操作

news/2024/11/19 21:31:34/

用matlab进行xlsx表格的提取和操作

  • 一、数据的提取
  • 二、垃圾数据的清除
  • 三、数据的分类
  • 四、图像的绘制

在学习数学建模时,我们会碰到大数据的问题,这类问题通常要进行数据预处理,这是我用matlab进行预处理的一些经验总结。数据预处理通常分为三步,缺失值、异常值的检测与处理,数据标椎化,数据的降维。本文我们以2020年数学建模国赛C题为例,讲解xlsx表格的提取和分类。

一、数据的提取

用xlsread函数进行数据的提取。
xlsread函数语法:

num = xlsread(filename)
num = xlsread(filename,sheet)
num = xlsread(filename,xlRange)
num = xlsread(filename,sheet,xlRange)
num = xlsread(filename,sheet,xlRange,‘basic’)
[num,txt,raw] = xlsread(___)
___ = xlsread(filename,-1)
[num,txt,raw,custom] = xlsread(filename,sheet,xlRange,‘’

filename:要提取的文件名(也可以是文件路径);num:返回的double型的数据矩阵(字符串类型的数据在该矩阵中显示为NaN);sheet:要提取的表格页数或页名称;xlRange:提取数据的范围,使用Excel 范围语法,例如 ‘A1:C3’;txt:在元胞数组中返回文本字段,数据类型的元素在元胞中为空值;raw:在元胞数组中返回数值数据和文本数据

  • 另外在最新版本中还有readtable,readmatrix,readcell函数可以进行数据的提取,具体函数语法可以在MATLAB官网查询学习。

要处理的表格预览
要处理的表格预览观察上表格,其中既有文本数据,又有数值数据,所以我们用[num,txt,raw] = xlsread(___)提取表格中数据保证所有的数据都能够被提取。
matlab代码:[num,txt,raw] = xlsread('附件1:123家有信贷记录企业的相关数据.xlsx',2)

二、垃圾数据的清除

提取到表格中的所有数据,我们就可以用矩阵的语法对其进行操作了。可以看到表格中的最后一列中含有作废发票,故我们要将其删除,基本思路是找到第八列所有的“作废发票”返回其的行指标,将这些行删除。

  1. 提取出第八列
    因为raw的第一行是对应列的标题,所以我们从第二行开始
L8 = raw(2:end,8)
  1. 找出第八列中是“作废发票”的元素
tf = strcmp('作废发票',L8);

strcmp函数可以判断字符串数组中的元素是否和给定的字符串完全相同,如果完全相同返回1,否则返回0,tf是一个和L8大小相同的double矩阵。

  1. 返回对应行指标并清空
index = find(tf==1);
%去除作废发票
raw(index+1,:) = [];

find函数可以返回满足括号中关系式的元素的指标,因为我们从第二行开始查找,令index+1行等于[ ],相当于对第index+1行进行删除,删除之后元胞数组的大小也变化。

三、数据的分类

数据的分类主要有两方面,一方面是公司的分类,另一方面是日期的分类,为了方便,我们将raw的每一列复制给一个变量。

L1 = raw(2:end,1);L2 = raw(2:end,2);L3 = raw(2:end,3);L4 = raw(2:end,4);
L5 = raw(2:end,5);L6 = raw(2:end,6);L7 = raw(2:end,7);L8 = raw(2:end,8);
  1. 找出所有的公司名称
    L1对应的是第一列,即公司代号列
uni = unique(L1);

unique函数返回字符串数组中所有不同的字符串,因为其为内置的函数,字符串的出现顺序和原数组不同,后面写代码时要注意。

  1. 找出所有的公司名称对应的行号,将其储存在一个元胞数组里
compid = cell(length(uni),1);
for i = 1:length(uni)tf = strcmp(uni(i),L1);index = find(tf==1);compid{i} = index;
end

元胞数组的赋值应使用大括号{ },元胞数组值的提取也使用大括号,使用小括号()返回的是数据类型或一个新的元胞。

  1. 找出每个公司,每个月份的行号,将其储存在一个新的元胞里
    L3对应的是日期列,使用unique函数,可以知道日期的跨度为4年,故我们创建一个12x4=48列的元胞,储存2016年1月至2019年12月的行号
Et = cell(length(uni),4*12);
%循环公司的坐标表
for i = 1:length(uni)for j = [2016 2017 2018 2019];for k = 1:12idcp = compid{i};logbool = strncmp(L3(idcp),sprintf('%d%s%d%s',j,'/',k,'/'),7);index = find(logbool==1);Et{i,(j-2016)*12+k} = index;endend
end

sprintf函数可以连接数字和字符串组,strncmp函数与strcmp函数类似,但其可以指定匹配的字符串的长度,如上代码规定匹配到前7个字符相同则返回1。

四、图像的绘制

至此我们已经拥有了所有公司的目录,和所有公司对应的不同月份的目录,如何使用这些目录是关键,下来我们简单的绘制一下某一公司的不同月份按时间序列的总金额、总税额的变化曲线。

  1. 新建一个.m文件
  2. 创建一个你要查找的公司对象并找到其在公司名称元胞中的位置
    这里我想查找公司代号‘E17’的相关信息
company = 'E17';
id = find(strcmp(uni,company)==1);
  1. 创建两个数组储存月总金额、总税额
    L5对应的是金额列,L6对应的是税额列
Tolmm = zeros(48,1);%金额,按月来计
Tolsm = zeros(48,1);%税额,按月来计
t1 = [L5{compid{id}}];
t2 = [L6{compid{id}}];
for i = 1:48Tolmm(i) = sum(t1(Et{id,i}));Tolsm(i) = sum(t2(Et{id,i}));
end
  1. 绘制折线图
plot(1:48,Tolmm,'-',1:48,Tolsm,'.-');
legend([company '的发票金额'],[company '的发票税额'],'location','northwest');
xlabel('时间/月');ylabel('金额/元');

效果展示:代码效果展示
本文文档和源代码地址


http://www.ppmy.cn/news/501003.html

相关文章

百万excel导入mysql_百万级xlsx表格导入数据库的实现方案

需求是这样的,供应商给到一份 xlsx 表格(144MB),里面刚好有 100w 行数据(11列)。我需要把它们稍作处理后写入到 mysql 数据库 项目基于 Laravel,既然需要稍作处理,那我首先想到的就是找一个能读 xlsx 的 composer 包 我尝试过最知名的PhpSpreadsheet、对 Laravel 友好的 La…

python-生成xlsx表格

引入 xlsxwriter 包 import xlsxwriter workbook xlsxwriter.Workbook(currency_format.xlsx) cell_format_one workbook.add_format({bold: True, font_color: red}) cell_format_two workbook.add_format({bold: False, font_color: green}) # cell_format_two.set_font_…

xls和xlsx的区别

xls和xlsx都是表格文件格式,后缀看起来也非常像,那为何会设置这两种格式呢?它们之间一定也很多别区别。word是常用办公软件,我觉得有必要了解清楚xls和xlsx的区别才行,下面就给大家详细介绍下吧。 1、文件格式不同&am…

Excel表格文件,.xls和.xlsx格式的区别

用一句话概括,xlsx和.xls格式的主要区别在于,.xls格式单个工作表最多支持65536行,256列。.xlsx格式最多支持1048576行,16384列。此外就是,存储同样多的数据,.xlsx格式文件更小。基本就这两点区别。下面是关…

国内外八大敏捷开发工具盘点

1、Leangoo领歌;官网:Leangoo领歌 - 高效企业必备的敏捷工具,Scrum工具,SAFe敏捷工具,敏捷项目管理,敏捷研发工具 2、VersionOne;官网:https://www.collab.net/products/versiononehttps://www.collab.net/products/versionone …

5年测试老鸟整理,企业自动化测试经验,不要再走弯路了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 2023年&#xff0…

电脑游戏怎么录屏?其实很简单,只需要简单3步

电脑游戏一直是游戏爱好者最热衷的游戏之一。但是,有时候我们想分享我们在游戏中的精彩时刻,或者记录我们的游戏过程以便后续观看和学习。在这种情况下,录屏就成了必不可少的工具。但是,许多人可能不知道电脑游戏怎么录屏。在本文…

电脑软件下载

电脑软件下载 quartusll9.0下载链接: https://pan.baidu.com/s/18TlW5atsI6GIkvKE8hS7ag ;提取码:iz2l solidwork2012下载链接: https://pan.baidu.com/s/10cD0R9mr5OYguHVW5qsX1Q ;提取码:qj5d visual studio2008下载链接: https://pan.baidu.com/s/1aJz_SC0rmIUU-e70F…