在大數據和人工智能時代,數據科學和機器學習在許多科技領域都變得必不可少。處理數據的一個必要方面是能夠直觀地描述、總結和表示數據。Python 統計庫是全面、流行且廣泛使用的工具,可幫助處理數據。 對于數據的基礎描述我們可以進行下面的操作: - 使用哪些數字量來描述和總結數據集。
- 在Python中計算描述性統計。
- 使用 Python 庫獲取描述性統計信息。
- 可視化數據集。
整套學習自學教程中應用的數據都是《三國志》、《真·三國無雙》系列游戲中的內容。 什么是描述性統計描述性統計是關于描述和總結數據。 使用兩種主要方法: - 定量方法以數字方式描述和總結數據。
- 可視化方法用圖表、繪圖、直方圖和其他圖表來說明數據。
可以將描述性統計應用于一個或多個數據集或變量。當描述和總結單個變量時,執行單變量分析。當搜索一對變量之間的統計關系時,進行雙變量分析。同樣多變量分析同時涉及多個變量。 度量類型描述性統計分析需要理解的度量類型有: - 集中趨勢即數據的中心,包括平均值、中位數和眾數。
- 可變性即分布情況,包括方差和標準差。
- 相關性或聯合變異性即數據集中一對變量之間的關系,包括協方差和相關系數。
總體和樣本在統計中總體是所有元素或項目的集合。總體通常很大,這使得它們不適合收集和分析數據。這就是為什么統計學家通常試圖通過選擇和檢查該總體的代表性子集來對總體做出一些結論。 總體的這個子集稱為樣本。理想情況樣本應在令人滿意的程度上保留總體的基本統計特征。這樣將能夠使用樣本來收集有關總體的結論。 異常值異常值是與從樣本或總體中獲取的大多數數據顯著不同的數據點。通常造成異常數據原因有數據的自然變化、觀察系統行為的變化、數據收集錯誤。 異常值沒有精確的數學定義。必須依靠經驗、有關主題的知識和常識來確定數據點是否為異常值以及如何處理。 Python 的統計庫- Python 的 statistics 是用于描述性統計的內置 Python 庫。如果數據集不是太大或者能依賴導入其他庫,那么可以使用它。
- NumPy 是一個用于數值計算的第三方庫,針對單維和多維數組進行了優化。主要類型是稱為的數組類型 ndarray。該庫包含許多用于統計分析的案例。
- SciPy 是一個基于 NumPy 的第三方科學計算庫。與 NumPy 相比提供了額外的功能,包括 scipy.stats 用于統計分析。
- Pandas 是一個基于 NumPy 的第三方數值計算庫,擅長處理帶有對象的標記一維 (1D) 數據和帶有Series對象的二維 (2D) DataFrame數據 。
- Matplotlib 是一個用于數據可視化的第三方庫,與 NumPy、SciPy 和 Pandas 結合使用效果會直觀表達結果。
Python 統計入門既然要做描述性統計分析,就一定要先學習統計學相關的基礎內容,否則概念都不知道是無法下手操作的,甚至連對應的三方庫都不知道哪里去找。 建議先看一下下面的內容之后回來看如何進行python操作,如果你已經對統計有初步的了解了可以跳過這個部分。 計算描述性統計導入應用的三方包。 import mathimport statisticsimport numpy as npimport scipy.statsimport pandas as pd
隨機創建一些數據,通常缺失值用 nan 表示。表示的方法有很多種,常用的有float('nan')、math.nan、np.nan。 x = [1.0, 5, 7.5, 4, 99.1]x_with_nan = [1.0, 5, 7.5, math.nan, 4, 99.1]
同時創建 np.ndarray 和 pd.Series 對象。 兩個 NumPy 數組(y和y_with_nan)和兩個 Pandas Series(z和z_with_nan),這些都是一維值序列。 y, y_with_nan = np.array(x), np.array(x_with_nan)z, z_with_nan = pd.Series(x), pd.Series(x_with_nan)yarray([ 8. , 1. , 2.5, 4. , 28. ])y_with_nanarray([ 8. , 1. , 2.5, nan, 4. , 28. ])z0 8.01 1.02 2.53 4.04 28.0dtype: float64z_with_nan0 8.01 1.02 2.53 NaN4 4.05 28.0dtype: float64
集中趨勢測度集中趨勢的度量顯示數據集的中心值或中間值。有幾種定義被認為是數據集的中心。 - Mean,樣本平均值,也稱為樣本算術平均值或簡稱平均值,是數據集中所有項目的算術平均值。數據集 的平均值在數學上表示為 Σ? ?/ ,其中 = 1, 2, …, 。是所有元素的總和 ? 除以數據集中的項目數 。
- Weighted mean,加權平均數,也稱為加權算術平均數或加權平均數,是算術平均數的概括,能夠定義每個數據點對結果的相對貢獻。數據集 的每個數據點 ? 定義一個權重 ?,其中 = 1、2、…、 和 是 中的項目數。將每個數據點與相應的權重相乘,將所有乘積相加,然后將獲得的總和除以權重總和:Σ?( ? ?) / Σ? ?。
- Geometric mean,幾何平均值是數據集 中所有 元素 ? 乘積的第 根:?√(Π? ?),其中 = 1, 2, …, 。
- Harmonic mean,諧波均值,調和平均值是數據集中所有項目倒數的平均值的倒數: / Σ?(1/ ?),其中 = 1、2、…、 和 是數據集中的項目數 x。
上述三種均值的實現方法可以參考下面這篇內容。 Mr數據楊:『迷你教程』數據分析師常用的三大均值統計方法0 贊同 · 0 評論文章 - Median,樣本中位數是排序數據集的中間元素。數據集可以按升序或降序排序。如果數據集的元素個數 是奇數,那么中位數就是中間位置的值: 0.5( + 1) 。如果 是偶數,那么中位數就是中間兩個值的算術平均值,即 0.5 和 0.5 +1 位置的項目。
n = len(x)if n % 2: median_ = sorted(x)[round(0.5*(n-1))]else: x_ord, index = sorted(x), round(0.5 * n) median_ = 0.5 * (x_ord[index-1] + x_ord[index])median_7.5
- Mode,樣本眾數是數據集中出現頻率最高的值。如果沒有單個這樣的值則該集合是多模態的,因為它具有多個模態值。例如,在包含點 2、3、2、8 和 12 的集合中,數字 2 是眾數,因為它出現兩次不像其他項只出現一次。
u = [2, 3, 2, 8, 12]# 常規獲取方式mode_ = max((u.count(item), item) for item in set(u))[1]# statistics.mode() 和 statistics.multimode()模式mode_ = statistics.mode(u)mode_ = statistics.multimode(u)# scipy.stats.mode() 模式u = np.array(u)mode_ = scipy.stats.mode(u)mode_# Pandas Series對象.mode()模式u= pd.Series(u)u.mode()
變異性測量- Variance,樣本方差量化了數據的分布。它以數字方式顯示數據點與平均值的距離。您可以將數據集 的樣本方差用 元素數學表示為 的樣本均值。計算總體方差的方法類似于樣本方差。但是必須在分母中使用 而不是 - 1:Σ?( ? - mean( ))2 / 。在這種情況下 是整個總體中的項目數。與樣本方差的區別使用 statistics.pvariance(),且 (n - 1) 替換為 n 。
# 常規獲取方式n = len(x)mean_ = sum(x) / nvar_ = sum((item - mean_)**2 for item in x) / (n - 1)# statistics.variance() 模式var_ = statistics.variance(x)var_ =statistics.variance(x_with_nan)# np.var() 或?.var() 模式 ddof(自由度)var_ = np.var(y, ddof=1)var_ = y.var(ddof=1)var_ = np.nanvar(y_with_nan, ddof=1) # 跳過 nan 值# Pandas Series對象.var()模式z.var(ddof=1) z_with_nan.var(ddof=1) # 默認跳過nan值
- Standard deviation,樣本標準差是數據傳播的另一種度量。它與樣本方差有關,因為標準偏差 是樣本方差的正平方根。標準差通常比方差更方便,因為它與數據點具有相同的單位。總體標準差是指整個總體,總體方差的正平方根。與樣本標準差的區別使用 statistics.pstdev() 。
# 常規獲取方式std_ = var_ ** 0.5# statistics.stdev() 模式,自動忽略 nan 值std_ = statistics.stdev(x)# np.std() 或??.std() 模式 ddof(自由度)var_ = np.std(y, ddof=1)var_ = y.std(ddof=1)var_ = np.std(y_with_nan, ddof=1) # 跳過 nan 值# Pandas Series對象.std()模式z.std(ddof=1)z_with_nan.std(ddof=1) # 默認跳過nan值
- Skewness,樣本偏度衡量數據樣本的不對稱性。偏度有幾種數學定義。使用 元素計算數據集 偏度的一種常用表達式是 ( 2 / (( ? 1)( ? 2))) (Σ?( ? ? mean( ))3 / ( 3))。更簡單的表達式是 Σ?( ? ? mean( ))3 / (( ? 1)( ? 2) 3),其中 = 1, 2, …, 和 mean( ) 是 。
'''左偏分布(負偏態)中:mean(平均數)<median(中位數)<mode(眾數)右偏分布(正偏態)中:mode(眾數)<median(中位數)<mean(平均數)'''# 常規獲取方式x = [1.0, 1, 6.5, 41, 28.5]n = len(x)mean_ = sum(x) / nvar_ = sum((item - mean_)**2 for item in x) / (n - 1)std_ = var_ ** 0.5skew_ = (sum((item - mean_)**3 for item in x)* n / ((n - 1) * (n - 2) * std_**3))skew_0.8025583716578066 # 數值為正則右側甩尾# scipy.stats.skew() 模式y, y_with_nan = np.array(x), np.array(x_with_nan)scipy.stats.skew(y, bias=False)0.8025583716578066scipy.stats.skew(y_with_nan, bias=False)nan# Pandas Series對象.skew()模式z, z_with_nan = pd.Series(x), pd.Series(x_with_nan)z.skew()0.8025583716578066z_with_nan.skew()0.8025583716578066
- Percentiles,樣本 百分位數是數據集中的元素,使得數據集中 % 的元素小于或等于該值。此外(100 - )% 的元素大于或等于該值。如果數據集中有兩個這樣的元素,那么樣本 百分位數就是它們的算術平均值。每個數據集都有三個四分位數,它們是將數據集分為四個部分的百分位數。
# Python 3.8+# statistics.quantiles() 模式x = [-5.0, -1.1, 0.1, 2.0, 8.0, 12.8, 21.0, 25.8, 41.0]statistics.quantiles(x, n=2)[8.0]statistics.quantiles(x, n=4, method='inclusive')[0.1, 8.0, 21.0]# np.percentile() 模式y = np.array(x)np.percentile(y, 5)np.percentile(y, 95)np.percentile(y, [25, 50, 75])np.median(y)# np.nanpercentile() 忽略 nan值y_with_nan = np.insert(y, 2, np.nan)np.nanpercentile(y_with_nan, [25, 50, 75])# pd.Series對象有方法.quantile()z, z_with_nan = pd.Series(y), pd.Series(y_with_nan)z.quantile(0.05)z.quantile(0.95)z.quantile([0.25, 0.5, 0.75])z_with_nan.quantile([0.25, 0.5, 0.75])
- Ranges,數據范圍是數據集中最大元素和最小元素之間的差異。數值型數據類似理解為極差。
# np.ptp() 模式np.ptp(y)np.ptp(z)np.ptp(y_with_nan)np.ptp(z_with_nan)'''不同的計算方式max() 、min() # Python 標準庫amax() 、amin() # NumPynanmax() 、nanmin() # NumPy 忽略 nan.max() 、 .min() # NumPy.max() 、.min() # Pandas 默認忽略 nan 值'''
描述性統計摘要# scipy.stats.describe() 模塊'''nobs:數據集中的觀察或元素的數量minmax:具有數據集最小值和最大值的元組mean:數據集的平均值variance:數據集的方差skewness:數據集的偏度kurtosis:數據集的峰度'''result = scipy.stats.describe(y, ddof=1, bias=False)# Series對象有方法.describe()'''count:數據集中的元素數量mean:數據集的平均值std:數據集的標準差min和max:數據集的最小值和最大值25%, 50%, and 75%:數據集的四分位數'''result = z.describe()
數據對之間相關性的度量經常需要檢查數據集中兩個變量的對應元素之間的關系。假設有兩個變量 和 ,具有相同數量的元素 。讓 中的 ? 對應于 中的 ?, 中的 ? 對應 中的 ? 以此類推。 數據對之間相關性的度量: - 當較大的 值對應于較大的 值時,存在正相關,反之亦然。
- 當較大的 值對應于較小的 值時,存在負相關,反之亦然。
- 如果沒有這種明顯的關系,則存在弱或不存在相關性。
衡量數據集之間相關性的兩個統計量是 協方差和相關系數。 x = list(range(-10, 11))y = [0, 2, 2, 2, 2, 3, 3, 6, 7, 4, 7, 6, 6, 9, 4, 5, 5, 10, 11, 12, 14]x_, y_ = np.array(x), np.array(y)x__, y__ = pd.Series(x_), pd.Series(y_)
協方差,樣本協方差是量化一對變量之間關系的強度和方向的度量。 - 如果相關性是正的,那么協方差也是正的。
- 如果相關性為負,則協方差也為負。
- 如果相關性較弱,則協方差接近于零。
# 純 Python 中計算協方差n = len(x)mean_x, mean_y = sum(x) / n, sum(y) / ncov_xy = (sum((x[k] - mean_x) * (y[k] - mean_y) for k in range(n))/ (n - 1))# NumPy 具有cov()模塊,直接返回協方差矩陣cov_matrix = np.cov(x_, y_)# PandasSeries 具有.cov()模塊,計算協方差cov_xy = x__.cov(y__)cov_xy = y__.cov(x__)
相關系數 關于相關系數有三種不同的計算方式。 - 連續數據 & 連續數據的計算方式
- 連續數據 & 離散數據的計算方式
- 離散數據 & 離散數據的計算方式
這里舉例說明 連續數據 & 連續數據 的pearsonr相關系數計算方式。 # Python 計算相關系數var_x = sum((item - mean_x)**2 for item in x) / (n - 1)var_y = sum((item - mean_y)**2 for item in y) / (n - 1)std_x, std_y = var_x ** 0.5, var_y ** 0.5r = cov_xy / (std_x * std_y)# scipy.stats.linregress()模塊result = scipy.stats.linregress(x_, y_)r = result.rvalue# scipy.stats具有pearsonr()模塊r, p = scipy.stats.pearsonr(x_, y_)# Numpy具有np.corrcoef()模塊corr_matrix = np.corrcoef(x_, y_)# Pandas的Series有.corr()模塊r = x__.corr(y__)r = y__.corr(x__)
二維數組的使用統計學家經常使用二維數據,其中包括數據庫表、CSV 文件、Excel等電子表格。 - NumPy 和 SciPy 提供了一種處理 2D 數據的綜合方法。
- Pandas 有DataFrame專門用于處理 2D 標記數據的類。
關于這方面的數據處理應用內容會有很多,建議選擇一個自己擅長的就可以了,比如使用DataFrame進行處理。 Mr數據楊:「Python 數據處理基礎」數據預處理連續變量10種常用方法 Mr數據楊:「Python 數據處理基礎」英文文本數據預處理操作的9種常用方法 Mr數據楊:「Python 數據處理基礎」數據特征處理標準化和歸一化應用 Mr數據楊:「Python 數據處理基礎」數據重復值的統計和處理2種常用方法 Mr數據楊:「Python 數據處理基礎」數據預處理離散變量5種常用方法 Mr數據楊:「Python 數據處理基礎」數據的降維以及Scikit-learn實現的14種方式 Mr數據楊:「Python 數據處理基礎」數據沖突和樣本的選取和處理 Mr數據楊:「Python 數據處理基礎」中文文本數據預處理操作的8種常用方法 Mr數據楊:「Python 數據處理基礎」數據缺失值的可視化和處理8種常用方法 Mr數據楊:「Python 數據處理基礎」數據離群值的可視化和處理5種常用方法 Mr數據楊:「Python 數據處理基礎」數據特征處理離散化和二值化應用 可視化數據重要性數據可視化的方法庫有很多之前也提到過,這里進行一個未來匯總起來的一個數據可視化內容列表。工作中需要的數據可視化庫都再這里面能知道對應的制作方法。 數據可視化是可以讓外行人通過圖形的方式快速、直接的了解數據所表達的含義。
|