天天看點

金融風控1.資料分析的目的2.内容介紹3.代碼示例4.EDA不僅僅隻有這些内容,以後會将其他的方法,都放在這個部落格上。

task2 資料分析

  • 1.資料分析的目的
  • 2.内容介紹
  • 3.代碼示例
    • 3.1 導入資料分析以及可視化所需要的庫
    • 3.2 讀取檔案
    • 3.3 總體了解
    • 3.4檢視缺失值和唯一值。
    • 3.5 檢視特征的數值類型,對象類型
    • 3.6 變量分布可視化
      • 單一變量分布可視化
      • 根據y值的不同可視化某個特征的分布
    • 3.7時間格式資料處理及檢視
    • 3.8 透視圖(pivot_table)可以幫助我們更好了解資料
    • 3.9 并沒有使用pandas_profiling生成報告,但是pip install這個包。
  • 4.EDA不僅僅隻有這些内容,以後會将其他的方法,都放在這個部落格上。

此部分為零基礎入門金融風控的task2資料分析部分,帶你了解資料,熟悉資料,為後續的特征工程做準備。

1.資料分析的目的

  • 1.EDA(探索性資料分析exploratory data analysis)的價值在于熟悉了解整個資料集的基本情況(缺失值,異常值),對資料進行驗證是否可以進行接下來的機器學習或者深度學習模組化
  • 2.了解變量之間的互相關系data.corr()、變量與預測值之間的存在關系。
  • 3.為特征工程做準備。

2.内容介紹

  • 資料總體了解:
    • 讀取資料并了解資料大小,原始特征唯獨;
    • 通過info熟悉資料類型;
    • 粗略檢視資料集中個特征基本統計量;
  • 缺失值和唯一值:
    • 檢視資料缺失值情況和檢視唯一值特征情況
  • 深入資料-檢視資料類型
    • 類别行資料
    • 數值型資料:離散數值資料,連續數值型資料
  • 資料間相關關系:特征與特征之間的關系,特征和目标變量之間的關系

3.代碼示例

3.1 導入資料分析以及可視化所需要的庫

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

import datetime

import warnings

warnings.filterwarnings(‘ignore’)

以上這些庫安裝anaconda就完事了,但是也可以直接pip install pandas (類似的指令),pycharm中還可以在settings中直接install。

3.2 讀取檔案

data_train = pd.read_csv(‘train.csv’) #這是train.csv這個檔案就在目前工作目錄之下,當然也可以使用絕對路徑

在read_csv()這個方法中,有許多的參數,delimiter可以設定分隔符的類别。nrows可以設定讀取前n行,當然如果還比較大,類别在2020華為雲大資料挑戰賽中20G的訓練集,還可以加入chunksize,産生疊代器進行讀取。(有錢的話,弄個大記憶體的計算機也不是不行)

3.3 總體了解

檢視資料的樣本個數和原始特征次元。

data.shape

檢視資料特征的名稱

data.columns

熟悉資料類型

data.info() # 預設verbose=True,即列印出所有特征的詳細資訊,包括non-null count dtype,如果僅需要了解有多少列,多少行,則可設定verbose=False。

數值型資料的描述性統計

data.describe() #可以 ,T 進行轉置,便于檢視。

3.4檢視缺失值和唯一值。

缺失值

data.isnull().any().sum() #isnull和isna功能類型,統計每列缺失值,傳回bool類型,any取每列的并集。sum,将series類型的True當成1進行求和。是以這個指令就是求data中有多少列特征含有缺失值。

進一步檢視缺失率大于50%的特征

(data.isnull().sum() / len(data)).to_dict()

data.isnull().sum()統計每列特征缺失值的個數。

to_dict(), series的index作為key,value做為dict的value。

可視化缺失率及其特征。

series.sort_values() #預設ascending=True,并且pandas的方法并不會改變原始的資料結構,除非顯式地指明需要修改,inplace=True。

series.plot.bar() 柱狀圖繪制指令

tips:lgb模型可以自動處理缺失值,這是因為它将缺失看成是一個取值,然後再進行最優特征選取以及最優劃分點的時候将其分到一個bin鐘。并且lgb可以處理類别性特征(或許是因為它的 互斥特征捆綁算法 ?)。

3.5 檢視特征的數值類型,對象類型

numerical_fea = list(data.select_dtypes(exclude=[‘object’]).columns)

select_dtypes() # 裡面的參數包括include——用于指明包含哪些特征,exclue——用于指明不需要哪些特征,而取出剩下的特征。

category_fea = list(filter(lambda x: x not in numerical_fea, list(data.columns)))

filter(func, iterable) # 過濾器函數,前面是函數表達式,後面是可疊代對象。

  • 數值型變量分析,分為連續變量和離散型變量。在本次方案中,以取值的多少作為劃分的依據,但是在計算機科學中是基于有窮觀點來看待問題。是以我認為這樣的劃分也是有一定道理的。剩下的内容無非就是value_counts(),得到不同取值,以及它們的個數。
  • 連續性變量的可視化。給定畫幅plt.figure().給定suptitle這是整個圖的标題。plt.subplot(221),2行2列的第一個位置,左上角。sns.distplot出了會畫出柱狀圖來,還會做一個分布的拟合,封裝性能,但是可自主修改的空間較小。plt.set_title 和plt.title的差別在于什麼地方?(還沒有試驗過)

3.6 變量分布可視化

單一變量分布可視化

可以使用sns.barplot()來繪制barh圖,需要注意value_counts(dropna=False)表示并不将na值去掉。

根據y值的不同可視化某個特征的分布

也就是将欺詐使用者和正常使用者分開,分别統計這些使用者中特征值的分布情況。

首先需要注意groupby這個分組函數,裡面的level參數和by參數是針對不同特征or index進行分組,by用于特征 和 特征and index的混合分組, 而level= 隻适用于index。 count() 或者說series後面直接跟plot還是第一次見,需要重點掌握。 plot(kind, ax, title,color)等等參數都可以自己制定。

還有就是plt.subplots(2, 2) 會傳回fig和2個(ax1, ax2)元組。fig用于儲存圖像, ax的傳回時按每行的個數來進行傳回,ax用于圖像的定制描述。

3.7時間格式資料處理及檢視

pd.to_datatime(str, format) #這是一個向量化的方法,将滿足format形式的str轉換成datatime64類型的資料。

也可以導入 datetime包,調用datetime.datetime.strptime方法,将str轉換成 datetime64

調用apply(lambda x: x-startdate),将datetime64格式轉換成timedelta類型的資料,這時候就可以調用 向量化的方法 .dt accessor ,可以使dt.days; dt.hours等。

3.8 透視圖(pivot_table)可以幫助我們更好了解資料

pd.pivot_table(data, index, columns, values, aggfunc)

index是data的特征列,用于表征透視圖的index,如果是一個str類型,則index就是單一索引。如果index參數加了[],哪怕裡面隻有一個str,最後的透視圖的index也是multiIndex複合索引。其他參數類似。

3.9 并沒有使用pandas_profiling生成報告,但是pip install這個包。

4.EDA不僅僅隻有這些内容,以後會将其他的方法,都放在這個部落格上。

以上這些内容,均來自https://github.com/datawhalechina/team-learning-data-mining/blob/master/FinancialRiskControl/Task2%20%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90.md

本人隻是對一些内容,進行了自我标注,如有纰漏,萬望斧正。

繼續閱讀