-
[0318 복습] 파이썬 class 선언, 데이터 수집_웹 크롤링, 데이터 스케일링, 상관계수 분석KT 에이블스쿨 복습 2024. 3. 18. 19:48
파이썬 기초 복습
Python Syntax
1. 변수선언: RAM 사용, 식별자, 메모리 저장 공간 구별하는 문자열
2. 데이터 타입: RAM 효율적 사용, int, float, bool, str, list, tuple, dict
3. 연산자: CPU 사용, 산술, 비교, 할당, 논리, 멤버 등
4. 조건문, 반복문: 코드 작성 효율 증가 문법, if, elif, else, while, for, break, continue
5. 함수: 반복되는 코드를 묶어서 코드 작성 실행, def, return, args-params, doctstring, scope, lambda
6. 클래스: 여러개 변수, 함수를 묶어서 코드 작성 실행 : 객체지향 구현
7. 입출력: SSD(HDD) 사용, pickle
Class (사용자정의 데이터타입)
- 변수, 함수를 묶어서 코드 작성, 객체지향 구현(협업 용이)
- 데이터와 해당 데이터를 처리하는 메서드(함수)를 함께 묶어둔 사용자 정의 데이터 유형
- 속성(attribute)과 메서드(method)로 구성됨, 클래스의 첫 번째 매개변수로 일반적으로 'self'를 사용
- 클래스선언(코드작성) > 객체생성(메모리사용) > 메서드(함수) 호출
- 클래스식별자(PEP8 참고), PascalCase(O), UpperCamelCase(O)
class Person: def __init__(self, name, age): self.name = name self.age = age def greet(self): print(f"안녕하세요, 저는 {self.name}이고, {self.age}살입니다.") # Person 클래스의 객체(인스턴스) 생성 person1 = Person("영희", 25) person2 = Person("철수", 30) # 메서드 호출 person1.greet() # 출력: 안녕하세요, 저는 영희이고, 25살입니다. person2.greet() # 출력: 안녕하세요, 저는 철수이고, 30살입니다.
- dir(): 객체에 저장되어 있는 변수(함수)를 출력함!
- help(): docstring 함수의 설명글 출력
- special method: 객체를 생성할 때 실행되는 생성자 메서드, 앞뒤로 __가 붙은 메서드,
에러가 발생하는 객체를 생성 방지, 객체의 메서드에서 사용되는 초기 변수 설정 검사 용도웹(Web)
Server & Client Architecture
- Client: 브라우저를 사용해 서버에 데이터를 요청(Request)
- Server: 클라이언트의 브라우저에서 데이터를 요청하면, 요청에 따라 데이터를 클라이언트로 전송(Response)
**하나의 서버도 다른 서버에 데이터를 요청하면 클라이언트가 될 수 있다!
- Client는 URL(browser 앱); browser의 역할 ① request, response 해줌 ② Rendering(사이트에 data를 보여줌)
- Server는 Was(웹 어플리케이션 서버)
URL(Uniform Resource Locator)
https://rini-kkeuzuk.tistory.com/22
- 위 링크에서 http:// = Protocol
- rini-kkeuzuk = Sub Domain
- tistory.com = Primary Domain
**이후부터는 Url에 없는 것들
- 80 = Port: 서버에 들어가서 어떤 프레임워크로 데이터를 요청할지 선택하는 포트
- 보통 내 PC일 때 localhos:8888 / 127.0.01:8888 뜸!
- /main/ = Path: 디렉토리 이름, 경로
- read.nhn = Page(File): 디렉토리에 있는 파일에 접속, 파일 이름
- ?mode=LSD = Query: key-value로 구성되어 있는 하나의 데이터에서 어떤 데이터를 보고 싶은지 client → server에 정보전달
- #da_722343 = Fragment: 웹 페이지에서 id값을 찾아서 그 화면을 보는 것(보여지는 화면 설정)
http와 https의 차이
https는 데이터 가로채기가 불가능, 패킷이 암호화된 후 서보에서 복호화 되며 컴퓨터 리소스를 사용함
(:80 포트 주로 활용, http는 :443 포트 활용)HTTP Request Methods
1) Get 방법: URL에 Query 포함, Query(데이터) 노출, 전송 가능한 데이터 작음
→ Get 방법이 편리한 경우도 있음! (URL에 어떤 명령어로 검색했는지가 포함되어 있기 때문에, 확인 가능!)
2) Post 방법: Body에 Query 포함, Query(데이터) 비노출, 전송 가능한 데이터 많음HTTP Status Code
- Client 와 Server가 데이터 주고 받은 결과 정보
① 2xx - Success ② 3xx - Redirect ③ 4xx - Request Error ④ 5xx - Server Error
Cookie, Session, Cache
1) Cookie(쿠키)
- Client의 Browser에 저장하는 문자열 데이터, 도메인, 브라우저별로 저장영역이 따로 있음!
- 사용예시: 로그인 정보, 내가 봤던 상품 정보, 팝업 다시보지 않음 등
2) Session(세션)- Client의 Browser와 Sever의 연결 정보
- 사용예시: 자동 로그인 (브라우저 2개와 서버 2개가 있으면 약 4개의 세션이 생김)
3) Cache(캐시)
- Client, Server의 RAM(메모리)에 저장하는 데이터(임시 저장)
- RAM에 데이터를 저장하면 데이터 입출력이 빠름Web Language & Framework
1) Client (Frontend)
- HTML
- CSS - Bootstrap, Semantic UI, Materialize, Material Design Lite
- Javascript - react.js, vue.js, angular, jQuery
2) Server (Backend)
- Python - Django, Flask, FastAPI
- Java - Spring
- Ruby - Rails
- Scala - Play
- Javascript - Express(node.js)
Scraping & Crawling
- Scraping: 특정 데이터를 수집하는 작업
- Crawling: 웹서비스의 여러 페이지를 이동하며 데이터를 수집하는 작업, spider, web crawler, bot 용어 사용
웹 크롤링(Web Crawling)
웹 페이지의 종류
① 정적인 페이지: 웹 브라우저에 화면이 한번 뜨면, 이벤트에 의한 화면 변경이 없는 페이지
- 보통은 페이지네이션으로 구성되어 있으며, 클릭하면 URL이 바뀌면서 웹 페이지 내용에 접속함- 가져오는 데이터가 HTML로 되어 있어서 DataFrame으로 변경이 필요함!
; 페이지에서 이벤트가 기록되었을 때 URL이 바뀌지 않아도 새로고침하면서 페이지가 불러와진다면 정적인 페이지이다!
특정 데이터를 수집하는 작업
② 동적인 페이지: 웹 브라우저에 화면이 뜨고 이벤트가 발생하면 서버에서 데이터를 가져와 화면을 변경하는 페이지
- URL이 같은 상태에서 웹 페이지 내용이 바뀜, HTML로 맨 처음 데이터를 불러오나
response 후에는JSON 포맷으로 데이터를 가져옴!**크롤링 방법에 따른 속도는 requests json > requests html > selenium 순이다!
**selenium은 브라우저를 직접 열어서 데이터를 받는 방법
크롤링 절차
- 크롤링을 위한 라이브러리 불러오기
import warnings warnings.filterwarnings('ignore') #경고 문구 안 뜨게 설정 import requests import pandas as pd
1) 웹 서비스 분석: url찾기
- 크롬 개발자 도구(F12) → Network, fetch/XHR 탭 선택 → Clear 초기화 → 웹에서 이벤트 생성
- 이벤트 생성 후 로그를 확인하면 이미지처럼 URL을 확인할 수 있다!
<PC 웹페이지 → 모바일 웹페이지로 변경방법>
- 형광펜 아이콘 클릭 후 → 원하는 모바일 기종으로 변경 → 새로고침
2) 서버에 데이터 요청: request(url) → response: json(str)
3) 서버에서 받은 데이터 파싱: json(str) → list, dict → DataFrame
# 1. URL code, page, page_size = 'FX_USDKRW', 1, 60 url = f'https://m.stock.naver.com/front-api/v1/marketIndex/prices\ ?category=exchange&reutersCode={code}&page={page}&pageSize={page_size}' # 2. request > response response = requests.get(url) # 3. json(str) > DataFrame data = response.json()['result'] usd_df = pd.DataFrame(data)[['localTradedAt', 'closePrice']] usd_df.tail(2)
- 아래와 같이 함수처럼 생성할 수도 있음!
def stock_price(code='KOSPI', page_size=60, page=1): #2. URL url = f'https://m.stock.naver.com/api/index/{code}/price?pageSize={page_size}&page={page}' #https://m.stock.naver.com/api/index/KOSDAQ/price?pageSize=10&page=2 #1. request(url) > response : json(str) response = requests.get(url) #3. json(str) > list, dict > DataFrame return pd.DataFrame(response.json())[['localTradedAt', 'closePrice']]
4) 시각화
df2 = df[::-1] plt.figure(figsize=(20, 5)) plt.plot(df2['date'], df2['kospi'], label='kospi') plt.plot(df2['date'], df2['kosdaq'], label='kosdaq') plt.plot(df2['date'], df2['usd'], label='usd') plt.legend() plt.xticks(df2['date'][::2]) plt.show()
5) 데이터 스케일링
#데이터 스케일링 라이브러리 from sklearn.preprocessing import minmax_scale #시각화 plt.figure(figsize=(20, 5)) plt.plot(df2['date'], minmax_scale(df2['kospi']), label='kospi') plt.plot(df2['date'], minmax_scale(df2['kosdaq']), label='kosdaq') plt.plot(df2['date'], minmax_scale(df2['usd']), label='usd') plt.legend() plt.xticks(df2['date'][::2]) plt.show()
6) 상관계수 분석
- 두 데이터 집합의 상관도 분석에 사용되는 지표
- 해석: -1에 가까울수록 서로 반대방향으로 움직임, 1에 가까울수록 서로 같은방향으로 움직임, 0에 가까울수록 관계 없음
'KT 에이블스쿨 복습' 카테고리의 다른 글