自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)科學(xué)速成課:給Python新手的實(shí)操指南

開發(fā) 后端
在開源社區(qū)的大力支持下,Python已經(jīng)成為了處理數(shù)據(jù)科學(xué)強(qiáng)有力的工具。Python容易使用的語法,強(qiáng)大的數(shù)據(jù)處理能力和極好的開源統(tǒng)計(jì)庫,例如Numpy, Pandas, Scikit-learn, Statsmodels等,使我們可以完成各種各樣的任務(wù),范圍從探索性分析到構(gòu)建可伸縮的大數(shù)據(jù)管道和機(jī)器學(xué)習(xí)算法。

數(shù)據(jù)科學(xué)速成課:給Python新手的實(shí)操指南

大數(shù)據(jù)文摘作品

編譯:王夢澤、丁慧、笪潔瓊、Aileen

數(shù)據(jù)科學(xué)團(tuán)隊(duì)在持續(xù)穩(wěn)定的發(fā)展壯大,這也意味著經(jīng)常會(huì)有新的數(shù)據(jù)科學(xué)家和實(shí)習(xí)生加入團(tuán)隊(duì)。我們聘用的每個(gè)數(shù)據(jù)科學(xué)家都具有不同的技能,但他們都具備較強(qiáng)的分析背景和在真正的業(yè)務(wù)案例中運(yùn)用此背景的能力。例如,團(tuán)隊(duì)中大多數(shù)人都曾研究計(jì)量經(jīng)濟(jì)學(xué),這為概率論及統(tǒng)計(jì)學(xué)提供了堅(jiān)實(shí)的基礎(chǔ)。

典型的數(shù)據(jù)科學(xué)家需要處理大量的數(shù)據(jù),因此良好的編程技能是必不可少的。然而,我們的新數(shù)據(jù)科學(xué)家的背景往往是各不相同的。編程環(huán)境五花八門,因此新的數(shù)據(jù)科學(xué)家的編程語言背景涵蓋了R, MatLab, Java, Python, STATA, SPSS, SAS, SQL, Delphi, PHP to C# 和 C++。了解許多不同的編程語言在有些時(shí)候確實(shí)很有必要,然而我們更希望使用一種編程語言來完成大多數(shù)的項(xiàng)目,這樣我們可以在項(xiàng)目上更容易的進(jìn)行合作。由于無人知曉一切,一種***的編程語言讓我們有機(jī)會(huì)互相學(xué)習(xí)。

我們公司更傾向于使用Python。在開源社區(qū)的大力支持下,Python已經(jīng)成為了處理數(shù)據(jù)科學(xué)強(qiáng)有力的工具。Python容易使用的語法,強(qiáng)大的數(shù)據(jù)處理能力和極好的開源統(tǒng)計(jì)庫,例如Numpy, Pandas, Scikit-learn, Statsmodels等,使我們可以完成各種各樣的任務(wù),范圍從探索性分析到構(gòu)建可伸縮的大數(shù)據(jù)管道和機(jī)器學(xué)習(xí)算法。只有對那些較寬松的統(tǒng)計(jì)模型我們有時(shí)會(huì)將Python和R結(jié)合使用,其中Python執(zhí)行大量的數(shù)據(jù)處理工作和R進(jìn)行統(tǒng)計(jì)建模。

我的理念是通過實(shí)踐來學(xué)習(xí),因此為了幫助新數(shù)據(jù)科學(xué)家使用Python進(jìn)行數(shù)據(jù)科學(xué)研究,我們創(chuàng)建了Python數(shù)據(jù)科學(xué)(速成)課(Python Data Science (Crash) Course)。這門課的目標(biāo)是使我們的新員工(也包括其他部門的同事)以互動(dòng)的方式和自己的節(jié)奏來學(xué)習(xí)解決實(shí)際的業(yè)務(wù)問題。與此同時(shí),更有經(jīng)驗(yàn)的數(shù)據(jù)科學(xué)家可以回答任何問題,但也不要小看從StackOverflow或者圖書館的文檔中尋找答案的的技能,我們也當(dāng)然愿意向新數(shù)據(jù)科學(xué)家傳授這項(xiàng)技能!

在文章中,我們會(huì)按階段來介紹這個(gè)實(shí)踐課程。

階段一:學(xué)習(xí)Python的基礎(chǔ)知識(shí)

顯而易見,***步是學(xué)習(xí)Python這個(gè)軟件,即學(xué)習(xí)Python語法及基本操作。幸運(yùn)的是,如果你能處理好代碼縮進(jìn)的話,Python語法就不沒那么難了。我在使用Java編程語言時(shí)無需考慮注意縮進(jìn)問題,然而當(dāng)我之后開始使用Python時(shí)在縮進(jìn)上容易出錯(cuò)。

因此,如何開始學(xué)習(xí)Python?由于我們更喜歡通過實(shí)踐來學(xué)習(xí)的方式,所以我們總是讓新員工從Codecademy Python課程開始。Codecademy提供了交互式的Python課程體驗(yàn),無需擔(dān)心安裝軟件會(huì)麻煩,可以在瀏覽器中直接學(xué)習(xí)使用Python。

Codecademy Python課程用時(shí)大約13個(gè)小時(shí),完成之后,你應(yīng)該能夠在Python中進(jìn)行簡單的操作。

提示:數(shù)據(jù)科學(xué)家還可以在Codecademy上學(xué)習(xí)SQL,這門課程也十分重要。

Codecademy

階段二:在Anaconda環(huán)境下本地安裝Python

在結(jié)束了Codecademy課程后,我們顯然會(huì)想去開始編寫自己的代碼,然而因?yàn)槲覀儾焕^續(xù)在瀏覽器中運(yùn)行Python,需要在我們本地電腦上安裝Python。

Python是開源的,并可通過www.python.org.免費(fèi)下載。然而官方版本只包含了標(biāo)準(zhǔn)的Python庫,標(biāo)準(zhǔn)庫中包含文本文件、日期時(shí)間和基本算術(shù)運(yùn)算之類的函數(shù)。Python標(biāo)準(zhǔn)庫不夠全面,無法進(jìn)行多樣化的數(shù)據(jù)科學(xué)分析,但開源社區(qū)已經(jīng)創(chuàng)建出了很棒的庫來擴(kuò)展Python的功能,使其能夠進(jìn)行數(shù)據(jù)科學(xué)研究。

為了避免單獨(dú)下載安裝所有的庫,我建議使用Anaconda Python發(fā)行版。Anaconda實(shí)際上是與大量的庫結(jié)合在一起的Python,因此你不需要手動(dòng)安裝它們。此外,Anaconda附帶了一個(gè)簡單的命令行工具,在必要時(shí)安裝新的或更新現(xiàn)有的庫。

提示:盡管默認(rèn)情況下Anaconda幾乎涵蓋了所有很棒的庫,但還有一些沒有包含在內(nèi)。你可以通過conda install package_name or pip install package_name語句來安裝新的包。例如,我們經(jīng)常在項(xiàng)目中使用進(jìn)度條庫 tqdm。因此,我們需要先執(zhí)行pip install tqdm語句來完成Anaconda的新安裝。

Anaconda

階段三:使用PyCharm進(jìn)行簡單的編碼

安裝了Python之后,我們可以在本地電腦上運(yùn)行Python代碼。打開編輯器寫下Python代碼,打開命令行并運(yùn)行新創(chuàng)建的Python文件,路徑為python C:\Users\thom\new_file.py。

為了使事情變得簡單一些,我更喜歡在Pychanm環(huán)境中編寫Python代碼。PyCharm是一種所謂的集成開發(fā)環(huán)境,對開發(fā)人員編寫代碼時(shí)提供支持。它可以處理常規(guī)任務(wù),例如通過提供一個(gè)簡單的運(yùn)行腳本按鈕來運(yùn)行程序,此外它還可以通過提供自動(dòng)完成功能和實(shí)時(shí)錯(cuò)誤檢查來提高效率。如果忘記了某處的空格或使用了未被定義的變量名稱,PyCharm會(huì)發(fā)出警告提示。想要使用版本控制系統(tǒng)例如Git來進(jìn)行項(xiàng)目合作?PyCharm會(huì)幫助你。不管怎樣,使用Pycham可以在編寫Python程序時(shí)節(jié)省大量的時(shí)間,charm名副其實(shí)。

使用PyCharm進(jìn)行簡單的編碼

階段四:解決一個(gè)模擬的業(yè)務(wù)問題

1. 定義研究的問題

假設(shè)現(xiàn)在經(jīng)理提出了一個(gè)他面對的業(yè)務(wù)問題,他希望能夠預(yù)測用戶在公司網(wǎng)站上進(jìn)行***點(diǎn)擊/參與(例如訂閱簡報(bào))的概率。在給出了一些想法后,我們提出可以基于用戶的頁面瀏覽量來預(yù)測訂閱轉(zhuǎn)換概率,此外,你構(gòu)建了以下假設(shè):更多的頁面瀏覽量會(huì)導(dǎo)致用戶***訂閱的概率增大。

為了檢驗(yàn)假設(shè)是否成立,我們需要從網(wǎng)絡(luò)分析師處獲得兩個(gè)數(shù)據(jù)集:

(1) Session數(shù)據(jù)集 包含所有用戶的所有頁面瀏覽量。

  • user_id: 用戶標(biāo)識(shí)符
  • session_number: 會(huì)話數(shù)量(升序排列)
  • session_start_date: 會(huì)話的開始日期時(shí)間
  • unix_timestamp: 會(huì)話的開始unix時(shí)間標(biāo)記
  • campaign_id: 將用戶帶到網(wǎng)站的活動(dòng)的ID
  • domain: 用戶在會(huì)話中訪問的(子)域
  • entry: 會(huì)話的進(jìn)入頁面
  • referral: 推薦網(wǎng)站,例如:google.com
  • pageviews: 會(huì)話期間的頁面訪問量
  • transactions: 會(huì)話期間的交易量

(2) Engagement數(shù)據(jù)集 包含所有用戶的所有參與活動(dòng)。

  • user_id:唯一的用戶標(biāo)識(shí)符
  • site_id: 產(chǎn)生參與活動(dòng)的網(wǎng)站ID
  • engagement_unix_timestamp: 發(fā)生參與活動(dòng)的unix時(shí)間標(biāo)記
  • engagement_type: 參與活動(dòng)的類型,例如訂閱簡報(bào)
  • custom_properties: 參與活動(dòng)的其他屬性

不幸的是,我們有兩個(gè)單獨(dú)的數(shù)據(jù)集,因?yàn)樗鼈儊碜圆煌南到y(tǒng)。然而,兩個(gè)數(shù)據(jù)集可以通過唯一用戶標(biāo)識(shí)符user_id來匹配。我已經(jīng)在GitHub上放置了我用來解決業(yè)務(wù)問題的最終代碼 ,然而我強(qiáng)烈建議你僅在自己解決了這個(gè)問題后再去查看代碼。此外,你還可以找到創(chuàng)建兩個(gè)虛構(gòu)數(shù)據(jù)集的代碼。

代碼鏈接:

https://github.com/thomhopmans/themarketingtechnologist/tree/master/7_data_science_in_python

2. 使用Pandas進(jìn)行簡單的數(shù)據(jù)處理

無論我們應(yīng)用任何統(tǒng)計(jì)模型解決問題,都需要預(yù)先清洗和處理數(shù)據(jù)。例如,我們需要為會(huì)話數(shù)據(jù)集中的每個(gè)用戶找到其***活動(dòng)的數(shù)據(jù)(如果有的話)。這就要求在user_id上加入兩個(gè)數(shù)據(jù)集,并刪除***活動(dòng)后的其他所有活動(dòng)數(shù)據(jù)。

Codecademy Python課程已經(jīng)告訴你如何逐行閱讀文本文件。Python非常適合數(shù)據(jù)管理和預(yù)處理,但不適用于數(shù)據(jù)分析和建模。

Python的Pandas庫克服了這個(gè)問題。Pandas提供了(數(shù)值)表和時(shí)間序列的數(shù)據(jù)結(jié)構(gòu)和操作。因此,Pandas讓Python數(shù)據(jù)科學(xué)工作變得更加簡單!

3. 使用pd.read_csv()讀取數(shù)據(jù)集

我們的Python代碼中的***步是加載Python中的兩個(gè)數(shù)據(jù)集。Pandas提供了一個(gè)簡單易用的函數(shù)來讀取.csv文件:read_csv()。本著學(xué)習(xí)的原則,我們建議您自己找出如何讀取這兩個(gè)數(shù)據(jù)集。***,你應(yīng)該建立兩個(gè)獨(dú)立的DataFrames,每個(gè)數(shù)據(jù)集都需要有一個(gè)。

小貼士:在這兩個(gè)文件中,我們都有不同的分隔符。此外,請務(wù)必查看read_csv()中的date_parser選項(xiàng),將UNIX時(shí)間標(biāo)記轉(zhuǎn)換為正常的日期時(shí)間格式。

4. 過濾無用數(shù)據(jù)

任何(大)數(shù)據(jù)問題中的下一步是減少問題規(guī)模的大小。在我們的例子中,有很多與我們問題無關(guān)的列,例如會(huì)話的媒介/來源。因此,我們在Dataframes上應(yīng)用索引和選擇只保留相關(guān)的列,比如user_id(必需加入這兩個(gè)DataFrames),每個(gè)會(huì)話和活動(dòng)的日期(在此之前搜索***活動(dòng)和會(huì)話)以及頁面訪問量(假設(shè)驗(yàn)證的必要條件)。

另外,我們會(huì)篩選出DataFrame中所有非***的活動(dòng)??梢酝ㄟ^查找每個(gè)user_id的最早日期來完成。具體怎樣做呢?使用GroupBy:split-apply-combine邏輯!

Pandas***大的操作之一是合并,連接和序列化表格。它允許我們執(zhí)行任何從簡單的左連接和合并到復(fù)雜的外部連接。因此,可根據(jù)用戶的唯一標(biāo)識(shí)符結(jié)合會(huì)話和***活動(dòng)的DataFrames。

5. 刪除***活動(dòng)后的所有會(huì)話

在上一步中使用簡單的合并,我們?yōu)槊總€(gè)會(huì)話添加了***活動(dòng)的時(shí)間標(biāo)記。通過比較會(huì)話時(shí)間標(biāo)記與***活動(dòng)時(shí)間標(biāo)記,你應(yīng)該能夠過濾掉無用的數(shù)據(jù)并縮小問題的規(guī)模。

6. 添加因變量y:參與/訂閱活動(dòng)轉(zhuǎn)換

如上所述,我們希望預(yù)測頁面訪問量對轉(zhuǎn)換(即***活動(dòng))概率的影響。因此,我們的因變量y是一個(gè)二進(jìn)制變量,用它表示會(huì)話內(nèi)是否發(fā)生了轉(zhuǎn)換。由于我們做了上面的過濾(即在***活動(dòng)后刪除所有非***活動(dòng)和會(huì)話),所以這種轉(zhuǎn)換按照定義在每個(gè)用戶的最近一次會(huì)話中進(jìn)行。同樣,使用GroupBy:split-apply-combine邏輯,我們可以創(chuàng)建一個(gè)包含觀察值的新列,如果它是用戶的***一個(gè)會(huì)話,觀察值將為1,否則為0。

7. 添加自變量X:訪問量的累計(jì)總和

我們的自變量是頁面訪問量。但是,我們不能簡單地將會(huì)話中的頁面訪問量計(jì)算在內(nèi),因?yàn)樵缙跁?huì)話中的頁面訪問會(huì)影響轉(zhuǎn)換概率。因此,我們創(chuàng)建一個(gè)新的列,用來計(jì)算用戶頁面訪問量的累計(jì)總和。這才是我們的自變量X。

8. 使用StatsModels擬合邏輯回歸

通過Pandas庫我們最終得到了一個(gè)包含單個(gè)離散X列和單個(gè)二進(jìn)制Y列的小型DataFrame。并用(二元)邏輯回歸模型來估計(jì)基于一個(gè)或多個(gè)獨(dú)立變量的因變量的二元響應(yīng)概率。StatsModels是Python的統(tǒng)計(jì)和計(jì)量經(jīng)濟(jì)學(xué)庫,提供了參數(shù)估計(jì)和統(tǒng)計(jì)測試工具。因此,它包含邏輯回歸函數(shù)也就不足為奇了。那么,如何通過StatsModels來擬合邏輯回歸模型呢?請自行百度...

技巧1:不要忘記給邏輯回歸添加一個(gè)常數(shù)。

技巧2:另一個(gè)非常棒的擬合統(tǒng)計(jì)模型(如邏輯回歸)庫是scikit-learn。

9. 使用Matplotlib或Seaborn進(jìn)行可視化

在擬合邏輯回歸模型之后,我們可以預(yù)測每個(gè)累計(jì)訪問量的轉(zhuǎn)換概率。但是,我們不能僅僅通過交付一些原始數(shù)據(jù)來將我們***發(fā)現(xiàn)的結(jié)果傳達(dá)給管理層。因此,數(shù)據(jù)科學(xué)家的重要任務(wù)之一就是要清晰有效地展示他的成果。在大多數(shù)情況下,這意味著提供我們的可視化結(jié)果,因?yàn)楸娝苤粓D勝千言...

Python包含幾個(gè)非常棒的可視化庫,其中MatplotLib是最知名的。而Seaborn是建立在MatplotLib上的另一個(gè)很棒的庫。

MatplotLib的語法大概是以前使用過MatLab的用戶所熟知的。但是,我們傾向選擇Seaborn,是因?yàn)樗峁└恋膱D表而且外觀很重要。

我們通過Seaborn得到了模型擬合的可視化結(jié)果,如下所示:

通過Seaborn得到了模型擬合的可視化結(jié)果

我們可以很好地利用這個(gè)可視化結(jié)果來證明我們的假設(shè)是否成立。

10. 驗(yàn)證假設(shè)

***一步是就驗(yàn)證我們提出的假設(shè)是否成立?;叵胍幌拢覀冋J(rèn)為更多的網(wǎng)頁訪問量導(dǎo)致***活動(dòng)的可能性更高。

首先,我們從以前的可視化結(jié)果中可以看出,假設(shè)是成立的。不然,預(yù)測的概率也不會(huì)單調(diào)遞增。盡管如此,我們還是可以從擬合的模型總結(jié)中得出同樣的結(jié)論,如下所示。

  1.   Logit Regression Results                            
  2. ============================================================================== 
  3. Dep. Variable:          is_conversion   No. Observations:                12420 
  4. Model:                          Logit   Df Residuals:                    12418 
  5. Method:                           MLE   Df Model:                            1 
  6. Date:                Tue, 27 Sep 2016   Pseudo R-squ.:                  0.3207 
  7. Time:                        21:44:57   Log-Likelihood:                -5057.6 
  8. converged:                       True   LL-Null:                       -7445.5 
  9.                                         LLR p-value:                     0.000 
  10. ==================================================================================== 
  11.                        coef    std err          z      P>|z|      [95.0% Conf. Int.] 
  12. ------------------------------------------------------------------------------------ 
  13. const               -3.8989      0.066    -59.459      0.000        -4.027    -3.770 
  14. pageviews_cumsum     0.2069      0.004     52.749      0.000         0.199     0.215 
  15. ==================================================================================== 

我們看到,統(tǒng)計(jì)結(jié)果中,pagesviews_cumsum系數(shù)在顯著性水平為1%時(shí)顯示為正。因此,這足以表明我們的假設(shè)成立,加油!此外,您剛剛已經(jīng)完成了***個(gè)Python數(shù)據(jù)科學(xué)分析工作!:)

是不是感覺很棒?快上手試試吧!

原文鏈接:

https://www.themarketingtechnologist.co/helping-our-new-data-scientists-start-in-python-a-guide-to-learning-by-doing/

【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號(hào)“大數(shù)據(jù)文摘( id: BigDataDigest)”】

     大數(shù)據(jù)文摘二維碼

 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2020-05-27 11:16:49

數(shù)據(jù)科學(xué)機(jī)器學(xué)習(xí)Python

2023-12-28 08:00:00

數(shù)據(jù)庫人工智能

2010-04-09 10:13:13

Oracle數(shù)據(jù)字典

2020-12-07 11:22:09

私域流量運(yùn)營

2010-04-19 17:39:04

Oracle導(dǎo)入

2019-08-20 09:09:50

2010-04-09 15:22:57

Oracle數(shù)據(jù)庫

2010-05-21 17:51:58

MySQL數(shù)據(jù)庫

2010-04-12 09:36:29

Oacle merge

2009-12-01 10:23:19

數(shù)據(jù)資料備份

2013-08-12 10:19:04

虛擬網(wǎng)絡(luò)設(shè)備虛擬化方案虛擬化安全

2022-07-11 13:43:51

Prometheus監(jiān)控

2022-04-28 10:29:38

數(shù)據(jù)數(shù)據(jù)收集

2010-04-19 10:50:01

Oracle轉(zhuǎn)移

2010-04-15 14:18:30

Oracle創(chuàng)建

2010-05-10 17:00:53

Oracle死鎖進(jìn)程

2023-10-16 10:25:34

數(shù)據(jù)科學(xué)大數(shù)據(jù)

2010-04-12 17:00:37

Oracle索引聚簇表

2010-05-18 12:24:16

MySQL binlo

2018-09-21 14:20:01

代碼數(shù)據(jù)科學(xué)家數(shù)據(jù)科學(xué)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)