目的:
1.熟悉了解整個資料集的基本情況(缺失值、異常值),對資料集進行驗證是否可以進行接下來的機器學習或者深度學習建模。
2.了解變數間的相互關係、變數與**值之間的存在關係。
3.為特徵工程做準備。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
import warnings
warnings.filterwarnings('ignore')
data_train = pd.read_csv('./train.csv')
data_test_a = pd.read_csv('./testa.csv')
#設定chunksize引數,來控制每次迭代資料的大小
chunker = pd.read_csv("./train.csv",chunksize=5)
for item in chunker:
print(type(item))
#print(len(item))
#5
data_test_a.shape
data_train.shape
data_train.columns
print(f'there are columns in train dataset with missing values.')
#檢視缺失特徵和缺失率,實現nan的視覺化
missing=train.isnull().sum()/len(train)
missing=missing[missing>0]
missing.sort_values(inplace=true) #只要missing的值大於0就選出來
missing.plot.bar()
one_value_fea = [col for col in data_train.columns if data_train[col].nunique() <= 1]
one_value_fea_test = [col for col in data_test_a.columns if data_test_a[col].nunique() <=1]
numerical_fea = list(data_train.select_dtypes(exclude=[『object』]).columns)
category_fea = list(filter(lambda x: x not in numerical_fea,list(data_train.columns)))
#過濾數值型類別特徵
def get_numerical_serial_fea(data,feas):
numerical_serial_fea =
numerical_noserial_fea =
for fea in feas:
temp = data[fea].nunique()
if temp <= 10:
continue
return numerical_serial_fea,numerical_noserial_fea
numerical_serial_fea,numerical_noserial_fea = get_numerical_serial_fea(data_train,numerical_fea)
#每個數字特徵得分布視覺化
f = pd.melt(data_train, value_vars=numerical_serial_fea)
g = sns.facetgrid(f, col="variable", col_wrap=2, sharex=false, sharey=false)
g = g.map(sns.distplot, "value")
#檢視類別型變數在不同y值上的分布
train_loan_fr=train.loc[train["isdefault"]==1]
train_loan_nofr=train.loc[train["isdefault"]==0]
fig,((ax1,ax2),(ax3,ax4))=plt.subplots(2,2,figsize=(15,8))
train_loan_fr.groupby('grade')['grade'].count().plot(kind="barh",ax=ax1,title="count of grade fraud")
train_loan_nofr.groupby('grade')['grade'].count().plot(kind="barh",ax=ax2,title="count of grade non-fraud")
train_loan_fr.groupby("employmentlength")["employmentlength"].count().plot(kind="barh",ax=ax3,title="count of employmentlength fraud")
train_loan_fr.groupby("employmentlength")["employmentlength"].count().plot(kind="barh",ax=ax4,title="count of employmentlength non-fraud")
plt.show()
fig, ((ax1, ax2)) = plt.subplots(1, 2, figsize=(15, 6))
train.loc[train['isdefault'] == 1] \
.plot(kind='hist',
bins=100,
title='log loan amt - fraud',
color='r',
xlim=(-3, 10),
ax= ax1)
train.loc[train['isdefault'] == 0] \
.plot(kind='hist',
bins=100,
title='log loan amt - not fraud',
color='b',
xlim=(-3, 10),
ax=ax2)
#時間型別處理及檢視
# 轉化成時間格式
train['issuedate']=pd.to_datetime(train['issuedate'],format='%y-%m-%d')
startdate=datetime.datetime.strptime('2007-06-01','%y-%m-%d')
# 轉化成時間格式
testa['issuedate']=pd.to_datetime(testa['issuedate'],format='%y-%m-%d')
startdate=datetime.datetime.strptime('2007-06-01','%y-%m-%d')
plt.hist(train['issuedatedt'],label='train');
plt.hist(testa['issuedatedt'],label='testa');
plt.legend();
plt.title('distribution of issuedatedt dates');
# train 和issuedatedt日期由重疊,所以使用基於時間的分割進行驗證是不明智的
#生成資料分析報告
import pandas_profiling
pfr = pandas_profiling.profilereport(train)
pfr.to_file("./example.html")
2 資料探勘簡介
資料探勘 dm data mining 是乙個跨學科的電腦科學分支,它是用人工智慧 機器學 習 統計學和資料庫的交叉方法在相對較大型的資料集中發現模式的計算過程。資料探勘過程 的總體目標是從乙個資料集中提取資訊,並將其轉換成可理解的結構,以進一步使用。除了原 始分析步驟,它還涉及到資料庫和資料管理方...
資料探勘筆記 2 資料規約
資料規約 對於中小型資料集而言,前面提到的資料探勘準備中的預處理步驟通常足夠了。但對於真正意義上的大型資料集,在應用資料探勘技術之前,還需要執行乙個中間的 額外的步驟 資料規約。本次主要說維規約。3.1 大型資料的維度 資料規約過程的3個基本操作是刪除列 刪除行 減少列中值的數量。全面分析下述引數 ...
資料探勘 資料預處理(2)
統計缺失值 train pd.read csv train.csv null columns train.columns train.isnull any train null columns isnull sum 得到dataframe中,資料型別為object的列 展示一列資料各數值分布情況 使...