99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀數(shù)據(jù)工作的科普總結(jié)
數(shù)據(jù)工作的科普總結(jié)
2017-11-28
收藏

數(shù)據(jù)工作的科普總結(jié)

首先說,這是一篇關(guān)于數(shù)據(jù)工作的科普文字,是我從事數(shù)據(jù)工作三年的一個(gè)小總結(jié),因?yàn)椴粫r(shí)會(huì)有人咨詢我一些小問題,于是我大致整理了一下,主要是說了數(shù)據(jù)工作到底都包含了什么,其中關(guān)于數(shù)據(jù)倉庫的我沒有涉及,這里不會(huì)多講,還得用教主的csdn名聲幫轉(zhuǎn)。

一、數(shù)據(jù)獲取
1.爬蟲:這個(gè)不用多解釋了,就是從網(wǎng)頁上爬取數(shù)據(jù),比如爬取一個(gè)京東的三級品類的數(shù)據(jù)、爬拉勾網(wǎng)的職位信息數(shù)據(jù)。。。這個(gè)主要是網(wǎng)絡(luò)編程,細(xì)節(jié)點(diǎn)主要是header、cookie、get/post請求、失敗重試、驗(yàn)證碼、重定向等,總之除了把數(shù)據(jù)從網(wǎng)頁上抽取出來就是如何偽裝自己是一個(gè)“人”在請求而不是機(jī)器自動(dòng)發(fā)送的請求。至于破解驗(yàn)證碼,簡單的ocr能搞定(就是慢),自己寫一個(gè)圖像識(shí)別的算法也可以去嘗試破解,實(shí)在不濟(jì)就想辦法繞過,比如訪問wap版的url,我當(dāng)年爬微博數(shù)據(jù)就這么搞過。
2.業(yè)務(wù)數(shù)據(jù)積累
業(yè)務(wù)數(shù)據(jù)庫mysql、oracle之類
基于hadoop的數(shù)據(jù)倉庫
埋點(diǎn):這個(gè)概念很簡單,就是在網(wǎng)頁或者手機(jī)app中嵌入js腳本,將用戶數(shù)據(jù)返回給服務(wù)器做記錄,比如用戶在什么時(shí)間在哪個(gè)網(wǎng)頁點(diǎn)擊了什么鏈接、圖片等信息,一般要包含用戶的設(shè)備號(hào)、用戶userid、時(shí)間、校驗(yàn)碼等,常見方法是js向服務(wù)器發(fā)送一個(gè)get或者post請求,請求中帶著各種要記錄的參數(shù)和值,請求打到nginx服務(wù)器上,由nginx寫成日志。目前我們用的比較多的是openresty版本的nginx,里面有很多插件,支持寫入消息隊(duì)列等操作。
二、數(shù)據(jù)分析
數(shù)據(jù)分析,這是個(gè)見仁見智的過程,一方面要有處理數(shù)據(jù)的代碼工程能力,另一方面又要有統(tǒng)計(jì)基礎(chǔ),比如能挖掘出什么變量有很強(qiáng)的特性(百分比、熵、分布規(guī)律等)
sql:這個(gè)sql可能就不同于傳統(tǒng)的sql了。因?yàn)閺纳弦徊綌?shù)據(jù)獲取得到的數(shù)據(jù),很多可能是不規(guī)則的,比如它可能是一個(gè)json串,這種情況傳統(tǒng)sql處理不了,mongodb或者一些關(guān)系型數(shù)據(jù)庫就派上用場了,但是nosql的語法跟傳統(tǒng)sql會(huì)有很大差異。
pythonpandas跟dataframe是python處理數(shù)據(jù)的兩個(gè)好工具
R
excel
三、建模
在我經(jīng)歷過的實(shí)際項(xiàng)目中,推薦、概率預(yù)估、分類、排序應(yīng)該是四個(gè)主要的項(xiàng)目核心。
推薦?這個(gè)應(yīng)該不比多說了吧,各個(gè)電商里面的“猜你喜歡”、今日頭條網(wǎng)易新聞的新聞推送、微博段子等很多都是推薦的結(jié)果。推薦可以做策略,也可以走算法模型,策略就是如果我知道你是個(gè)胖子,我就給你推送大號(hào)的衣服,我知道你是個(gè)單身未婚女性,我就不會(huì)給你推送剃須刀。
概率預(yù)估:天氣預(yù)報(bào)
分類:記得我畢業(yè)入職京東的第一個(gè)項(xiàng)目,就是做文本分類,當(dāng)時(shí)目的是監(jiān)控整個(gè)互聯(lián)網(wǎng)的京東產(chǎn)品輿情情況。目標(biāo)很簡單,就是兩個(gè)分類,好評還是差評。我們寫爬蟲定時(shí)抓取各大新聞網(wǎng)站、微博、知乎、百度貼吧等眾多社交網(wǎng)站的文本,然后走了naive bayes,將新聞、微博等輿論自動(dòng)判斷為好評還是差評。當(dāng)時(shí)效果還不錯(cuò),fscore是0.8左右
排序:一個(gè)商品列表,商品展示的先后順序?qū)τ脩趔w驗(yàn)以及GMV會(huì)有很大影響,那么如何對商品展示順序進(jìn)行排序,這就是一個(gè)很深的水域了(沒做過,不敢多說)。
算法:我很難幾句話說清楚應(yīng)該如何來做或者會(huì)用到哪些算法,因?yàn)檫@個(gè)是一個(gè)經(jīng)驗(yàn)上的過程。比如變量很多的時(shí)候,可以用PCA降維、比如在LR中可以加lasso去削弱一些特征的權(quán)重、比如在樹模型中去修改正負(fù)樣本權(quán)重,樣本欠采樣重采樣。
當(dāng)一個(gè)問題線性可分時(shí)
什么是線性可分?假如有兩個(gè)類別對和錯(cuò),在平面直角坐標(biāo)系上畫一條y=x的函數(shù)圖像,線上面的是對,線下面的是錯(cuò),能明確看出來的就是線性可分,不能明確看出來的就不是線性可分,至于什么是明確能看出來,這個(gè)需要看指標(biāo),比如準(zhǔn)確率、召回率、F1-score
線性不可分時(shí),聽說svm也曾經(jīng)叱咤風(fēng)云一陣子。。。
什么是線性不可分?沒時(shí)間解釋了。。。
線性不可分,因?yàn)閟vm的核函數(shù)可以把原始分布映射到更高維度,就好比把郭敬明跟姚明放在一起俯視來看就是兩個(gè)點(diǎn)(腦袋)無法做劃分,如果慢慢從空中落到地面上,你會(huì)發(fā)現(xiàn)二人還有海拔的差異。
svm加核函數(shù)只是處理線性不可分的一種方法,其他的還有很多,比如樹狀的模型(ID3,C45,random forest,adaboost,gbdt。。。詳情可以看《統(tǒng)計(jì)學(xué)習(xí)方法》的P?~P?)
從樸素到貝葉斯網(wǎng)絡(luò)
不怎么好用的LDA(不是線性判別分析),可能是我的應(yīng)用場景不太合適吧
神經(jīng)網(wǎng)絡(luò)相關(guān),太多了,我還沒有深入去玩兒這個(gè)東西,現(xiàn)在常見的CNN、RNN、ANN、GAN等等。。。(沒有調(diào)查,不敢發(fā)言)
其他的一些算法也會(huì)出現(xiàn)在不同場合,比如隱馬爾可夫、條件隨機(jī)場(在做本科畢設(shè)做分詞器的時(shí)候折騰過)
推薦系統(tǒng)里所謂“矩陣分解大法好”:SVD分解,LU分解等
算法的工具包
? python的sklearn
? xgboost
? TensorFlow
? lightgbm
? libsvm——svm的一個(gè)工具包
? fasttext——facebook的文本算法包
? svdfeature——矩陣分解
R的工具包
思想上的東西:做算法除了了解相關(guān)算法,還要有很大的腦洞,以及很多算法之間的融合,比如gbdt跟邏輯回歸的融合,或者其他一些ensemble方法
四、工程化
數(shù)據(jù)接入
實(shí)際工程中,數(shù)據(jù)接入到項(xiàng)目里,基本就是實(shí)時(shí)接入跟離線接入兩條路線,
實(shí)時(shí)接入:(flume/binlog)-(kafka/metaq)-(storm/kafkastream)-(redis/hbase),括號(hào)里都是同一個(gè)東西,斜線表示或
離線接入:我們主要用的是把hive數(shù)據(jù)寫入到redis
封裝服務(wù)
bottle/django,這是兩個(gè)python的web框架,前者比后者輕量
為什么要封裝服務(wù),因?yàn)橛?xùn)練好的一個(gè)算法要實(shí)時(shí)向外提供數(shù)據(jù)服務(wù)啊


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }