所用的书是Matlab data analysis。学习的结果跟大家分享一下。其中所用的数据都可以在matlab中直接加载。
分析数据的第一部是数据清理。首先可以将数据放在图上,看数据是否存在某些特征会使影响分析的结果。比如通过观察可以确定是否存在缺失值、异常值、时间趋势,以及数据是否平稳。如果存在这些问题,就要通过相应的方法对数据进行修正。处理完之后的数据才可以正式的进入分析。
处理缺失值需要根据数据的具体情况来定:是直接忽略缺失值,还是用插值法(interpolation)来弥补缺失值。Matlab里边缺失值使用NaN来表示的。如果数据里边包含NaN,matlab不会发出警告,而是仍然按照你的编程进行运算。最后导致结果异常。以前计算逆矩阵的时候就遇到过这种情况,因为数据中存在NaN,导致矩阵不可逆。有时候直接从excel里边导入的数据,缺失值是用0来表示的。这个时候在matlab中不再显示NaN。但是在运算过程中有可能产生NaN,导致最后结果异常。
对于缺失值NaN,如果要直接忽略的话,一般是用方程isnan来识别NaN,然后再进行替代。假设矩阵x中包含NaN,有下面几种方法可以去除NaN:
>>i=find(~isana(x));
>>x=x(i) %第一个命令首先识别那些不等于NaN的矩阵中要素的编号,然后第二个命令就要求只保留这些编号的要素。
>>x=x(~isnan(x)); %可以直接去除NaN。
或者:
>>x(isnan(x))=[];
如果要去除包含NaN的行:
>>x(any(isnan(x),2),: