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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python数据分析之单变量分析

發布時間:2023/12/29 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python数据分析之单变量分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0 引言

在數據分析或者機器學習過程中,我們需要對變量或者特征進行分析,在分析過程中,一般都會分為兩種:單變量分析、雙變量分析。今天,土豆簡單介紹一下單變量分析,單變量分析主要對單個變量或者特征進行分析,而變量可分為連續型變量、類別型變量,兩種類型不同的變量的分析方法也是不同的。

1 連續型變量

(1) 數據概覽

對于連續型變量,可以計算變量的統計值,來簡單描述數據。一般在實踐過程中,會使用pandas包中的describe方法來觀察數據(當然使用前需要轉換為Series或者DataFrame類型,DataFrame其實就是大表格,表格每一列的類型都是Series):

import numpy as np x = np.random.randint(1,100,100) # 隨機生成100個0-100之間的數字 x = pd.Series(x) x.describe()

結果為:

count 100.000000 mean 44.350000 std 29.432812 min 1.000000 25% 16.000000 50% 44.500000 75% 71.250000 max 98.000000 dtype: float64

可以看到,describe方法會計算出特征的count(個數)、mean(平均值)、std(標準差)、min(最小值)、max(最大值)、25% 50% 75%(分位數) ,由此可以簡單觀察數據的情況。除此之外,還可以用mode()、median()方法查看眾數以及中位數。之后,可以用info()方法,來查看每個變量或特征的type,有助于了解是否存在除了nan以外的特殊符號異常,但是info只能用于DataFrame類型,不可用于Series類型。這里我們把數據類型變為DataFrame類型,再查看info信息:

x = pd.DataFrame(x, columns=['v1']) # 把個特征命名為v1 x.info()

結果為:

<class 'pandas.core.frame.DataFrame'> RangeIndex: 100 entries, 0 to 99 Data columns (total 1 columns):# Column Non-Null Count Dtype --- ------ -------------- -----0 v1 100 non-null int32 dtypes: int32(1) memory usage: 528.0 bytes

結果顯示有100條樣本,100 non-null表示v1列沒有缺失值,Dtype表示該列的數據類型是int32。

(2) 數據離散以及分布情況

數據離散情況的觀察可以查看范圍、分位數、分位差、方差、標準差、偏度(skewness)、峰度(kurtosis)等等。其中,范圍可由最大最小值確定,分位數分位差、標準差可由describe()方法確定,其中,四分位差IOR=Q3(第3四分位數)-Q1(第1四分位數 )確定。方差可由var()方法計算得到,偏度、峰度可由skew()、kurt()方法獲得。關于峰度和偏度,本文就不詳細介紹了,只需要簡單知道偏度是描述數據分布形態的統計量,其描述的是某總體取值分布的對稱性;峰度是描述某變量所有取值分布形態陡緩程度的統計量。下面代碼展示了方差、偏度、峰度的計算:

print(x.var()) print(x.skew()) print(x.kurt())

結果為

789.2940404040404 -0.1727686492729214 -1.171386373921091

除此之外,還可以通過可視化的方法去觀察變量的分布情況,比較常用的方法是直方圖、QQ圖、核密度估計圖。

  • 直方圖用于展示變量的分布情況,核密度估計圖的功能與直方圖相似,不過可以理解為是直方圖的加窗平滑。直方圖調用方法為sns.distplot(),核密度估計圖的調用方法為sns.kdeplot()

    import seaborn as sns sns.set() # 切換到sns的默認運行配置 y = np.random.randn(100) # 生成具有標準正態分布的數據樣本 sns.distplot(y) # 可以看到數據大致呈正態分布,kde曲線也是呈現正態

再來看看核密度估計圖,其實上圖中的那條曲線就是該數據的核密度估計,不過既然有這個方法,那就調用一下:

plt.figure(1);sns.kdeplot(y) plt.figure(2);sns.kdeplot(y, shade=True)

得到以下兩圖:

左圖其實就是直方圖中的曲線,右圖則是展示了曲線下的陰影部分,更美觀更好判斷罷了。

  • QQ圖是變量的分位數和正態分布的分位數對比參照圖,如果數據符合正態分布,則所有的點都會落在直線上。

    from scipy import stats plt.figure() stats.probplot(y, plot=plt) plt.show()

因為小編是用randn方法生成的正態分布的數據,因此從QQ圖中可以發現,繪圖數據基本與直線重合。

(3) 缺失值判斷

缺失值可以用isnull()或者isna()方法判斷,這兩個方法的返回值都是布爾值,即:缺失值為True,反之為False。如果你不需要知道具體是哪個樣本有缺失值的話,一般都會使用isnull().sum()直接統計缺失值數量

y.isnull().sum()

該結果結果為0,因為我們生成的數據不存在缺失值,所以缺失值為0。因為我們這里采用了一維Serise數據進行實驗,但實際中的數據一般都是具有多個特征,讀取后為DataFrame格式,所以一般會用df.isnull.sum(axis=0)的方式去按列(每列為一個特征或變量)統計缺失值。對于缺失值的可視化,一般會使用msno.matrix()方法以及msno.bar()方法。具體代碼演示小編會在后面的實戰文章中具體演示。

(4) 異常值判斷

異常值是指遠遠偏離總體樣本的觀測值。異常值的存在會降低數據的正態性以及模型的擬合能力等等。異常值的檢測主要用箱型圖、直方圖、散點圖等等,最常用的應該是箱型圖:

plt.figure() sns.boxplot(y=y)

因為數據是按照正態分布的規則生成的,因此不存在異常值,這里只是進行代碼的演示。后文的實踐中,會進一步展示箱型圖在實際數據中的應用。數據缺失值、異常值的可視化以及處理方法的內容比較多,在這篇文章中便不過多解釋。

2 類別型變量

類別型變量或特征的分析方法沒有連續型特征那么豐富,比較單一,一般使用頻率(占比)或頻次(次數)來表示變量的分布情況,并使用柱形圖進行可視化。

(1) 數據統計

這里同樣進行人工生成數據,用于方法的講解。比如,現在一個學校將學生的成績劃分為三檔:不及格、良好、優秀,將學生的成績表示為計算機能看懂的數據,將不及格賦予狀態值1,良好賦予狀態值2,優秀賦予狀態值3。一個班級中,各同學的成績如下:

grades = [1, 1, 2, 2, 2, 2, 3, 1, 2, 3, 1, 2, 2, 3, 3, 2, 1, 2, 2, 2, 2, 3, 3, 2] grades = pd.Series(grades)

unique()方法會返回序列去重之后的不同值,nunique()方法則直接返回不同值的個數,以例子進行解釋:unique()方法會統計grades中有哪幾種成績表示,nunique()方法會統計grades中有幾種成績表示:

print('grades中不同值的個數是:', grades.nunique()) print('grades中不同值分別是:', grades.unique())

結果為:

grades中不同值的個數是: 3 grades中不同值分別是: [1 2 3]

并且使用value_counts()方法進一步查看每種數值的個數:

grades.value_counts()

結果為:

2 13 3 6 1 5 dtype: int64

可以看得到狀態值2的個數為13個,即成績良好的同學有13個;狀態值3的個數為6個,即成績優秀的同學有6個;狀態值1的個數為5個,即成績不及格的同學有5個。

(2) 數據分布可視化

再利用countplot()函數對類別及其頻次進行可視化,countplot()會將數據的各個類別進行計數count,再進行作圖plot:

plt.figure() sns.countplot(grades) plt.show()

這個方法其實也可以應用于查看變量分布和異常值檢測,比如一個班級里20個同學,我們統計出來有19個良好,1個優秀,那其實該變量是不能很好地描述和區分樣本的,所以在EDA的時候就可以把該特征進行刪除。

這就是單變量分析,但是真實場景中,我們往往會有很多特征,那此時便需要進行多變量分析了。關于多變量分析,小編會在后面再進行介紹。

總結

以上是生活随笔為你收集整理的Python数据分析之单变量分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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