728x90

06.파이썬(python) 오픈api json파일 가져오기

 

요즘 많은 공공데이터들을 json파일로 공개를 하고 있습니다.

csv파일로 다운로드를 받을수 있게 해 놓는 경우도 있지만 json으로만 공개하는 경우도 많기 떄문에

파이썬을 통해 json파일을 파싱하는 법에 대해서 알아보겠습니다.

 

kobis라는 영화진흥위원회 오픈api를 파싱해 볼건데

http://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do

위 링크를 들어가면 회원가입을 해서 key값을 따로 받지 않아도 json url을 통해 접근이 가능하기 때문에

이 곳의 영화목록 데이터를 사용하겠습니다.

 

위 페이지 가장 아래쪽에 xml과 json이라고 써있는 url이 있는데 저희는 json파일을 사용할 것이기 떄문에

json에 있는 url을 복사해서 가져오겠습니다.

 

그전에 먼저 파싱에 필요한 패키지부터 import해야합니다.

import 후 movieURL에 복사해둔 url을 넣어주겠습니다. 

 

 

 

링크를 보면 여러개의 요청변수를 볼 수 있는데

저는 &openStartDt=2017&itemPerPage=40를 url뒤에 추가해줘서

2017년에 오픈한 데이터 40개를 가져와 보겠습니다.

 

json파일을 보면 파이썬의 딕셔너리 형식으로 되어 있고 파싱한 json파일을 파이썬의 딕셔너리 구조로 저장을 해주어야 합니다.

 

 

 

 

movieData를 보면 딕셔너리 형식으로 'movieListResult','source','movieList'등 여러 값들이 들어와 있는것을 확인할 수 있는데

변수들이

\uc601\ud654\uc9c4\ud765\uc704\uc6d0\ud68c 

이런식으로 이상하게 들어와 있습니다.

일단 이부분은 넘어가고 뒤에서 설명하겠습니다.

 

이제 파싱해온 movieData를 DataFrame으로 만들어 주겠습니다.

많은 변수들중 저는 movieCd, movieNm, movieNmEn, openDt, peopleNm을 가져올 거기 떄문에

이 변수이름을 가진 DataFrame을 먼저 생성하겠습니다.

 

결과값을 보면

이러한 DataFrame이 생성된 걸 확인할 수 있습니다.

 

파이썬 딕셔너리는 계층구조로 key값을 통해 value값을 얻을수 있는데

앞에 포스팅한 간단한 딕셔너리구조에 대해 이해하고 있으면 쉽게 value값을 가져올 수 있을것 입니다.

계층 구조이기 때문에 한번에 원하는 변수에 접근하기가 어렵습니다.

 

{u'movieListResult': {u'source': u'\uc601\ud654\uc9c4\ud765\uc704\uc6d0\ud68c', u'totCnt': 786, u'movieList': [{u'prdtStatNm': u'\uac1c\ubd09\uc608\uc815', u'movieCd': u'20178121', u'repNationNm': u'\uc911\uad6d', u'prdtYear': u'2015', u'directors': [], u'movieNmEn': u'Boonie Bears : Homeward Journey', u'movieNm': u'\ubd80\ub2c8\ubca0\uc5b4:\ub85c\uac70\ube45 \ucef4\ubc31\ud648 \ud504\ub85c\uc81d\ud2b8', u'openDt': u'20170629', u'repGenreNm': u'\uc560\ub2c8\uba54\uc774\uc158', u'typeNm': u'\uc7a5\ud3b8', u'nationAlt': u'\uc911\uad6d', u'companys': [], u'genreAlt': u'\uc560\ub2c8\uba54\uc774\uc158'}, {u'prdtStatNm': u'\uac1c\ubd09', u'movieCd': u'20177781', u'repNationNm': u'\uc77c\ubcf8', u'prdtYear': u'2016', u'directors': [{u'peopleNm': u'\ubaa8\ub9ac \ud788\ub370\ud1a0\ub77c'}], u'movieNmEn': u'Hentaidantituma', u'movieNm': u'\ubcc0\ud0dc\uac00 \ub41c \ub0b4 \uc544\ub0b4', u'openDt': u'20170609', u'repGenreNm': u'\uba5c\ub85c/\ub85c\ub9e8\uc2a4', u'typeNm': u'\uc7a5\ud3b8', u'nationAlt': u'\uc77c\ubcf8', u'companys': [], u'genreAlt': u'\uba5c\ub85c/\ub85c\ub9e8\uc2a4,\ub4dc\ub77c\ub9c8'}, {u'prdtStatNm': u'\uac1c\ubd09', u'movieCd': u'20177783', u'repNationNm': u'\uc77c\ubcf8', u'prdtYear': u'2016', u'directors': [{u'peopleNm': u'\uc720\ud0a4\uce58 \uc624\uce20\uce74'}], u'movieNmEn': u'FLARE', u'movieNm': u'\ud50c\ub808\uc5b4', u'openDt': u'20170609', u'repGenreNm': u'\uba5c\ub85c/\ub85c\ub9e8\uc2a4', u'typeNm': u'\uc7a5\ud3b8', u'nationAlt': u'\uc77c\ubcf8', u'companys':

 

movieIdData를 보면 위에처럼 나오는데

가장 앞에잇는 movieListResult에 접근한뒤
그 안에있는 movieList에 접근해야 합니다.

 

여기까지 보면 다음 변수들은 [{},{},{}]형식으로 movieList들이 쭉 저장되어 있는데

우선 첫번째에 있는 movieNm을 가져와보겠습니다.

 

 

이렇게 하면 결과값으로

부니베어:로거빅 컴백홈 프로젝트

가 나오는걸 볼 수 있는데 print를 안해주면 아까 위에처럼 안나오고 한글로 바뀌어 출력됩니다.

 

다음은 for문을 사용해서 가져오려던 변수값들을 한번에 쭉 가져오는 코드입니다.


 

 

마지막에 peopleNm을 if,else문으로 구분해준 이유는

api를 제공할때 모든 변수값을 100%정확히 해주는게 아니고 빠진 값들도 있기때문에

해당 값이 없을때 아무것도 넣지말라는 예외처리를 해주어야 합니다.

안해주면 movieIdData len과 어긋나면서 오류가나게 됩니다.

 

movieIDDF

를 확인해보면

 

 

 

이런식으로 쭉 입력이 된것을 확인할수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
05.파이썬(python) 조건문, if문

 

파이썬의 if문은 몇가지 주의점만 조심하면, 다른 언어를 사용했던 분들은 아주쉽게 사용할 수 있습니다.

기본 구조는

으로 이루워져 있습니다.

 

여기에서 주의할점은 if문에서 조건문을 ()로 묶어주는것이 아니고 마지막에 : 을 붙여줘야 한다는 점과

파이썬에는 문장 마지막에 ;이 없고 줄을 변경하면 문장이 끝나기 때문에 주의해야 합니다.

또, 자바나 C에서는 수행동작부분을 {}로 묶어주지만 파이썬에서는 들여쓰기(tab)으로 구분하기 때문에

if문 안에서 동작할 부분은 들여쓰기를 한후 작성해줘야 오류가 나지않고 돌아갑니다.

 

간단한 if문을 작성해 보겠습니다.

 

리스트를 통해서도 if문에 접근을 할 수 있습니다.

 

이경우 a가 list에 있기 떄문에 "a 입니다"를 출력할 것이고

 

이경우 a가 list에 없기 땨문에 "아무것도아닙니다"가 출력될 것입니다

 

다음은 elif입니다. elif는 java에서 else if와 같은 것입니다.

 

if문과 다른점은

 

if 조건1:

if 조건2:

 

가 있을때 두 if문 모두 판단하지만

 

if 조건1:

elif 조건2:

 

경우 조건1이 만족한다면 elif를 생략하고 넘어가고

조건1이 불만족한다면 조건2를 판단한다는 점입니다.

 

 

728x90

04.파이썬(python) 집합(set) 자료형 

 

 

집합(set) 자료형에 대해서 알아보겠습니다.

우선 집합 자료형의 특징은 중복이 안되고, 순서가 없는 자료형이라 인덱스로 접근이 불가능하다는 점 입니다.

 

집합 자료형은 

 

set1 = set(["a","b","c","a"]) #집합 자료형 선언 방법1

set2 = {"a","b","c","a"} #집합 자료형 선언 방법2

 

이렇게 두가지로 선언을 해줄수 있습니다.

위에서 보면 a가 2개씩 들어갔지만 집합 자료형은 중복이 안되기 때문에 

{'a', 'b', 'c'} 이러한 결과값을 볼 수 있습니다.

 

집합 자료형은 인덱스로 접근이 불가능하다고 했기때문에

인덱스로 접근하려면 리스트로 변경을 해줘야 합니다.

 

set1 = set(["a","b","c"])

list1 = list(set1) #집합을 리스트로 변환

 

다음은 교집합, 합집합, 차집합입니다.

 

#교집합, 합집합, 차집합 구하기

set1 = set([1,2,3,4,5])

set2 = set([3,4,5,6,7])

 

#교집합 

print(set1 & set2)

print(set1.intersection(set2))

 

{3, 4, 5} #결과

 

#합집합

print(set1 | set2)

print(set1.union(set2))

{1, 2, 3, 4, 5, 6, 7} #결과

 

#차집합

print(set1 - set2)

print(set2.difference(set1))

{1, 2} #결과

{6, 7} #결과

 

#값 1개 추가하기(add)

set1 = {1, 2, 3}

set.add(4)

s1 #결과값 = {1, 2, 3, 4}

 

#값 여러개 추가하기(update)

set1 = {1, 2, 3}

set.update([4, 5, 6])

s1 #결과값 = {1, 2, 3, 4, 5, 6}

 

#특정값 제거(remove)

set1 = {1, 2, 3}

set.remove(2)

s1 #결과값 = {1, 3}

728x90

 

01_olive.csv
다운로드

 

 

파이썬(python) csv파일 읽어오기,쓰기 (FIle I.O), pandas

 

 

pandas를 이용하여 csv파일을 읽어와서

변수명 변경및 생략등으로 데이터를 처리한뒤

다시 csv로 저장하는 방법을 알아보겠습니다.

 

먼저 pandas를 사용하기위해 import를 하겠습니다.

 

#pandas import

import pandas as pd

 

그다음 csv파일이 저장되어있는 경로를 testCSV_path로 넣어준뒤

pd.read_csv를 이용하여 ilive_oil에 저장해 줍니다.

csv파일은 첨부파일로 올렸습니다.

 

 

#읽어온후 저장

testCSV_path = "C:\\Users\\acorn\\Desktop\\python2\\sampledata\\01_olive.csv"

olive_oil = pd.read_csv(testCSV_path)

 

 

 

#상위 3줄 출력

olive_oil.head(3) #결과

 

 

 

다음은 csv를 불러올때 맨 윗열을 컬럼명으로 쓰는데

컬럼명을 안쓰고 맨위파일을 value로 넣고싶으면 header=None을 써주면 됩니다.

 

olive_oil = pd.read_csv(testCSV_path,header=None) #컬럼이름이 value로 들어가버림
olive_oil.head(3) #결과

 

 

다음은 컬럼명을 바꿔주는 코드입니다.

 

olive_oil.columns[0]:"id_area로 0번째 컬럼명을 id_area로 바꿔주는것 입니다.

 

olive_oil.rename(columns = {olive_oil.columns[0]:"id_area"},inplace=True) #컬럼명 변경
olive_oil.head(3)

 

 

 

 

 

다음 방법으로 변수명을 입력해 줄수도 있는데, 칼럼갯수랑 맞춰서 names에 입력을 해줘야

각각 칼럼에 맞게 들어갑니다.

밑에 예시는 컬럼명과 names 갯수가 안맞을 경우입니다.

 

 

 

olive_oli = pd.read_csv(testCSV_path, names=["a","b","c","d"]) #칼럼이랑 갯수 맞춰서 해줘야됨
olive_oli.head(3)

 

 

 

 

마지막으로 변경한 csv파일을 해당 경로에 저장해주는 코드입니다.

" " 안에 저장하고 싶은 경로를 넣어주면 됩니다.

 

#출력하기 ,csv파일로 저장
olive_oil.to_csv("C:\\Users\\acorn\\Desktop\\python2\\sampledata\\olive.csv")

 

 

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

+ Recent posts