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

熱線電話:13121318867

登錄
首頁(yè)CDA發(fā)布如何巧妙地用python處理數(shù)據(jù)整理中分類匯總問題
如何巧妙地用python處理數(shù)據(jù)整理中分類匯總問題
2022-01-20
收藏

如何巧妙地用python處理數(shù)據(jù)整理中分類匯總問題

數(shù)據(jù)分析職場(chǎng)新人,精通一門語(yǔ)言至關(guān)重要。寫個(gè)web服務(wù),可以用python、 寫個(gè)服務(wù)器腳本,可以用python數(shù)據(jù)清洗網(wǎng)絡(luò)爬蟲,可以用python、 做機(jī)器學(xué)習(xí)數(shù)據(jù)挖掘,可以用python等等,所以說(shuō)人生苦短,我用Python。


下面的問題是數(shù)據(jù)整理中經(jīng)典的分類匯總問題,各個(gè)軟件,SAS、R語(yǔ)言甚至Excel都可以比較好地解決此問題,但Python解決此問題時(shí),也可以做到“一劍封喉”,并體現(xiàn)出其獨(dú)特的優(yōu)勢(shì),我們先看問題:


題目:下列數(shù)據(jù)來(lái)自某市房地產(chǎn)公司的資料,試按房屋類型和每一房屋類型下臥室個(gè)數(shù)的多少計(jì)算其平均售價(jià)?

問題比較清楚,這是一個(gè)按照“房屋類型”和“臥室個(gè)數(shù)的多少”的雙條件匯總問題,即考慮在A和B兩個(gè)條件下的數(shù)據(jù)分類匯總問題。該問題在工作中是常見的問題,如果在Excel完成,要依靠數(shù)據(jù)的預(yù)處理和較為復(fù)雜的函數(shù)來(lái)進(jìn)行。


我們先來(lái)試算一下,比如,先看第5行,在“RANCH”這個(gè)房屋類型下,“BEDROOMS”個(gè)數(shù)為3的數(shù)據(jù)記錄總共有2條,即第“5”條和第“11”條,其房?jī)r(jià)分別是“$86,650”和“$89,100”,不難算出其平均價(jià)格為“$87,875”。


用Python的Pandas(專門進(jìn)行數(shù)據(jù)處理的模塊)計(jì)算,首先面臨的問題是如何導(dǎo)入數(shù)據(jù),并且把房屋價(jià)格里面的“$”和“,”去掉,這樣才能進(jìn)行計(jì)算。于是一個(gè)雙條件分類匯總的問題變成了字符處理的問題。


當(dāng)然不可能手動(dòng)去讀入數(shù)據(jù),最簡(jiǎn)潔的方式是將數(shù)據(jù)選擇鼠標(biāo)右鍵復(fù)制下來(lái),然后這樣導(dǎo)入:


導(dǎo)入讓把所有的數(shù)據(jù)賦給“a”,“a”的數(shù)據(jù)結(jié)構(gòu)看一下是:
      


告訴我們是“字符串”。面對(duì)字符串,進(jìn)一步顯示“a”,發(fā)現(xiàn)其被“n”分割:


于是想辦法去掉“n”。去掉“n”不是很難,一句“a.split("n")”就可以去掉。但是進(jìn)一步我們發(fā)現(xiàn),各個(gè)變量是以空格“ ”相連的,所以還要去掉這個(gè)空格以便進(jìn)一步計(jì)算。這里利用Python常用的“逐行掃描”技巧來(lái)完成。通常前面要先定義一個(gè)空的list,比如b:


這一步完成之后,一定要看一下b的結(jié)果,如下圖所示:


下一步就是要去掉價(jià)格price里面的“$”和“,”了,這一步完成的方法比較多,最樸素的想法是用什么都沒有的“”去置換這2個(gè)元素:


這里又用到Python的“for”循環(huán)的“逐行掃描”的技巧。這一步將“b”變成:


到了這一步,離結(jié)果只有“一步之遙”了。為了保險(xiǎn)起見,我們把所有的變量都“數(shù)值化”,使用下面的語(yǔ)句去遍歷:


得到如下的結(jié)果:


仔細(xì)比較一下前圖,發(fā)現(xiàn)字符串都變成了數(shù)字。

到了這時(shí)候,就是“臨門一腳”了,我們把數(shù)據(jù)整理成為我們熟悉的“數(shù)據(jù)框”的形式,這一步讓Pandas來(lái)上場(chǎng),經(jīng)過(guò)整理之后,數(shù)據(jù)變得“賞心悅目”:


請(qǐng)注意,這條語(yǔ)句中,指明第一行是變量名。

通常,面臨這樣的數(shù)據(jù),要進(jìn)行各種計(jì)算是非常方便的。比如,要完成一開始題目提出的問題,只需一句話即得結(jié)果:

     


這句“畫龍點(diǎn)睛”之筆是用groupby這個(gè)函數(shù)把數(shù)據(jù)按照2個(gè)條件分組,然后計(jì)算其均值?!?”加函數(shù)的方式是Python里面常用的形式。

我們看一下Python計(jì)算結(jié)果里面的“RANCH”和“3”,是“87875”,與我們之前計(jì)算的完全吻合。這樣我們就按要求用Python完成了該數(shù)據(jù)的整理匯總。

數(shù)據(jù)的整理匯總是進(jìn)行數(shù)據(jù)分析和數(shù)據(jù)挖掘工作的前期準(zhǔn)備,比較重要,往往占用很大一部分時(shí)間。數(shù)據(jù)清洗的能力有時(shí)候直接決定數(shù)據(jù)挖掘建模預(yù)測(cè)的成敗。通過(guò)該簡(jiǎn)單的小例子,向大家展示了Python中的Pandas在這方面的優(yōu)勢(shì)和方法。當(dāng)然,Python及Pandas神通廣大,遠(yuǎn)遠(yuǎn)不止做這些簡(jiǎn)單的工作,希望大家掌握這個(gè)數(shù)據(jù)分析利器,在大數(shù)據(jù)時(shí)代更好更充分的發(fā)掘數(shù)據(jù)的價(jià)值。

PS:這只是課程中的一個(gè)小案例,強(qiáng)化的培訓(xùn),應(yīng)該讓你學(xué)完后很自信,學(xué)以致用,快速上手解決工作中的問題,深圳現(xiàn)場(chǎng)班&長(zhǎng)沙遠(yuǎn)程直播班2018年1月12日開課,想學(xué)習(xí)python朋友私聊張老師。


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

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

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

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } 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, // 表示用戶后臺(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)參見: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); }