藉由 Kaggle 上的題目 Home Credit Default Risk 來練習資料的讀取。
我們需要先了解資料的樣子是什麼?
我們會遇到許多具體的問題,例如資料如何讀取? 有多少筆資料? 有多少欄位? 有無缺失值?..等
我們會遇到許多具體的問題,例如資料如何讀取? 有多少筆資料? 有多少欄位? 有無缺失值?..等
以上這些問題的本質其實是為了分析資料,也就是探索式數據分析(EDA; Exploratory Data Analysis)
Day2 作業:可參考 my Github - Day_002_HW.ipynb
Day 2. 主要是練習 Pandas 的操作:
1. 資料的讀取 :
import os
import numpy as np
import pandas as pd
import seaborn as sns
# 設定 data_path
dir_data = './data/'
f_app = os.path.join(dir_data, 'application_train.csv') #讀取train_data
print('Path of read in data: %s' % (f_app))
app_train = pd.read_csv(f_app)
f_app_test = os.path.join(dir_data, 'application_test.csv') #讀取test_data
app_test = pd.read_csv(f_app_test)
Path of read in data: ./data/application_train.csv
2. 資料的操作
pd.info()
可以看資料的整體架構資訊
app_train.info() , app_test.info()
資料的row = 307511 , columns = 122 , data_type : float64(65), int64(41), object(16) , 佔記憶體286.2+ MB…等等,一目了然。
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 307511 entries, 0 to 307510
Columns: 122 entries, SK_ID_CURR to AMT_REQ_CREDIT_BUREAU_YEAR
dtypes: float64(65), int64(41), object(16)
memory usage: 286.2+ MB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48744 entries, 0 to 48743
Columns: 121 entries, SK_ID_CURR to AMT_REQ_CREDIT_BUREAU_YEAR
dtypes: float64(65), int64(40), object(16)
memory usage: 45.0+ MB
pd.columns
可以看 columns 總共有哪些?
app_train.columns , app_test.columns
可以看到 train 的 length=122 比 test 多 1,即 ‘TARGET’ 這項。
(Index(['SK_ID_CURR', 'TARGET', 'NAME_CONTRACT_TYPE', 'CODE_GENDER',
'FLAG_OWN_CAR', 'FLAG_OWN_REALTY', 'CNT_CHILDREN', 'AMT_INCOME_TOTAL',
'AMT_CREDIT', 'AMT_ANNUITY',
...
'FLAG_DOCUMENT_18', 'FLAG_DOCUMENT_19', 'FLAG_DOCUMENT_20',
'FLAG_DOCUMENT_21', 'AMT_REQ_CREDIT_BUREAU_HOUR',
'AMT_REQ_CREDIT_BUREAU_DAY', 'AMT_REQ_CREDIT_BUREAU_WEEK',
'AMT_REQ_CREDIT_BUREAU_MON', 'AMT_REQ_CREDIT_BUREAU_QRT',
'AMT_REQ_CREDIT_BUREAU_YEAR'],
dtype='object', length=122),
Index(['SK_ID_CURR', 'NAME_CONTRACT_TYPE', 'CODE_GENDER', 'FLAG_OWN_CAR',
'FLAG_OWN_REALTY', 'CNT_CHILDREN', 'AMT_INCOME_TOTAL', 'AMT_CREDIT',
'AMT_ANNUITY', 'AMT_GOODS_PRICE',
...
'FLAG_DOCUMENT_18', 'FLAG_DOCUMENT_19', 'FLAG_DOCUMENT_20',
'FLAG_DOCUMENT_21', 'AMT_REQ_CREDIT_BUREAU_HOUR',
'AMT_REQ_CREDIT_BUREAU_DAY', 'AMT_REQ_CREDIT_BUREAU_WEEK',
'AMT_REQ_CREDIT_BUREAU_MON', 'AMT_REQ_CREDIT_BUREAU_QRT',
'AMT_REQ_CREDIT_BUREAU_YEAR'],
dtype='object', length=121))
試著將 data 的 target 從資料集分出。
target = app_train['TARGET']
target.shape , print(target)
train = app_train.drop(labels = ["TARGET"],axis = 1) # Drop 'TARGET' column
print('train.shape :', train.shape,'target.shape :', target.shape)
train.shape : (307511, 121) target.shape : (307511,)
看看 target 分布:
sns.countplot(app_train['TARGET'], palette='Set3')
print("There are {}% target values with 1".format(100 * app_train['TARGET'].value_counts()[1]/app_train.shape[0]))
There are 8.072881945686495% target values with 1
是否有缺失值?
定義缺失值函數
定義缺失值函數
def missing_data(data):
total = data.isnull().sum().sort_values(ascending = False)
percent = (data.isnull().sum()/data.isnull().count()*100).sort_values(ascending = False)
tt = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
types = []
for col in data.columns:
dtype = str(data[col].dtype)
types.append(dtype)
tt['Types'] = types
return(np.transpose(tt))
missing_data(app_train)
將缺失值drop
train_dropna = app_train.dropna()
train_dropna.shape
(8602, 122)
將缺失值補0
train_fillna = app_train.fillna(0)
train_fillna.shape
(307511, 122)
總共有298909筆資料有缺失值,這個問題的補值工作會很重要!!
沒有留言:
張貼留言