今天整理了幾個在使用python進行數據分析的常用小技巧、命令。記得搭配Pandas+Jupyter Notebook使用哦。
01 使用Pandas Profiling預覽數據
這個神器我們在之前的文章中就詳細講過,使用Pandas Profiling可以在進行數據分析之前對數據進行快速預覽,拿我們使用過很多次的NBA數據集來說,導入數據集之后
import pandas as pd
import pandas_profiling
nba = pd.read_csv('nba_all_elo.csv') #導入數據
nba.profile_report()
一行代碼就生成豐富的交互式數據EDA報告
可以看到,除了之前我們需要的一些描述性統計數據,該報告還包含以下信息:
-
類型推斷:檢測數據幀中列的數據類型。
-
要點:類型,唯一值,缺失值
-
分位數統計信息,例如最小值,Q1,中位數,Q3,最大值,范圍,四分位數范圍
-
描述性統計數據,例如均值,眾數,標准偏差,總和,中位數絕對偏差,變異系數,峰度,偏度
-
最常使用的值
-
直方圖
-
相關性矩陣
-
缺失值矩陣,計數,熱圖和缺失值樹狀圖
-
文本分析:了解文本數據的類別(大寫,空格),腳本(拉丁,西里爾字母)和塊(ASCII)
02 使用cufflinks繪制圖表
上一個神器Pandas Profiling可以快速幫助我們預覽數據,那么這個神器cufflinks可以幫我們直接使用DataFrame快速繪制交互式圖表。就像seaborn封裝了matplotlib一樣,cufflinks在plotly的基礎上做了一進一步的包裝,方法統一,參數配置簡單。
對pandas熟悉的同學可能知道pandas可以直接調用.plot()繪圖,我們來看看
df.plot()
如果使用cufflinks來繪制,也是一行代碼
df.iplot()
是不是交互式的圖表更得人心?當然還可以直接使用DataFrame繪制其他復雜的圖表
如果在數據分析工作中經常需要數據可視化的話就考慮使用cufflinks吧!
03 使用notebook的Magic命令
Magic命令是Jupyter notebook中的一組便捷功能,數熟練使用該命令可以解決數據分析中的一些常見問題。使用%lsmagic就可以查看所有的Magic命令,下面我們介紹幾個常用的
%store:在不同notebook間傳遞變量
不知道大家有沒有經歷過在一個notebook中進行數據預處理數據清洗等相關工作,在另一個notebook中進行可視化相關工作,那么怎樣在繪圖時直接調用另一個notebook中的數據呢?使用%store就可以輕松解決
%store 變量 #保存變量
%store -r 變量 #在另一個notebook中調用變量
%who:列出全部變量
在大型數據分析過程中,你是否遇到過忘記定義了哪些變量或者忘記某個變量是否賦值還是忘記了變量名甚至刪除了賦值語句。沒關系使用%who命令可以列出這個notebook中的全部變量
%debug:交互式調試
有時候我們寫了一大段代碼執行發現報錯,這時調試是比較痛苦的,那么我們可以在新的一行中鍵入%debug並運行。這將打開一個交互式調試環境,它能直接定位到發生異常的位置。還可以檢查程序中分配的變量值,並在此處執行操作
notebook的magic命令還有很多就不一一介紹,如果感興趣可以自己查詢使用或者關注公眾號『早起python』后續文章。
04 使用jupyter快捷鍵
Jupyter作為生成嵌入式代碼的優秀編輯器自帶了很多快捷鍵,熟練使用快捷鍵將會省去很多繁瑣的鼠標點擊操作,可以使用
Cmd + Shift + P
或Ctrl + Shift + P
在Linux和Windows上查看有哪些快捷鍵。
常用的比如
Tab : 代碼補全或縮進
Shift-Tab : 提示
Ctrl-] : 縮進
Ctrl-[ : 解除縮進
Ctrl-Home : 跳到單元開頭
Ctrl-Up : 跳到單元開頭
Ctrl-End : 跳到單元末尾
Ctrl-Down : 跳到單元末尾
Ctrl-Left : 跳到左邊一個字首
Ctrl-Right : 跳到右邊一個字首
05 使用pprint
pprint
是pretty printer 的縮寫,用來打印 Python 數據結構,與 print
相比,它打印出來的結構更加整齊,便於閱讀。
先來看看print
再來看看pprint,是不是打印出來更加方便閱讀
06 掌握多種處理異常值方法
在使用python進行數據分析時,如果數據集中出現缺失值、空值、異常值,那么數據清洗就是尤為重要的一步。因此掌握多種使用python處理異常值處理的方法,並在開始數據分析之前對異常值進行預處理會大大提升數據分析效率。
例如,將丟失的數據替換為'*'。我們可以使用
.fillna('*')
將
所有缺失值替換為*,或者
data.fillna(axis=1,method='ffill')
來橫向/縱向用缺失值前面的值替換缺失值,那么更多的異常值處理方法可以參閱python數據分析之清洗數據:缺失值處理
07 使用-i執行python腳本
我們都知道在命令行執行python腳本可以使用python filename.py,而我推薦使用
python -i filename.py
去執行python腳本,因為這樣在腳本執行完畢之后,python不會退出編譯器。從而我們可以檢查變量的值或繼續進行操作。
而如果我們的代碼發生了報錯的話,該命令會直接定位到代碼發生異常的位置,然后我們可以更方便的去處理代碼,我們來看看
08 分批讀取數據
有時當我們使用pandas讀取的數據文件非常大的時候,如果直接一次性讀取全部數據會出現內存不夠用的情況,所以這時我們應該對該數據進行分批次讀取,並處理每一批次然后保存每一批次的結果,最后對全部批次結果進行匯總。
import pandas as pd
data = pd.read_csv("data.csv",chunksize=10000) #chunksize是每一批次處理的數量
result = [] #用於儲存結果
for chunk in data:
#寫一個函數處理每一個批次
filter_result = chunk_manipulate(chunk)
result.append(filter_result)
#合並所有批次
df = pd.concat(result)