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

熱線電話:13121318867

登錄
首頁精彩閱讀如何使用 Python 開始建立你的數(shù)據(jù)分析項目
如何使用 Python 開始建立你的數(shù)據(jù)分析項目
2018-05-20
收藏

如何使用 Python 開始建立你的數(shù)據(jù)分析項目

現(xiàn)在有很多博文對復(fù)雜的機(jī)器學(xué)習(xí)算法和前沿的技術(shù)進(jìn)行了展示,而這也促使數(shù)據(jù)科學(xué)家們慢慢變成了“社交控”(FOMO)。但數(shù)據(jù)分析的基本內(nèi)容究竟是什么樣的?你應(yīng)當(dāng)怎樣安排項目結(jié)構(gòu)?你需要使用什么樣的工具?等等諸如此類的問題卻鮮有人問津。本文將會對如何建立項目提供一些啟發(fā)思路,以幫助你快速達(dá)到 在數(shù)據(jù)科學(xué)領(lǐng)域能有所產(chǎn)出 的境界。
項目結(jié)構(gòu)
項目的結(jié)構(gòu)總是為了契合人們的需求而得到不斷完善,這會導(dǎo)致在一個團(tuán)隊中出現(xiàn)不同的項目構(gòu)架。如果你或者團(tuán)隊中的其他人能夠及時發(fā)現(xiàn)項目結(jié)構(gòu)的重要性,并且這個概念在團(tuán)隊中得到推廣,那么,你無疑是幸運的。
多年前作者偶然發(fā)現(xiàn)了 R 語言的項目模板 網(wǎng)站。從那之后,作者便一直提倡身邊的人使用規(guī)范的項目結(jié)構(gòu)。最近,DrivenData 發(fā)布了更為普適的 Cookiecutter Data Science 來構(gòu)建項目結(jié)構(gòu)。
而這些網(wǎng)站在項目構(gòu)建方面的思路大致如下:
    一個連貫且組織良好的結(jié)構(gòu),以便于人們協(xié)作
    你的分析應(yīng)當(dāng)可復(fù)現(xiàn),而你的項目結(jié)構(gòu)可以滿足這個需求
    不應(yīng)該從原始數(shù)據(jù)作為出發(fā)點開始你的項目,而應(yīng)當(dāng)假設(shè)原始數(shù)據(jù)不變,創(chuàng)建其他派生的文件
作者簡略的項目結(jié)構(gòu)如下所示:

    example_project/
    ├── data/               <- The original, immutable data dump.
    ├── figures/            <- Figures saved by notebooks and scripts.
    ├── notebooks/          <- Jupyter notebooks.
    ├── output/             <- Processed data, models, logs, etc.
    ├── exampleproject/     <- Python package with source code.
    │   └── __init__.py     <-- Make the folder a package.
        └── process.py      <-- Example module.
    ├── tests/              <- Tests for your Python package.
        └── test_process.py <-- Tests for process.py.
    ├── environment.yml     <- Virtual environment definition.
    ├── README.md           <- README with info of the project.
    └── setup.py            <- Install and distribute your module.
你可以在 這里 看到相關(guān)實例。
項目通常遵循另一種結(jié)構(gòu):
    原始數(shù)據(jù)不變,存儲在 data/中;
    數(shù)據(jù)處理和相關(guān)輸出圖分別存儲在不同的文件夾下,例如:figures/和output/;
    筆記文件存儲在notebooks/;
    項目信息撰寫在README.md中;
    項目代碼放置在獨立的文件夾下。
實際上,你選擇什么樣的項目結(jié)構(gòu)并不重要,只要它能符合你的工作流程,你也能堅持使用它。你應(yīng)該嘗試去理解何為項目,從而選擇滿足要求的項目結(jié)構(gòu)。
虛擬環(huán)境
項目之間應(yīng)當(dāng)相互獨立,你肯定不希望新的項目打亂了之前的工作成果。我們可以通過把不同項目的文件存儲在不同的文件夾下實現(xiàn)獨立性,但是不同項目之間也應(yīng)當(dāng)使用不同的 Python 環(huán)境。
虛擬環(huán)境依賴于不同的項目而相互獨立,避免了包的沖突問題。每個虛擬環(huán)境都安裝了特定版本的不同包。虛擬環(huán)境一中安裝了版本為 1.11 的numpy庫和版本為 0.18 的pandas庫,而虛擬環(huán)境二中則僅僅安裝了版本為 0.17 的pandas庫。作者選取適用于數(shù)據(jù)科學(xué)的 conda 管理虛擬環(huán)境(可在 這里 看到選擇它的原因)。

下列命令可以創(chuàng)建一個使用 Python 3.5 的新的 conda 虛擬環(huán)境,命名為 example_project:

    $ conda install --name example_project python=3.5

激活虛擬環(huán)境( Windows 系統(tǒng)下將 source 省去):

    $ source activate example_project

之后便可以安裝所需的包了:

    $ conda install pandas numpy jupyter scikit-learn
當(dāng)你在不同的項目間跳轉(zhuǎn)時,可以運行source deactivate命令取消激活,并激活新的項目虛擬環(huán)境。
一旦你熟練使用activate和deactivate命令,就會發(fā)現(xiàn)虛擬環(huán)境是一個很輕巧的工具來保證 Python 環(huán)境的獨立。通過導(dǎo)出環(huán)境定義文件(例如,所有安裝的包名和版本號),你的項目就很容易得到復(fù)現(xiàn)了。如果你想查看更多細(xì)節(jié),可在Tim Hopper 的博文 中看到。
Git
每個項目都應(yīng)該有自己的 Git 資源庫。在每個項目創(chuàng)建一個資源庫可以幫助你追蹤每個項目的歷史和解決在不同的項目間復(fù)雜的版本依賴問題。
又或者,你可以選擇在一個資源庫中包含多個項目,將所有內(nèi)容存儲在一個位置。這樣做的缺點在于往往會因為合并沖突問題而告終(數(shù)據(jù)科學(xué)家通常并不能熟練使用 Git )。除了很多使用 Git 時出現(xiàn)的問題,這也會導(dǎo)致你的項目之間缺乏獨立性。
創(chuàng)建 Git 資源庫最簡單的方法就是在你的 Git 遠(yuǎn)程主機(jī)托管服務(wù)(例如,Github 和 GitLab )上創(chuàng)建一個新的 Git 資源庫,然后把它復(fù)制到本地:

    $ git clone https://github.com/hgrif/example-project.git

你可以在這個空文件夾下構(gòu)建你的項目結(jié)構(gòu)。

如果你按照這個步驟執(zhí)行,并準(zhǔn)備在一個新文件夾下創(chuàng)建一些文件了。那么,你首先還需要在電腦上對 git 資源庫進(jìn)行初始化:

    $ git init

然后在你的遠(yuǎn)程主機(jī)上創(chuàng)建一個新的 git 資源庫,得到它的鏈接,并運行下列命令:

    $ git remote add origin https://github.com/hgrif/example-project.git

該命令會添加鏈接為 https://github.com/hgrif/example-project.git 的遠(yuǎn)程資源庫,并命令為 origin 。你可能需要把現(xiàn)有的 master分支推送到origin上:

    $ git push --set-upstream origin master
在你的項目目錄下創(chuàng)建.gitignore文件可以避免將圖或數(shù)據(jù)誤填加進(jìn)資源庫中。作者一般使用 針對 Python 的.gitignore文件 ,并且在文件中加入 data/、figures/ 和 output/ 文件夾,以便 Git 可以忽略它們。
既然 Git 已經(jīng)設(shè)置好了,你就可以對核心內(nèi)容使用git add和git commit命令了!
使用工具
使用一些工具可以幫助你擺脫那些重復(fù)性工作。
Python 中的cookiecutter包可根據(jù)模板自動創(chuàng)建項目文件夾。你可以使用現(xiàn)有的模板,例如,Cookiecutter Data Science 或者 作者的項目結(jié)構(gòu)模板 ,或是創(chuàng)建你自己新的模板。
使用虛擬環(huán)境最好的方法就是選用支持它們的編輯器,比如:PyCharm 。你也可以使用 autoenv 或者 direnv 去激活虛擬環(huán)境,并設(shè)置環(huán)境的變量,如果你cd定位到一個工作目錄下的話。
結(jié)論
對你的數(shù)據(jù)科學(xué)項目有一個良好的設(shè)置將會有助于同其他人協(xié)作,并且項目本身也會更容易復(fù)現(xiàn)。一個好的項目結(jié)構(gòu),一個虛擬環(huán)境和一個 git 資源庫是每個數(shù)據(jù)科學(xué)項目的基石。

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

若不方便掃碼,搜微信號: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)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗證碼的宕機(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){ //倒計時完成 $(".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); }