离散度计算公式 python_被多种离散化场景困扰?8种python技巧!让数据处理更简单...
前言
python數(shù)據(jù)處理與分析學(xué)習(xí)過程中,需要有這樣的一種意識,即元“為什么選擇了python而不是其他?”既然選擇了python,那么在實際應(yīng)用中,它到底哪里不一樣?大家說的方便、快捷、高復(fù)用性具體體現(xiàn)在哪里?帶著問題進行學(xué)習(xí),會有事半功倍的效果,記憶力和識別能力也會有所提高。
在本文,小編跟大家分享的是數(shù)據(jù)處理與分析中的“離散化或面元”。8種python技巧,讓連續(xù)數(shù)據(jù)離散化更簡潔。
8種python技巧
為了便于分析,連續(xù)數(shù)據(jù)常常被離散化或拆分為“面元“(bin),假設(shè)有一組人員數(shù)據(jù),而你希望將它們劃分為不同的年齡組:
In [154]: ages=[20,22,25,27,21,23,37,31,61,45,41,32]
離散化或面元:cut()
接下來將這些數(shù)據(jù)劃分為“18到25“、”26到35“、”35到60“以及”60以上“幾個面元。要實現(xiàn)此功能,需要使用pandas的cut函數(shù):
n [24]: ages=[20,22,25,27,21,23,37,31,61,45,41,32]
In [25]: bins=[18,25,35,60,100]
In [26]: cats=pd.cut(ages,bins)
In [27]: cats
Out[27]:
[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35],
(60, 100], (35, 60], (35, 60], (25, 35]]
Length: 12
Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]
codes屬性:標(biāo)號
In [29]: cats.codes
Out[29]: array([0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 2, 1], dtype=int8)
value_counts方法
該方法會按照離散化或面元結(jié)果,進行符合區(qū)間的值統(tǒng)計,具體使用方法如下:
In [30]: pd.value_counts(cats)
Out[30]:
(18, 25] 5
(35, 60] 3
(25, 35] 3
(60, 100] 1
dtype: int64
控制開/關(guān):right=False
跟“區(qū)間“的數(shù)學(xué)符號一樣,圓括號表示開端,而方括號則表示閉端(包括)。哪邊是閉端可以通過right=False進行修改:
In [31]: pd.cut(ages,[18,26,36,61,100],right=False)
Out[31]:
[[18, 26), [18, 26), [18, 26), [26, 36), [18, 26), ..., [26, 36),
[61, 100), [36, 61), [36, 61), [26, 36)]
Length: 12
Categories (4, interval[int64]): [[18, 26) < [26, 36) < [36, 61) < [61, 100)]
設(shè)置面元名稱:labels
設(shè)置自己的面元名稱,將labels選項設(shè)置為一個列表或數(shù)組即可:
In [33]: group_names=['Youth','YoungAdult','MiddleAged','Senior']
In [34]: pd.cut(ages,bins,labels=group_names)
Out[34]:
[Youth, Youth, Youth, YoungAdult, Youth, ..., YoungAdult,
Senior, MiddleAged, MiddleAged, YoungAdult]
Length: 12
Categories (4, object): [Youth < YoungAdult < MiddleAged < Senior]
計算等長面元
如果向cut傳入的是面元的數(shù)量而不是確切的面元邊界,則它會根據(jù)數(shù)據(jù)的最小值和最大值計算等長面元。下面這個例子中,將一些均勻分布的數(shù)組分成四組:
In [35]: data=np.random.rand(20)
In [36]: pd.cut(data,4,precision=2)
Out[36]:
[(0.039, 0.27], (0.27, 0.5], (0.73, 0.95], (0.5, 0.73],
(0.039, 0.27], ..., (0.5, 0.73], (0.27, 0.5], (0.73, 0.95],
(0.039, 0.27], (0.73, 0.95]]
Length: 20
Categories (4, interval[float64]): [(0.039, 0.27] < (0.27, 0.5]
< (0.5, 0.73] < (0.73, 0.95]]
qcut()
qcut是一個非常類似于cut的函數(shù),它可以根據(jù)樣本分位數(shù)對數(shù)據(jù)進行面元劃分。根據(jù)數(shù)據(jù)的分布情況,cut可能無法使各個面元中含有相同數(shù)量的數(shù)據(jù)點。而qcut由于使用的是樣本分位數(shù),因此可以得到大小基本相等的面元:
In [37]: data=np.random.randn(1000)
In [38]: cats=pd.qcut(data,4)
In [39]: cats
Out[39]:
[(-0.66, -0.0518], (0.68, 3.328], (-0.66, -0.0518], (0.68, 3.328],
(-3.452, -0.66], ..., (-3.452, -0.66], (0.68, 3.328], (-3.452, -0.66],
(-0.66, -0.0518], (-3.452, -0.66]]
Length: 1000
Categories (4, interval[float64]): [(-3.452, -0.66] < (-0.66, -0.0518]
< (-0.0518, 0.68] < (0.68, 3.328]]
In [40]: pd.value_counts(cats)
Out[40]:
(0.68, 3.328] 250
(-0.0518, 0.68] 250
(-0.66, -0.0518] 250
(-3.452, -0.66] 250
設(shè)置自定義分位數(shù)
跟cut一樣,也可以設(shè)置自定義的分位數(shù)(0到1之間的數(shù)值,包含端點):
總結(jié)
離散化或面元是數(shù)據(jù)處理與分析中的常用方法。python提供了便捷、豐富的方法。該類方法通常是解決數(shù)據(jù)分析、機器學(xué)習(xí)或深度學(xué)習(xí)中,需要將連續(xù)性變量離散化的場景。8種不同的技巧均有其適用場景,無好與壞之分。大家可以實踐操作進行體驗,感謝大家關(guān)注!
總結(jié)
以上是生活随笔為你收集整理的离散度计算公式 python_被多种离散化场景困扰?8种python技巧!让数据处理更简单...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 常用内置函数_Python
- 下一篇: python实验过程心得体会_20192