引言 幾年后發(fā)生了。在使用SAS工作超過5年后,我決定走出自己的舒適區(qū)。作為一個數(shù)據(jù)科學家,我尋找其他有用的工具的旅程開始了!幸運的是,沒過多久我就決定,Python作為我的開胃菜。 我總是有一個編寫代碼的傾向。這次我做的是我真正喜歡的。代碼。原來,寫代碼是如此容易! 我一周內(nèi)學會了Python基礎(chǔ)。并且,從那時起,我不僅深度探索了這門語言,而且也幫助了許多人學習這門語言。Python是一種通用語言。但是,多年來,具有強大的社區(qū)支持,這一語言已經(jīng)有了專門的數(shù)據(jù)分析和預(yù)測模型庫。 由于Python缺乏數(shù)據(jù)科學的資源,我決定寫這篇教程來幫助別人更快地學習Python。在本教程中,我們將講授一點關(guān)于如何使用Python進行數(shù)據(jù)分析的信息,咀嚼它,直到我們覺得舒適并可以自己去實踐。
1. 數(shù)據(jù)分析的Python基礎(chǔ)
2. Python的庫和數(shù)據(jù)結(jié)構(gòu)
3. 在Python中使用Pandas進行探索性分析
4. 在Python中使用Pandas進行數(shù)據(jù)再加工 5. 使用Python中建立預(yù)測模型
讓我們開始吧 1.數(shù)據(jù)分析的Python基礎(chǔ) 為什么學Python用來數(shù)據(jù)分析 很多人都有興趣選擇Python作為數(shù)據(jù)分析語言。這一段時間以來,我有比較過SAS和R。這里有一些原因來支持學習Python:
不用說,它仍然有幾個缺點:
Python 2.7 v/s 3.4 這是關(guān)于Python的一個最具爭議的話題。你可能總是不能避免遇到,尤其是如果你是一個初學者。這里沒有正確/錯誤的選擇。它完全取決于具體情況和你的需要。我會嘗試給你一些建議,以幫助你做出明智的選擇。 為什么選擇Python 2.7
為什么選擇Python 3.4
沒有明確的贏家,但我想,底線是,你應(yīng)該專注于學習Python語言。版本之間的轉(zhuǎn)換應(yīng)該只是一個時間問題。敬請期待,不久的將來一個專門對比Python 2.X和3 X的文章! 怎樣安裝Python 有兩種方法安裝Python
第二種方法提供了一個避免麻煩的安裝,因此我會推薦給初學者。這種方法是你必須等待整個包進行升級, 即使你只是對一個單一的庫的最新版本感興趣。它應(yīng)該不重要,直到和除非,直到和除非,你正在做的尖端統(tǒng)計研究。 選擇開發(fā)環(huán)境 一旦你已經(jīng)安裝了Python,選擇環(huán)境可以有很多種選擇。這里是3個最常見的選擇:
我們在整個教程中將使用Ipython 環(huán)境 熱身:跑第一個Python程序 你可以使用Python作為一個簡單的計算器來開始:
在我們深入挖掘如何解決問題之前,讓我們退后一步,了解Python的基本知識。當我們知道數(shù)據(jù)結(jié)構(gòu)和迭代和條件結(jié)構(gòu)是形成任何語言的關(guān)鍵。在Python中,這些包括列表、字符串、元組、字典、for循環(huán),while循環(huán),if-else等等,讓我們來看看下面的因素。 2 .在Python上運行一些簡單程序 Python的數(shù)據(jù)結(jié)構(gòu) 以下是Python中使用的一些數(shù)據(jù)結(jié)構(gòu)。你應(yīng)該熟悉他們,以便恰當?shù)氖褂盟鼈儭?/p>
這里是一個快速的例子,定義了一個列表,然后訪問它:
因為元組是不可變的,不可改變的,他們相對列表來說可以處理的更快。因此,如果你的清單是不可能改變的,你應(yīng)該使用元組,而不是列表。
和大多數(shù)語言一樣,Python也有一個FOR循環(huán),這是最廣泛使用的迭代方法。它有一個簡單的語法:
如果你想從零開始寫代碼,它將是一場噩夢,你使用Python不會超過2天!但不要擔心這些。值得慶幸的是,有許多預(yù)定義的庫,我們可以直接導(dǎo)入到我們的代碼,使我們的生活很容易。 例如,考慮我們剛才看到的因子的例子。我們可以一步就完成:
Python庫 在開始我們的學習Python之旅之前,讓我們先一步,了解一些有用的python庫。第一步顯然是要學會將它們導(dǎo)入到我們的環(huán)境中。在Python中有以下幾種方法:
第二方式,你需要導(dǎo)入math的整個命名空間,你可以直接使用factorial(),而不用提到math。 提示:谷歌推薦您使用第一種方式導(dǎo)入庫,因為您將知道函數(shù)來自何處。 下面是一個庫列表,你將在任何科學計算和數(shù)據(jù)分析中用到:
其它的庫,你可能需要:
現(xiàn)在我們已經(jīng)熟悉Python的基礎(chǔ)和更多的庫,讓我們深入到通過Python解決問題。是的,我的意思是做一個預(yù)測模型!在這個過程中,我們使用了一些強大的庫,也遇到了下一級的數(shù)據(jù)結(jié)構(gòu)。我們將帶你通過這3個關(guān)鍵階段:
3.在Python中使用Pandas進行探索性分析 為了進一步探索我們的數(shù)據(jù),讓我把你介紹給另一種動物(好像Python是不夠的!)–– Pandas
在加載數(shù)據(jù)之前,讓我們了解Pandas 中的2個關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)——序列和數(shù)據(jù)框 序列和數(shù)據(jù)框的簡介 序列可以被理解為一個1維標記/索引數(shù)組。你可以通過這些標簽訪問這個序列的各個元素。 一個數(shù)據(jù)框類似于Excel工作簿–你可以使用列名來引用列,可以通過行號來訪問行數(shù)據(jù),本質(zhì)的區(qū)別是,在數(shù)據(jù)幀中,列名和行號是列和行的索引。 More: 10 Minutes to Pandas 實踐數(shù)據(jù)集——貸款預(yù)測問題 您可以從這里下載數(shù)據(jù)集。這里是變量的描述:
開始,通過在你的你的終端/ Windows命令提示符鍵入下面的代碼,來以Inline Pylab模式啟動IPython界面:
/home/kunal/Downloads/Loan_Prediction/train.csv 導(dǎo)入庫和數(shù)據(jù)集: 下面是我們將在本教程中使用的庫:
請注意,你不需要導(dǎo)入matplotlib和NumPy,因為是在PyLab環(huán)境下。但我仍然在代碼中保留了它們,以防你在不同的環(huán)境中使用代碼。 導(dǎo)入庫以后,你可以使用read_csv()函數(shù)讀數(shù)據(jù)集。這是直到這個階段的代碼: 快速數(shù)據(jù)探索 一旦你讀取了數(shù)據(jù),可以通過使用head()函數(shù)查看一下前幾行的數(shù)據(jù):
接下來,你可以使用describe()函數(shù)來查看數(shù)值字段的概要: describe()功能將提供計數(shù)、平均、標準差(STD),最小值,分位數(shù)值和最大值(讀這篇文章來更新基本統(tǒng)計數(shù)據(jù)了解人口分布) 這里有幾個結(jié)論,你可以通過查看describe()函數(shù)的輸出得出:
請注意,我們通過比較的平均值和中位數(shù),即50%位數(shù),來得到偏差的概念。 對于非數(shù)值(例如property_area,credit_history等),我們可以看看頻率分布,了解他們是否有意義。頻率表可以通過以下命令打?。?/p>
分布分析 現(xiàn)在我們熟悉了基本的數(shù)據(jù)特征,讓我們研究不同變量的分布情況。讓我們從數(shù)字變量開始–即applicantincome和LoanAmount 我們通過繪制applicantincome的直方圖開始,使用下面的命令: 在這里,我們觀察到,有幾個極端值。這也是分箱值為50的原因,就是為了清楚地描述它的分布。 下一步,我們看箱線圖,了解分布。fare 的箱圖可以使用下面代碼繪制: 這證實了大量的離群值/極值的存在。這可以歸因于社會上的收入差距。部分原因源于這樣一個事實:我們正在查看不同的教育水平的人。讓我們根據(jù)他們所受的教育進行分組:
現(xiàn)在,讓我們使用下面的命令看看LoanAmount的直方圖和箱線圖: 再次,有一些異常的值。顯然,applicantincome和LoanAmount都需要進行一定的數(shù)據(jù)處理。 LoanAmount有一些缺失值以及一些異常的值,而applicantincome有一些異常值,需要更深入的了解。我們將在即將到來的部分完成這些。 分類變量的分析 現(xiàn)在我們了解了applicantincome和loanincome的分布,讓我們了解更多關(guān)于分類變量的細節(jié)。我們將使用Excel數(shù)據(jù)透視表和交叉制表的風格。例如,讓我們看看基于信用記錄,可以獲得貸款的可能性。這可以在微軟的Excel上使用一個透視表實現(xiàn):
現(xiàn)在我們將看看使用Python產(chǎn)生類似的效果所需要的步驟。請參考這篇文章,以使用Pandas獲得不同的數(shù)據(jù)操縱技術(shù)。
現(xiàn)在我們可以觀察到,我們得到一個像微軟的 Excel的pivot_table。這可以使用matplotlib庫繪制成條形圖,使用下面的代碼: 這表明,如果申請人有一個有效的信用記錄,獲得貸款的機會是沒有信用記錄的人的八倍。你可以根據(jù)Married, Self-Employed, Property_Area等繪制類似的圖。 或著,這兩個圖可以進行組合以后的可視化,使用堆疊圖表示: 你還可以再上圖中加入性別變量(類似于Excel中的數(shù)據(jù)透視表)
我們只看到我們?nèi)绾问褂肞ython中的Pandas做探索性分析。我希望你對大熊貓(動物)的愛現(xiàn)在增加了——給予一些幫助,這個庫可以為你提供分析數(shù)據(jù)集。 接下來讓我們進一步探討applicantincome和loanstatus變量,進行數(shù)據(jù)修改和創(chuàng)建一個數(shù)據(jù)集并應(yīng)用各種建模技術(shù)。我強烈要求你采用另一個數(shù)據(jù)集和習題,并在進一步閱讀之前完成一個獨立的例子。 在Python中使用Pandas進行數(shù)據(jù)再加工 4.數(shù)據(jù)修改–翻新的需要 對于那些一直跟下來的人來說,這時你必須穿上鞋才能開始跑。 在我們的探索數(shù)據(jù)期間,我們發(fā)現(xiàn)了數(shù)據(jù)集的一些問題,在數(shù)據(jù)準備好建立一個好的模型之前需要解決。這個練習通常被稱為“數(shù)據(jù)修改”。這里是問題,我們已經(jīng)意識到的:
除了數(shù)值領(lǐng)域的這些問題,我們也應(yīng)該看看非數(shù)值領(lǐng)域Gender, Property_Area, Married,Education 和 Dependents這些變量,看看它們是否包含任何有用的信息。 如果你是Pandas的新手,我建議在繼續(xù)前進之前閱讀這篇文章。它詳細介紹了一些有用的數(shù)據(jù)處理技術(shù)。 檢查數(shù)據(jù)集中的缺失值 讓我們看看所有的變量中的缺失值,因為大多數(shù)模型不能處理有缺失值的數(shù)據(jù),即使他們可以,輸入它們往往不能幫助更多。所以,讓我們看看數(shù)據(jù)集中空值/NAN值的數(shù)量:
注:記住,缺失值可能并不總是NaN。例如,如果loan_amount_term是0,它是有意義的或者你認為是缺失的?我想你的答案是缺失的,你是對的。所以我們應(yīng)該檢查那些不切實際的值。 如何填補LoanAmount的缺失值? 有許多方法來填補價值貸款金額的缺失值,最簡單的就是使用均值來替換,可以通過以下代碼實現(xiàn): 另一個極端是可以建立一個監(jiān)督學習模型來基于其他變量預(yù)測貸款金額,然后使用年齡以及其他變量來預(yù)測。 既然,現(xiàn)在的目標是講述數(shù)據(jù)修改的步驟,我寧愿采取一種方法,它介于這2個極端方法之間。一個關(guān)鍵的假設(shè)是,一個人是否受教育的或是否自雇人士可以結(jié)合起來,提供一個很好的貸款金額的估計。 首先,讓我們看看箱線圖看是否有某種趨勢存在:
如我們先前所說,self_employed有缺失值。讓我們看看頻率表:
如何處理在LoanAmount和applicantincome分布中的極值? 讓我們先分析LoanAmount。由于極端值可能是現(xiàn)實的的,即一些人可能會由于特定的需求,申請高額的貸款,。所以,不把它們當做離群點對待,讓我們嘗試對數(shù)據(jù)轉(zhuǎn)換從而發(fā)揮它們的作用: 再看直方圖:
來看看applicantincome。一種直覺可以是一些申請人有較低的收入,但有一個有力的支持,共同申請者。所以將兩者的收入結(jié)合起來作為總收入可能是一個好主意,并采取相同的對數(shù)變換。 現(xiàn)在我們看到,分布比以前好多了。我會把Gender, Married, Dependents, Loan_Amount_Term, Credit_History等缺失值的估計留給你。此外,我鼓勵你考慮可能的額外的信息,可以來自數(shù)據(jù)。例如,創(chuàng)建一個LoanAmount/TotalIncome列可能會有意義,因為它能給你一個關(guān)于申請人如何償還他的貸款的好想法。 下一步,我們將研究預(yù)測模型。 5. 使用Python中建立預(yù)測模型 之后,我們已經(jīng)使數(shù)據(jù)可以用于建模,現(xiàn)在讓我們來看看Python代碼,來在我們的數(shù)據(jù)集上創(chuàng)建一個預(yù)測模型。Skicit-kearn(sklearn)是Python中最常用于此目的的庫,我們將跟隨這條小徑。我建議你通過這篇文章來復(fù)習進修sklearn。 因為,sklearn要求所有輸入都是數(shù)字,我們應(yīng)該通過編碼類別將我們所有的分類變量轉(zhuǎn)換為數(shù)值型。這可以用下面的代碼來完成:
邏輯回歸 讓我們做我們的第一個邏輯回歸模型。一個方法就是把所有的變量都加入模型,這可能會導(dǎo)致過度擬合(如果你還不知道這個術(shù)語,不要擔心)。簡單的說,考慮所有的變量可能會導(dǎo)致模型的理解出比較復(fù)雜的關(guān)系,對于具體的數(shù)據(jù),不能很好的概括。閱讀更多關(guān)于邏輯回歸。 我們可以很容易地作出一些直觀的假設(shè)來設(shè)定啟動資金。獲得貸款的機會將更高:
讓我們使用credit_history建立我們的第一個模型。
一般來說,我們期望通過增加變量來提高準確度。但這是一個更具挑戰(zhàn)性的案例。準確度和交叉驗證得分不受哪些影響較小變量的影響。credit_history主導(dǎo)模式。我們現(xiàn)在有兩個選擇:
決策樹 決策樹是建立預(yù)測模型的另一種方法。它能比邏輯回歸模型提供更高的準確度。閱讀更多關(guān)于決策樹。
在這里,基于分類變量的模型是不能產(chǎn)生影響的,因為相比它們信用歷史是占主導(dǎo)地位的。讓我們嘗試一些數(shù)值變量:
在這里,我們觀察到,雖然增加變量時提高了準確度,交叉驗證錯誤下降。但這是模型對數(shù)據(jù)過擬合的結(jié)果。讓我們嘗試一個更復(fù)雜的算法,看看它是否有幫助: 隨機森林 隨機森林是解決分類問題的另一種算法。閱讀更多關(guān)于隨機森林。 隨機森林的一個優(yōu)點是,我們可以使它與所有的功能,它返回一個功能的重要性矩陣,它可以用來選擇功能。
在這里,我們看到的準確性是100%的訓(xùn)練集。這是過度擬合的最終情況,可以以兩種方式解決:
讓我們嘗試這兩個。首先,我們看到的特征重要度矩陣,從中我們將采取最重要的特點。 讓我們使用前5個變量來創(chuàng)建一個模型。此外,我們將修改隨機森林模型的參數(shù)有一點: 讓我們使用前5個變量來創(chuàng)建一個模型。此外,我們將修改一點點隨機森林模型的參數(shù):
注意,雖然準確度降低,但交叉驗證得分提高表明該模型推廣良好。請記住,隨機森林模型是不完全可重復(fù)的。不同的運行會導(dǎo)致輕微的變化,因為隨機。但輸出應(yīng)該呆在球場。 你會注意到,即使在隨機森林的一些基本參數(shù)調(diào)整后,我們已經(jīng)達到了一個交叉驗證的準確性只有略優(yōu)于原來的邏輯回歸模型。這個練習給我們提供了一些非常有趣和獨特的學習:
所以你準備好接受挑戰(zhàn)了嗎?用貸款預(yù)測問題開始你的數(shù)據(jù)科學之旅。 結(jié)尾 當你開始將Python用于數(shù)據(jù)科學時,我希望本教程可以幫助你最大限度地提高你的效率。我相信這不僅給你一個基本的數(shù)據(jù)分析方法的想法,它也展示了你如何實現(xiàn)一些當下存在的更復(fù)雜的技術(shù)。 Python確實是一個偉大的工具,并正在成為數(shù)據(jù)科學家之間一個越來越流行的語言。原因是,它很容易學習,可以很好地集成其他數(shù)據(jù)庫和工具如:Spark和Hadoop。主要的,它有很大的計算強度,并且具有強大的數(shù)據(jù)分析庫。 所以,學習Python執(zhí)行任何全生命周期的數(shù)據(jù)科學項目。它包括閱讀,分析,可視化和最后的預(yù)測。 如果在實踐Python的時候,你遇到任何困難,或者你有什么想法/建議/反饋,請通過下面的評論請我提出。 英文原文:https://www./blog/2016/01/complete-tutorial-learn-data-science-python-scratch-2/
|
|