【戰績追蹤】
本文轉自:大數據文摘
翻譯:黃念
校對:王方思
「為什麼要學Python」這個問題,是很多從來沒有學過,或者沒有怎麼了解過Python的小白最常見的問題。
其實Python語言非常簡單,同時又很強大,最新的數據是位列2016語言排行榜第三位,而且美國,澳大利亞,加拿大,14歲以上的青少年開始官方推薦學習。
Python雖然是25歲的大叔級程式語言,但是近年來Python反而變得越來越流行,在TIOBE程式語言指數排行榜中,Python的排名長期佔據領先位置。
國外非常有名的有Google, facebook, Yahoo, YueTube, 還有美國宇航局NASA, 像著名的開源雲計算平臺openstack也是用python寫的,還有國內的豆瓣也是用python寫的。
今天主頁君就帶大家一起了解python入門的數據處理——12種有用的Pandas技巧
如果你想根據另一列的條件來篩選某一列的值,你會怎麼做?例如,我們想獲得一份完整的沒有畢業並獲得貸款的女性名單。這裡可以使用布爾索引實現。你可以使用以下代碼:
Apply是一個常用函數,用於處理數據和創建新變量。在利用某些函數傳遞一個數據幀的每一行或列之後,Apply函數返回相應的值。該函數可以是系統自帶的,也可以是用戶定義的。舉個例子,它可以用來找到任一行或者列的缺失值。
由此我們得到了需要的結果。
註:第二個輸出中使用了head()函數,因為結果中包含很多行。
『fillna()』可以一次性解決:以整列的平均數或眾數或中位數來替換缺失值。讓我們基於其各自的眾數填補出「性別」、「婚姻」和「自由職業」列的缺失值。
#首先導入函數來判斷眾數
結果返回眾數和其出現頻次。請注意,眾數可以是一個數組,因為高頻的值可能有多個。我們通常默認使用第一個:
現在,我們可以填補缺失值並用# 2中提到的方法來檢查。
#填補缺失值並再次檢查缺失值以確認
Pandas可以用來創建MS Excel風格的透視表。例如,在本例中一個關鍵列是「貸款數額」有缺失值。我們可以根據「性別」,「婚姻狀況」和「自由職業」分組後的平均金額來替換。 「貸款數額」的各組均值可以以如下方式確定:
如果你注意到#3的輸出,它有一個奇怪的特性。每一個索引都是由3個值組合構成的。這就是所謂的多索引。它有助於快速執行運算。
從# 3的例子繼續開始,我們有每個組的均值,但還沒有被填補。
這可以使用到目前為止學習到的各種技巧來解決。
#只在有缺失貸款值的行中進行迭代並再次檢查確認
注意:
1. 多索引需要在loc中聲明的定義分組的索引元組。這個元組會在函數中用到。
2. .values[0]後綴是必需的,因為默認情況下元素返回的索引與原數據框的索引不匹配。在這種情況下,直接賦值會出錯。
此函數用於獲取數據的一個初始「感覺」(視圖)。在這裡,我們可以驗證一些基本假設。例如,在本例中,「信用記錄」被認為顯著影響貸款狀況。這可以使用交叉表驗證,如下圖所示:
這些是絕對值。但是,要獲得快速的見解,用百分比更直觀。我們可以使用apply 函數來實現:
現在,很明顯,有信用記錄的人得到一筆貸款的可能性更高:與沒有信用記錄的人只有8%得到貸款相比,80%的有信用記錄的人獲得了一筆貸款。
然而不僅如此。其中包含了更有趣的信息。由於我已經知道有一次信用記錄是非常重要的,如果我預測擁有信用記錄的人貸款狀態是Y(貸款成功),而沒有的人為N(貸款失敗)。令人驚訝的是,我們在614個例子中會有82+378=460次的正確。這個比例高達75%!
如果你仍納悶為何我們還需要統計模型,我不會怪你。但是相信我,即使在目前這個精準度上再提高哪怕0.001%的精度仍會是一項充滿挑戰性的任務。你會接受這個挑戰嗎?
註:這個75%是基於訓練集的。測試集會略有不同,但接近。另外,我希望這能提供一些直覺,即到底為什麼哪怕0.05%的精度提升,可造成Kaggle排行榜(數據分析競賽網站——譯者注)上的名次上升500位。
當我們需要對不同來源的信息進行合併時,合併數據幀變得很重要。假設對於不同物業類型,有不同的房屋均價(INR/平方米)。讓我們定義這樣一個數據幀:
現在,我們可以將原始數據幀和這些信息合併:
透視表驗證了成功的合併操作。請注意,「value」在這裡是無關緊要的,因為在這裡我們只簡單計數。
Pandas允許在多列之上輕鬆排序。可以這樣做:
註:Pandas的「排序」功能現在已不再推薦。我們用「sort_values」代替。
很多人可能沒意識到,箱線圖和柱狀圖可以直接在Pandas中繪製,不必另外調用matplotlib。這只需要一行命令。例如,如果我們想通過貸款狀況來比較申請人收入的分布,我們可以這樣做:
可見收入本身並不是一個決定性因素, 因為獲得/未獲得貸款的人沒有明顯的收入差異。
有時如果數值聚類會更有意義。例如,如果我們試圖用時間(分鐘)對交通狀況(路上的車流量)建模。相比於如「早晨」「下午」「傍晚」「晚上」「深夜」這樣的時段,具體分鐘數可能對預測交通量不那麼相關。如此對交通建模會更直觀,也避免過度擬合。
在這裡,我們定義了一個簡單可復用的函數,可以輕鬆地用於對任何變量的分箱。
有時,我們會遇到必須修改名義變量的類別的情況。這可能是由於以下各種原因:
1. 一些算法(如邏輯回歸)要求所有的輸入都是數值型,因此名義變量常被編碼為0, 1…(n-1)
2. 有時同一個類別可以用兩種方式來表示。如溫度可能被記錄為「High(高)」「Medium(中)」「Low(低)」「H(高)」「low(低)」。在這裡,無論是「High(高)」還是「H(高)」是指同一類。同理,「Low(低)」和「low(低)」也是同一類。但是,Python會將它們視為不同分類。
3. 有些類別的頻率可能非常低,把它們歸為一類一般會是個好主意。
在這裡,我定義了一個通用的函數,以字典的方式輸入值,使用Pandas中「replace」函數來重新對值進行編碼。
編碼前後計數不變,證明編碼成功。
這不是一個常用的操作。畢竟你不想卡在這裡,是吧?有時你可能需要用for循環迭代所有的行。例如,我們面臨的一個常見問題是在Python中對變量的不正確處理。這通常在以下兩種情況下發生:
所以手動定義變量類型是一個好主意。如果我們檢查所有列的數據類型:
在這裡,我們看到名義變量「Credit_History(信用記錄)」被當做浮點數類型。解決這些問題的一個好方法是創建一個包括列名和類型的CSV文件。這樣,我們就可以定義一個函數來讀取文件,並指定每一列的數據類型。例如,我在這裡已經創建了一個CSV文件datatypes.csv,如下所示:
加載這個文件後,我們可以在每一行上進行迭代,以列類型指派數據類型給定義在「type(特徵)」列的變量名。
現在的信用記錄列被修改為「object」類型,這在Pandas中表示名義變量。
本文中,我們涉及了Pandas的不同函數,那是一些能讓我們在探索數據和功能設計上更輕鬆的函數。同時,我們定義了一些通用函數,可以重複使用以在不同的數據集上達到類似的目的。
置頂關注英國求職公眾號
後臺回復【入門】
即可查看福利領取方式
所有福利小編將在48小時統一發放
本文轉載自大數據文摘
英國求職誠意推薦閱讀,版權歸原作者所有。
合作請聯繫:partners@DreambigCareer.com
▼▼▼
DBC Offer榜
斬獲精英offer,你也要有一張