Kaggle 가입 (2)

9392 단어 MachineLearningKaggle
이번은, 제2회의 「데이터의 이해」가 됩니다. 그 때 사용하는 일반적인 방법을 정리해 보았습니다.
개발 환경은 docker로 구축했습니다만, 그 때의 정보등은 제1회의 Kaggle에 등록 및 결과 제출 를 참조해 주세요.

전체



첫 번째 Kaggle에 등록 및 결과 제출
제 2 회 데이터 이해 (EDA)
제3회 평가지표와 평가방법
제4회 데이터의 전처리
제5회 모델 구축
제6회 하이퍼파라메타 튜닝

데이터 이해



데이터를 다운로드한 후 먼저 하는 것은 data의 내용을 이해하기 위한 EDA(Explatory Data Analysis)가 됩니다. EDA의 목적으로는 ①데이터의 사이즈를 파악하는 ②예측하는 변수의 특징을 이해하고, 식별/회귀/랭킹 등 문제의 종류를 파악하는 ③특징량의 성질을 이해하는 등이 있습니다. 여기에서는 EDA에서 일반적으로 수행되는 작업을 요약합니다.

데이터 크기 얻기



In[]
import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt 
plt.style.use('ggplot')

train_data = pd.read_csv('./download/train.csv')
test_data = pd.read_csv('./download/test.csv')
print('train shape:', train_data.shape, 'test shape:', test_data.shape)

Out[]
train shape: (891, 12) test shape: (418, 11)

head : 데이터 내용 파악



In[]
train_data.head(5)



tolist : 열 유형 검색



In[]
print(train_data.columns.tolist())
print(train_data.keys())

Out[]
['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked']
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

type : 데이터 유형



In[]
type(train_data), type(train_data.PassengerId), type(train_data.Sex.values)

Out[]
(pandas.core.frame.DataFrame, pandas.core.series.Series, numpy.ndarray)

info : 데이터 정보



In[]
train_data.info()

Out[]
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

value_counts : 열의 값 수



In[]
train_data.Pclass.value_counts()

Out[]
3    491
1    216
2    184
Name: Pclass, dtype: int64

unique : 고유한 값 목록



In[]
train_data.Cabin.unique()

Out[]
array([nan, 'C85', 'C123', 'E46', 'G6', 'C103', 'D56', 'A6',
       'C23 C25 C27', 'B78', 'D33', 'B30', 'C52', 'B28', 'C83', 'F33',
       'F G73', 'E31', 'A5', 'D10 D12', 'D26', 'C110', 'B58 B60', 'E101',
       'F E69', 'D47', 'B86', 'F2', 'C2', 'E33', 'B19', 'A7', 'C49', 'F4',
       'A32', 'B4', 'B80', 'A31', 'D36', 'D15', 'C93', 'C78', 'D35',
       'C87', 'B77', 'E67', 'B94', 'C125', 'C99', 'C118', 'D7', 'A19',
       'B49', 'D', 'C22 C26', 'C106', 'C65', 'E36', 'C54',
       'B57 B59 B63 B66', 'C7', 'E34', 'C32', 'B18', 'C124', 'C91', 'E40',
       'T', 'C128', 'D37', 'B35', 'E50', 'C82', 'B96 B98', 'E10', 'E44',
       'A34', 'C104', 'C111', 'C92', 'E38', 'D21', 'E12', 'E63', 'A14',
       'B37', 'C30', 'D20', 'B79', 'E25', 'D46', 'B73', 'C95', 'B38',
       'B39', 'B22', 'C86', 'C70', 'A16', 'C101', 'C68', 'A10', 'E68',
       'B41', 'A20', 'D19', 'D50', 'D9', 'A23', 'B50', 'A26', 'D48',
       'E58', 'C126', 'B71', 'B51 B53 B55', 'D49', 'B5', 'B20', 'F G63',
       'C62 C64', 'E24', 'C90', 'C45', 'E8', 'B101', 'D45', 'C46', 'D30',
       'E121', 'D11', 'E77', 'F38', 'B3', 'D6', 'B82 B84', 'D17', 'A36',
       'B102', 'B69', 'E49', 'C47', 'D28', 'E17', 'A24', 'C50', 'B42',
       'C148'], dtype=object)

describe : 데이터 요약 통계를 가져옵니다 ( describe 사용)



In[]
train_data.describe()



drop : 불필요한 열 삭제


train_data2 = train_data.drop(['Age'], axis=1)
train_data2.head()



sortby: 데이터 정렬



In[]
train_data.sort_values('Age',axis=0, ascending=False)[0:5]



isnull () : 누락 값의 유무


train_data.isnull().any()
PassengerId    False
Survived       False
Pclass         False
Name           False
Sex            False
Age             True
SibSp          False
Parch          False
Ticket         False
Fare           False
Cabin           True
Embarked        True
dtype: bool

groupby : 값별 통합 (groupby 사용)



객실의 클래스와 성별에 따라 생존율에 어느 정도의 차이가 있었는지

In[]
survived_ratio = train_data.groupby(['Pclass', 'Sex'], as_index=False)['Survived'].mean()
survived_ratio



In[]
fig = plt.figure(figsize=(7, 5))
plt.bar(survived_ratio.index, survived_ratio.Survived, width=0.5, alpha=0.8)
plt.xlabel('index')
plt.ylabel('survived ratio')
plt.title('survived ratio across Pclass and Sex')
plt.show()



scatter plot : 연령과 선임의 관계



In[]
plt.scatter(x=train_data['Age'], y=train_data['Fare'], alpha=0.5)
plt.xlabel('Age')
plt.ylabel('Fare')
plt.title('Fare vs Age')
plt.show()



참고로 한 기사



1. pandas describe에서 각 열에 대한 요약 통계를 얻습니다.
2. Pandas groupby 사용법
3. 탐색적 데이터 분석(EDA)의 기본 조작을 Python을 사용해 보자.
4. House Prices: EDA to ML (Beginner)
5. Supervised Learning with scikit-learn
6. Winning a Kaggle Competition in Python

좋은 웹페이지 즐겨찾기