做者|LAKSHAY ARORA 編譯|Flin 來源|analyticsvidhyahtml
介紹
你上一次學習新的Python技巧是何時?做爲數據科學家,咱們習慣於使用熟悉的庫並每次都調用相同的函數。如今該打破舊的慣例了!python
Python不只限於Pandas,NumPy和scikit-learn(儘管它們在數據科學中絕對必不可少)!咱們可使用大量的Python技巧來改進代碼,加速數據科學任務並提升編寫代碼的效率。git
更重要的是,學習咱們能夠在Python中作的新事情真的很是有趣!我喜歡玩各類不一樣的程序包和函數。每隔一段時間,就會有一個新的花樣吸引我,我將其融入個人平常工做。github
所以,我決定在一個地方整理我最喜歡的Python技巧——本文!此列表的範圍從加快基本數據科學任務(如預處理)到在同一Jupyter Notebook中獲取R和Python代碼不等。有大量的學習任務在等着咱們,讓咱們開始吧!web
Python和數據科學世界的新手?這是一門精妙而全面的課程,可幫助你同時入門:算法
- 應用機器學習——從入門到專業
1. zip:在Python中合併多個列表
一般咱們最終會寫出複雜的for循環以將多個列表組合在一塊兒。聽起來很熟悉?那麼你會喜歡zip函數的。這個zip函數的目的是「建立一個迭代器,從每一個iterable中聚合元素」。shell
讓咱們經過一個簡單的示例來了解如何使用zip函數並組合多個列表:編程
看到合併多個列表有多容易了嗎?app
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/