Kaggle 가입 (2)
9392 단어 MachineLearningKaggle
개발 환경은 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
Reference
이 문제에 관하여(Kaggle 가입 (2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/iwankoTG/items/6f2038d54d9b914ca966
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
데이터를 다운로드한 후 먼저 하는 것은 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
Reference
이 문제에 관하여(Kaggle 가입 (2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/iwankoTG/items/6f2038d54d9b914ca966텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)