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

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀你了解matplotlib嗎?直方圖基礎(chǔ)篇!
你了解matplotlib嗎?直方圖基礎(chǔ)篇!
2020-06-03
收藏

首先按照慣例先來(lái)認(rèn)識(shí)下直方圖是誰(shuí),以下是從維基百科搬運(yùn)過(guò)來(lái)的直方圖的定義:

在統(tǒng)計(jì)學(xué)中,直方圖(英語(yǔ):Histogram)是一種對(duì)數(shù)據(jù)分布情況的圖形表示,是一種二維統(tǒng)計(jì)圖表,它的兩個(gè)坐標(biāo)分別是統(tǒng)計(jì)樣本和該樣本對(duì)應(yīng)的某個(gè)屬性的度量,以長(zhǎng)條圖(bar)的形式具體表現(xiàn)。因?yàn)?a href='/map/zhifangtu/' style='color:#000;font-size:inherit;'>直方圖的長(zhǎng)度及寬度很適合用來(lái)表現(xiàn)數(shù)量上的變化,所以較容易解讀差異小的數(shù)值。

直方圖也是用條形進(jìn)行標(biāo)注的,而條形圖直方圖猶如孿生兄弟般讓很多人都傻傻分不清,那么我們就先來(lái)好好區(qū)分一下這兩種圖形吧:

  • 條形圖是用條形的長(zhǎng)度表示各類別頻數(shù)的多少,而寬度(表示類別)是固定的,沒(méi)有實(shí)際的數(shù)值意義。
  • 直方圖是用面積表示各組頻數(shù)的多少,條形的長(zhǎng)度表示每一組的頻數(shù)或頻率,條形的寬度表示各組的組距,所以直方圖中條形的長(zhǎng)度和寬度都是有實(shí)際的數(shù)值意義的。
  • 條形圖描述分類變量,直方圖描述數(shù)值變量。
  • 由于分組數(shù)據(jù)具有連續(xù)性,直方圖的各矩形通常是連續(xù)排列,而條形圖則是分開(kāi)排列的。

單純文字不夠直觀的話,我們來(lái)個(gè)圖感受下:

繪制直方圖

區(qū)分好了條形圖直方圖,就可以安心的探索直方圖了。

假設(shè)我們有一組數(shù)據(jù),是一個(gè)學(xué)校200位同學(xué)的身高數(shù)據(jù),如果想要知道該校學(xué)生身高的分布,那么直方圖再合適不過(guò)了。

這里我用隨機(jī)數(shù)生成了200個(gè)值在150到180之間的數(shù)表示身高信息:

data = np.random.randint(150,180,200)
data

輸出的結(jié)果:

array([162, 166, 158, 166, 165, 170, 157, 156, 164, 161, 154, 176, 166,
       176, 153, 169, 164, 153, 171, 175, 171, 173, 155, 165, 168, 160,
       162, 150, 151, 169, 166, 152, 174, 176, 160, 155, 158, 152, 159,
       179, 179, 168, 178, 166, 174, 171, 167, 166, 165, 163, 164, 153,
       153, 153, 162, 167, 169, 155, 155, 175, 161, 151, 173, 154, 151,
       151, 166, 168, 167, 173, 166, 164, 175, 172, 163, 175, 154, 169,
       160, 174, 163, 167, 156, 154, 157, 169, 160, 176, 150, 154, 158,
       167, 164, 153, 152, 165, 165, 160, 167, 161, 164, 177, 177, 159,
       161, 171, 169, 150, 165, 156, 156, 155, 165, 164, 179, 164, 179,
       155, 172, 151, 178, 171, 164, 165, 161, 166, 170, 175, 163, 163,
       179, 175, 173, 150, 171, 150, 178, 175, 152, 176, 168, 150, 172,
       166, 176, 170, 174, 174, 152, 158, 171, 165, 167, 152, 163, 167,
       164, 151, 174, 169, 169, 166, 167, 168, 179, 160, 179, 156, 168,
       168, 172, 175, 160, 165, 160, 161, 164, 179, 158, 176, 175, 154,
       167, 159, 153, 169, 151, 158, 163, 169, 155, 165, 178, 151, 168,
       164, 169, 177, 150, 169])

以上就是200位同學(xué)的身高信息了,存儲(chǔ)在一個(gè)數(shù)組中。

如果是常見(jiàn)的查看分布,直方圖很容易繪制,這里我們通過(guò)這組數(shù)據(jù)探索下直方圖函數(shù)中各個(gè)參數(shù)的作用,以更游刃有余的繪制符合需求的直方圖。

bins參數(shù)

bins參數(shù)指的是要將數(shù)據(jù)分成幾組,它接收的參數(shù)可以是整數(shù),也可以是序列,還可以是字符串,常用的是整數(shù)和序列。

  • 如果是整數(shù)n,則表示要將所有數(shù)據(jù)平均分成n組進(jìn)行繪圖
  • 如果是序列,則是指定每一組的臨界值

通過(guò)代碼來(lái)看一下區(qū)別:

fig = plt.figure(figsize=(16,4))

pic1 = fig.add_subplot(131)
plt.hist(data)
plt.title("bins默認(rèn)10")

pic2 = fig.add_subplot(132)
plt.hist(data,bins = 15) 
plt.title("bins = 15")

pic3 = fig.add_subplot(133)
plt.hist(data,bins = [150,153,156,159,162,165,168,171,174,179])
plt.title("bins取值為序列");

能夠看出即使是同一個(gè)數(shù)據(jù)集,分組的情況不同,呈現(xiàn)出來(lái)的分布也是有區(qū)別的,所以如何分組分成幾組也是有學(xué)問(wèn)的。

如果傳給參數(shù)的是序列,則表示將每個(gè)分組的臨界值都標(biāo)識(shí)出來(lái),缺點(diǎn)是比較麻煩,優(yōu)點(diǎn)是很靈活,可以自主決定每個(gè)組的組距,每個(gè)組的組距都可以是不同的,如果分5組記得需要的臨界值是6個(gè),參數(shù)序列中需要有6個(gè)數(shù)值。

range參數(shù)

一般繪制直方圖,都是對(duì)整個(gè)數(shù)據(jù)集繪制,有時(shí)候可能會(huì)有這樣的需求,比如我想看該校中身高在155cm到175cm之間的身高分布,那么就需要將整個(gè)數(shù)據(jù)集中符合要求的身高挑選出來(lái)繪制直方圖,實(shí)際上不用這么麻煩,用range參數(shù)就可以解決,這個(gè)參數(shù)就是指定繪圖時(shí)使用數(shù)據(jù)的范圍的,它接收的是一個(gè)元組,元組中放入兩個(gè)數(shù)值表示所取數(shù)據(jù)的范圍。

fig = plt.figure(figsize=(9,4))

pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10) 
plt.title('range默認(rèn)None')

pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10,range=(155,175)) #設(shè)置范圍從155-175
plt.title('range=(155,175)');

能夠看到x軸的數(shù)值范圍發(fā)生了變化,整個(gè)直方圖的形狀也發(fā)生了變化。

density參數(shù)

這個(gè)參數(shù)的意思其實(shí)很直觀,參數(shù)名字直譯成中文就是密度的意思。普通的直方圖y軸表示的都是頻數(shù),而通過(guò)density參數(shù)可以將y軸轉(zhuǎn)化成密度刻度,這個(gè)參數(shù)接收布爾值,默認(rèn)為None。

fig = plt.figure(figsize=(9,4))

pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10) #y軸表示計(jì)數(shù)
plt.title('density默認(rèn)None')

pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10, density=True) 
# density=True 將原本y軸的計(jì)數(shù)轉(zhuǎn)換成概率密度的計(jì)數(shù),直方圖下面積為1
plt.title('density=True');

雖然兩個(gè)圖的形狀是完全一模一樣的,但是細(xì)看就能發(fā)現(xiàn)y軸的數(shù)值不一樣,具體的參數(shù)作用已經(jīng)以備注的形式標(biāo)注到代碼中了哦。

這里涉及到了另一個(gè)參數(shù)normed,這個(gè)參數(shù)已經(jīng)被棄用了,它的作用和density一樣,只用density就可以了,

weights參數(shù)

大家對(duì)這個(gè)參數(shù)應(yīng)該不陌生,它經(jīng)常出現(xiàn),表示權(quán)重。沒(méi)錯(cuò)在這里也是表示設(shè)置權(quán)重。它接收的是一個(gè)序列,序列中是數(shù)值,數(shù)值的數(shù)量和原數(shù)據(jù)集中元素的個(gè)數(shù)一致,也就是每個(gè)數(shù)值都有自己?jiǎn)为?dú)的權(quán)重,我用隨機(jī)數(shù)生成了200個(gè)數(shù)值作為權(quán)重傳給參數(shù),看一下和不設(shè)置權(quán)重時(shí)有哪些變化。

x0=np.random.rand(200)#生成總和為1的200個(gè)數(shù),設(shè)置隨機(jī)權(quán)重
ratio=1/sum(x0)
x1=x0*ratio

fig = plt.figure(figsize=(9,4))

pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10) 
plt.title('weights默認(rèn)None')

pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10,weights=x1) 
plt.title('設(shè)置weights');

當(dāng)所有元素的權(quán)重都一樣時(shí)是第一幅圖的情況,而進(jìn)行權(quán)重設(shè)置后,分布情況發(fā)生了變化,而且y軸也發(fā)生了變化,不再是單純的計(jì)數(shù)。在實(shí)際工作中要謹(jǐn)慎使用權(quán)重,以符合業(yè)務(wù)需求為主哈。

cumulative參數(shù)

如果英文比較好的人們,一眼就能看出這個(gè)參數(shù)的作用,直譯成中文就是累積的意思。到這里又出現(xiàn)了一個(gè)小問(wèn)題,很多人對(duì)“累積”和“累計(jì)”又傻傻分不清了,其實(shí)這兩者還是很容易區(qū)分的,看下圖特別直觀:

是不是能直觀區(qū)分“累積”和“累計(jì)”了?

那就繼續(xù)探索cumulative參數(shù)吧,這個(gè)參數(shù)接收布爾值,默認(rèn)為False,通過(guò)代碼來(lái)看一下參數(shù)設(shè)置不同都有怎樣的結(jié)果。

fig = plt.figure(figsize=(9,4))

pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10) 
plt.title('cumulative默認(rèn)False')

pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10,cumulative=True) #累積直方圖,展示累積分布
plt.title('cumulative=True');

左邊時(shí)普通的直方圖,右邊時(shí)累積直方圖,同樣可以根據(jù)實(shí)際的業(yè)務(wù)需求來(lái)進(jìn)行參數(shù)設(shè)置哦。

由于篇幅有限,對(duì)直方圖函數(shù)的介紹就先到這里啦。細(xì)心的小伙伴可能發(fā)現(xiàn)了介紹參數(shù)的順序就是按照函數(shù)官方文檔中參數(shù)的順序來(lái)的,沒(méi)錯(cuò),就是按照這個(gè)順序進(jìn)行的。但是參數(shù)中的第一個(gè)參數(shù)x卻沒(méi)有進(jìn)行介紹,是這個(gè)參數(shù)沒(méi)什么可介紹的嘛?當(dāng)然不是,這個(gè)參數(shù)也是有些小細(xì)節(jié)需要注意的,具體的講解留到下一篇文章和其他參數(shù)一起介紹啦。

數(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)參見(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); }