데이터 분석 Data Analytics/프로그래머스 데이터분석 데브코스 2기

[TIL] 데이터분석 데브코스 51일차 - Kaggle/타이타닉 생존자 예측 대회 참여 실습

상급닌자연습생 2024. 4. 29. 15:50

Kaggle이란?

: 호주에서 시작한 국제적인 머신러닝 대회를 제공하는 서비스

 

 

Kaggle Code(Kaggle Kernel)

: 데이터 사이언스 관련 모듈이 모두 설치되어있는 Jupyter Python Notebook

  • 무료
  • 4 CPU, 16 GB 메모리, 1GB 디스크
  • 여기서 만든 노트북을 다른 사람들과 공유 가능 + 다른 사람들이 만든 노트북을 보고 공부하기에 최적화

 

Kaggle Ranking

개인이 캐글에서 어떤 활동을 하느냐에 따라서 받게되는 레벨

  1. Novices : 캐글 커뮤니티 참여하면 기본적으로 부여
  2. Contributors
  3. Experts
  4. Masters
  5. Grandmasters

 

레벨이 각각 적용되는 분야가 크게 4개로 나뉘어진다.

  1. Competitions : 대회에서 어떤 성과를 거두었느냐에 따라
  2. Datasets : 캐글에 어떤 데이터셋을 제공했느냐에 따라
  3. Notebooks : 내가 작성한 노트북이 사람들에게 얼마나 좋은 반응을 얻었느냐
  4. Discussions : 데이터 분석, 머신러닝과 관련된 다양한 주제로 얼마나 활발하게 논의했느냐

 

 

 

 

Kaggle Competitions

 

목적

1. 참가자 관점에서의 목적

  • 기술 습득
  • 문제 해결
  • 금전/경력 인센티브

2. 조직/회사 관점에서의 목적(Host a Competition)

  • 혁신 장려
  • 인재 발굴
  • 벤치 마킹 : 해당 문제를 푸는 내부, 외부에서 해결했던 방법들을 비교하면서 다양한 방법으로 해결할 수 있음을 검증 + 방법별로 어느 정도 성과가 나오는지 비교
  • 연구 기여

3. 캐글 관점에서의 목적

  • 커뮤니티 구축
  • 매출 증대

 

 

 

구성

  • Overview : 대회에서 다루는 문제가 어떤 문제인지에 대한 정보(대회를 호스팅한 주체가 작성함)
  • Data : 문제를 풀기 위한 데이터 셋 다운로드 및 데이터 셋의 특징 정보 확인 가능
  • Code : 문제를 해결한 후 사람들이 작성한 코드 노트북을 업로드하는 공간(대회 진행중에는 거의 올라오지 X)
  • Models : 문제를 해결하면서 만든 모델을 호스팅하고 싶은 경우 업로드 가능
  • Discussion : 문제와 관련된 논의를 할 수 있는 공간
  • Leaderboard : 대회에서 좋은 성적을 낸 참여자들의 정보(진행중인 대회에서는 지속적으로 업데이트됨)
  • Rules : 대회에서 제약한 특정 규칙에 대한 설명

 

 

 

 

 

Kaggle API

: 캐글 노트북 등을 사용하지 않고 본인에게 익숙한 환경에서 모델링하고 싶은 경우,

Python으로 만들어진 `kaggle`이라는 모듈을 설치하면(`pip install kaggle`) 캐글 환경과 인터렉션 하면서

특정 대회의 데이터셋을 다운로드 받거나 결과물로 만들어진 나의 데이터셋을 제출하는 일이 가능해진다.

 

 

🔗 Kaggle APIhttps://www.kaggle.com/docs/api

 

Public API Documentation

Create Datasets, Notebooks, and connect with Kaggle

www.kaggle.com

 

 

기능

- Interacting with Competitions

  • `kaggle competitions list` :  현재 존재하는 대회 리스트가 보여짐
  • `kaggle competitions download -c [COMPETITION]` : 특정 대회의 데이터셋을 다운로드
    • `[COMPETITION]` : 특정 대회의 ID
  • `kaggle competitions submit -c [COMPETITION] -f [FILE] -m [MESSAGE]` :  결과물 파일을 제출
    • `[FILE]` : 내가 만든 결과물 파일
    • `[MESSAGE]` : 제출하면서 작성할 메세지

- Interacting with Datasets

- Interacting with Notebooks

 

 

 

 

 

 

 

 

Titanic 문제로 캐글 대회 연습해보기

🔗 실습 링크 : https://www.kaggle.com/competitions/titanic

 

Titanic - Machine Learning from Disaster | Kaggle

 

www.kaggle.com

 

 

1단계. 데이터 다운로드 및 대회 참여

위의 대회 링크로 접속해보자.

우선, 상단에 [Data] 탭에 들어가서 주어진 데이터 파일 3개를 모두 다운로드 받는다.

 

 

 

전부 다운 받았다면 상단에 [Code] 탭에 들어가서 [New Notebooke]을 눌러 결과물 작업을 위해 코드 작성을 시작해보자.

 

 

 

 

 

2단계. 코드 입력

먼저, 기본적으로 캐글 노트북에서 주어지는 아래의 코드를 실행시켜보자.

# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

# Input data files are available in the read-only "../input/" directory
# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using "Save & Run All" 
# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session

 

 

훈련 데이터를 불러오자.

train_data = pd.read_csv("/kaggle/input/titanic/train.csv")
train_data.head()

 

 

 

테스트 데이터를 불러오자.

test_data = pd.read_csv("/kaggle/input/titanic/test.csv")
test_data.head()

 

 

제출용 샘플 파일을 열어보자.

gender_submission_data = pd.read_csv("/kaggle/input/titanic/gender_submission.csv")
gender_submission_data.head()

 

 

 

가장 기본적인 조건을 걸어서 분석을 수행해보자.

필자는 test_data 내 성별 컬럼값이 여성이면 생존(1), 남성이면 사망(0)이라는 조건을 걸어 Survived라는 새로운 컬럼을 생성했다.

## test_data 내 Sex(성별) 컬럼값이 여성이면 Survived(생존여부)가 1, 남성이면 0으로 설정
import numpy as np

test_data["Survived"] = np.where(test_data["Sex"] == 'female', 1, 0)
test_data.head()

 

 

새롭게 만든 Survived 컬럼과, 승객ID 컬럼으로 제출용 결과 데이터 프레임을 생성해보자.

# test_data 내 승객ID와 생존 여부만 담은 결과 데이터 프레임을 새로 생성

output = test_data[["PassengerId", "Survived"]]
output.head()

 

 

이를 csv파일로 저장해주었다.

# 새롭게 생성한 output 데이터프레임을 csv파일로 저장
output.to_csv('submission.csv', index=False)

 

 

 

기본적으로 캐글 노트북에서는 터미널 명령어를 실행할 수 있도록 하낟.

현재 디렉토리 내 파일이 있는지 확인해보았다.

# 현재 디렉토리 내 파일 확인
!ls -tl

 

 

해당 파일에 결과가 제대로 저장되었는지 5줄만 확인해보았다.

# 해당 파일의 처음 다섯줄만 확인
!head -5 submission.csv

 

 

 

 

3단계. 결과물 파일 다운받기

코드 작성을 완료했다면, 오른쪽에 [Output]에 있는 submission.csv 파일 옆에 점3개로 되어있는 버튼을 눌러보자.

파일을 다운로드 하기위해 [Download] 버튼을 클릭하자.

 

 

 

 

 

4단계. 결과물 제출

다시 대회 페이지로 돌아와서 [Submit Prediction]을 클릭해보자.

 

 

 

아까 저장한 결과물 csv 파일을 선택해서 아래 빨간 박스 안에 드래그 앤 드롭 해보자.

 

 

 

결과물 csv 파일이 제대로 업로드 되었다면 [Submit] 버튼을 눌러 결과를 제출하면 된다.

 

 

 

 

 

5단계. Dicussion 해보기

대회와 관련된 논의를 하기 위해서는 상단에 [Discussion]탭으로 들어가 [New Topic] 버튼을 클릭한다.

 

 



캐글은 한 사람이 다수의 계정을 운영하는 것을 금지하고 있기 때문에, 

Discussion을 진행하기 위해서는 그 전에 전화번호 인증을 수행해야한다.

본인의 전화번호를 입력하고 인증 번호를 받았다면 해당 인증번호까지 입력한 후 인증을 완료해보자.

 

 

 

제대로 인증되었다면 아래와 같은 화면이 뜰 것이다.