실습 정리
0117 키워드
<주피터 노트북>
.py 파일을 편집할 때는 -> 파이썬 내장 IDE, 주피터 Lab, 메모장, vi, Visual Studio Code, PyCharm, 서브라임텍스트 등 → 자신에게 가장 편한 것으로 사용
zerompq 오류 해결 방법 : 아나콘다 prompt 열고 pip uninstall pyzmq pip install pyzmq==19.0.2 설치
Jupyter localhost 로 실습할 때의 장점 :
- 오프라인에서도 사용이 가능하다. 예를 들어 산속으로 캠핑을 가서도 인터넷이 안 될 때 코딩을 할 수 있음
- 데이터 파일 등을 매번 로드할 필요가 없다 => 로컬 드라이브에 저장해 두면 경로만 지정하면 바로 불러올 수 있기 때문
- 주피터 노트북의 서버를 끄지 않는 이상 네트워크 상황에 따라 연결이 끊겨서 다시 노트북을 실행할 필요가 없음
- 라이브러리를 한번 설치하면 노트북을 새로 열 때마다 설치하지 않고 import 만 해서 사용할 수 있다. → colab은 설치해야 하는 라이브러리를 매번 설치해 주어야 함
- colab 보다 좋은 성능의 컴퓨터라면 더 빠르게 사용할 수도 있지만 그렇지 않다면 colab 이 더 빠를 수도 있음
실행모드(ESC)
- 커서가 사라짐
- esc + a : 위에 셀 생성
- esc + b : 아래 셀 생성
- esc + dd : 셀 삭제
- esc + m : 마크다운 셀로 변경 (왼쪽에 In[] : 없음. 맠다운 문법 적용)
- esc + y : 코드셀로 변경(왼쪽에 In[] : 있음)
- esc + o : 접기
- tab : 자동완성...?
편집 모드 (Enter)
- 커서가 생김
- shift + enter : 셀이 실행되고 다음 셀로 이동
- ctrl + enter : 해당 셀이 실행되고 다음 셀로 이동하지 않음
<서울 120>
- page_no 마다 url이 변경되게 f-string 을 사용해 만든다.
- requests 를 사용해서 요청을 보내고 응답을 받는다.
- pd.read_html 을 사용해서 table tag로 게시물을 읽어온다.
- 3번 결과에서 0번 인덱스를 가져와 데이터프레임으로 목록의 내용을 만든다.
- html tag를 parsing할 수 있게 bs 형태로 만든다.
- 목록 안에 있는 a tag를 찾는다.
- a tag 안에서 string 을 분리해서 내용번호만 리스트 형태로 만든다.
- 4)의 결과에 "내용번호"라는 컬럼을 만들고 a tag의 리스트를 추가한다.
- 없는 페이지번호가 들어왔을 때의 오류에 대처한다.
- 반환값을 지정한다
<대통령 기록관과의 차이점>
- 대통령기록관에서는 내용수집할 때 내용만 가져옴
- 서울 120에서는 분류, 내용 함께 가져올 예정
- read_html()을 통해서 여러 데이터프레임을 병합하는 방법 배움
import time
import pandas as pd
import numpy as np
import requests
from bs4 import BeautifulSoup as bs
- time : 간격을 두고 가져오기 위해 사용
- pandas : 파이썬에서 사용할 수 있는 엑셀과 유사한 데이터분석 도구
- numpy : 파이썬에서 사용할 수 있는 공학용 계산기
- requests : 매우 작은 브라우저로 웹사이트의 내용과 정보를 불러옴
- BeautifulSoup : requests로 가져온 웹사이트의 html 태그를 찾기위해 사용
BeautifulSoup와 BeautifulSoup4 차이
beautifulsoup4 안의 BeautifulSoup 모듈을 불러와서 사용
<인코딩>
- cp949가 깨지면 utf-8 사용해보기
<상세정보를 위한 링크정보 수집>
- get : 필요한 데이터를 Query String 에 담아 전송
- post : 전송할 데이터를 HTTP 메시지의 Body의 Form Data에 담아 전송
- get 과 post 여부는 브라우저의 네트워크 탭의 Headers > Request Method 를 통해 확인
<try 구문 작성시>
- 안전하게 맨 위에 작성해 주면 어떤 오류든 대처가능하기 때문에 오류를 줄이는데 도움이 됩니다.
- 여러 페이지를 수집할 때 어떤 상황에서 오류가 날지 예측이 잘 안 되거나 예외상황이 있다든지 하면 오류가 날만한 곳 맨 위에 try 구문을 작성합니다.
- 오류가 났을 때 오류 메시지가 떠야 어떤 오류인지 보고 수정할 수 있는데 오류가 났는데도 예외 관련 문구를 디테일하게 작성하지 않으면 어떤 오류인지 찾기 어렵다는 단점도 있습니다.
<append 위치에 따른 차이>
- 리스트에 불필요한 데이터 저장하지 않음 -> 반환값이 없으면 굳이 append 할 필요 없음
- 만약 테이블이 비어져있는데 append가 위에 있으면 비어있는 테이블도 추가
<네트워크 이슈 대비>
- 페이지마다 파일로 저장하는 방법도 있습니다.
- 생성된 파일을 한 번에 읽어와서 리스트로 만들어 줍니다.
- 리스트에 담긴 데이터프레임을 concat()으로 합쳐서 하나의 데이터프레임으로 만듭니다.
<주피터 안에서 pip install 과 터미널로 설치하는 방법 두가지가 있는데차이>
- 환경의 차이
- 아나콘다 : 가상환경을 사용하기 위해 사용 → 컴퓨터 전체에 설치되는 것이 아니라(base)라는 터미널 문구는 가상환경을 의미
- (base) 안에 설치되지 않으면 No Module Not Found Error와 같은 오류 발생
- 주피터 내부에서 설치됐을 때 (base) 안에 설치되기도 하지만 경우에 따라서 다른 경로에 설치되기도 함
<concat에서 axis >
- axis = 0일 때는 행으로 붙음
- axis = 1 하면 열로 붙는데 인덱스 값이 같아야 옆으로 붙음
0118 키워드
<병합>
- 수집한 내용을 tolist() 를 통해 리스트로 변환 후 concat 으로 병합합니다.
- view_detail 변수 안에 들어있는 값은 series 형태이기 때문에 concat() 으로 병합하기 위해서는 리스트 형태로 되어있어야 함
- how = 'left' 내용번호가 중간에 누락 되어 수집이 되지 않는 것이 있다면 결측치로 보이게 된다
- how = 'right' 내용번호는 수집되었지만 목록에 없는 경우 목록 내용이 결측치로 보임
- merge 는 컬럼, 혹은 인덱스 기준으로 병합
- join 은 인덱스 기준으로 병합
<JSON>
- JSON(제이슨, JavaScript Object Notation)은 속성-값 쌍( attribute–value pairs and array data types (or any other serializable value)) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷
- 비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷
- 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합
<API란>
- Application Programming Interface의 약어입니다.
- 서로 다른 사양의 컴퓨터나 컴퓨터 프로그램이 데이터를 주고받을 수 있도록 하는 도구입니다.
- 예제에서는 사용자가 서울 열린데이터 광장의 서버에서 데이터를 요청할 수 있게 합
<Open API>
- Open API는 개발자라면 누구나 사용할 수 있도록 공개된 API를 의미합니다.
- 서울 열린데이터 광장에서는 Open API를 제공하여 사용자들이 데이터에 편리하게 접근할 수 있도록 하고 있습니다.
<XML>
- eXtensible Markup Language의 약어입니다.
- 인터넷 상에서 구조화된 데이터를 전송하기 위해 만들어진 형식입니다.
- XML은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌습니다.
<API 사용 이유>
- 허락된 사람에게만 정보를 제공하고 누가 수집해 갔는지 알기 위해
- 유료로 데이터를 판매하고 있는 사이트는 데이터 용량 등에 따라 과금하기도 합니다.
- 공공데이터는 실시간성으로 제공하고자 하는 데이터의 경우 예) 부동산실거래가 정보 등
- 특정 사이트에 무리하게 네트워크 요청을 보내면 서버에 무리가 갈 수 있습니다.
예) 만약에 50명이 특정 카페24의 작은 쇼핑몰에 요청을 한번에 보내면 서버를 다운시킬 수도 있습니다.
API용 서버를 따로 두게 되면 데이터를 무리하게 읽어 갔을 때 운영하고 있는 서비스의 서버에 무리가 가지 않게 분리해서 운영할 수 있습니다. 네이버, 카카오, 유튜브 등은 API를 따로 제공하고 있습니다.
API를 제공할 때 제공할 수 있는 데이터에 한해서 제공합니다. 예를들어 페이스북에서는 자기계정에 대한 데이만 가져갈 수 있게 API를 제공하고 있습니다.
<웹스크래핑 vs api>
- 웹 데이터를 수집하는 방법은 크게 웹 스크래핑과 API를 이용한 요청 방식 두 가지가 있습니다.
- 웹 스크래핑은 브라우저에 보여지는 정보를 사용자가 자동화된 툴로 수집하는 것입니다.
- API는 Application Programming Interface의 줄임말로, 서로 다른 소프트웨어끼리 서비스를 제공하기 위한 사양을 의미합니다. 여기서는 서버에 정보를 요청하기 위한 방법이라고 생각하면 됩니다.
<REST>
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
- HTTP Method(POST, GET, PUT, DELETE)를 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미합니다.
장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다.
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해 준다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
- 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
- 서버와 클라이언트의 역할을 명확하게 분리한다.
단점
- 표준이 자체가 존재하지 않아 정의가 필요하다.
- 사용할 수 있는 메소드가 4가지밖에 없다.
- HTTP Method 형태가 제한적이다.
- 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구된다.
- 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.
'AI SCHOOL' 카테고리의 다른 글
[ML] Clustering (0) | 2023.03.12 |
---|---|
[통계분석] 상관분석 / 회귀분석 (0) | 2023.02.16 |
[통계분석] (0) | 2023.02.15 |
[통계분석] 확률분포 / 정규분포 / 기술통계(분위수, 편차) (0) | 2023.02.13 |
[WIL] 3주차 (0) | 2023.01.12 |