728x90
In [2]:
# 코랩 드라이브 마운트 하기
from google.colab import drive
drive.mount("/content/drive")
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
In [3]:
# 판다스 패키지 불러오기
import pandas as pd
import lightgbm as lgb
In [4]:
# 데이터 불러오기
train = pd.read_csv('/content/drive/MyDrive/DACON/movies/data/movies_train.csv')
test = pd.read_csv('/content/drive/MyDrive/DACON/movies/data/movies_test.csv')
submission = pd.read_csv('/content/drive/MyDrive/DACON/movies/data/submission.csv')
In [5]:
# train data 상위 5개 보여주기
train.head()
Out[5]:
title | distributor | genre | release_time | time | screening_rat | director | dir_prev_bfnum | dir_prev_num | num_staff | num_actor | box_off_num | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 개들의 전쟁 | 롯데엔터테인먼트 | 액션 | 2012-11-22 | 96 | 청소년 관람불가 | 조병옥 | NaN | 0 | 91 | 2 | 23398 |
1 | 내부자들 | (주)쇼박스 | 느와르 | 2015-11-19 | 130 | 청소년 관람불가 | 우민호 | 1161602.50 | 2 | 387 | 3 | 7072501 |
2 | 은밀하게 위대하게 | (주)쇼박스 | 액션 | 2013-06-05 | 123 | 15세 관람가 | 장철수 | 220775.25 | 4 | 343 | 4 | 6959083 |
3 | 나는 공무원이다 | (주)NEW | 코미디 | 2012-07-12 | 101 | 전체 관람가 | 구자홍 | 23894.00 | 2 | 20 | 6 | 217866 |
4 | 불량남녀 | 쇼박스(주)미디어플렉스 | 코미디 | 2010-11-04 | 108 | 15세 관람가 | 신근호 | 1.00 | 1 | 251 | 2 | 483387 |
In [6]:
# test data 상위 5개 보여주기
test.head()
Out[6]:
title | distributor | genre | release_time | time | screening_rat | director | dir_prev_bfnum | dir_prev_num | num_staff | num_actor | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 용서는 없다 | 시네마서비스 | 느와르 | 2010-01-07 | 125 | 청소년 관람불가 | 김형준 | 3.005290e+05 | 2 | 304 | 3 |
1 | 아빠가 여자를 좋아해 | (주)쇼박스 | 멜로/로맨스 | 2010-01-14 | 113 | 12세 관람가 | 이광재 | 3.427002e+05 | 4 | 275 | 3 |
2 | 하모니 | CJ 엔터테인먼트 | 드라마 | 2010-01-28 | 115 | 12세 관람가 | 강대규 | 4.206611e+06 | 3 | 419 | 7 |
3 | 의형제 | (주)쇼박스 | 액션 | 2010-02-04 | 116 | 15세 관람가 | 장훈 | 6.913420e+05 | 2 | 408 | 2 |
4 | 평행 이론 | CJ 엔터테인먼트 | 공포 | 2010-02-18 | 110 | 15세 관람가 | 권호영 | 3.173800e+04 | 1 | 380 | 1 |
In [7]:
# submission data 상위 5개 보여주기
submission.head()
Out[7]:
title | box_off_num | |
---|---|---|
0 | 용서는 없다 | 0 |
1 | 아빠가 여자를 좋아해 | 0 |
2 | 하모니 | 0 |
3 | 의형제 | 0 |
4 | 평행 이론 | 0 |
In [8]:
# train data 하위 5개 보여주기
train.tail()
Out[8]:
title | distributor | genre | release_time | time | screening_rat | director | dir_prev_bfnum | dir_prev_num | num_staff | num_actor | box_off_num | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
595 | 해무 | (주)NEW | 드라마 | 2014-08-13 | 111 | 청소년 관람불가 | 심성보 | 3833.0 | 1 | 510 | 7 | 1475091 |
596 | 파파로티 | (주)쇼박스 | 드라마 | 2013-03-14 | 127 | 15세 관람가 | 윤종찬 | 496061.0 | 1 | 286 | 6 | 1716438 |
597 | 살인의 강 | (주)마운틴픽쳐스 | 공포 | 2010-09-30 | 99 | 청소년 관람불가 | 김대현 | NaN | 0 | 123 | 4 | 2475 |
598 | 악의 연대기 | CJ 엔터테인먼트 | 느와르 | 2015-05-14 | 102 | 15세 관람가 | 백운학 | NaN | 0 | 431 | 4 | 2192525 |
599 | 베를린 | CJ 엔터테인먼트 | 액션 | 2013-01-30 | 120 | 15세 관람가 | 류승완 | NaN | 0 | 363 | 5 | 7166532 |
In [9]:
# test data 하위 5개 보여주기
test.tail()
Out[9]:
title | distributor | genre | release_time | time | screening_rat | director | dir_prev_bfnum | dir_prev_num | num_staff | num_actor | |
---|---|---|---|---|---|---|---|---|---|---|---|
238 | 해에게서 소년에게 | 디씨드 | 드라마 | 2015-11-19 | 78 | 15세 관람가 | 안슬기 | 2590.0 | 1 | 4 | 4 |
239 | 울보 권투부 | 인디스토리 | 다큐멘터리 | 2015-10-29 | 86 | 12세 관람가 | 이일하 | NaN | 0 | 18 | 2 |
240 | 어떤살인 | (주)컨텐츠온미디어 | 느와르 | 2015-10-28 | 107 | 청소년 관람불가 | 안용훈 | NaN | 0 | 224 | 4 |
241 | 말하지 못한 비밀 | (주)씨타마운틴픽쳐스 | 드라마 | 2015-10-22 | 102 | 청소년 관람불가 | 송동윤 | 50699.0 | 1 | 68 | 7 |
242 | 조선안방 스캔들-칠거지악 2 | (주) 케이알씨지 | 멜로/로맨스 | 2015-10-22 | 76 | 청소년 관람불가 | 이전 | NaN | 0 | 10 | 4 |
In [10]:
# submission data 하위 5개 보여주기
submission.tail()
Out[10]:
title | box_off_num | |
---|---|---|
238 | 해에게서 소년에게 | 0 |
239 | 울보 권투부 | 0 |
240 | 어떤살인 | 0 |
241 | 말하지 못한 비밀 | 0 |
242 | 조선안방 스캔들-칠거지악 2 | 0 |
In [11]:
# 각 data 행과 열 개수 출력
print(train.shape)
print(test.shape)
print(submission.shape)
(600, 12) (243, 11) (243, 2)
In [12]:
# train data에 대한 정보
# dir_prev_bfnum 에 null data가 330개 있는 것 확인
# 해당 감독이 이전에 제작한 영화가 없기 때문
train.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 600 entries, 0 to 599 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 title 600 non-null object 1 distributor 600 non-null object 2 genre 600 non-null object 3 release_time 600 non-null object 4 time 600 non-null int64 5 screening_rat 600 non-null object 6 director 600 non-null object 7 dir_prev_bfnum 270 non-null float64 8 dir_prev_num 600 non-null int64 9 num_staff 600 non-null int64 10 num_actor 600 non-null int64 11 box_off_num 600 non-null int64 dtypes: float64(1), int64(5), object(6) memory usage: 56.4+ KB
In [13]:
# test data 에 대한 정보
test.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 243 entries, 0 to 242 Data columns (total 11 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 title 243 non-null object 1 distributor 243 non-null object 2 genre 243 non-null object 3 release_time 243 non-null object 4 time 243 non-null int64 5 screening_rat 243 non-null object 6 director 243 non-null object 7 dir_prev_bfnum 107 non-null float64 8 dir_prev_num 243 non-null int64 9 num_staff 243 non-null int64 10 num_actor 243 non-null int64 dtypes: float64(1), int64(4), object(6) memory usage: 21.0+ KB
In [14]:
# submission data에 대한 정보
submission.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 243 entries, 0 to 242 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 title 243 non-null object 1 box_off_num 243 non-null int64 dtypes: int64(1), object(1) memory usage: 3.9+ KB
In [21]:
# 숫자에 e가 표시되어, 읽기 힘드니까
# 소수점 자리수 지정해서 가독성 좋게하는 코드
pd.options.display.float_format = '{:.1f}'.format
In [20]:
# train data 의 통계량 요약
# count : non-null 수
# mean : 전체 데이터의 평균값
# std : 전체 데이터의 표준편차
# min : 전체 데이터의 최솟값
# max : 전체 데이터의 최댓값
# 25% : 25 percentile 값 (나열했을 때 25% 지점의 값)
# 50% : 50 percentile 값 (나열했을 때 50% 지점의 값)
# 75% : 75 percentile 값 (나열했을 때 75% 지점의 값)
train.describe()
Out[20]:
time | dir_prev_bfnum | dir_prev_num | num_staff | num_actor | box_off_num | |
---|---|---|---|---|---|---|
count | 600.0 | 270.0 | 600.0 | 600.0 | 600.0 | 600.0 |
mean | 100.9 | 1050442.9 | 0.9 | 151.1 | 3.7 | 708181.8 |
std | 18.1 | 1791408.3 | 1.2 | 165.7 | 2.4 | 1828005.9 |
min | 45.0 | 1.0 | 0.0 | 0.0 | 0.0 | 1.0 |
25% | 89.0 | 20380.0 | 0.0 | 17.0 | 2.0 | 1297.2 |
50% | 100.0 | 478423.6 | 0.0 | 82.5 | 3.0 | 12591.0 |
75% | 114.0 | 1286568.6 | 2.0 | 264.0 | 4.0 | 479886.8 |
max | 180.0 | 17615314.0 | 5.0 | 869.0 | 25.0 | 14262766.0 |
In [22]:
# train data 에서 'genre' 열과 'box_off_num' 열을 가져와서
# 'genre' 별로 그룹화 한 다음에, box_off_num 값 평균 내고나서
# box_off_values 열 오른차 순 정리
train[['genre','box_off_num']].groupby('genre').mean().sort_values('box_off_num')
Out[22]:
box_off_num | |
---|---|
genre | |
뮤지컬 | 6627.0 |
다큐멘터리 | 67172.3 |
서스펜스 | 82611.0 |
애니메이션 | 181926.7 |
멜로/로맨스 | 425968.0 |
미스터리 | 527548.2 |
공포 | 590832.5 |
드라마 | 625689.8 |
코미디 | 1193914.0 |
SF | 1788345.7 |
액션 | 2203974.1 |
느와르 | 2263695.1 |
In [24]:
# 숫자 소수점 지정하는 포맷팅 리셋
pd.reset_option('display.float_format')
In [25]:
# train data 의 상관 관계 알아내기
# 상관 계수: 두 개의 변수가 같이 일어나는 강도를 나타내는 수치
# -1 과 1 사이의 값을 지닌다.
# 일반적으로 0.4 이상이면 두 개의 변수 간에 상관성이 있다고 한다.
train.corr()
Out[25]:
time | dir_prev_bfnum | dir_prev_num | num_staff | num_actor | box_off_num | |
---|---|---|---|---|---|---|
time | 1.000000 | 0.264675 | 0.306727 | 0.623205 | 0.114153 | 0.441452 |
dir_prev_bfnum | 0.264675 | 1.000000 | 0.131822 | 0.323521 | 0.083818 | 0.283184 |
dir_prev_num | 0.306727 | 0.131822 | 1.000000 | 0.450706 | 0.014006 | 0.259674 |
num_staff | 0.623205 | 0.323521 | 0.450706 | 1.000000 | 0.077871 | 0.544265 |
num_actor | 0.114153 | 0.083818 | 0.014006 | 0.077871 | 1.000000 | 0.111179 |
box_off_num | 0.441452 | 0.283184 | 0.259674 | 0.544265 | 0.111179 | 1.000000 |
In [26]:
import seaborn as sns
In [27]:
# 상관성 heatmap 으로 시각화
# annot = True 는 값 cell의 값 표기 유
# annot = False 는 값 cell의 값 표기 무
sns.heatmap(train.corr(), annot = True)
Out[27]:
<matplotlib.axes._subplots.AxesSubplot at 0x7facf6a8bcd0>
In [1]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
'AI > Machine Learning' 카테고리의 다른 글
[Practical Time Series Analysis (실전 시계열 분석)] Chapter 06 시계열의 통계 모델 (0) | 2022.03.23 |
---|---|
[Practical Time Series Analysis (실전 시계열 분석)] Chapter 05 시간 데이터 저장 (0) | 2022.03.23 |
[Practical Time Series Analysis (실전 시계열 분석)] Chapter 04 시계열 데이터의 시뮬레이션 (0) | 2022.03.22 |
[Practical Time Series Analysis (실전 시계열 분석)] Chapter 03 시계열의 탐색적 자료 분석 (0) | 2022.03.20 |
[DACON] 문화 | 영화 관객수 예측 모델 개발 (0) | 2022.03.05 |