EDA 探索性資料分析

2021-10-04 07:48:27 字數 3943 閱讀 2859

引導資料科學從業者進行資料處理以及特徵工程的步驟,使資料集的結構和特徵集讓接下來的**問題更加可靠。

值得注意的是, eda過程中是對原始資料的特徵(統計特徵、分布特徵、相關性等)進行挖掘, 但是沒有刪除或構造任何特徵(花式查詢, 不包括增、刪、改)

1、載入各種資料科學以及視覺化庫:

資料科學庫 pandas、numpy、scipy;(資料分析三劍客)

視覺化庫 matplotlib、seabon;

其他;2、載入資料:

載入訓練集和測試集;

簡略觀察資料(head()+shape);

3、資料總覽:

通過describe()來熟悉資料的相關統計量

通過info()來熟悉資料型別

4、判斷資料缺失和異常

檢視每列的存在nan情況

異常值檢測

5、了解**值的分布

總體分布概況(無界詹森分布等)

檢視skewness and kurtosis

檢視**值的具體頻數

6、特徵分為類別特徵和數字特徵,並對類別特徵檢視unique分布

7、 數字特徵分析

相關性分析

檢視幾個特徵的偏度和峰值

每個數字特徵的分布視覺化

數字特徵相互之間的關係視覺化

多變數互相回歸關係視覺化

8、型別特徵分析

unique分布

類別特徵箱形圖視覺化

類別特徵的小提琴圖視覺化

類別特徵的柱形圖視覺化類別

特徵的每個類別頻數視覺化(count_plot)

9、用pandas_profiling生成資料報告

log變換之後的分布較均勻,可以進行log變換進行**,這也是**問題常用的trick

train_data['notrepaireddamage'].replace('-', np.nan, inplace=true)
因此上面的語句也可以寫成:

2、在進行特徵分析過程中可以先把每一列的含義(包括賽題介紹的關鍵內容)在notebook中先列出來,就不用反覆檢視官方介紹了.

3、dataframe頭尾一起檢視

4、==describe() ==檢視每列的統計量, 掌握資料的大概的範圍以及每個值的異常值的判斷,比如有的時候會發現999 9999 -1 等值這些其實都是nan的另外一種表達方式,有的時候需要注意下

5、==info() == 通過info來了解資料每列的type,有助於了解是否存在除了nan以外的特殊符號異常(注意object型別)

6、使用missingno模組視覺化缺失值

import missingno as msno

missing = data.isnull().sum()

missing = missing[missing>0]

missing.sort_values(inplace=true)

missing.plot.bar()

# 視覺化看下預設值

msno.matrix(train_data.sample(250))

msno.bar(train_data.sample(1000))

7、類別特徵嚴重傾斜,一般不會對**有什麼幫助(類別分布嚴重偏斜), 刪除特徵

8、**值分布(適用於分類和回歸問題), 如果**值不服從正態分佈, 一般取對數.

import scipy.stats as st

y = train_data[

'price'

]plt.

figure(1

); plt.

title

('johnson su'

)sns.

distplot

(y, kde=false, fit=st.johnsonsu) # 界詹森分布

plt.

figure(2

); plt.

title

('normal'

)sns.

distplot

(y, kde=false, fit=st.norm)

plt.

figure(3

); plt.

title

('log normal'

)sns.

distplot

(y, kde=false, fit=st.lognorm)

對正態分佈的觀察包括兩個指標: 偏度和峰度

skewness(偏態/偏峰)

正偏態分布(positive skewness distribution)是指頻數分布的高峰偏於左側,偏態係數為正值的頻數分布形態。偏態分布分為正偏態和負偏態。**當均值大於眾數時稱為正偏態;當均值小於眾數時稱為負偏態。**偏態衡量的是資料的不對稱程度。

kurtosis(峰度)

峰度(peakedness;kurtosis)又稱峰態係數。表徵概率密度分布曲線在平均值處峰值高低的特徵數。直**來,峰度反映了峰部的尖度。樣本的峰度是和正態分佈相比較而言統計量,如果峰度大於三,峰的形狀比較尖,比正態分佈峰要陡峭。反之亦然. 峰度衡量的是資料的尖銳程度

一般地:正態分佈的峰度(係數)為常數3,均勻分布的峰度(係數)為常數1.8(也有說法kurtosis>0 表示與正態分佈相比的尖峰, 經驗證標準正態分佈(0,1)峰度接近0)

# 標準正態分佈峰值驗證

a = np.random.normal(0, 1, 1000)

ans = pd.series(a)

ans.kurt()

9、檢視**值的具體頻數

plt.

hist

(train_data[

'price'

], orientation =

'vertical'

,histtype =

'bar'

, color =

'red'

)plt.

show

()

10、類別特徵和數字特徵的篩選方法

numerical_features = train_data.

select_dtypes

(include=

[np.number]

)categorical_features = train_data.

select_dtypes

(include=

[np.

object

])

11、每個類別特徵都需要檢視nunique()的分布情況, 可以直接遍歷

12、分析每個數值型別特徵與**值之間的相關性

predict_corr = train_data[numerical_features]

correlation = predict_corr.

corr()

print

(correlation[

'label'].

sort_values

(ascending

=false)

,'\n'

)

13、數值特徵和類別特徵在分析特徵間關係(數值特徵)、特徵分布(類別特徵)的時候, 會需要大量視覺化工作.

14、pandas_profiling包可以生成資料分析報告, 但是本人執行失敗了,待查!!!

參考文章:

EDA(探索性資料分析)

1 什麼是eda分析?exploratory data analysis 在特徵 資料處理的過程中,對資料進行探索,找到他們之間的更多潛在關係。2 怎麼去做eda分析?主要是通過資料視覺化來顯示資料之間的關聯,從而對資料進行處理。首先,我們應該思考的是是否會出現下列問題 1 資料是否缺失,有沒有離群...

探索性資料EDA

import numpy as np import seaborn as sns import matplotlib.pyplot as plt from pandas import dataframe import pandas as pd from sklearn.datasets import...

資料探勘 探索性資料分析 EDA (補充)

去敏資料已經在之前有過介紹了,指為了保護資料,消除特徵的意義。而對這類資料就無法根據業務知識,進行特徵的建立。另外,我們得到的資料一般是原始資料通過變換得到的,變換的方式有很多種。本文主要針對通過乘除對資料進行縮放,然後通過加減對資料進行平移的這種資料還原。以下是從網上找到的乙個案例 首先介紹下,這...