Giter VIP home page Giter VIP logo

pjt_01's Introduction

๐ŸŽpjt_01 : ํŒŒ์ด์ฌ์„ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘1

1. ํ”„๋กœ์ ํŠธ ์š”์•ฝ

์ฃผ์–ด์ง„ ๋ช…์„ธ์„œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ผ!

์ตœ๊ทผ 50์ฃผ๊ฐ„ ๋ฐ์ดํ„ฐ ์ค‘์— ์ฃผ๊ฐ„ ๋ฐ•์Šค์˜คํ”ผ์Šค TOP10๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” ํ–ฅํ›„ ํ™”ํ‰์ ์„œ๋น„์Šค์— ์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ํ™” ๋ชฉ๋ก์œผ๋กœ ์‚ฌ์šฉ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. 

๐Ÿผ ํ•„์š” ์‚ฌํ•ญ

	- python

๐Ÿผ ๋ช…์„ธ์„œ์˜ ํ•„์ˆ˜์‚ฌํ•ญ

- ์ตœ๊ทผ 50์ฃผ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”
- ์ฃผ๊ฐ„ ๋ฐ•์Šค์˜คํ”ผ์Šค TOP10๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘

๐Ÿผ ๋ช…์„ธ์„œ์˜ ์š”๊ตฌ์‚ฌํ•ญ

- ์ฃผ๊ฐ„(์›”~์ผ)๊นŒ์ง€ ๊ธฐ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
- ์กฐํšŒ ๊ธฐ๊ฐ„์€ ์ด 50์ฃผ์ด๋ฉฐ, ๊ธฐ์ค€์ผ(๋งˆ์ง€๋ง‰ ์ผ์ž)์€ 2019๋…„ 7์›” 13์ผ์ž…๋‹ˆ๋‹ค.
- ๋‹ค์–‘์„ฑ ํ™”/์ƒ์—… ํ™”๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- ํ•œ๊ตญ/์™ธ๊ตญ ํ™”๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- ๋ชจ๋“  ์ƒ์ง€์—ญ์„ ํฌํ•จํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. 01.py์— ๋Œ€ํ•œ ์„ค๋ช…

๐Ÿผ ๋ช…์„ธ์„œ์˜ ๊ฒฐ๊ณผ

- ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ์—์„œ `์˜ํ™” ๋Œ€ํ‘œ์ฝ”๋“œ`, `์˜ํ™”๋ช…`, `ํ•ด๋‹น์ผ ๋ˆ„์ ๊ด€๊ฐ์ˆ˜`๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
- `ํ•ด๋‹น์ผ ๋ˆ„์ ๊ด€๊ฐ์ˆ˜`๋Š” ์ค‘๋ณต์‹œ ์ตœ์‹  ์ •๋ณด๋ฅผ ๋ฐ˜ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- `boxoffice.csv` ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿผ 01.py ์š”์•ฝ

  • ์ˆ˜ํ–‰๊ณผ์ • - API์˜ url๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์•ผํ•จ : requests๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์ž - ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ dict ํ˜•ํƒœ๋กœ ์ €์žฅ. : .get()๊ณผ ๋ฐ˜๋ณต๋ฌธ ๊ทธ๋ฆฌ๊ณ  ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์ž. - dict์˜ ์ž๋ฃŒ๋ฅผ .csv์— ์ €์žฅํ•จ. : with open() ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์ž.
  • ์ฃผ์˜์‚ฌํ•ญ
    • dictionary์™€ ๋ฆฌ์ŠคํŠธ์™€์˜ ๊ด€๊ณ„๋ฅผ ๊ณ ๋ คํ•ดํ–ํ•จ.
    • jason ํ˜•ํƒœ์˜ ์ž๋ฃŒ์— dictionary๋กœ ๋˜์–ด์žˆ๋Š”์ง€, ๋ฆฌ์ŠคํŠธ๋กœ ๋˜์–ด์žˆ๋Š”์ง€ ๊ตฌ๋ณ„ํ•ด์•ผํ•จ.

import csv
import json
import requests
from datetime import datetime, timedelta
from decouple import config
from pprint import pprint

result = {}

for i in range(50):

    token = config('MOIVE_KOBIS_TOKEN')
    targetDt = datetime(2019,7,13) - timedelta(weeks=i)
    targetDt = targetDt.strftime('%Y%m%d')

    api_url = f'http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchWeeklyBoxOfficeList.json?weekGb=0&key={token}&targetDt={targetDt}'

    api_data = requests.get(api_url).json()
    movies = api_data.get('boxOfficeResult').get('weeklyBoxOfficeList')

    for movie in movies:
        code = movie.get('movieCd')
        if code not in result:
            result[code] = {
                'movieCd': movie.get('movieCd'),
                'movieNm': movie.get('movieNm'),
                'audiAcc': movie.get('audiAcc')
            }
    with open('boxoffice.csv', 'w', encoding='utf-8',newline='') as f:   
        fieldnames = ('movieCd', 'movieNm', 'audiAcc')
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        for value in result.values():
            #print(value)
            writer.writerow(value)

import csv
import json
import requests
from datetime import datetime, timedelta
from decouple import config
from pprint import pprint
- `import csv `: csvํŒŒ์ผ ์ƒ์„ฑ์— ํ•„์š”
- `import jason `: url์— ํ•ด๋‹น๋˜๋Š” ์ž๋ฃŒ๊ฐ€ jason์˜ dict ํ˜•ํƒœ๋กœ ์ €์žฅํ•จ.
- `import requests `:  python์–ธ์–ด๊ฐ€ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.
- `import datetime `:  ํ˜„์žฌ์‹œ๊ฐ„ ๊ณ„์‚ฐ์‹œ ํ•„์š”.
- `import config`: token๊ฐ’์„ ์ˆจ๊ธฐ๊ธฐ์œ„ํ•ด ํ•„์š”

for i in range(50):

    token = config('MOIVE_KOBIS_TOKEN')
    targetDt = datetime(2019,7,13) - timedelta(weeks=i)
    targetDt = targetDt.strftime('%Y%m%d')
- for๊ตฌ๋ฌธ์€ 50์ฃผ๊ฐ„์˜ ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•จ
- targetDt๋Š” ์ž๋ฃŒ์— ํ•„์š”ํ•œ 20190713์˜ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•˜.

 api_url = f'http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchWeeklyBoxOfficeList.json?weekGb=0&key={token}&targetDt={targetDt}'

    api_data = requests.get(api_url).json()
    movies = api_data.get('boxOfficeResult').get('weeklyBoxOfficeList')
- ์˜ํ™”์ง„ํฅ์œ„์›ํšŒ ์˜คํ”ˆ API์—์„œ ํ•„์š”ํ•œ ์ž๋ฃŒ ๊ฐ€์ ธ์˜ค๊ธฐ

for movie in movies:
        code = movie.get('movieCd')
        if code not in result:
            result[code] = {
                'movieCd': movie.get('movieCd'),
                'movieNm': movie.get('movieNm'),
                'audiAcc': movie.get('audiAcc')
            }
- for ๊ตฌ๋ฌธ์€ ๋ถˆ๋Ÿฌ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ result๋ผ๋Š” ์ƒˆ๋กœ์šด dict์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

    with open('boxoffice.csv', 'w', encoding='utf-8',newline='') as f:   
        fieldnames = ('movieCd', 'movieNm', 'audiAcc')
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        for value in result.values():
            #print(value)
            writer.writerow(value)
- boxoffice.csv์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”.

3. 02.py์— ๋Œ€ํ•œ ์„ค๋ช…

๐Ÿผ ๋ช…์„ธ์„œ์˜ ๊ฒฐ๊ณผ

  • ์œ„์˜ ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ์—์„œ ์˜ํ™” ๋Œ€ํ‘œ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์˜ํ™”๋ณ„๋กœ ์˜ํ™” ๋Œ€ํ‘œ์ฝ”๋“œ, ์˜ํ™”๋ช…(๊ตญ๋ฌธ), ์˜ํ™”๋ช…(์˜๋ฌธ), ์˜ํ™”๋ช…(์›๋ฌธ), ๊ด€๋žŒ๋“ฑ๊ธ‰, ๊ฐœ๋ด‰์—ฐ๋„, ์ƒ์˜์‹œ๊ฐ„,์žฅ๋ฅด,๊ฐ๋…๋ช…์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • movie.csv ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿผ 02.py ์š”์•ฝ

  • ์ˆ˜ํ–‰๊ณผ์ •
    • boxoffice.csv์˜ ํŒŒ์ผ์— ์ €์žฅ๋œ ์˜ํ™”๋Œ€ํ‘œ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค์ž. :with open() ํ•จ์ˆ˜ ํ™œ์šฉํ•˜์ž.
    • ์ƒˆ๋กœ์šด url ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค์ž.
    • ์˜ํ™”๋Œ€ํ‘œ์ฝ”๋“œ์— ์ผ์น˜ํ•˜๋Š” dict ํ˜•ํƒœ๋กœ ์ €์žฅ. : .get()๊ณผ ๋ฐ˜๋ณต๋ฌธ ๊ทธ๋ฆฌ๊ณ  ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์ž.
    • dict์˜ ์ž๋ฃŒ๋ฅผ .csv์— ์ €์žฅํ•จ. : with open() ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์ž.
  • ์ฃผ์˜์‚ฌํ•ญ
    • url ์ž๋ฃŒ์—์„œ dictionary์— ๋น„์–ด์žˆ๋Š” ์ž๋ฃŒ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
      • list has out of range ์˜ค๋ฅ˜๋ฐœ์ƒ : if ๋ฌธ ํ™œ์šฉ.
    • ์ž๋ฃŒ๊ฐ€ ๋ฐฉ๋Œ€ํ•ด์งˆ์ˆ˜๋ก ํ”„๋กœ๊ทธ๋žจ ์ž‘๋™ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง„๋‹ค. (1๋ถ„์ •๋„์†Œ์š”)
      • ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•  ๋•Œ์— ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ณด์ผ ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋”ฉํ•˜์—ฌ, ์‹คํ–‰๊ณผ ์ทจ์†Œ๋ฅผ ๋ฐ˜๋ณตํ•˜์ž.

import csv
import json
import requests
from datetime import datetime, timedelta
from decouple import config
from pprint import pprint

result = []

with open('boxoffice.csv', newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        code = row.get('movieCd')
        result.append(code)

result2 = {}
for code2 in result:
    token = config('MOIVE_KOBIS_TOKEN')
    info_url = f'http://www.kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieInfo.json?key={token}&movieCd={code2}'
    api_info_data = requests.get(info_url).json()
    movie_info = api_info_data.get('movieInfoResult').get('movieInfo')
    


    result2[code2] = {
        'movieCd': movie_info.get('movieCd'),
        'movieNm': movie_info.get('movieNm'),
        'movieNmEn': movie_info.get('movieNmEn'),
        'movieNmOg': movie_info.get('movieNmOg'),
        'openDt': movie_info.get('openDt'),
        'showTm': movie_info.get('showTm'),
        'watchGradeNm': movie_info.get('audits')[0].get('watchGradeNm') if movie_info.get('audits') else None,
        'genreNm': movie_info.get('genres')[0].get('genreNm') if movie_info.get('genres') else None,
        'directors': movie_info.get('directors')[0].get('peopleNm') if movie_info.get('directors') else None
        }
    

    #pprint(result2)


with open('movies.csv', 'w', encoding='utf-8',newline='') as f:   
    fieldnames = ('movieCd', 'movieNm', 'movieNmEn', 'movieNmOg', 'watchGradeNm', 'openDt', 'showTm', 'genreNm', 'directors')
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    for value in result2.values():
        #print(value)
        writer.writerow(value)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.