dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]
數(shù)理統(tǒng)計(jì):
數(shù)理統(tǒng)計(jì)是以概率論為基礎(chǔ),研究社會(huì)和自然界中大量隨機(jī)現(xiàn)象數(shù)量變化基本規(guī)律的一種方法。分為:
描述統(tǒng)計(jì)
(描述統(tǒng)計(jì)的任務(wù)是搜集資料,進(jìn)行整理、分組,編制次數(shù)分配表,繪制次數(shù)分配曲線,計(jì)算各種特征指標(biāo),以描述資料分布的集中趨勢(shì)、離中趨勢(shì)和次數(shù)分布的偏斜度等。)
推斷統(tǒng)計(jì)
(推斷統(tǒng)計(jì)是在描述統(tǒng)計(jì)的基礎(chǔ)上,根據(jù)樣本資料歸納出的規(guī)律性,對(duì)總體進(jìn)行推斷和預(yù)測(cè)。)
概念
描述性統(tǒng)計(jì),就是從總體數(shù)據(jù)中提取變量的主要信息(總和、均值等),從而從總體層面上,對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)性描述。
在統(tǒng)計(jì)的過(guò)程中,通常會(huì)配合繪制相關(guān)的統(tǒng)計(jì)圖來(lái)進(jìn)行輔助。
描述性統(tǒng)計(jì)所提取統(tǒng)計(jì)的信息,稱為統(tǒng)計(jì)量。
統(tǒng)計(jì)量
頻數(shù)與頻率
(數(shù)據(jù)的頻數(shù)與頻率統(tǒng)計(jì)適用于類別變量)
頻數(shù)
(數(shù)據(jù)中類別變量每個(gè)不同取值出現(xiàn)的次數(shù))
頻率
(每個(gè)類別變量的頻數(shù)與總次數(shù)的比值,通常采用百分?jǐn)?shù)表示)
e.g. 在n個(gè)變量中,類別變量a出現(xiàn)了m次(頻數(shù)),頻率為m/n
集中趨勢(shì)分析
均值
(即平均值,其為一組數(shù)據(jù)的總和除以數(shù)據(jù)的個(gè)數(shù))
中位數(shù)
(將一組數(shù)據(jù)升序排列,位于該組數(shù)據(jù)最中間位置的值。如果數(shù)據(jù)個(gè)數(shù)為偶數(shù),則取中間兩個(gè)數(shù)值的均值)
眾數(shù)
(一組數(shù)據(jù)中出現(xiàn)次數(shù)最多的值)
分位數(shù)
(通過(guò)n-1個(gè)分位將數(shù)據(jù)劃分為n個(gè)區(qū)間,使得每個(gè)區(qū)間的數(shù)值個(gè)數(shù)相等,或近似相等。其中,n為分位數(shù)的數(shù)量。
常用的分位數(shù)有四分位數(shù)與百分位數(shù))
以四分位數(shù)為例,通過(guò)3個(gè)分位,將數(shù)據(jù)劃分為4個(gè)區(qū)間
第1個(gè)分位稱為1/4分位(下四分位)。數(shù)據(jù)中1/4的數(shù)據(jù)小于該分位值
第2個(gè)分位稱為2/4分位(中四分位)。數(shù)據(jù)中2/4的數(shù)據(jù)小于該分位值
第3個(gè)分位稱為3/4分位(上四分位)。數(shù)據(jù)中3/4的數(shù)據(jù)小于該分位值
1.首先,計(jì)算四分位的位置
(其中,位置index從0開(kāi)始,n為數(shù)組中元素的個(gè)數(shù))2.根據(jù)位置計(jì)算四分位值
⊙如果index為整數(shù)(小數(shù)點(diǎn)后為0),四分位的值就是數(shù)組中索引為index的元素
⊙如果index不為整數(shù),則四分位位置介于ceil(index)[向上取整]與floor(index)[向下取整]之間,根據(jù)這兩個(gè)位置的元素確定四分位值
離散程度分析
極差
(一組數(shù)據(jù)中,最大值與最小值之差)
方差
(一組數(shù)據(jù)中,每個(gè)元素與均值偏離的大小)
:數(shù)組中的每個(gè)元素
:數(shù)組中所有元素的均值
:數(shù)組元素的個(gè)數(shù)
標(biāo)準(zhǔn)差
(方差的開(kāi)方)
分布形狀
偏度
(是統(tǒng)計(jì)數(shù)據(jù)分布偏斜方向和程度的度量,是統(tǒng)計(jì)數(shù)據(jù)分布非對(duì)稱程度的數(shù)字特征)
如果數(shù)據(jù)對(duì)稱分布(例如正態(tài)分布) ? 偏度為0
如果數(shù)據(jù)左偏分布 ? 偏度小于0
如果數(shù)據(jù)右偏分布 ? 則偏度大于0
峰度
(是描述總體中所有取值分布形態(tài)陡緩程度的統(tǒng)計(jì)量,可理解為數(shù)據(jù)分布的高矮程度
峰度的比較是相對(duì)于標(biāo)準(zhǔn)正態(tài)分布的)
對(duì)于標(biāo)準(zhǔn)正態(tài)分布,峰度為0
如果峰度大于0,則密度圖高于標(biāo)準(zhǔn)正態(tài)分布
數(shù)據(jù)在分布上比標(biāo)準(zhǔn)正態(tài)分布密集,方差(標(biāo)準(zhǔn)差)較小
如果峰度小于0,則密度圖低于標(biāo)準(zhǔn)正態(tài)分布
數(shù)據(jù)在分布上比標(biāo)準(zhǔn)正態(tài)分布分散,方差(標(biāo)準(zhǔn)差)較大
變量
類別變量
(變量是一種分類,e.g. 顏色,性別,職位...)
無(wú)序類別變量
(無(wú)大小順序等級(jí)之分,又稱名義變量)
有序類別變量
(可按大小順序等級(jí)區(qū)分,又稱等級(jí)變量)
數(shù)值變量
(變量是一個(gè)具體的值,e.g. 1, 0.1...)
連續(xù)變量
(在一定區(qū)間內(nèi)可以任意取值)
離散變量
(按一定順序一一列舉,通常以整數(shù)位取值的變量)
Q&A:
當(dāng)數(shù)據(jù)中用0和1表示性別(或其他類別變量)時(shí),此時(shí)0和1在實(shí)際意義上不做數(shù)值計(jì)算,應(yīng)映射為類別變量。
均值、中位數(shù)與眾數(shù):
數(shù)值變量通常使用均值與中值表示集中趨勢(shì)
類別變量通常使用眾數(shù)表示集中趨勢(shì)
在正態(tài)分布下,三者是相同的。在偏態(tài)分布下,三者會(huì)有所不同
均值使用所有的數(shù)據(jù)進(jìn)行計(jì)算,因此容易受到極端值的影響
中位數(shù)與眾數(shù)不受極端值的影響,因此會(huì)相對(duì)穩(wěn)定
眾數(shù)在一組數(shù)據(jù)中可能不是唯一的
三者的數(shù)量關(guān)系如下:
極差、方差與標(biāo)準(zhǔn)差:
極差的計(jì)算非常簡(jiǎn)單,但是極差沒(méi)有充分的利用數(shù)據(jù)信息
方差(標(biāo)準(zhǔn)差)可以體現(xiàn)數(shù)據(jù)的分散性。方差(標(biāo)準(zhǔn)差)越大,數(shù)據(jù)越分散,方差(標(biāo)準(zhǔn)差)越小,數(shù)據(jù)越集中
方差(標(biāo)準(zhǔn)差)也可以體現(xiàn)數(shù)據(jù)的波動(dòng)性(穩(wěn)定性)。方差(標(biāo)準(zhǔn)差)越大,數(shù)據(jù)波動(dòng)性越大,方差(標(biāo)準(zhǔn)差)越小,數(shù)據(jù)波動(dòng)性越小
當(dāng)數(shù)據(jù)較大時(shí),也可以使用n代替n-1
代碼實(shí)現(xiàn)
import?numpy?as?npimport?pandas?as?pd
import?matplotlib.pyplot?as?plt
import?seaborn?as?sns
from?sklearn.datasets?import?load_iris
import?warnings
#?設(shè)置seaborn繪圖的樣式
sns.set(style?=?"darkgrid")
plt.rcParams["font.family"]?=?"SimHei"?#?正常顯示中文標(biāo)簽
plt.rcParams["axes.unicode_minus"]?=?False?#?正常顯示負(fù)號(hào)
#?忽略警告信息
warnings.filterwarnings("ignore")
#?加載鳶尾花數(shù)據(jù)集
iris?=?load_iris()?#?dict[花萼的長(zhǎng)度,花萼的寬度,花瓣的長(zhǎng)度,花瓣的寬度]
# iris.data:鳶尾花數(shù)據(jù)集
# iris.target:每朵鳶尾花對(duì)應(yīng)的類別(三種類別,取值為0,1,2)
print(iris.data[0:10],iris.target[:10])?#?取前10條數(shù)據(jù)
# iris.feature_names:特征列的名稱
# iris.target_names:鳶尾花類別的名稱
print(iris.feature_names,iris.target_names)
輸出結(jié)果:
#?將鳶尾花數(shù)據(jù)與對(duì)應(yīng)的類型合并,組合成完整的記錄data?=?np.concatenate([iris.data,?iris.target.reshape(-1,1)],?axis=1)?#?橫向拼接
data?=?pd.DataFrame(data,?columns=["sepal_length","sepal_width","petal_length","petal_width","type"])
data.sample(10)?#?任意取出10條數(shù)據(jù)
輸出結(jié)果:
iris.target.reshape(? -1,1) ?表示將一維數(shù)組轉(zhuǎn)為二維數(shù)組
1頻數(shù)與頻率#?計(jì)算鳶尾花數(shù)據(jù)中,每個(gè)類別出現(xiàn)的頻數(shù)frequency?=?data["type"].value_counts()
print(frequency)
#?計(jì)算每個(gè)類別出現(xiàn)的頻率,通常使用百分比表示
percentage?=?frequency?*?100?/?len(data)
print(percentage)
#?繪制條狀圖
frequency.plot(kind="bar")
輸出結(jié)果:
2均值、中位數(shù)以及眾數(shù)#?計(jì)算花萼長(zhǎng)度的均值mean?=?data["sepal_length"].mean()
#?計(jì)算花萼長(zhǎng)度的中位數(shù)
median?=?data["sepal_length"].median()
#?方法一:計(jì)算花萼長(zhǎng)度的眾數(shù)
s?=?data["sepal_length"].mode()
print(s)
#?注意:mode方法返回的是Series類型
mode?=?s.iloc[0]
print(mean,?median,?mode)
#?方法二:使用scipy中的stats模塊獲取花萼長(zhǎng)度的眾數(shù)
from?scipy?import?stats
stats.mode(data["sepal_length"]).mode
#?繪制數(shù)據(jù)的分布(直方圖+密度圖)
sns.distplot(data["sepal_length"])
#?繪制垂直線
plt.axvline(mean,?ls="-",?color="r",?label="均值")
plt.axvline(median,?ls="-",?color="g",?label="中位數(shù)")
plt.axvline(mode,?ls="-",?color="indigo",?label="眾數(shù)")
plt.legend()
輸出結(jié)果:
3分位數(shù)#?index為整數(shù)的情況x?=?np.arange(10,19)
n?=?len(x)
#?計(jì)算四分位的索引(index)
q1_index?=?(n-1)?*?0.25
q2_index?=?(n-1)?*?0.5
q3_index?=?(n-1)?*?0.75
print(q1_index,?q2_index,?q3_index)
#?將index轉(zhuǎn)換成整數(shù)類型
index?=?np.array([q1_index,?q2_index,?q3_index]).astype(np.int32)
print(x[index])
plt.figure(figsize=(15,4))
plt.xticks(x)
plt.plot(x,?np.zeros(len(x)),?ls="",?marker="D",?ms=15,?label="元素值")
plt.plot(x[index],?np.zeros(len(index)),?ls="",?marker="X",?ms=15,?label="四分位置")
plt.legend()
輸出結(jié)果:
#?index不為整數(shù)的情況x?=?np.arange(10,20)
n?=?len(x)
q1_index?=?(n-1)?*?0.25
q2_index?=?(n-1)?*?0.5
q3_index?=?(n-1)?*?0.75
print(q1_index,?q2_index,?q3_index)
#?使用該值臨近的兩個(gè)整數(shù)來(lái)計(jì)算四分位置
index?=?np.array([q1_index,?q2_index,?q3_index])
#?計(jì)算index左邊的整數(shù)值
left?=?np.floor(index).astype(np.int32)
#?計(jì)算index右邊的整數(shù)值
right?=?np.ceil(index).astype(np.int32)
#?獲取index的小數(shù)部分與整數(shù)部分(整數(shù)部分不使用,變量名用下劃線)?
weight,?_?=?np.modf(index)
#?根據(jù)左右兩邊的整數(shù),加權(quán)計(jì)算四分位數(shù)的值。權(quán)重與距離成反比
q?=?x[left]?*?(1-weight)?+?x[right]?*?weight
print(q)
plt.figure(figsize=(15,4))
plt.xticks(x)
plt.plot(x,?np.zeros(len(x)),?ls="",?marker="D",?ms=15,?label="元素值")
plt.plot(q,?np.zeros(len(q)),?ls="",?marker="X",?ms=15,?label="四分位置")
for?v?in?q:
????plt.text(v,?0.01,?s=v,?fontsize=15)
plt.legend()
輸出結(jié)果:
#?Numpy中計(jì)算分位數(shù) np.quantile(x,?q)/np.percentile(x,?q)x?=?[1,?3,?10,?15,?18,?20,?23,?40]
print(np.quantile(x,?q=[0.25,?0.5,?0.75]))
print(np.percentile(x,?q=[25,?50,?75]))
輸出結(jié)果:
quantile與percentile都可以計(jì)算分位數(shù)
quantile方法中 q(要計(jì)算的分位數(shù))的取值范圍為[0,1]
percentile方法中 q 的取值范圍為[0,100]
x?=?[1,?3,?10,?15,?18,?20,?21,?23,?40]
s?=?pd.Series(x)
print(s.describe())
輸出結(jié)果:
獲取四分之一分位的值的方法:
A. s.describe()[4]
B.?s.describe()["25%"]
C.?s.describe().iloc[4] (推薦使用)
D.?s.describe().loc["25%"](推薦使用)
E.?s.describe().ix[4]
F.?s.describe().ix["25%"]
4極差、方差以及標(biāo)準(zhǔn)差#?計(jì)算極差sub1?=?data["sepal_length"].max()?-?data["sepal_length"].min()
sub2?=?np.ptp(data["sepal_length"])?
#?pandas?新版本中無(wú)法使用ptp(),舊版本的可以使用如下
#?sub2?=?data["sepal_length"].ptp()
#?計(jì)算方差
var?=?data["sepal_length"].var()
#?計(jì)算標(biāo)準(zhǔn)差
std?=?data["sepal_length"].std()
print(sub1,?sub2,?var,?std)
輸出結(jié)果:
5偏度以及峰度#?構(gòu)造左偏分布數(shù)據(jù)t1?=?np.random.randint(1,?11,?size=100)
t2?=?np.random.randint(11,?21,?size=500)
t3?=?np.concatenate([t1,?t2])
left_skew?=?pd.Series(t3)
#?構(gòu)造右偏分布數(shù)據(jù)
t1?=?np.random.randint(1,?11,?size=500)
t2?=?np.random.randint(11,?21,?size=100)
t3?=?np.concatenate([t1,?t2])
right_skew?=?pd.Series(t3)
#?計(jì)算偏度
print(left_skew.skew(),?right_skew.skew())
#?繪制核密度圖
sns.kdeplot(left_skew,?shade=True,?label="左偏")
sns.kdeplot(right_skew,?shade=True,?label="右偏")
plt.legend()
輸出結(jié)果:
#?標(biāo)準(zhǔn)正態(tài)分布standard_normal?=?pd.Series(np.random.normal(0,?1,?size=10000))
print("標(biāo)準(zhǔn)正態(tài)分布峰度:",?standard_normal.kurt(),?"標(biāo)準(zhǔn)差:",?standard_normal.std())
print("花萼寬度峰度:",?data["sepal_width"].kurt(),?"標(biāo)準(zhǔn)差:",?data["sepal_width"].std())
print("花瓣長(zhǎng)度峰度:",?data["petal_length"].kurt(),?"標(biāo)準(zhǔn)差:",?data["petal_length"].std())
sns.kdeplot(standard_normal,?label="標(biāo)準(zhǔn)正態(tài)分布")
sns.kdeplot(data["sepal_width"],?label="花萼寬度峰度")
sns.kdeplot(data["petal_length"],?label="花瓣長(zhǎng)度峰度")
輸出結(jié)果:
學(xué)習(xí)課程:開(kāi)課吧-大數(shù)據(jù)分析全棧課程
總結(jié)
以上是生活随笔為你收集整理的dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 全自动采集小说源码
- 下一篇: VS2010自定义新建文件模版