python花萼长度表_python描述性统计实践
1、加載相關(guān)庫和數(shù)據(jù)集
使用的庫主要有:pandas、numpy、sklearn、matplotlib、seaborn
使用的數(shù)據(jù)集:sklearn庫中的鳶尾花數(shù)據(jù)集
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
plt.rcParams["font.family"] = "SimHei" # 設置可以顯示中文字體
plt.rcParams["axes.unicode_minus"] = False
warnings.filterwarnings("ignore") # 忽略警告信息
2、數(shù)據(jù)集數(shù)據(jù)概覽
2.1 數(shù)據(jù)總體概覽
iris = load_iris() # 加載鳶尾花數(shù)據(jù)集
print(type(iris))
print(iris)
In [1]: list(iris.keys())
Out[1]: ['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename']
2.2 使用主要信息構(gòu)造DataFrame
使用 np.concatenate 拼接不同的數(shù)據(jù)信息
# 拼接data信息和target信息,用于構(gòu)造DataFrame
data = np.concatenate([iris.data,iris.target.reshape(-1,1)],axis=1)
feature_names = iris.feature_names # 特征名列,包含花萼和花瓣的長度和寬度
feature_names.append("target") # 將"target"添加至特征名列表,作為拼接數(shù)據(jù)的列名
df = pd.DataFrame(data,columns=feature_names)
2.3 構(gòu)造后的數(shù)據(jù)概覽
df.info() # 展示df的概覽信息
df.describe() # 展示df 數(shù)值類型字段的統(tǒng)計信息
df.sample(10) # 隨機抽樣10條數(shù)據(jù)
3、使用相關(guān)函數(shù)進行描述性統(tǒng)計
3.1 頻率和頻數(shù)分析
數(shù)據(jù)的頻數(shù)與頻率統(tǒng)計適用于類別變量
頻數(shù):數(shù)據(jù)中類別變量每個不同取值出現(xiàn)的次數(shù)
頻率:每個類別變量的頻數(shù)與總次數(shù)的比值,通常采用百分數(shù)進行表示。
frequency = df["target"].value_counts() # value_counts() 計算頻數(shù)
percentage = frequency / len(df["target"]) # 計算頻率
print(frequency)
print(percentage)
3.2 數(shù)據(jù)的集中趨勢分析
均值:即平均值,為一組數(shù)據(jù)的總和除以數(shù)據(jù)的個數(shù)。
中位數(shù):將一組數(shù)據(jù)升序排列,位于該組數(shù)據(jù)最中間位置的值(如果數(shù)據(jù)個數(shù)為偶數(shù),則取中間兩個數(shù)值的均值)。
眾數(shù):一組數(shù)據(jù)中出現(xiàn)次數(shù)最多的值。
分位數(shù):通過n-1個分位將數(shù)據(jù)劃分為n個區(qū)間,使得每個區(qū)間的數(shù)值個數(shù)相等(或近似相等),那么n為分位數(shù)的數(shù)量。
以鳶尾花的花萼長度為例,下同:
sepal_length = df["sepal length (cm)"]sepal_length.mean() # mean() 計算均值
sepal_length.median() # median() 計算中位數(shù)
sepal_length.mode().iloc[0] # mode() 計算眾數(shù)
df.describe() # 統(tǒng)計信息中包含分位數(shù)
# numpy內(nèi)置函數(shù)quantile計算分位值,q取值范圍[0,1]np.quantile(sepal_length, q=[0.25, 0.5, 0.75])
# numpy內(nèi)置函數(shù)percentile計算分位值,q取值范圍[0,100]np.percentile(sepal_length, q=[25, 50, 75])
3.3 手動計算分位數(shù)
常用的分位數(shù)有四分位數(shù)與百分位數(shù)
分位值未必一定等同于數(shù)組中的某個元素
分位值是數(shù)組中的某個元素:
list1 = np.arange(9)
n = len(list1)
# 計算四分位的位置(索引)
q1_index = (n-1) * 0.25
q2_index = (n-1) * 0.5
q3_index = (n-1) * 0.75
q_index = np.array([q1_index, q2_index, q3_index])
q_index = q_index.astype(np.int32) # 將索引轉(zhuǎn)成int類型
q = list1[q_index] # 根據(jù)索引獲取分位值
分位值不是數(shù)組中的某個元素:
sepal_length = sorted(sepal_length) # 記得計算分位值之前要先給數(shù)據(jù)排序
sepal_length = np.array(sepal_length) # 轉(zhuǎn)成數(shù)組
n = len(sepal_length)
q1_index = (n-1) * 0.25
q2_index = (n-1) * 0.5
q3_index = (n-1) * 0.75
q_index = np.array([q1_index, q2_index, q3_index])
left_index = np.floor(q_index).astype(np.int32) # np.floor() 向下取整
right_index = np.ceil(q_index).astype(np.int32) # np.ceil() 向上取整
weight,_ = np.modf(q_index) # np.modf() 獲取小數(shù)部分作為權(quán)重
# 按照權(quán)重計算分位值,每個整數(shù)的權(quán)重為距離的反比。
q = sepal_length[left_index] * (1-weight) + sepal_length[right_index] * weight
3.4 數(shù)據(jù)的離散程度分析
極差:一組數(shù)據(jù)中,最大值與最小值之差
方差:每個樣本值與全體樣本值的平均數(shù)之差的平方值的平均數(shù),體現(xiàn)一組數(shù)據(jù)中,每個元素與均值偏離的大小。
標準差:標準差是方差的開方
sepal_length.max() - sepal_length.min() # max() - min() 計算極差
sepal_length.var() # var() 計算方差
sepal_length.std() # std() 計算標準差
3.5 數(shù)據(jù)的分布形狀分析
偏度:統(tǒng)計數(shù)據(jù)分布偏斜方向和程度的度量,是統(tǒng)計數(shù)據(jù)分布非對稱程度的數(shù)字特征。(如果數(shù)據(jù)對稱分布,如正態(tài)分布,則偏度為0;如果數(shù)據(jù)左偏分布,則偏度小于0;如果數(shù)據(jù)右偏分布,則偏度大于0)
峰度:描述總體中所有取值分布形態(tài)陡緩程度的統(tǒng)計量,可以連接為數(shù)據(jù)分布的高矮程度。(峰度的比較是相對于標準正太分布的,對于標準正太分布,峰度為0;如果峰度大于0,則密度圖高于標準正太分布,此時方差較小;如果峰度小于0,則密度圖低于標準正太分布,此時方差較大。)
# 標準正態(tài)分布的偏度和峰度,np.random.normal() 構(gòu)造標準正態(tài)分布數(shù)據(jù)
standard_normal = pd.Series(np.random.normal(0, 1, size=10000))
standard_normal.skew()# skew() 計算偏度
standard_normal.kurt()# kurt() 計算峰度
# 鳶尾花花萼長度的偏度和峰度
sepal_length = df["sepal length (cm)"]sepal_length.skew()
sepal_length.kurt()
繪制標準正太分布、鳶尾花花萼寬度的密度圖:
# 繪制核密度圖
sns.kdeplot(standard_normal, shade=True, label="標準正太分布")
sns.kdeplot(df["sepal width (cm)"], shade=True, label="鳶尾花花萼寬度")
plt.legend()
作者:Minions2020
總結(jié)
以上是生活随笔為你收集整理的python花萼长度表_python描述性统计实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zabbix监控pppoe线路_Zabb
- 下一篇: json 反射java 实体_java反