ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

     

    [0315 복습] 이변량분석(kde plot, histogram), 시계열 데이터 분석

    CH10 이변량분석_숫자 → 범주 시각화 - 시각화: kde Plot, Histogram - 범주별 분포로 비교하는 그래프 그리기 / 범주별 비율로 비교하는 그래프 그리기 수치화 - 수치화(가설검정)하는 딱 맞는 방법은

    rini-kkeuzuk.tistory.com

    - 위 링크에서 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에 가까울수록 관계 없음

     

     

     

Designed by Tistory.