日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數理統計:

數理統計是以概率論為基礎,研究社會和自然界中大量隨機現象數量變化基本規律的一種方法。分為:

  • 描述統計

    (描述統計的任務是搜集資料,進行整理、分組,編制次數分配表,繪制次數分配曲線,計算各種特征指標,以描述資料分布的集中趨勢、離中趨勢和次數分布的偏斜度等。)

  • 推斷統計

    (推斷統計是在描述統計的基礎上,根據樣本資料歸納出的規律性,對總體進行推斷和預測。)

概念

描述性統計,就是從總體數據中提取變量的主要信息(總和、均值等),從而從總體層面上,對數據進行統計性描述。

在統計的過程中,通常會配合繪制相關的統計圖來進行輔助。

描述性統計所提取統計的信息,稱為統計量

統計量

  • 頻數與頻率

    (數據的頻數與頻率統計適用于類別變量)

    • 頻數

      (數據中類別變量每個不同取值出現的次數)

    • 頻率

      (每個類別變量的頻數與總次數的比值,通常采用百分數表示)

e.g. 在n個變量中,類別變量a出現了m次(頻數),頻率為m/n

集中趨勢分析

  • 均值

    (即平均值,其為一組數據的總和除以數據的個數)

  • 中位數

    (將一組數據升序排列,位于該組數據最中間位置的值。如果數據個數為偶數,則取中間兩個數值的均值)

  • 眾數

    (一組數據中出現次數最多的值)

  • 分位數

    (通過n-1個分位將數據劃分為n個區間,使得每個區間的數值個數相等,或近似相等。其中,n為分位數的數量。

    常用的分位數有四分位數與百分位數)

    以四分位數為例,通過3個分位,將數據劃分為4個區間

    • 第1個分位稱為1/4分位(下四分位)。數據中1/4的數據小于該分位值

    • 第2個分位稱為2/4分位(中四分位)。數據中2/4的數據小于該分位值

    • 第3個分位稱為3/4分位(上四分位)。數據中3/4的數據小于該分位值

四分位值的計算

1.首先,計算四分位的位置

(其中,位置index從0開始,n為數組中元素的個數)2.根據位置計算四分位值
⊙如果index為整數(小數點后為0),四分位的值就是數組中索引為index的元素
⊙如果index不為整數,則四分位位置介于ceil(index)[向上取整]與floor(index)[向下取整]之間,根據這兩個位置的元素確定四分位值

離散程度分析

  • 極差

    (一組數據中,最大值與最小值之差)

  • 方差

    (一組數據中,每個元素與均值偏離的大小)

    :數組中的每個元素

    :數組中所有元素的均值

    :數組元素的個數

  • 標準差

    (方差的開方)

分布形狀

  • 偏度

    (是統計數據分布偏斜方向和程度的度量,是統計數據分布非對稱程度的數字特征)

    • 如果數據對稱分布(例如正態分布) ? 偏度為0

    • 如果數據左偏分布 ? 偏度小于0

    • 如果數據右偏分布 ? 則偏度大于0

  • 峰度

    (是描述總體中所有取值分布形態陡緩程度的統計量,可理解為數據分布的高矮程度

    峰度的比較是相對于標準正態分布的)

    • 對于標準正態分布,峰度為0

    • 如果峰度大于0,則密度圖高于標準正態分布

      • 數據在分布上比標準正態分布密集,方差(標準差)較小

    • 如果峰度小于0,則密度圖低于標準正態分布

      • 數據在分布上比標準正態分布分散,方差(標準差)較大

變量

  • 類別變量

    (變量是一種分類,e.g. 顏色,性別,職位...)

    • 無序類別變量

      (無大小順序等級之分,又稱名義變量)

    • 有序類別變量

      (可按大小順序等級區分,又稱等級變量)

  • 數值變量

    (變量是一個具體的值,e.g. 1, 0.1...)

    • 連續變量

      (在一定區間內可以任意取值)

    • 離散變量

      (按一定順序一一列舉,通常以整數位取值的變量)

Q&A:

當數據中用0和1表示性別(或其他類別變量)時,此時0和1在實際意義上不做數值計算,應映射為類別變量。

均值、中位數與眾數:

  • 數值變量通常使用均值與中值表示集中趨勢

  • 類別變量通常使用眾數表示集中趨勢

  • 在正態分布下,三者是相同的。在偏態分布下,三者會有所不同

  • 均值使用所有的數據進行計算,因此容易受到極端值的影響

  • 中位數與眾數不受極端值的影響,因此會相對穩定

  • 眾數在一組數據中可能不是唯一的

三者的數量關系如下:

極差、方差與標準差:

  • 極差的計算非常簡單,但是極差沒有充分的利用數據信息

  • 方差(標準差)可以體現數據的分散性。方差(標準差)越大,數據越分散,方差(標準差)越小,數據越集中

  • 方差(標準差)也可以體現數據的波動性(穩定性)。方差(標準差)越大,數據波動性越大,方差(標準差)越小,數據波動性越小

  • 當數據較大時,也可以使用n代替n-1

代碼實現

import?numpy?as?np
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
import?seaborn?as?sns
from?sklearn.datasets?import?load_iris
import?warnings

#?設置seaborn繪圖的樣式
sns.set(style?=?"darkgrid")
plt.rcParams["font.family"]?=?"SimHei"?#?正常顯示中文標簽
plt.rcParams["axes.unicode_minus"]?=?False?#?正常顯示負號

#?忽略警告信息
warnings.filterwarnings("ignore")

#?加載鳶尾花數據集
iris?=?load_iris()?#?dict[花萼的長度,花萼的寬度,花瓣的長度,花瓣的寬度]

# iris.data:鳶尾花數據集
# iris.target:每朵鳶尾花對應的類別(三種類別,取值為0,1,2)
print(iris.data[0:10],iris.target[:10])?#?取前10條數據

# iris.feature_names:特征列的名稱
# iris.target_names:鳶尾花類別的名稱
print(iris.feature_names,iris.target_names)

輸出結果:

#?將鳶尾花數據與對應的類型合并,組合成完整的記錄
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條數據

輸出結果:

iris.target.reshape(? -1,1) ?表示將一維數組轉為二維數組

1頻數與頻率#?計算鳶尾花數據中,每個類別出現的頻數
frequency?=?data["type"].value_counts()
print(frequency)
#?計算每個類別出現的頻率,通常使用百分比表示
percentage?=?frequency?*?100?/?len(data)
print(percentage)
#?繪制條狀圖
frequency.plot(kind="bar")

輸出結果:

2均值、中位數以及眾數#?計算花萼長度的均值
mean?=?data["sepal_length"].mean()

#?計算花萼長度的中位數
median?=?data["sepal_length"].median()

#?方法一:計算花萼長度的眾數
s?=?data["sepal_length"].mode()
print(s)
#?注意:mode方法返回的是Series類型
mode?=?s.iloc[0]
print(mean,?median,?mode)

#?方法二:使用scipy中的stats模塊獲取花萼長度的眾數
from?scipy?import?stats

stats.mode(data["sepal_length"]).mode

#?繪制數據的分布(直方圖+密度圖)
sns.distplot(data["sepal_length"])

#?繪制垂直線
plt.axvline(mean,?ls="-",?color="r",?label="均值")
plt.axvline(median,?ls="-",?color="g",?label="中位數")
plt.axvline(mode,?ls="-",?color="indigo",?label="眾數")
plt.legend()

輸出結果:

3分位數#?index為整數的情況
x?=?np.arange(10,19)
n?=?len(x)

#?計算四分位的索引(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轉換成整數類型
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()

輸出結果:

#?index不為整數的情況
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)

#?使用該值臨近的兩個整數來計算四分位置
index?=?np.array([q1_index,?q2_index,?q3_index])

#?計算index左邊的整數值
left?=?np.floor(index).astype(np.int32)

#?計算index右邊的整數值
right?=?np.ceil(index).astype(np.int32)

#?獲取index的小數部分與整數部分(整數部分不使用,變量名用下劃線)?
weight,?_?=?np.modf(index)

#?根據左右兩邊的整數,加權計算四分位數的值。權重與距離成反比
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()

輸出結果:

#?Numpy中計算分位數 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]))

輸出結果:

quantile與percentile都可以計算分位數
quantile方法中 q(要計算的分位數)的取值范圍為[0,1]
percentile方法中 q 的取值范圍為[0,100]

#?Pandas中計算分位數 s.describe(percentiles)
x?=?[1,?3,?10,?15,?18,?20,?21,?23,?40]
s?=?pd.Series(x)
print(s.describe())

輸出結果:

獲取四分之一分位的值的方法:

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極差、方差以及標準差#?計算極差
sub1?=?data["sepal_length"].max()?-?data["sepal_length"].min()
sub2?=?np.ptp(data["sepal_length"])?
#?pandas?新版本中無法使用ptp(),舊版本的可以使用如下
#?sub2?=?data["sepal_length"].ptp()

#?計算方差
var?=?data["sepal_length"].var()

#?計算標準差
std?=?data["sepal_length"].std()
print(sub1,?sub2,?var,?std)

輸出結果:

5偏度以及峰度#?構造左偏分布數據
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)

#?構造右偏分布數據
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)

#?計算偏度
print(left_skew.skew(),?right_skew.skew())

#?繪制核密度圖
sns.kdeplot(left_skew,?shade=True,?label="左偏")
sns.kdeplot(right_skew,?shade=True,?label="右偏")
plt.legend()

輸出結果:

#?標準正態分布
standard_normal?=?pd.Series(np.random.normal(0,?1,?size=10000))
print("標準正態分布峰度:",?standard_normal.kurt(),?"標準差:",?standard_normal.std())
print("花萼寬度峰度:",?data["sepal_width"].kurt(),?"標準差:",?data["sepal_width"].std())
print("花瓣長度峰度:",?data["petal_length"].kurt(),?"標準差:",?data["petal_length"].std())
sns.kdeplot(standard_normal,?label="標準正態分布")
sns.kdeplot(data["sepal_width"],?label="花萼寬度峰度")
sns.kdeplot(data["petal_length"],?label="花瓣長度峰度")

輸出結果:

學習課程:開課吧-大數據分析全棧課程

總結

以上是生活随笔為你收集整理的dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。