2016研究生数学建模B题之数据预处理

给还没有预处理出数据的同学一点点帮助,大神勿喷^^
B题的题目以及数据集就不贴了,网上都可以下载的到的。

问题一、请用适当的方法,把genotype.dat中每个位点的碱基(A,T,C,G) 编码方式转化成数值编码方式,便于进行数据分析。

第一问其实是一个铺垫,目的是方便后面三问的数据处理的方便,所以第一问要将ATCG四个碱基的编码转换成容易让计算机处理和分析的数值编码方式。

思路:

  • 例如第一个位点是用CT编码的,1000个样本中每个位点也就只有三种组合方式——CC,CT,TT。有的同学可能会有疑问,CT和TC一样吗?其实是一样的,题目中已经说明了。那么,我们可以将其分别编码为0,1,2(碱基一样的是偶数,碱基不同的是奇数)。
  • 这样编码的话,那么问题来了:比如CT组成的位点我们编码为CC(0),CT(1),TT(2)。CG组成的位点我们同理编码为CC(0),CG(1),GG(2),这时还是OK的,再来一对TG编码TT(0),TG(1),GG(2)。这个时候TT(0)和上面的TT(2)就冲突了。刚开始的想法是为碱基对的所有可能组合进行不同的编码,但是觉得引入过多数据不易于处理,就放弃了。
  • 我这里是采用记录每个位点的碱基对存入一个vector<string>容器中来解决的。并且在记录碱基对的时候,已经将单个碱基对进行了字典序排列(TC->CT),方便后面转换编码方式。碱基对的两个字母相同的情况下:字典序小的是0,字典序大的是2,其他是1。具体分析数据的时候,再将位点中对应的碱基对调出来对比一下。
  • 当然,大家也可以用自己的思路进行编码,源码框架已经给出,可以自行修改。

数据的导入与输出头文件RDWR.h

将碱基对转换成数字编码头文件letter_to_number.h

下面是主函数main.cpp

数据预处理结果:数学建模B之数据预处理

写的比较仓促,再加上技术有限,复杂度较高,有兴趣的同学可以自行优化。如有错误请留言指出,共同讨论。

《2016研究生数学建模B题之数据预处理》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注