相信對于不少的數(shù)據(jù)分析從業(yè)者來說呢,用的比較多的是Pandas 以及SQL 這兩種工具,Pandas 不但能夠?qū)?shù)據(jù)集進行清理與分析,并且還能夠繪制各種各樣的炫酷的圖表,但是遇到數(shù)據(jù)集很大的時候要是還使用Pandas 來處理顯然有點力不從心。 今天小編就來介紹另外一個數(shù)據(jù)處理與分析工具,叫做Polars ,它在數(shù)據(jù)處理的速度上更快,當然里面還包括兩種API,一種是Eager API ,另一種則是Lazy API ,其中Eager API 和Pandas 的使用類似,語法類似差不太多,立即執(zhí)行就能產(chǎn)生結(jié)果。而Lazy API 和Spark 很相似,會有并行以及對查詢邏輯優(yōu)化的操作。模塊的安裝與導(dǎo)入在安裝成功之后,我們分別用Pandas 和Polars 來讀取數(shù)據(jù),看一下各自性能上的差異,我們導(dǎo)入會要用到的模塊import pandas as pd import polars as pl import matplotlib.pyplot as plt %matplotlib inline
用Pandas 讀取文件本次使用的數(shù)據(jù)集是某網(wǎng)站注冊用戶的用戶名數(shù)據(jù),總共有360MB大小,我們先用Pandas 模塊來讀取該csv 文件%%time df = pd.read_csv('users.csv') df.head()
可以看到用Pandas 讀取CSV 文件總共花費了12秒的時間,數(shù)據(jù)集總共有兩列,一列是用戶名稱,以及用戶名稱重復(fù)的次數(shù)“n”,我們來對數(shù)據(jù)集進行排序,調(diào)用的是sort_values() 方法,代碼如下%%time df.sort_values('n', ascending=False).head()
用Polars 來讀取操作文件下面我們用Polars 模塊來讀取并操作文件,看看所需要的多久的時間,代碼如下%%time data = pl.read_csv('users.csv') data.head()
可以看到用polars 模塊來讀取數(shù)據(jù)僅僅只花費了730毫秒的時間,可以說是快了不少的,我們根據(jù)“n”這一列來對數(shù)據(jù)集進行排序,代碼如下%%time data.sort(by='n', reverse=True).head()
對數(shù)據(jù)集進行排序所消耗的時間為1.39秒,接下來我們用polars模塊來對數(shù)據(jù)集進行一個初步的探索性分析,數(shù)據(jù)集總共有哪些列、列名都有哪些,我們還是以熟知“泰坦尼克號”數(shù)據(jù)集為例df_titanic = pd.read_csv('titanic.csv') df_titanic.columns
['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', ......]
和Pandas 一樣輸出列名調(diào)用的是columns 方法,然后我們來看一下數(shù)據(jù)集總共是有幾行幾列的,看一下數(shù)據(jù)集中每一列的數(shù)據(jù)類型[polars.datatypes.Int64, polars.datatypes.Int64, polars.datatypes.Int64, polars.datatypes.Utf8, polars.datatypes.Utf8, polars.datatypes.Float64, ......]
填充空值與數(shù)據(jù)的統(tǒng)計分析我們來看一下數(shù)據(jù)集當中空值的分布情況,調(diào)用null_count() 方法我們可以看到“Age”以及“Cabin”兩列存在著空值,我們可以嘗試用平均值來進行填充,代碼如下df_titanic['Age'] = df_titanic['Age'].fill_nan(df_titanic['Age'].mean())
計算某一列的平均值只需要調(diào)用mean() 方法即可,那么中位數(shù)、最大/最小值的計算也是同樣的道理,代碼如下print(f'Median Age: {df_titanic['Age'].median()}') print(f'Average Age: {df_titanic['Age'].mean()}') print(f'Maximum Age: {df_titanic['Age'].max()}') print(f'Minimum Age: {df_titanic['Age'].min()}')
Median Age: 29.69911764705882 Average Age: 29.699117647058817 Maximum Age: 80.0 Minimum Age: 0.42
數(shù)據(jù)的篩選與可視化df_titanic[df_titanic['Age'] > 40]
fig, ax = plt.subplots(figsize=(10, 5)) ax.boxplot(df_titanic['Age']) plt.xticks(rotation=90) plt.xlabel('Age Column') plt.ylabel('Age') plt.show()
總體來說呢,polars 在數(shù)據(jù)分析與處理上面和Pandas 模塊有很多相似的地方,其中會有一部分的API存在著差異,感興趣的童鞋可以參考其官網(wǎng):https://www./
|