谈谈MATLAB:CSV数据提取与处理

MATLAB:Excel数据提取与处理

  • 关于
  • 环境
  • 一看就存在的难点
  • 整容不是必要的
    • 第一步:获得黑名单-拉出所有待处理的CSV文件
  • 统一服装容易管理
    • 第二步:处理黑名单-提取所需的参数
      • 不做不会发现的问题
  • 地方官上线
    • 第三步:归类黑名单-按通道整合数据
      • 总是存在那么多陷阱
  • 排好队,等检阅
    • 第四步:通过绘制散点图观察数据
      • trouble is a friend
  • 一点点优化

关于

起因:公司给了我大半年的导航接收机数据,数据文件夹的存储格式大体为:数据包->月->日->通道->数据.csv,希望提取需要的参数,然后按通道整合,最后分析处理。当然,公司的期望是一个通用性的数据分析软件。
备注:小白。少说话,多说易出事。

环境

MATLAB 2011(后迫于无奈使用MATLAB 2017) ;office 2010

一看就存在的难点

  1. 多级文件夹,如何一次性拉出所有的csv文件;
  2. 数据文件极多,如何读写能加快速度;
  3. 部分数据格式有所不同,如何自动区别;
  4. 如何呈现散点图能更好的显示趋势。

整容不是必要的

第一步:获得黑名单-拉出所有待处理的CSV文件

将数据文件都变成整容脸,使他们的名字大体相同,区别用序号代替,这样就可以循环读取了呀!这样的形式我在做视觉物联网作业的时候是用过的(参看往期文章)。但问题来了,我要对他们整容,我也得先找到他们才行,可我找到了他们,我不就知道了他们的地址了吗?!
【前期:采用cmd的ren命令对部分数据文件进行了重命名,做完了发现并没有意义。】
我在知识的海洋里遨游,游着游着便发现我要的那条鱼,于是,再经过简单烹饪后,他便成为了我的盘中餐,通过这个函数我成功拉到了数据包下的所有csv文件(emmm,大概也就4000多个数据文件,1000000多条数据而已)。
事实证明,整容不是对什么都适用。

统一服装容易管理

第二步:处理黑名单-提取所需的参数

原数据文件中含有100+个参数,而我们只需要时间+关键的六个参数,所以去繁从简十分重要。大家穿的都很多,但大致分为两种冬日着装,所以不能下统一的命令,如,把第几件外套脱掉,把第几条裤子留下。这时候,只好采用匹配的方法,告诉他们,如果你穿了黑色彪马外套、黑色彪马裤子、黑色彪马鞋子(不瞒大家说,李现穿着真帅!),请继续穿着它,其余的请脱掉。至此,大家的服装统一了。
为了不使处理后的数据是去原有时间等信息,我将其放在原数据同一个文件下。这里采用的方式是:使用strrep函数替换掉.csv,并命名新的数据文件名为原名+analysis.csv。

不做不会发现的问题

  1. MATLAB 2011没有table函数;
  2. table函数各参数长度须一致;
  3. Excel文件占用空间大且MATLAB处理慢(不完全统计:Excel三秒一个,csv一秒三个);
  4. MATLAB写csv文件时文本与数字不能一起写入;
  5. MATLAB与Excel的数值日期起始时间不一致;
  6. 有一些0kb的伪装文件;
  7. 某一天起,多了几个通道;
  8. 还没解决的问题:MATLAB读取CSV文件中的日期后再次写入Excel自动转化为数值日期,MATLAB读取数值日期时,却不会转化为日期格式。

地方官上线

第三步:归类黑名单-按通道整合数据

在这里,主要是将不同出生日期的按照地方整合到一起,即同个通道的数据整合成一个数据文件。具体操作如下:
拉取所有的csv文件目录,同过目录中的关键字判断数据属于哪一个通道(使用strfind函数),然后将对应的参数存入对应的矩阵,保存矩阵,并将矩阵写入csv。

总是存在那么多陷阱

  1. 忘了现在数据包下有原始数据的csv与处理后的csv文件;
  2. 部分文件最后一条数据残缺;
  3. 匹配通道时忘了区分通道1与通道10等,导致通道1*全都写入通道1;
  4. 直接使用save函数保存所有矩阵时,由于在GUI下,保存了figure,导致load矩阵时会弹出一个新的figure,而且而且,报错;

排好队,等检阅

第四步:通过绘制散点图观察数据

观察汇总后每个通道的数据,多则8w+,少则2k+,如果将所有的数据绘制在一张图里,点过于密集,难以查看,于是,采用每1000/2000条数据绘制一张散点图。使用MATLAB画图的好处是,可以缩放!能让你想看哪看哪!
领导说,把图存在word里,于是,我这么做了。粗粗一算,8w+条数据按照2000分割的话,每条数据六个参数,也就是240+张图,也不是太多哈。

trouble is a friend

  1. 绘制散点图时,直接使用plot(日期,数据)横轴无法显示日期,后来采用set(gca,‘xticklabel’,日期);

一点点优化

  1. 筛选不同通道使用下拉框;
  2. 绘制采用两种模式:绘制所有与绘制选定长度的数据;
  3. 存储异常数据文件;
  4. GUI打包(听说没有MATLAB的电脑还得下环境,这不太友好)。

你可能感兴趣的:(数据处理)