本次比赛第一赛季我们团队大赛先用weka对数据进行预处理。weka是一款开源的,免费的,基于JAVA环境下开源的机器学习(machine learning)以及数据挖掘(data mining)软件。我非常喜欢这个软件,很容易上手,功能很强大,也不需要很多的编程,图形化做的比较好。打算在数据预处理上主要使用weka。
weka下载安装
weka软件下载网址,根据自己的操作系统选择Windows还是Mac,32位还是64位,强烈推荐装64位系统,因为赛题数据较大,约500M,如果想一次性读取的话,大概需要3.5G内存,而32位系统最大的物理寻址内存也就是4G,再加上系统其它占用,无法一次性导入这么大的数据。当然你也可以分批次导入,这样麻烦一些,需要自己研究一下。
软件下载
在此选择的时候需要注意一下,如果你电脑本身没有装过JAVA虚拟机,就要选择如下红色方框内版本:
如果电脑里已经装过了JAVA虚拟机,选择红色方框下面那个下载安装即可。下载好后安装基本和普通软件安装方法一致。
设置环境变量
安装后需要设置一下环境变量:
首先你应该知道你jdk装在哪了!
我的电脑>右键>属性>高级>环境变量,在系统变量下方 点新建。
1.新建JAVA_HOME
变量名:JAVA_HOME
变量值:jdk的安装路径至根目录,比如说你装到了d盘,文件夹的名字是jdk1.7.5 那么这里你就粘贴D:\jdk1.7.5 不要加;号,一定是根目录,也就是看到第一个文件夹是bin的目录。大小写看清楚了,别乱加符号,写好点确定。
2.添加path变量
在系统变量里找到path变量双击点开,别的不要动,点到变量值里按键盘Home键,确保光标在第一个位置,写%JAVA_HOME%\bin;记得打; 分号,还要提示全是英文状态的符号前后没有什么空格。我只是为了你方便看清楚。
3.新建classpath变量
这个变量可配可不配
在系统变量里点新建
变量名: classpath
变量值: .;
变量值我就写的 点分号 就可以了! 有确定的就点确定!ok配好了!
weka更改默认内存,导入大文件
点击我的电脑>所有程序>weka3.6.13>weka3.6,就打开了weka。
注意还有一个图标weka3.6(with console)是命令行界面,我们初学者一般不用。
打开weka3.6后的界面如下:
我们选择红框里的第一项:explorer,打开后,我们就要导入数据,如下选择preprocess用来做数据预处理,然后点击open file打开要导入的文件,这里我们选择主办方提供的500M数据mars_tianchi_user_actions.csv
导入后可能会出现 out of memory错误,这是因为weka默认的内存不足引起的,具体查看方法:
首先找到weka的安装路径,我的安装路径是D:\Program Files\Weka-3-6,路径下有个RunWeka.ini文件,用记事本打开,里面有一行代码:
maxheap=1024M,这个是我的系统weka给我分配的内存,操作系统不同,weka版本不同这个默认内存可能不一样。由于weka软件运行本身也需要内存,所以虽然数据是500M,但是打开处理这500M数据需要的内存远不止500M。所以我们要更改此处默认设置,由于我的电脑是8G内存,我给weka分配5G内存,我将此处代码更改为maxheap=5120M。更改完后保存该文档并关闭。
更改weka内存后重新打开mars_tianchi_user_actions.csv文件,慢的话可能需要1~3分钟才能打开。打开后鼠标移动到最下面的任务栏,右键点击后出现memory information,如下图
左键单击后,等候几秒任务栏就会出现内存使用信息,如下图
free为目前空闲的内存,total为目前使用的内存,两者相减发现仅仅执行打开操作,已经使用了将近1G的内存。后面做其他的处理还需要消耗内存,所以默认内存大小设置稍微大一些比较好。
weka示例简析
我们简单介绍一下weka的数据可视化,让大家对weka的简便易用有个直观了解。
我们选择open file,打开mars_tianchi_songs文件,出现如下界面
我们以publish_time为例来说明,因为song_id,artist_id取值太多,右下角无法显示。两个红框里的distinct表示publish_time里包含的不同数值的个数,unique表示某数值仅出现一次的这种情况数值个数。
再来看右下角的图,横坐标表示publish_time的取值范围,纵坐标表示,该值重复出现了多少次。注意红框里标注的class:gender表示将每个纵坐标内的gender进行了统计显示。gender在这里表示男,女,乐队组合,分别用红,绿,蓝三种颜色表示(不一定对应上述的男,女,乐队组合)。假如绿色表示男,红色表示女,蓝色表示乐队组合。此图给出的信息是:
1. publish_time取值范围从19630322到20160207。时间跨度挺大。
2. 从左到右看,早期的时候只有绿色,后来逐渐出现了红色,然后才出现了蓝色。说明gender这个字段对publish_time还是有一定的辨别效果的。
当然,也可以选择class的选项为其他几个字段。
实际上,此处存在一个问题,publish_time是日期类型,而weka默认的类型为numeric,也就是数字型。这点需要做修改。这些后续再介绍。
总结
至此,我们已经会用weka对数据做一个基本的可视化操作了。不难发现,weka对数据预处理的能力非常强大,不像Python,R那样需要写函数,再作图。weka直接点点点就帮我们都做好啦,实在太方便啦。