我用 Linux@IT·互联网数据乐园

数据挖掘工程师的第一个月(附带干货分享)

2016-08-24  本文已影响4454人  插着扇子的石头

去年8月份,我拿到了数据挖掘工程师的offer。很多人告诉我,数据挖掘工程师就是每天分析分析数据,再拍一下脑袋,想出几个新特征,或者调调参数,他们还有个外号叫『调参工程师』。

今年8月份,我已经正式入职一个月了,那么我的第一个月工作是什么呢?

1、阅读我们组负责的核心代码,并做一次汇报。大部分代码都是用python或shell脚本编写,很容易看懂每一行代码的含义。虽然能够轻易认识每一行代码,但要弄懂整套代码的流程和细节就不那么容易了。『1+1>2』,『虽然每个字都听得懂,但就是不知道他在说啥』……这类情况与我现在碰到的问题也是大同小异的。除了编程语言,我们还需要了解hadoop的基础知识,因为公司的数据量都相当大,单机一般跑不动数据。另外,我们需要预先知道机器学习应用的常见套路:解析输入数据,提取一级特征,提取二级特征,……用分类器进行训练,预测,获得一个分数,然后和其他分数进行整合,输出结果。

2、学习开发工具和开发流程。读书的时候,我一直用C++在Windows上进行内核开发。现在需要学习基本的linux命令,hadoop命令,SVN的使用,vim的使用,怎么提交代码并将代码上线。

3、接手师兄的部分工作,协助师兄完成一些任务。工作可以分为两类。第一类,接手的项目。这一块非常重要,因为你未来的几个月都要和它纠缠在一起。认认真真看代码,在师兄的指导下完成与该项目相关的小任务,能够跑通这个项目,知道怎么修改代码。以后数据或别人告诉你,你的项目出问题了,你要能及时跟踪问题,定位问题,解决问题。第二类,接手的事务性工作。这部门工作主要是为了服务他人和团队。我目前有三个小小的事务性工作,比如接到我负责的数据源的报警信息后,需要追查报警原因。

——————————干货分享—————————

干货四篇:SVN,Linux,Hadoop,策略

SVN篇

SVN代码提交步骤

1、从SVN上下载代码:svn co 代码地址

2、修改代码

3、在本地自测

4、发起code review

5、评审人进行code review

6、一般情况下需要进行QA评测,如果改动较少,也可以免测

7、提交代码,分五步

查看本地代码与最新代码的差异:svn diff

没改动的的代码与svn的最新版本同步:svn up

将新增的文件加入svn版本控制中(若只是改动原文件,可以跳过这一步):svn add 新增文件名

将修改后的文件提交到版本库:svn ci -m "注释内容"

SVN的其他常用命令

查看所有版本的文件修改信息:svn log -v > svn_log.txt

查看指定的两个版本的差异:svn diff -r 第一个版本号:第二个版本号

更新至指定的版本:svn up -r 某一个版本号

Linux篇

文件传输

首先安装SecureCRT

从linux服务器传输文件到本地电脑:sz -be 文件名

从本地电脑传输文件到linux服务器:rz -be

从其他机器上拷贝文件到当前机器:wget -r ftp://机器名//文件夹的绝对路径

Linux的常用命令

按内容提取文件中的某些行:grep,例grep -aP ^Hello part-00000 > hello.txt

按行号提取文件中的连续行:sed,例sed -n '19,19p' text.txt >> result.txt

查看两个文件的不同:diff old.txt new.txt > diff.txt

查看文件夹中文件个数:ls | wc -l

后台执行:nohup 命令 &

解压:gunzip FileName.gz

解压缩:tar -xzvf FileName.tar.gz

建立压缩文件:tar -cvf 压缩后的文件名.tar 待压缩的目录

查看指定命令的进程ID: ps -ef |grep cmd命令

杀死进程:kill -9 [PID]

杀死含指定关键字的进程:ps -ef | grep 关键字 | grep -v grep | cut -c 9-15 | xargs kill -9

文件和目录名称自动补全:文件和目录名称前缀+tab键

跳到命令行的头部位置:Ctrl + a

跳到命令行的尾部位置:Ctrl + e

Vim的常用命令

退出编辑,不保存:q!,回车

退出编辑,保存:wq,回车

查询指定字符串:/查询字符串,回车,n向后查找,N向前查找

直接跳到指定行::行号,回车

插入,删除,修改文件内容:i进入插入模式,esc退出模式

Hadoop篇

Hadoop常用命令

hadoop命令与linux命令非常相似,通常以hadoop fs开头

从集群上复制文件到当前文件夹:hadoop fs -get 集群上的文件存放路径(带文件名)./

将集群上同一个文件夹下的所有文件合并成一个文件,放在当前文件夹中:hadoop fs -getmerge 集群上的文件存放路径(不带文件名) 合并后的文件名

运行时根据JobID修改map.capacity:例 hadoop job -set-map-capacity JobID 3000

查找指定key所在的输出文件编号:KeyFieldBasedPartitioner key 总文件个数,例如输出文件有1000个,依次为part-00000.gz,part-00001.gz,……part-00998.gz,part-00999.gz,想知道key =『大米』的记录在哪个文件,可以采用命令『KeyFieldBasedPartitioner 大米 1000』,若返回66,则表示key =『大米』的记录全在part-00066.gz文件中。

Hadoop作业的参数设置

hadoop作业模板

job_name                =  作业名称

mapper                   =  python map文件名.py 

reducer                   =  python reduce文件名.py

input                  =  输入路径

output                =  输出路径 

mapred.map.tasks        =  3000

mapred.reduce.tasks        =  10000

mapred.job.map.capacity    =  10000

mapred.job.reduce.capacity  =  5000

# "file =" 将本地文件分发到集群上的每个计算节点

file        =  程序运行时所需要的可执行文件、脚本或者配置文件

策略篇

评估一个特征的修改对其他特征造成的影响

特征按纯度可以划分为基础特征和组合特征。顾名思义,组合特征是将多个特征通过函数变换组合起来。基础特征的变动,可能导致相应组合特征的变动。

如何评估一个特征的修改对其他特征造成的影响呢?常用方法是做对比实验。在同一个数据集上,分别运行修改特征前和修改特征后的代码,然后观察特征值的变化情况,并对变化作出解释。

正式上线的代码需要处理超大规模的数据,而我们自己测试时,可以只抽取少量数据,节省时间。

评估新增的功能有没有生效

基本方法也是做对比实验。重要的事情要重复说才会印象深刻。特别强调一点,和评估特征修改的影响面类似,新增的功能导致输出结果的变化要符合预期,即只改变你预期中它该变化的地方,不改变预期中它不应该变化的地方。

上一篇下一篇

猜你喜欢

热点阅读