阿布云

你所需要的,不仅仅是一个好用的代理。

数据工作的科普总结

阿布云 发表于

14.png

作者:671coder

首先说,这是一篇关于数据工作的科普文字,是我从事数据工作三年的一个小总结,因为不时会有人咨询我一些小问题,于是我大致整理了一下,主要是说了数据工作到底都包含了什么,其中关于数据仓库的我没有涉及,这里不会多讲,还得用教主的csdn名声帮转。

一、数据获取

1.爬虫:这个不用多解释了,就是从网页上爬取数据,比如爬取一个京东的三级品类的数据、爬拉勾网的职位信息数据。。。这个主要是网络编程,细节点主要是header、cookie、get/post请求、失败重试、验证码、重定向等,总之除了把数据从网页上抽取出来就是如何伪装自己是一个“人”在请求而不是机器自动发送的请求。至于破解验证码,简单的ocr能搞定(就是慢),自己写一个图像识别的算法也可以去尝试破解,实在不济就想办法绕过,比如访问wap版的url,我当年爬微博数据就这么搞过。

2.业务数据积累

  • 业务数据库mysql、oracle之类
  • 基于hadoop的数据仓库
  • 埋点:这个概念很简单,就是在网页或者手机app中嵌入js脚本,将用户数据返回给服务器做记录,比如用户在什么时间在哪个网页点击了什么链接、图片等信息,一般要包含用户的设备号、用户userid、时间、校验码等,常见方法是js向服务器发送一个get或者post请求,请求中带着各种要记录的参数和值,请求打到nginx服务器上,由nginx写成日志。目前我们用的比较多的是openresty版本的nginx,里面有很多插件,支持写入消息队列等操作。

二、数据分析

数据分析,这是个见仁见智的过程,一方面要有处理数据的代码工程能力,另一方面又要有统计基础,比如能挖掘出什么变量有很强的特性(百分比、熵、分布规律等)

  1. sql:这个sql可能就不同于传统的sql了。因为从上一步数据获取得到的数据,很多可能是不规则的,比如它可能是一个json串,这种情况传统sql处理不了,mongodb或者一些非关系型数据库就派上用场了,但是nosql的语法跟传统sql会有很大差异。
  2. python:pandas跟dataframe是python处理数据的两个好工具
  3. excel

三、建模

在我经历过的实际项目中,推荐、概率预估、分类、排序应该是四个主要的项目核心。

  1. 推荐?这个应该不比多说了吧,各个电商里面的“猜你喜欢”、今日头条网易新闻的新闻推送、微博段子等很多都是推荐的结果。推荐可以做策略,也可以走算法模型,策略就是如果我知道你是个胖子,我就给你推送大号的衣服,我知道你是个单身未婚女性,我就不会给你推送剃须刀。
  2. 概率预估:天气预报
  3. 分类:记得我毕业入职京东的第一个项目,就是做文本分类,当时目的是监控整个互联网的京东产品舆情情况。目标很简单,就是两个分类,好评还是差评。我们写爬虫定时抓取各大新闻网站、微博、知乎、百度贴吧等众多社交网站的文本,然后走了naive bayes,将新闻、微博等舆论自动判断为好评还是差评。当时效果还不错,fscore是0.8左右
  4. 排序:一个商品列表,商品展示的先后顺序对用户体验以及GMV会有很大影响,那么如何对商品展示顺序进行排序,这就是一个很深的水域了(没做过,不敢多说)。

算法:我很难几句话说清楚应该如何来做或者会用到哪些算法,因为这个是一个经验上的过程。比如变量很多的时候,可以用PCA去降维、比如在LR中可以加lasso去削弱一些特征的权重、比如在树模型中去修改正负样本权重,样本欠采样重采样。

当一个问题线性可分时

什么是线性可分?假如有两个类别对和错,在平面直角坐标系上画一条y=x的函数图像,线上面的是对,线下面的是错,能明确看出来的就是线性可分,不能明确看出来的就不是线性可分,至于什么是明确能看出来,这个需要看指标,比如准确率、召回率、F1-score

线性不可分时,听说svm也曾经叱咤风云一阵子。。。

什么是线性不可分?没时间解释了。。。

  1. 线性不可分,因为svm的核函数可以把原始分布映射到更高维度,就好比把郭敬明跟姚明放在一起俯视来看就是两个点(脑袋)无法做划分,如果慢慢从空中落到地面上,你会发现二人还有海拔的差异。
  2. svm加核函数只是处理线性不可分的一种方法,其他的还有很多,比如树状的模型(ID3,C45,random forest,adaboost,gbdt。。。详情可以看《统计学习方法》的P?~P?)
  3. 从朴素到贝叶斯网络
  4. 不怎么好用的LDA(不是线性判别分析),可能是我的应用场景不太合适吧
  5. 神经网络相关,太多了,我还没有深入去玩儿这个东西,现在常见的CNN、RNN、ANN、GAN等等。。。(没有调查,不敢发言)
  6. 其他的一些算法也会出现在不同场合,比如隐马尔可夫、条件随机场(在做本科毕设做分词器的时候折腾过)
  7. 推荐系统里所谓“矩阵分解大法好”:SVD分解,LU分解等

算法的工具包

  • python的sklearn
  • xgboost
  • TensorFlow
  • lightgbm
  • libsvm——svm的一个工具包
  • fasttext——facebook的文本算法包
  • svdfeature——矩阵分解

R的工具包

思想上的东西:做算法除了了解相关算法,还要有很大的脑洞,以及很多算法之间的融合,比如gbdt跟逻辑回归的融合,或者其他一些ensemble方法

四、工程化

数据接入

  • 实际工程中,数据接入到项目里,基本就是实时接入跟离线接入两条路线,
  • 实时接入:(flume/binlog)-(kafka/metaq)-(storm/kafkastream)-(redis/hbase),括号里都是同一个东西,斜线表示或
  • 离线接入:我们主要用的是把hive数据写入到redis

封装服务

  • bottle/django,这是两个python的web框架,前者比后者轻量
  • 为什么要封装服务,因为训练好的一个算法要实时向外提供数据服务啊

End.