1. 程式人生 > 實用技巧 >10個強大的Python資料科學技巧

10個強大的Python資料科學技巧

作者|LAKSHAY ARORA
編譯|Flin
來源|analyticsvidhya

介紹

你上一次學習新的Python技巧是什麼時候?作為資料科學家,我們習慣於使用熟悉的庫並每次都呼叫相同的函式。現在該打破舊的慣例了!

Python不僅限於Pandas,NumPy和scikit-learn(儘管它們在資料科學中絕對必不可少)!我們可以使用大量的Python技巧來改進程式碼,加速資料科學任務並提高編寫程式碼的效率。

更重要的是,學習我們可以在Python中做的新事情真的非常有趣!我喜歡玩各種不同的程式包和函式。每隔一段時間,就會有一個新的花樣吸引我,我將其融入我的日常工作。

因此,我決定在一個地方整理我最喜歡的Python技巧——本文!此列表的範圍從加快基本資料科學任務(如預處理)到在同一Jupyter Notebook中獲取R和Python程式碼不等。有大量的學習任務在等著我們,讓我們開始吧!

Python和資料科學世界的新手?這是一門精妙而全面的課程,可幫助你同時入門:

1. zip:在Python中合併多個列表

通常我們最終會寫出複雜的for迴圈以將多個列表組合在一起。聽起來很熟悉?那麼你會喜歡zip函式的。這個zip函式的目的是“建立一個迭代器,從每個iterable中聚合元素”。

讓我們通過一個簡單的示例來了解如何使用zip函式並組合多個列表:

https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2019/08/10-powerful-python-tricks-data-science

看到合併多個列表有多容易了嗎?

2. gmplot:在Google Maps的資料集中繪製GPS座標

我喜歡使用Google Maps資料。想想看,它是最豐富的資料應用程式之一。這就是為什麼我決定從這個Python技巧開始的原因。

當我們想檢視兩個變數之間的關係時,使用散點圖是非常好的。但是如果變數是一個位置的經緯度座標,你會使用它們嗎?可能不會。最好把這些點標在真實的地圖上,這樣我們就可以很容易地看到並解決某個特定的問題(比如優化路線)。

gmplot提供了一個令人驚歎的介面,可以生成HTML和JavaScript,將我們想要的所有資料呈現在Google Maps之上。讓我們來看一個如何使用gmplot的例子。

安裝gmplot

!pip3 install gmplot

在Google地圖上繪製位置座標

你可以在此處下載此程式碼的資料集。

讓我們匯入庫並讀取資料:

import pandas as pd
import gmplot
data = pd.read_csv('3D_spatial_network.csv')
data.head()

# latitude and longitude list 
latitude_list = data['LATITUDE'] 
longitude_list = data['LONGITUDE'] 

# center co-ordinates of the map 
gmap = gmplot.GoogleMapPlotter( 56.730876,9.349849,9)

# plot the co-ordinates on the google map 
gmap.scatter( latitude_list, longitude_list, '# FF0000', size = 40, marker = True) 

# the following code will create the html file view that in your web browser 
gmap.heatmap(latitude_list, longitude_list) 

gmap.draw( "mymap.html" )

上面的程式碼將生成HTML檔案,你可以看到Google地圖上繪製了緯度和經度座標。熱圖以紅色顯示具有高密度點的區域。很酷吧?

3. category_encoders:使用15種不同的編碼方案對分類變數進行編碼

我們在早期資料科學資料集中面臨的最大障礙之一 —— 我們應該如何處理分類變數?我們的機器眨眼間就可以處理數字,但是處理類別卻是一個完全不同的問題。

一些機器學習演算法可以自己處理分類變數。但是我們需要將它們轉換為數值變數,為此,category_encoders是一個了不起的庫,提供了15種不同的編碼方案。

讓我們看看如何利用這個庫。

安裝 category-encoders

!pip3 install category-encoders

將分類資料轉換為數值資料


import pandas as pd 
import category_encoders as ce 

# create a Dataframe 
data = pd.DataFrame({ 'gender' : ['Male', 'Female', 'Male', 'Female', 'Female'],
                      'class' : ['A','B','C','D','A'],
                      'city' : ['Delhi','Gurugram','Delhi','Delhi','Gurugram'] }) 
                                                                                      
data.head()

# One Hot Encoding 
# create an object of the One Hot Encoder 

ce_OHE = ce.OneHotEncoder(cols=['gender','city']) 

# transform the data 
data = ce_OHE.fit_transform(data) 
data.head()

category_encoders支援大約15種不同的編碼方法,例如:

  • 雜湊編碼
  • LeaveOneOut編碼
  • 順序編碼
  • 二進位制編碼
  • 目標編碼

所有編碼器都與 sklearn-transformers 完全相容,因此可以輕鬆地在你現有的指令碼中使用它們。另外,category_encoders支援NumPy陣列和Pandas資料幀。你可以在此處閱讀有關category_encoders的更多資訊。

4. progress_apply:監視你花費在資料科學任務上的時間

你通常花費多少時間來清理和預處理資料?資料科學家通常花費60~70%的時間來清理資料這一說法是正確的。對我們來說,追蹤這一點很重要,對嗎?

我們不想花費數天的時間來清理資料,而忽略其他資料科學步驟。這是progress_apply 函式使我們的研究更加輕鬆的地方。讓我演示一下它是如何工作的。

讓我們計算所有點到特定點的距離,並檢視完成此任務的進度。你可以在此處下載資料集。

import pandas as pd
from tqdm._tqdm_notebook import tqdm_notebook
from pysal.lib.cg import harcdist
tqdm_notebook.pandas()
data = pd.read_csv('3D_spatial_network.csv')
data.head()

# calculate the distance of each data point from # (Latitude, Longitude) = (58.4442, 9.3722) 

def calculate_distance(x): 
   return harcdist((x['LATITUDE'],x['LONGITUDE']),(58.4442, 9.3722)) 
   
data['DISTANCE'] = data.progress_apply(calculate_distance,axis=1)

你會看到跟蹤我們的程式碼進度有多麼容易。簡單,高效。

5. pandas_profiling:生成資料集的詳細報告

我們花了很多時間來理解我們得到的資料。這很公平——我們不想在不瞭解我們正在使用的模型的情況下直接跳入模型構建。這是任何資料科學專案中必不可少的步驟。

pandas_profiling 是一個Python軟體包,可減少執行初始資料分析步驟所需的大量工作。該軟體包只需一行程式碼即可生成有關我們資料的詳細報告!

import pandas as pd 
import pandas_profiling 

# read the dataset 
data = pd.read_csv('add-your-data-here') 
pandas_profiling.ProfileReport(data)

我們可以看到,僅用一行程式碼,就得到了資料集的詳細報告:

  • 警告,例如: Item_Identifier具有高基數:1559個不同的值警告
  • 所有類別變數的頻率計數
  • 數字變數的分位數和描述統計
  • 相關圖

6. grouper:對時間序列資料進行分組

現在誰不熟悉Pandas?它是最流行的Python庫之一,廣泛用於資料操作和分析。我們知道Pandas有驚人的能力來操縱和總結資料。

我最近在研究一個時間序列問題,發現Pandas有一個我以前從未使用過的 Grouper 函式。我開始對它的使用感到好奇。

事實證明,這個Grouper函式對於時間序列資料分析是一個非常重要的函式。讓我們試試這個,看看它是如何工作的。你可以在這裡下載此程式碼的資料集。

import pandas as pd 

data = pd.read_excel('sales-data.xlsx') 
data.head()

現在,處理任何時間序列資料的第一步是將date列轉換為DateTime格式:

data['date'] = pd.to_datetime(data['date'])

假設我們的目標是檢視每個客戶的每月銷售額。我們大多數人都在這裡嘗試寫一些複雜的東西。但這是Pandas對我們來說更有用的地方。

data.set_index('date').groupby('name')["ext price"].resample("M").sum()

我們可以通過groupby語法使用一種簡單的方法,而不必再進行重新索引。我們將為這個函式新增一些額外的內容,提供一些關於如何在date列中對資料分組的資訊。它看起來更乾淨,工作原理完全相同:

data.groupby(['name', pd.Grouper(key='date', freq='M')])['ext price'].sum()

7. unstack:將索引轉換為Dataframe的列

我們剛剛看到了grouper如何幫助對時間序列資料進行分組。現在,這裡有一個挑戰——如果我們想將name列(在上面的示例中是索引)作為dataframe的列呢。

這就是unstack函式變得至關重要的地方。讓我們對上面的程式碼示例應用unstack函式並檢視結果。

data.groupby(['name', pd.Grouper(key='date', freq='M')])['ext price'].sum().unstack()


非常有用!注意:如果索引不是MultiIndex,則輸出將是Series。

8.%matplotlib Notebook:Jupyter Notebook中的互動式繪圖

我是matplotlib庫的超級粉絲。它是我們在Jupyter Notebook中用來生成各種圖形的最常見的視覺化庫。

要檢視這些繪圖,我們通常在匯入matplotlib庫時使用一行——%matplotlib inline。這很好用,它呈現了Jupyter Notebook中的靜態圖。

只需將行 %matplotlib替換為 %matplotlib notebook,就可以看到神奇的效果了。你將在你的 Notebook得到可調整大小和可縮放的繪圖!

%matplotlib notebook
import matplotlib.pyplot as plt

# scatter plot of some data # try this on your dataset
plt.scatter(data['quantity'],data['unit price'])

只需更改一個字,我們就可以獲取互動式繪圖,從而可以在繪圖中調整大小和縮放。

9. %% time:檢查特定Python程式碼塊的執行時間

解決一個問題可以有多種方法。作為資料科學家,我們對此非常瞭解。計算成本在行業中至關重要,尤其是對於中小型組織而言。你可能希望選擇最好的方法,以在最短的時間內完成任務。

實際上,在Jupyter Notebook中檢查特定程式碼塊的執行時間非常容易。

只需新增%% time命令來檢查特定單元格的執行時間:

%%time 
def myfunction(x) : 
    for i in range(1,100000,1) : 
        i=i+1

在這裡,我們有CPU時間和Wall時間。CPU時間是CPU專用於某個程序的總執行時間或執行時間。Wall時間是指時鐘從流程開始到“現在”之間經過的時間。

10:rpy2:R和Python在同一個Jupyter Notebook中!

R和Python是資料科學世界中最好的和最受歡迎的兩種開源程式語言。R主要用於統計分析,而Python提供了一個簡單的介面,可將數學解決方案轉換為程式碼。

這是個好訊息,我們可以在一個Jupyter Notebook中同時使用它們!我們可以利用這兩個生態系統,為此,我們只需要安裝rpy2。

因此,現在暫時擱置R與Python的爭論,並在我們的Jupyter Notebook中繪製ggplot級圖表。

!pip3 install rpy2

我們可以同時使用兩種語言,甚至可以在它們之間傳遞變數。

%load_ext rpy2.ipython
%R require(ggplot2)
import pandas as pd
df = pd.DataFrame({
        'Class': ['A', 'A', 'A', 'V', 'V', 'A', 'A', 'A'],
        'X': [4, 3, 5, 2, 1, 7, 7, 5],
        'Y': [0, 4, 3, 6, 7, 10, 11, 9],
        'Z': [1, 2, 3, 1, 2, 3, 1, 2]
    })
%%R -i df
ggplot(data = df) + geom_point(aes(x = X, y= Y, color = Class, size = Z))

在這裡,我們用Python 建立了一個數據框df,並使用它建立了一個使用R的ggplot2庫(geom_point函式)的散點圖。

尾註

這是我必不可少的Python技巧集合。我喜歡在日常任務中使用這些軟體包和功能。老實說,我的工作效率提高了,這使在Python中工作比以往更加有趣。

除了這些之外,你還有什麼想讓我知道的Python技巧嗎?在下面的評論部分中告訴我,我們可以交換想法!

而且,如果你是Python的初學者和資料科學的新手,那麼你真的應該檢視我們全面且暢銷的課程:

原文連結:https://www.analyticsvidhya.com/blog/2019/08/10-powerful-python-tricks-data-science/

歡迎關注磐創AI部落格站:
http://panchuang.net/

sklearn機器學習中文官方文件:
http://sklearn123.com/

歡迎關注磐創部落格資源彙總站:
http://docs.panchuang.net/