- Outline : 2022๋ 1์ 21์ผ, ๋๋ ์ธ์์์ ์ฒซ ํ๋ก์ ํธ๋ฅผ ์ ํ์๋ค. ๊ฐ๋จํ ํ๋ก์ ํธ๋ผ๊ณ ์๊ฐ๋์์ง๋ง, ๋ฌด์์ด๋ ๋์๊ฒ๋ ์์คํ ๊ฒฝํ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์งํํ๋ฉด์ ๋ด๊ฐ ๋๊ผ๋ ์ ์ ์ค์ฌ์ผ๋ก ์๊ฐํด ๋ณด๊ณ ์ ํ๋ค.
(This project was carried out in Python 3.9.9 environment.)
- ์๊ตฌ์ฌํญ : ์ปค๋ฎค๋ํฐ ์๋น์ค ๊ฐ๋ฐ์ ์ํ ๋ฐ์ดํฐ ์์ง ๋จ๊ณ๋ก, ์ ์ฒด ๋ฐ์ดํฐ ์ค ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํด ๋๊ฐ๋ ๊ณผ์ ์ ์งํํฉ๋๋ค. ์ด 5๊ฐ์ ๊ตฌํ ๊ณผ์ ์ด ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ํ์ฉํ๋ ๊ณผ์ ์ ์๊ตฌํฉ๋๋ค.
: ์ํ ์ํ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ง ๋, ์๋น์ค ๊ตฌ์ฑ์ ํ์ํ ์ ๋ณด๋ง์ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํ๋ค.
import json
from pprint import pprint
def movie_info(movie):
my_dict = dict() #๋น์ด์๋ ๋์
๋๋ฆฌ ๋ง๋ค๊ธฐ.
my_dict['id'] = movie.get('id') #์์ฑ๋ ๋์
๋๋ฆฌ์ ์ํ๋ ์ ๋ณด๋ง์ ๋ด๋๋ค.
my_dict['title'] = movie.get('title')
my_dict['poster_path'] = movie.get('poster_path')
my_dict['vote_average'] = movie.get('vote_average')
my_dict['overview'] = movie.get('overview')
my_dict['genre_ids'] = movie.get('genre_ids')
return my_dict #์ํ๋ ์ ๋ณด๋ค์ ๋ด์ ๋์
๋๋ฆฌ๋ฅผ ๋ฐํ.
์ฒซ ๋ฒ์งธ ์ ํ์ ์ผ์ด์ค๋ฅผ ์ํํ๋ฉด์, ๋ฐฐ์ ๋ ๋์ ๋๋ฆฌ๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ณ ์ฐฐ์ด ํ์ํ์ผ๋ฉฐ ์ง์์ ๊นจ์ฐ์นจ์ผ๋ก ๋๋๋ ๊ฒ์ด ์๋๋ผ ํ์ฉํ์ฌ ํํํด ๋ด์ผ ํ๋ ๊ฒ์ ๋ํ ๋ถ๋ด์ ๋๊ผ๋ค.
๋ํ, ์ ์ฐจ ํด๊ฒฐํด ๋์๊ฐ์๋ก ์ด ํ๋ก์ ํธ๊ฐ ์๊ตฌํ๋ ๊ฒ์ด ์ด์ ๊ฐ์ ๋ฌธ์ ํด๊ฒฐ ์ญ๋์ด๋ผ๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋์๋ค.
: ์ด์ ๋จ๊ณ์์ ๋ง๋ค์๋ ๋ฐ์ดํฐ ์ค genre_ids๋ฅผ genre_names๋ก ๋ฐ๊ฟ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํ๋ค.
import json
from pprint import pprint
import problem_a #์ด์ ๋ฌธ์ ์์ ๋ง๋ค์๋ problem_a๋ฅผ ๊ฐ์ ธ์จ๋ค.
def movie_info(movie, genres):
#์ด์ ๋ฌธ์ ์์์ movie_info ํจ์๋ฅผ ๋ถ๋ฌ์ค๋ฉฐ, genre_names ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค.
my_dict = problem_a.movie_info(movie)
genre_names = list()
#popํจ์๋ฅผ ์ฌ์ฉํ์ฌ, genre_ids๋ฅผ genre_names๋ก ๋ฐ๊พธ๋ ค๊ณ ๊ณํํ์๋ค.
genre_id_repository = my_dict.pop('genre_ids')
#๋ฐ๋ณต๋ฌธ์ ํตํด id๋ฅผ name์ผ๋ก ๋์ฒดํ ์ ์๋๋ก ํฉ๋๋ค.
for i in genres:
#๋ฐ๋ณต๋ฌธ ์์ ์กฐ๊ฑด๋ฌธ์ ํตํด ๋์ผํ id์ name์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ์๋ค.
if i.get('id') in genre_id_repository:
genre_names.append(i.get('name'))
my_dict['genre_names'] = genre_names
return my_dict
๋ ๋ฒ์งธ ์ ํ์ ์ผ์ด์ค๋ฅผ ์ํํ๋ฉด์, ์ด์ ํจ์๋ฅผ ๊ทธ๋๋ก ๋ถ๋ฌ์ค๋ ๊ณผ์ ๋ํ ์ง์ ํ์ฉํด ๋ณผ ์ ์์์ผ๋ฉฐ, ์ฝ๊ฐ์ ์ํ์ฐฉ์ค ๋์ ๊ฒฐ๊ตญ ์์ฑํ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
๋ฐ๋ณต๋ฌธ ์์ ์กฐ๊ฑด๋ฌธ์ ์ค๊ณํ๋ ๊ณผ์ ์์ ๋ง์ด ๊ณ ๋ฏผํ ํ์๊ฐ ์์์ผ๋ฉฐ, ๋ง์ง๋ง ๋ณ๊ฒฝ ๋จ๊ณ์์ del ํจ์๋ฅผ ์ญ์ ํ๊ณ pop ํจ์๋ก ๋ณ๊ฒฝํ์ฌ ์ง๊ด์ ์ผ๋ก ํํ๋ ์ ์๋๋ก ๊ฐ๊พธ์ด ์ฃผ์๋ค.
: TMDB๊ธฐ์ค ํ์ ์ด ๋์ 20๊ฐ์ ์ํ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ง๋๋ฐ, ๊ทธ ์ค ์๋น์ค ๊ตฌ์ฑ์ ํ์ํ ์ ๋ณด๋ง ๋ฝ์ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํ๋ค. ์์ฑ๋ ํจ์๋ ํฅํ ์ปค๋ฎค๋ํฐ ์๋น์ค์์ ์ ๊ณต๋๋ ์ํ ๋ชฉ๋ก์ ์ ๊ณตํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
import json
from pprint import pprint
import problem_b #์ด์ ๋ฌธ์ ์์ ๋ง๋ค์๋ problem_b๋ฅผ ๊ฐ์ ธ์จ๋ค.
def movie_info(movies, genres):
dict_names_changer = list()
for movie in movies:
#๋ฆฌ์คํธ์ ๊ฐ ์ํ๋ง๋ค id๊ฐ์ ์ฅ๋ฅด๋ก ๋ฐํํ์ฌ ์ํ๋ค์ ์ ์ฒด ์ ๋ณด๋ฅผ ์์ ํ๋ค.
dict_names_changer.append(problem_b.movie_info(movie, genres))
#๋์ ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐํ์์ผ์ค๋ค.
return dict_names_changer
์ธ ๋ฒ์งธ ์ ํ์ ์ผ์ด์ค๋ฅผ ์ํํ๋ฉด์, ๊ทธ๋์ ๋ฐฐ์ ์๋ ๋ชจ๋ ๊ฐ๋ ์ ํผํฉํ์ฌ ์ฌ์ฉํ๋ ค ํ์๋ค.
๊ทธ๋ฌ๊ธฐ์ ์ฆ์ ์ค๋ฅ๋ฅผ ๋ง์ฃผํ๊ฒ ๋์๊ณ , ์ค๋ฅ ์ฌํญ๋ค์ ์์ ํ๋ฉด์ ๋ ๋ง์ ๊ฒ์ ๋ฐฐ์ธ ์ ์์๋ค๊ณ ์๊ฐํ๋ค.
๊ฒฐ๊ตญ ๋ชจ๋ ํญ๋ชฉ๋ค์ ์์ ์์ผ์ฃผ๋ ํจ์๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ ์ ์์๋ค.
: ์ธ๋ถ์ ์ธ ์ํ ์ ๋ณด ์ค ์์ต ์ ๋ณด(revenue)๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ ์ํ ์ค ๊ฐ์ฅ ๋์ ์์ต์ ๋ธ ์ํ๋ฅผ ์ถ๋ ฅํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๊ฒ ํ๋ค. ๋ํ ํด๋น ๋ฐ์ดํฐ๋ ํฅํ ์ปค๋ฎค๋ํฐ ์๋น์ค์์ ๋ฉ์ธ ํ์ด์ง ๊ธฐ๋ณธ์ ๋ณด๋ก ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
from encodings import utf_8
import json
def max_revenue(movies):
revenue_first = 0
revenue_name = ''
for i in movies:
#๋ฐ๋ณต๋ฌธ์ ํตํด, 'id'๋ฅผ ์์งํ๊ฒ ํ๋ ๋ณ์๋ฅผ ๋ง๋ค์๋ค.
movie_id = i.get('id')
#ํด๋น ํด๋๋ฅผ ์คํํ์ฌ ๊ทธ์ ๋ง๋ ์ ๋ณด๋ง์ ํ์ธํ ์ ์๋๋ก ๊ตฌํํ์๋ค.
movie_info_json = open('data/movies/%d.json' % movie_id, encoding='UTF8')
movie_info = json.load(movie_info_json)
#์กฐ๊ฑด๋ฌธ์ ํตํด, 'revenue'์ ๊ฐ์ ๋น๊ตํด ๋ณด๋ฉด์ ๊ฐ์ฅ ๋์ ๊ฐ๋ง์ ๋ฐ๊ฒฌํ ์ ์๊ฒ ํ์๋ค.
if revenue_first <= movie_info.get('revenue'):
revenue_first = movie_info.get('revenue')
revenue_name = i.get('title')
return revenue_name #๋์ผ๋ก, ๋ชฉํ๋ก ์ค์ ํ ์ํ์ ์ ๋ชฉ์ ๋ฐํํ ์ ์๊ฒ ํ์๋ค.
๋ค ๋ฒ์งธ ์ ํ์ ์ผ์ด์ค๋ฅผ ์ํํ๋ฉด์, ์ ๋ง ํด๋น ๋ชฉ์ ์ ๊ฐ์ง ์๋ขฐ๋ฅผ ํด๊ฒฐํด ๋์๊ฐ ์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํ๋ค. ์ด๋ค ์ํฉ์ ์ง๋ฉดํ๊ฒ ๋ ์ง ๋ชจ๋ฅด๋๊น ๋ง์ด๋ค.
๋ฐ๋ณต๋ฌธ ์์ ์กฐ๊ฑด๋ฌธ์ ์ค๊ณํ๋ ๊ณผ์ ๊ณผ ์๋ก์ด ๋ณ์๋ฅผ ๋ง๋ค์ด์ ๋น๊ตํ ์ ์๊ฒ ๋ง๋๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํด ๋์๊ฐ๋ฉด์ ๊ทธ๋์์ ํ์ต์ ๋ํ ๋ณด๋์ ๋๋ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
: ์ธ๋ถ์ ์ธ ์ํ ์ ๋ณด ์ค ๊ฐ๋ด์ผ ์ ๋ณด(release_date)๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ ์ํ ์ค 12์์ ๊ฐ๋ดํ ์ํ๋ค์ ์ ๋ชฉ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๋ค. ํด๋น ๋ฐ์ดํฐ๋ ํฅํ ์ปค๋ฎค๋ํฐ ์๋น์ค์์ ์ถ์ฒ๊ธฐ๋ฅ์ ์ ๋ณด๋ก ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
import json
def dec_movies(movies):
my_lst = list()
for i in movies:
movie_id = i.get('id')
#ํด๋น ํด๋๋ฅผ ์คํํ์ฌ ๊ทธ์ ๋ง๋ ์ ๋ณด๋ง์ ํ์ธํ ์ ์๋๋ก ๊ตฌํํ์๋ค.
movie_info_json = open('data/movies/%d.json' % movie_id, encoding='UTF8')
movie_info = json.load(movie_info_json)
movie_when = movie_info.get('release_date')
#12์์ ๋ง๋ค์ด์ง ์ํ์ ์ ๋ชฉ์ ์ฐพ๋ ๊ณผ์ ์์ ๋ง์ ์ ๊ทผ๋ฐฉ๋ฒ๋ค์ด ๋ ์ฌ๋์ง๋ง,
#๊ฒฐ๊ตญ ์กฐ๊ฑด๋ฌธ ์์์ slicing์ผ๋ก ์ ๊ทผํ ์ ์์๋ค.
if movie_when[5:7:1] == '12':
my_lst.append(i.get('title'))
return my_lst #๋์ผ๋ก, ๋ชฉํ๋ก ์ค์ ํ ์ํ์ ์ ๋ชฉ์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ๋ฐํํ์๋ค.
๋ง์ง๋ง ์ผ์ด์ค๋ฅผ ์ํํ๋ฉด์, ์ด๋ ๋ค ๋ฒ์งธ ์ ํ์ ์ผ์ด์ค๋ฅผ ํด๊ฒฐํ ๋์ ๊ต์ฅํ ๋ฎ์์๋ค๋ ์ ์ ๋ง์ด ๋๊ผ๋ ๊ฒ ๊ฐ๋ค.
๋จ ํ ๋ฒ์ ์ค๋ฅ๋ฅผ ๋ง์ฃผํ๊ณ ๋๋ด ์คํํ ์ ์์๋ค๋ ์ ์ ์ค์ค๋ก๋ฅผ ๋๊ฒฌํ๊ฒ ๋ง๋ค์ด ์ฃผ์๋ค.
์ฒซ ํ๋ก์ ํธ์ธ ๋งํผ ๋ ๋ง์ ๊ฒ์ ํด๊ฒฐํ ๋ค๊ธฐ๋ณด๋ค๋ ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ๋ค์ ์ผ๋ง๋ ํ์ฉํ ์ ์๋์ง์ ๋ํด์ ์ด์ ์ ๋ง์ถ์๋ค. ์กฐ๋ฐ์ฌ ๋ด์ง ์๊ณ ์ฒ์ฒํ ์ํํด๋ ์ค์ค๋ก ๋ง์กฑํ์์ผ๋ฉฐ, ๊ทธ๋ฌ๊ธฐ์ ์ค์๋ ์ต๋ํ ์ค์ผ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด "๊ฐ๋ฐ์๋ ๋ฌด์์ธ๊ฐ?"๋ผ๋ ์๊ฐ์ ์ค์ค๋ก์๊ฒ ๋ง์ด ๋ฌผ์ด๋ณด๊ธฐ๋ ํ์์ผ๋ฉฐ, ์ค์ค๋ก์๊ฒ ๋ตํ๊ธฐ๋ ํ์๋ค. ๊ทธ ๋์ ๋ค์๋ ์๊ฐ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฐ๋ฐ์๋ ๊ฒฐ๊ตญ, ์ํฉ์ ๋จธ๋ฆฟ์์ผ๋ก ๊ตฌ์ํ๊ณ ์ค์ผ์นํ์๋ 'ํ๊ฐ'์ผ ์๋ ์๊ณ , ์๋ชป๋ ์ ์ ๊ฐ์ ํด ์ฃผ๋ '์๋ฆฌ๊ณต'์ผ ์๋ ์๊ณ , ์์์ ๊ฒฐ๊ตญ ํ์ค๋ก ๋ฐ๊พธ์ด ์ฃผ๋ '๋ฐ๋ช ๊ฐ'์ผ ์๋ ์๋ค๊ณ ์๊ฐํ์๋ค.
"๊ฐ๋ฐ์๋ ๋ถ๋ช ํ ์ด๋ค ๊ฒ์ด๋ค."๋ผ๊ณ ํ์คํ๊ฒ ๋งํ ์๋ ์๋ ๋ ์ง๋ง, ๋ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด ๋์๊ฐ๊ณ ์๋ค. ๊ทธ์ ๊ฑธ์ด๊ฐ ๋ฟ์ด๋ค.