「机器学习」:谈谈有关数据预处理中的小技巧-Excel分列

时间: 2020-02-24 笔记 机器学习 Excel

问题引出

  • hadoop,hive等输出数据导出为csv文件

    • 解决:用表格软件打开的数据文件,数据都保存在同一列;通过一些小技巧把一列的数据分成我们所需要的列数。

    • 写论文的时候遇到的问题:

      • hadoop1.0.3
      • 使用hadoop对数据进行map-reduce操作后,在终端上呈现的形式:
        192.168.1.2 31    24	1
        127.0.0.1 26    21	1
        192.168.1.2 31    27	2
        192.168.1.2 31    25	1
        192.168.1.2 44    11	1
        192.168.1.100 42    8	1
        127.0.0.1 27    55	1
        127.0.0.1 26    25	2
        192.168.1.2 21    26	2
        192.168.1.100 40    87	2
        

这里的操作仅仅是对日志的长度进行了调整,最终目的是对日志进行聚类,所以对数据整合特征,整理出几个特征包括: ip,url长度,parameter长度和visit times per hours这四个特征;

在实际的操作中,是不可能把hadoop的输出打印在终端上然后ctrl+c,ctrl+v,这样的工作量很大。而我们可获得的是:

  • 1.当然hadoop也给出了解决方案就是通过web交互页面访问文件,并有下载文件的按钮。
  • 2.hadoop fs -get命令同样也可以把输出文件从hdfs文件系统下载到本地。 但是使用表格软件打开,所有的数据仍然是处在同一列下,且无法分列。所以导致并不能继续后面的python读取csv的操作,会报错;

解决方法:

  • 首先需要:
    • 数据分列操作:
      网上有大把的教程提示我们如何去把一堆数据从一列中分离成数列。 wps和excel原理基本都不变:选中数据列,点选数据-分列则可进入分列操作,分列操作需要我们去告诉机器,哪些是数据需要分出来单独成一列,所以以下就是重点:分隔符;
  • 其次:
    • 优化代码的输出:
      我们需要对代码进行修改,即保证:我们所需要的每列输出的字段和后面的字段中间都存在分隔符,分隔符可以是tab,空格等等; map print初始代码
print ip,format(len(url)),format(len(para))

修改后代码,如下,在第二列和第三列输出之间加入了两个空格,告诉python print (' ')

print ip,format(len(url)),('  '),format(len(para))

于是在把输出文件导出后,使用表格软件打开文件同样是所有的数据存在同一列的情况,这个时候我们对数据列进行数据分列操作后即可分出我们所需要的列数,我这个是四列。如下,我们在终端下cat一下:

ip,url,para,time
127.0.0.1,24,10,303
127.0.0.1,14,11,1
192.168.1.2,39,32,1
192.168.1.2,29,11,2
127.0.0.1,40,10,2
127.0.0.1,333,20,1
127.0.0.1,23,51,2
192.168.1.2,5,18,1

(表头自己加即可)


我们可以看到,数据显示,每列的数据中间都有一个逗号。当然,我们在输出的时候,也可以对数据进行处理,每一列数据都加上逗号,理论上是可行的,我没有试过。鼓励各位多动手。
以上。