99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars
介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars
2022-04-11
收藏

作者:俊欣

來(lái)源:關(guān)于數(shù)據(jù)分析與可視化

相信對(duì)于不少的數(shù)據(jù)分析從業(yè)者來(lái)說(shuō)呢,用的比較多的是Pandas以及SQL這兩種工具,Pandas不但能夠?qū)?shù)據(jù)集進(jìn)行清理與分析,并且還能夠繪制各種各樣的炫酷的圖表,但是遇到數(shù)據(jù)集很大的時(shí)候要是還使用Pandas來(lái)處理顯然有點(diǎn)力不從心。

介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars

今天小編就來(lái)介紹另外一個(gè)數(shù)據(jù)處理與分析工具,叫做Polars,它在數(shù)據(jù)處理的速度上更快,當(dāng)然里面還包括兩種API,一種是Eager API,另一種則是Lazy API,其中Eager APIPandas的使用類(lèi)似,語(yǔ)法類(lèi)似差不太多,立即執(zhí)行就能產(chǎn)生結(jié)果。

介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars

Lazy APISpark很相似,會(huì)有并行以及對(duì)查詢(xún)邏輯優(yōu)化的操作。

模塊的安裝與導(dǎo)入

我們先來(lái)進(jìn)行模塊的安裝,使用pip命令

pip install polars

在安裝成功之后,我們分別用PandasPolars來(lái)讀取數(shù)據(jù),看一下各自性能上的差異,我們導(dǎo)入會(huì)要用到的模塊

import pandas as pd import polars as pl import matplotlib.pyplot as plt
%matplotlib inline 

用Pandas讀取文件

本次使用的數(shù)據(jù)集是某網(wǎng)站注冊(cè)用戶(hù)的用戶(hù)名數(shù)據(jù),總共有360MB大小,我們先用Pandas模塊來(lái)讀取該csv文件

%%time df = pd.read_csv("users.csv")
df.head()

output

介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars

可以看到用Pandas讀取CSV文件總共花費(fèi)了12秒的時(shí)間,數(shù)據(jù)集總共有兩列,一列是用戶(hù)名稱(chēng),以及用戶(hù)名稱(chēng)重復(fù)的次數(shù)“n”,我們來(lái)對(duì)數(shù)據(jù)集進(jìn)行排序,調(diào)用的是sort_values()方法,代碼如下

%%time df.sort_values("n", ascending=False).head()

output

介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars

用Polars來(lái)讀取操作文件

下面我們用Polars模塊來(lái)讀取并操作文件,看看所需要的多久的時(shí)間,代碼如下

%%time data = pl.read_csv("users.csv") data.head()

output

介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars

可以看到用polars模塊來(lái)讀取數(shù)據(jù)僅僅只花費(fèi)了730毫秒的時(shí)間,可以說(shuō)是快了不少的,我們根據(jù)“n”這一列來(lái)對(duì)數(shù)據(jù)集進(jìn)行排序,代碼如下

%%time data.sort(by="n", reverse=True).head()

output

介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars

對(duì)數(shù)據(jù)集進(jìn)行排序所消耗的時(shí)間為1.39秒,接下來(lái)我們用polars模塊來(lái)對(duì)數(shù)據(jù)集進(jìn)行一個(gè)初步的探索性分析,數(shù)據(jù)集總共有哪些列、列名都有哪些,我們還是以熟知“泰坦尼克號(hào)”數(shù)據(jù)集為例

df_titanic = pd.read_csv("titanic.csv")
df_titanic.columns

output

['PassengerId',
 'Survived',
 'Pclass',
 'Name',
 'Sex',
 'Age',
 ......]

Pandas一樣輸出列名調(diào)用的是columns方法,然后我們來(lái)看一下數(shù)據(jù)集總共是有幾行幾列的,

df_titanic.shape 

output

(891, 12) 

看一下數(shù)據(jù)集中每一列的數(shù)據(jù)類(lèi)型

df_titanic.dtypes 

output

[polars.datatypes.Int64,
 polars.datatypes.Int64,
 polars.datatypes.Int64,
 polars.datatypes.Utf8,
 polars.datatypes.Utf8,
 polars.datatypes.Float64,
......]

填充空值與數(shù)據(jù)的統(tǒng)計(jì)分析

我們來(lái)看一下數(shù)據(jù)集當(dāng)中空值的分布情況,調(diào)用null_count()方法

df_titanic.null_count()

output

介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars

我們可以看到“Age”以及“Cabin”兩列存在著空值,我們可以嘗試用平均值來(lái)進(jìn)行填充,代碼如下

df_titanic["Age"] = df_titanic["Age"].fill_nan(df_titanic["Age"].mean())

計(jì)算某一列的平均值只需要調(diào)用mean()方法即可,那么中位數(shù)、最大/最小值的計(jì)算也是同樣的道理,代碼如下

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()}')

output

Median Age: 29.69911764705882 Average Age: 29.699117647058817 Maximum Age: 80.0 Minimum Age: 0.42 

數(shù)據(jù)的篩選與可視化

我們篩選出年齡大于40歲的乘客有哪些,代碼如下

df_titanic[df_titanic["Age"] > 40]

output

介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars

最后我們簡(jiǎn)單地來(lái)繪制一張圖表,代碼如下

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()

output

介紹一款進(jìn)階版的Pandas數(shù)據(jù)分析神器:Polars

總體來(lái)說(shuō)呢,polars在數(shù)據(jù)分析與處理上面和Pandas模塊有很多相似的地方,其中會(huì)有一部分的API存在著差異。

數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢(xún)
客服在線
立即咨詢(xún)
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶(hù)后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }