-
[혼자 공부하는 데이터 분석 with 파이썬] 02 데이터 수집하기카테고리 없음 2023. 9. 9. 23:06
02-1 API 사용하기
01) 파이썬에서 JSON 데이터 다루기
JSON : 파이썬 딕셔너리와 리스트를 합쳐놓은 것과 유사
{"name":"혼자 공부하는 데이터 분석"}
json 형식으로 파이썬 딕셔너리 만들기
d={"name":"혼자 공부하는 데이터 분석"}print(d['name'])혼자 공부하는 데이터 분석
01-1 파이썬 객체를 JSON 문자열로 변환하기 : json.dumps() 함수
json.dumps() 함수 : 파이썬 객체=> JSON 형식에 맞는 텍스트로 바꿀때
import jsond_str=json.dumps(d,ensure_ascii=False)print(d_str){"name": "혼자 공부하는 데이터 분석"}
print(type(d_str))<class 'str'>
01-2 JSON 문자열을 파이썬 객체로 변환하기 : json.loads() 함수
json.loads() 함수 : JSON 문자열 => 파이썬 객체
d2=json.loads(d_str)print(d2['name'])혼자 공부하는 데이터 분석
print(type(d2))<class 'dict'>
딕셔너리 안에 리스트 포함시키기
d3=json.loads('{"name":"혼자 공부하는 데이터 분석","author":["박해선","홍길동"],"year":2022}')print(d3['author'][1])홍길동
JSON 배열 :
[] => JSON 배열
{} => JSON 객체
[ {JSON 객체1}, {JSON 객체2} ]
문자열이 길기 때문에 """ 를 사용
d4_str="""[{"name":"혼자 공부하는 데이터 분석","author":"박해선","year":"2022"},{"name":"혼자 공부하는 머신러닝+딥로닝","author":"박해선","year":"2020"}]"""print(type(d4_str))d4=json.loads(d4_str)print(d4[0]['name'])print(type(d4))<class 'str'> 혼자 공부하는 데이터 분석 <class 'list'>
01-3 JSON 문자열을 데이터프레임으로 변환하기 : read_json() 함수
read_json() 함수 : JSON 문자열 => 데이터프레임
: 판다스에서 제공
import pandas as pdpd.read_json(d4_str)name author year 0 혼자 공부하는 데이터 분석 박해선 2022 1 혼자 공부하는 머신러닝+딥로닝 박해선 2020 DataFrame 클래스 사용 : JSON 문자열=> 파이썬 객체로 만들고 데이터프레임 클래스 사용
pd.DataFrame(d4)02) 파이썬에서 XML 데이터 다르기
XML : eXtensivle Markup Language
: 엘리멘트들이 계층 구조를 이루면서 정보를 표현함
: 태그가 붙음 <>
: <부모 엘리멘트> <자식엘리멘트 > 난 자식 </자식 엘리멘트> </부모 엘리멘트>
02-1 XML 문자열을 파이썬 객체로 변환하기 : fromstring() 함수
fromstring() 함수 : 문자열 => XML
: xml.etree.ElementTree 모듈의 fromstring() 함수
XML을 파이썬의 """ 로 문자열로 만들기
파이썬에서 제공하는 XML 패키지를 사용해 읽기
x_str = """<book><name>혼자 공부하는 데이터 분석</name><author>박해선</author><year>2022</year></book>"""import xml.etree.ElementTree as etbook = et.fromstring(x_str)print(type(book))<class 'xml.etree.ElementTree.Element'>
book 객체의 tag 속성을 출력하면 엘리먼트 이름을 쉽게 확인할 수 있다.
print(book.tag)book
02-2 자식 엘리먼트 확인하기 : findtext() 메서드
book 객체를 리스트로 변환하여 자식 엘리먼트 구하기
book_childs = list(book)print(book_childs)[<Element 'name' at 0x79b4734f1e90>, <Element 'author' at 0x79b4734f27f0>, <Element 'year' at 0x79b4734f1c10>]
book_childs 리스트 각 항목을 name, author, year 변수에 할당하고
text 속성으로 엘리멘트에 있는 텍스트로 출력
name,author,year=book_childsprint(name.text)print(author.text)print(year.text)혼자 공부하는 데이터 분석 박해선 2022
findtext() 메서드 : 해당하는 자식 엘리먼트를 탐색하여 자동으로 텍스트로 반환
name = book.findtext('name')author = book.findtext('author')year = book.findtext('year')print(name)print(author)print(year)혼자 공부하는 데이터 분석 박해선 2022
XML 은 JSON과 달리 배열 구조가 없음
대신 다음처럼 두개의 <book> 엘리먼트를 감싸는 부모 엘리먼트를 만듦
x2_str = """<books><book><name>혼자 공부하는 데이터 분석</name><author>박해선</author><year>2022</year></book><book><name>혼자 공부하는 머신러닝+딥러닝</name><author>박해선</author><year>2020</year></book></books>"""이제 x2_str의 부모 엘리먼트는 <book>이 아니라 <books> 가 된다
fromstring() 함수를 사용해 부모 엘리먼트를 확인
books =et.fromstring(x2_str)print(books.tag)books
02-3 여러 개의 자식 엘리먼트 확인하기 : findall() 메서드와 for 문
findall() 메서드 : 동일한 이름을 가진 여러 개의 자식 엘리먼트를 찾기
for book in books.findall('book'):name=book.findtext('name')author=book.findtext('author')year=book.findtext('year')print(name)print(author)print(year)print()혼자 공부하는 데이터 분석 박해선 2022 혼자 공부하는 머신러닝+딥러닝 박해선 2020
03) API로 20대가 가장 좋아하는 도서 찾기
03-1 파이썬으로 API 호출하기 : requests 패키지
requests 패키지 : url 호출하기
requests.get() 함수 : get ()함수가 반환하는 값은 API 호출의 결과를 담고 있는 객체
import requestsdata=r.json()print(data)