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

这篇具有很好参考价值的文章主要介绍了用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官网查询学习。

要处理的表格预览
用matlab进行xlsx表格的提取和操作观察上表格,其中既有文本数据,又有数值数据,所以我们用[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:12
            idcp = 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;
        end
    end
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:48
    Tolmm(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('金额/元');

效果展示:用matlab进行xlsx表格的提取和操作
本文文档和源代码地址文章来源地址https://www.toymoban.com/news/detail-459089.html

到了这里,关于用matlab进行xlsx表格的提取和操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3前端excel导出;组件表格,自定义表格导出;Vue3 + xlsx + xlsx-style

    当画面有自定义的表格或者样式过于复杂的表格时,导出功能可以由前端实现 1. 使用的插件 : sheet.js-xlsx 文档地址:https://docs.sheetjs.com/ 中文地址:https://geekdaxue.co/read/SheetJS-docs-zh/README.md xlsx-style:https://www.npmjs.com/package/xlsx-style 2. 安装引用 安装插件-vue3 引用插件 3. 组件表格

    2024年04月26日
    浏览(33)
  • 数学建模学习(7):Matlab绘图

    最基础的二维图形绘制方法:plot -plot命令自动打开一个图形窗口Figure; 用直线连接相邻两数据点来绘制图形 -根据图形坐标大小自动缩扩坐标轴,将数据标尺及单位标注自动加到两个坐标轴上,可自定坐标轴,可把x,  y 轴用对数坐标表示 -如果已经存在一个图形窗口,plot命

    2024年02月14日
    浏览(31)
  • 数学建模 | MATLAB数据建模方法--机器学习方法

    近年来,全国赛的题目中,多多少少都有些数据,而且数据量总体来说呈不断增加的趋势, 这是由于在科研界和工业界已积累了比较丰富的数据,伴随大数据概念的兴起及机器学习技术的发展, 这些数据需要转化成更有意义的知识或模型。 所以在建模比赛中, 只要数据量还

    2024年02月03日
    浏览(55)
  • 【数学建模】matlab| BP神经网络入门学习

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:以下本章里有大量作者自己的口水话和心里对白,请谨慎观看,若有不适,后果自负! 这部分学习内容以及代码参考(抄袭)了教材《matlab在数学建模中的应用》(第二版 主编:卓金武),加入

    2024年02月09日
    浏览(32)
  • 前端框架Layui实现动态表格效果用户管理实例(对表格进行CRUD操作-附源码)

    目录 一、前言 1.什么是表格 2.表格的使用范围 二、案例实现 1.案例分析 ①根据需求找到文档源码 ②查询结果在实体中没有该属性 2.dao层编写 ①BaseDao工具类 ②UserDao编写 3.Servlet编写 ①R工具类的介绍 ②Useraction编写 4.jsp页面搭建 ①userManage.jsp  ②userEdit.jsp ③userManage.js ④us

    2024年02月16日
    浏览(36)
  • 【数学建模学习】matlab实现评价模型——层次分析法(AHP)

    目录 1概述  2算法实现流程 3实例  4matlab实现层次分析法 5计算结果 层次分析法,简称AHP,是评价模型中的一种算法,指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。层次分析法的缺陷在于判断矩阵是主观决定的,

    2024年02月04日
    浏览(42)
  • 前端导出表格 修改样式(xlsx-style)用法

            xlsx-style 修改样式的机制  就是选中哪一行,那一列或者哪一个  然后去修改  比如表格最左上角的一个格子 坐标是 (0, 0) 下标  也可以叫做  A1 选中之后   可以修改其样式  1. 下载依赖   首先下载依赖到项目 2. 引入到项目 3. 创建导出表格         为什么

    2024年02月13日
    浏览(39)
  • matlab数据的获取、预处理、统计、可视化、降维 | 《matlab数学建模方法与实践(第三版)》学习笔记

    一、数据的获取 1.1 从Excel中获取 使用readtable() 使用xlsread()——xlswrite() 1.2  从TXT中获取 使用load() 使用textread() 使用fopen() fread() fclose()  使用fprintf()写入信息到txt  1.3 从图片中获取 使用imread  1.4 从视频获取  使用视觉工具箱中的VideoFileReader  二、数据的预处理 2.1 缺失值处

    2024年01月19日
    浏览(57)
  • uniapp - 微信小程序JSON数据导出表格(XLSX)

    uniapp-微信小程序导出表格(XLSX) 这篇文章苦于,后端没有提供下载接口,前端的小伙伴自己要处理Json数据的情况下 用到了,由Sheet.js出品的 js-xlsx 是一款非常方便的只需要纯JS即可读取和导出excel的工具库,用于多种电子表格格式的解析器和编写器。 这里只说明xlsx导出 其

    2024年02月16日
    浏览(27)
  • 数学建模学习(58):简单点六分钟学会matlab应用层次分析(AHP)

    这两篇呢都比较偏原理,想要模仿出来还是挺费劲,这里我们讲一下简单的套路。至少你应该从这两篇文章学会到判断矩阵怎么写出来的。 二、原理过程与套路实现 一致性指标为(一致性指标用CI计算,CI越小,说明一致性越大): 判断矩阵元素 的标度方法如下,这个我已

    2024年04月27日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包