Chapter 02

 

▶ 요약

2-1 API 사용하기
https://www.youtube.com/watch?v=s_-VvTLb3gs&ab_channel=한빛미디어

JSON (Javascript Object Notation)
- JSON ≒ Dictionay + List
- import json
  . json.dumps()
  . json.loads()
- import pandas as pd
  . pd.read_json()

XML (eXtensible Markup Language)
- import xml.etree.ElementTree as et
  . et.fromstring()
  . *.findtext()
  . *.findall()

API (Application Programming Interface)
- import requests
  . r = requests.get(url)
  . data = r.json()

2-2 웹 스크래핑 사용하기
https://www.youtube.com/watch?v=Il6L8OtNFpc&ab_channel=한빛미디어

BeautifulSoup()
- find()
- find_all()

DataFrame의 행과 열
- loc()
  . *.loc[[0,1], ['bookname':'authors']]
  . *.loc[0:1, 'bookname':'authors']
    : DataFrame에서의 slicing은 마지막 값을 포함한다. (일반적으로는 포함하지 않는다)

 

 

▶ 기본 미션

p150의 확인 문제 1번 풀고 인증하기

 

□ 다음과 같은 데이터  프레임 df가 있을 때 loc 메서드의 결과가 다른 하나는 무엇인가요?

 

 

① df.loc[[0, 1, 2], ['col1', 'col2']]

② df.loc[0:2, 'col1':'col2']

③ df.loc[:2, [True, True]]

④ df.loc[::2, 'col1':'col2']

 

 

보기를 잘 살펴보면 ①, ②는 그냥 보면(?) 되고 ^^ 답은 ③, ④ 중 하나가 될 것이라는 것을 직감적으로 알 수 있다 !!!

③번을 실제 해보면 다음과 같이 출력이 된다.

 

 

응?! 'True' 가 도대체 어떻게 반응한다는 거지!? 해당 Column을 포함할지 안할지를 지정하는 것인가!?

그러면 조금 다른 사례를 확인해보자 !!!

 

 

그렇다!!! 가설이 맞았다. 3개의 Columns에 대해서 [참, 거짓, 참]으로 했더니 정말로 그렇게 출력이 되었다.

 

그러면, 정답은 ④이어야 하는데, 한 번 살펴보자.

 

 

'::2'라고 했기 때문에 하나씩 건너뛰라고 했기 때문에 0번행, 2번행만 출력이 되고 있다.

 

 

▶ 선택 미션

p. 137 ~ 138 손코딩 실습으로 원하는 도서의 페이지 수를 추출하고 화면 캡쳐하기.

 

① 온라인 서점의 검색 결과 페이지 URL을 만듭니다.

② requests.get() 함수로 검색 결과 페이지의 HTML을 가져옵니다.

③ BeautifulSoup로 HTML을 파싱합니다.

BeautifulSoup의 find() 메서드로 <a> 태그를 찾아 상세 페이지 URL을 추출합니다.

⑤ requests.get() 함수로 다시 도서 상세 페이지의 HTML을 가져옵니다.

⑥ BeautifulSoup로 HTML을 파싱합니다.

⑦ BeautifulSoup의 find() 메서드로 '품목정보' <div> 태그를 찾습니다.

⑧ BeautifulSoup의 find_all() 메서드로 '쪽수'가 들어있는 <tr> 태그를 찾습니다.

⑨ 앞에서 찾은 테이블의 행에서 get_text() 메서드로 <td> 태그에 들어있는 '쪽수'를 가져옵니다.

 

 

개인적으로 최근에 주로 사용하는 온라인서점이 알라딘이라서 이번 미션을 알라딘으로 해보고자 한다 ^^

 

 

URL 부분을 더 자세히 살펴보자.

 

 

응?! isbn이 아니라 Item-ID 으로 구성이 되네!?

혹시... isbn으로도 되지 않을까!?

 

 

된다 !!! ^^

어!? 그런데, 책을 다시 한 번 잘 살펴보니... 검색으로 조회 후에 상세 페이지 주소를 얻어서 진행하는 것이네...

다시 !!!

 

 

어짜피 검색에 isbn을 사용한다면

실무에서는 바로 상세페이지로 접근을 하겠지만, 우리는 공부중이니 일단 검색부터 진행해보겠다.

 

앞에서 확인한 URL을 가지고 시작했다.

 

상세 페이지 링크가 책 제목 부분에 붙어 있으므로 아래와 같은 HTML Tag 부분을 잡아내면 된다.

 

<a href="https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=329721455" class="bo3"><b>재미있는 게임 제작 프로세스</b></a>

 

아래와 같이 코딩해봤다.

 

 

여기에 있는 href 값을 이용해서 다음 웹페이지를 읽어오면 된다.

 

 

여기에서 잡아내야 하는 것은 페이지 정보이니 아래와 같은 HTML Tag 부분을 잡아내면 된다.

 

<div class="conts_info_list1"><ul><li>432쪽</li><li>188*257mm (B5)</li><li>821g</li><li>ISBN : 9788931469721</li></ul></div>

 

 

잘 살펴보면 <li> 태그 부분이 보일 것이다.

 

 

쪽 정보까지 잘 뽑아냈다~!!!

 

우리 모두 파이팅 !!!

반응형

 

▶ 요약

  ● 데이터 과학 vs 데이터 분석

    - 데이터 분석은 데이터 과학에 포함되는 one of them

    - 데이터 과학 = 데이터 분석 + 머신 러닝

 

  ● '데이터 분석'의 정의
    - 광의적 정의 : 데이터 수집/처리/정제 및 모델링을 포함한 전체 영역
    - 협의적 정의 : 기술통계, 탐색적 데이터 분석, 가설 검정

 

  이번 공부에서 사용하는 Python Package

    - Numpy
    - pandas
    - matplotlib
    - SciPy
    - scikit-learn

 

  ● 데이터 파일 확보하기

    - 이번 공부에서는 '도서관별로 공개된 장서/대출 데이터'를 사용

      . https://www.data4library.kr/openDataL
    - 한글 데이터의 경우에는 특히 인코딩에 대한 처리가 필요할 수 있음

 

  ● pandas dataframe
    - 하나의 행은 여러 데이터 타입의 열을 갖을 수 있다.
    - 하나의 열은 한 종류의 데이터타입으로만 구성된다.

 

 

▶ 기본 미션

p. 81의 확인 문제 4번 풀고 인증하기

 

4. 판다스 read_csv() 함수의 매개변수 설명이 옳은 것은 무엇인가요?

    ① header 매개변수의 기본값은 1로 CSV 파일의 첫 번째 행을 열 이름으로 사용합니다.

    ② names 매개변수에 행 이름을 리스트로 지정할 수 있습니다.

    ③ encoding 매개변수에 CSV 파일의 인코딩 방식을 지정할 수 있습니다.

    ④ dtype 매개변수를 사용하려면 모든 열의 데이터 타입을 지정해야 합니다.

 

매뉴얼을 찾아보자.

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

① header 매개변수의 기본값은 1로 CSV 파일의 첫 번째 행을 열 이름으로 사용합니다. (X)

 

header 매개변수의 기본값은 "infer"이고, 자동으로 header를 추론하게 된다.

header가 없는 경우 "None"으로 명시해줘야 한다.

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

② names 매개변수에 행 이름을 리스트로 지정할 수 있습니다. (X)

 

names 매개변수는 column 이름을 지정하기 위한 것이다.

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

③ encoding 매개변수에 CSV 파일의 인코딩 방식을 지정할 수 있습니다. (O)

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

④ dtype 매개변수를 사용하려면 모든 열의 데이터 타입을 지정해야 합니다.

 

전체 dataset의 데이터 타입을 지정할 수도 있지만, 개별 column의 데이터 타입을 지정할 수도 있다.

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

▶ 선택 미션

p. 71 ~ 73 남산 도서관 데이터를 코랩에서 데이터프레임으로 출력하고 화면 캡처하기

 

→ 다음 순서대로 진행해보겠다.

  ① 도서관 데이터 다운로드 받기

  ② 구글 드라이브에 업로드 하기

  ③ Colab 실행해서 코드 작성하기

 

차근 차근 진행해보자.

 

① 도서관 데이터 다운로드 받기

  - https://www.data4library.kr/

https://www.data4library.kr/

 

상단 탭 메뉴에서 "데이터 제공"을 선택하고 받고자 하는 도서관을 선택해보자.

나는 ... 우리 동네 도서관을 골라봤다 ^^

데이터 제공 - 도서관 선택

 

"도서관명"을 클릭하면 상세 화면이 나온다.

상세 화면

 

하단에 있는 리스트 중에서 마음에 드는 것을 하나 고르고,

다운로드에서 "Text"를 선택하면 CSV 파일을 다운로드 받을 수 있다.

 

② 구글 드라이브에 업로드 하기

구글 드라이브에 들어가서 이번 공부에서 사용할 폴더를 하나 새로 만들자.

https://drive.google.com/

 

앞에서 다운로드 받은 파일을 업로드 하자.

파일 업로드

 

③ Colab 실행해서 코드 작성하기

이번 공부를 위한 새 노트를 하나 만들자.

https://colab.research.google.com/

 

교재를 보면 'gdown' 패키지를 통해서 구글 드라이브에 있는 파일을 다운로드 받을 수 있다고 하는데,

내가 멍청해서인지.... 성공하지 못했다.

 

이유는 아마도 인증 관련해서 처리가 안되어서인 것 같은데,

구글 드라이브에 있는 파일을 누구나 다운로드 받을 수 있도록(인증 없이 다운로드 되도록)

권한을 처리해주면 될 것 같기는 하지만.... 여하튼, 그냥 사용하기에는 이슈가 있었다.

 

하지만, 우리의 Colab은 구글 드라이브를 편하게 사용할 수 있도록 기능을 제공해준다!!!

Drive Mount

 

왼쪽 위의 저 메뉴를 누르면 된다.

액세스 허용

 

Google Drive 연결을 진행하면 된다.

mount

 

drive라는 폴더에 Google Drive가 마운트 되어있는 것을 확인할 수 있다.

우리는 이제 그냥 사용하면 된다.

 

파일 경로를 일일이 타이핑하려면 힘드니까 편하게 복사하자.

경로 복사

 

이번 숙제의 소스코드는 정말 심플하다.

code

 

실행 결과는 다음과 같다.

pd.read_csv()

 

이번 공부는 여기까지~

반응형

+ Recent posts