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

2023-05-16

用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: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('金额/元');

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用matlab进行xlsx表格的提取和操作 的相关文章

  • 在 matlab/octave 中将数据集分成两个子集 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 将数据集分为两个子集 例如 训练 和 测试 其中 训练集包含 80 的数据 测试集包含剩余的 20 分裂的意思是生成一个长度等于的逻辑索引
  • MATLAB 中的抗锯齿线和标记

    您好 我在 MATLAB 中有一张图像 我希望这条线是平滑的 看看从 0 4 到 0 8 的线 这太可怕了 当在图中使用 LineSmoothing on 运算符时 我得到了这个 我在线条上做得很好 但它也使标记变得平滑 而且它们太可怕了
  • 如何建立数据流挖掘的滑动窗口模型?

    我们遇到的情况是 流 来自传感器的数据或服务器上的点击流数据 采用滑动窗口算法 我们必须将最后 例如 500 个数据样本存储在内存中 然后 这些样本用于创建直方图 聚合并捕获有关输入数据流中异常的信息 请告诉我如何制作这样的滑动窗 如果您询
  • 如何获取活动对象 MATLAB GUI 的句柄

    我正在尝试使用 MATLAB GUI 创建日历 我有两个Edit Text对象 edittext1 and edittext2 我想做这个 我把光标放在edittext1然后在日历中选择日期 它会进入文本字段edittext1 同样对于ed
  • 将组合字符串和数字输入的元胞数组写入文本文件

    考虑以下 DateTime 2007 01 01 00 00 2007 02 01 00 00 2007 03 01 00 00 Headers Datetime Data Dat 100 200 300 Data DateTime num
  • 类方法的自定义代码完成?

    在 MATLAB 中 可以定义代码建议和完成 如标题为 的文档页面中所述 自定义代码建议和完成 https www mathworks com help matlab matlab prog customize code suggestio
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 通过傅里叶空间填充进行插值

    我最近尝试在 matlab 上实现一个在傅立叶域中使用零填充的插值方法的简单示例 但我无法正常工作 我总是有一个小的频移 在傅里叶空间中几乎不可见 但它在时空上产生了巨大的误差 由于傅里叶空间中的零填充似乎是一种常见 且快速 的插值方法 因
  • MATLAB - GUI 和 OPC 服务器

    我想在 MATLAB 中设计一个图形用户界面 可以使用 MATLAB 的过程控制对象链接和嵌入 OPC 工具箱连续读取数据 我怎样才能实现这个 我已经设计了图形用户界面 但我无法将数据读入图形用户界面 就这样做 type opctoolMA
  • 为什么 mex 文件中的 OpenMP 仅产生 1 个线程?

    我是 OpenMP 新手 我有以下代码 使用配置了 MSVS2010 的 Matlab mex 可以正常编译 计算机有 8 个可用处理器 我也使用 matlabpool 检查过 include mex h include
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 如何将 HTML 表格导出为 .xlsx 文件

    我有一个关于导出的问题HTML表格 as an xlsx文件 我做了一些工作 现在我可以将其导出为xls 但我需要将其导出为xlsx 这是我的 jsFiddle https jsfiddle net 272406sv 1 https jsf
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39

随机推荐

  • ROS命令行工具的使用

    一 命令行工具的使用 前言 在ROS里面 xff0c 命令行工具的使用能够使我们深入了解ROS xff0c 使我们操作ROS的时候更加方便 我们利用海龟作为示例进行命令行工具的学习 运行小海龟步骤 xff1a 终端输入 roscore 然后
  • ROS快捷操作键和话题记录与复现

    一 ROS快捷操作键 打开终端 xff1a Ctrl 43 alt 43 T 查看隐藏文件夹 xff1a Ctrl 43 H 结束终端的某个操作 xff1a Ctrl 43 C 启动运行ROS系统前必须的一个指令 xff1a roscore
  • ROS工作空间和功能包

    一 工作空间 工作空间 xff08 workspace xff09 xff08 缩写ws xff09 工作空间是存放工程开发相关文件的文件夹 代码空间 xff08 source space xff09 xff08 src xff09 是用来
  • ROS实现代码及已编译代码运行步骤

    目录 一 实现一个代码步骤1 C 43 43 代码实现步骤2 python代码实现步骤 二 已编译代码运行步骤 一 实现一个代码步骤 1 C 43 43 代码实现步骤 在catkin ws src 内创建功能包的步骤 其实可以任意创建工作空
  • 基于ROS的PX4+Gazebo仿真——PX4一键起飞及飞行控制

    一键起飞 参考及引用 1 CSDN博主 战争果子 的原创文章 xff0c 遵循CC 4 0 BY SA版权协议 原文 xff1a https blog csdn net EnthusiasmZing article details 7916
  • RT-Thread相比较于Freertos的优势在哪里

  • Up Board安装ROS及mavros

    Up Board安装ROS及mavros 目录 Up Board安装ROS及mavros一 在Up Board安装Ubuntu系统1 材料准备2 拿一个空的U盘作为驱动盘为Up Board安装系统3 安装Ubuntu系统 二 在Ubuntu
  • Unity和ROS通讯的机械臂

    Unity和ROS之间的通讯包 目录 Unity和ROS之间的通讯包参考及引用1 Github源码地址 Unity和ROS之间的通讯 一个ROS包 xff08 用于接收从Unity场景发送的ROS消息 xff09 两个导入到Unity的包
  • 虚拟机Ubuntu磁盘扩容个人记录

    虚拟机Ubuntu磁盘扩容个人记录 一 修改扩展大小 修改成功以后 xff0c 打开虚拟机Ubuntu 二 进入Ubuntu修改 打开终端 xff0c 输入 sudo gparted 右键点击后更改大小 然后确定修改 最后 xff0c 终端
  • 下载源码包后在Ubuntu编译

    下载源码包后在Ubuntu编译 学习使用Ubuntu过程中 xff0c 不免会尝试跑一遍别人的代码 xff0c 这时候要知道如何将源码下载后进行编译及运行 本文与以下两篇博客相关 xff1a ROS工作空间和功能包 ROS实现代码及已编译代
  • 利用科大讯飞语音合成模块SDK实现ROS语音交互

    利用科大讯飞语音合成模块SDK实现ROS语音交互 本文内容与CSDN博主 AI Chen 的原创文章相同 xff0c 可以直接参考原文 xff1a https blog csdn net qq 39400324 article detail
  • tts_subscribe.cpp代码

    tts subscribe cpp span class token comment 语音合成 xff08 Text To Speech xff0c TTS xff09 技术能够自动将任意文字实时转换为连续的 自然语音 xff0c 是一种能
  • FreeRTOS线程安全、中断安全的printf实现方式

    文章目录 前言一 问题描述二 解决方案1 线程安全 中断安全的printf实现方式 总结参考 前言 利用串口对基于FreeRTOS的多任务程序调试过程中 xff0c 时常出现数据交叉打印 xff0c 甚至出现乱码现象 这是因为通常情况下 x
  • 结构体空间对齐和结构体数组的使用

    今天在学习linux的platform总线时 xff0c 设备对资源的描述用到了结构体数组 xff0c 以前从没见过 如下 很明显用结构体数组主要是用来给一系列相同类型的结构体赋值 xff0c 主要是来看内存分配问题 首先是结构体的内存分配
  • ubuntu:出现bash: /opt/ros/melodic/setup.bash: 没有那个文件或目录 解决方法

    如图 xff0c 解决方法如下 xff1a 打开虚拟机终端 xff0c 输入 gedit bashrc 弹出一个文件 xff0c 找到最后一行 xff0c 如图所示 然后我roscore了一下 xff0c 看了一下我的ros版本 xff1a
  • STC单片机仿三菱FX2n方案 hex烧录进去就可以当plc用

    STC单片机仿三菱FX2n方案 hex烧录进去就可以当plc用 xff0c 成本低方便快捷id 61 643520282241 amp
  • 西门子S7-1200系列PLC定时器指令

    定时器指令是在PLC程序设计中非常常见的一种指令 xff0c S7 1200系列PLC的定时器的指令格式及使用方式都不同于S7 200系列PLC S7 1200系列PLC的采用的是IEC标准的定时器指令 xff0c 用户程序中可以使用的定时
  • 0基础学springboot之对数据库的增删改查

    1 xff1a 使用的是mysql数据库 xff0c 数据库中的表为student 2 xff1a 创建springboot项目 xff0c 在pom文件里加载mysql依赖 lt dependency gt lt groupId gt m
  • 平衡车Car_Balance(一)——电机

    目录 一 电机简要概述 二 常见电机种类 1 直流有刷电机 xff08 BDC xff0c 最最最常见的电机 xff09 2 直流无刷电机 xff08 BLDC xff09 3 舵机 4 步进电机 三 平衡小车选用电机及需要关注的参数 1
  • 用matlab进行xlsx表格的提取和操作

    用matlab进行xlsx表格的提取和操作 一 数据的提取二 垃圾数据的清除三 数据的分类四 图像的绘制 在学习数学建模时 xff0c 我们会碰到大数据的问题 xff0c 这类问题通常要进行数据预处理 xff0c 这是我用matlab进行预