지금은마라톤중

멋사 AI스쿨 WIL - (9) 본문

멋쟁이사자처럼/Python

멋사 AI스쿨 WIL - (9)

달리는중 2023. 1. 19. 16:40

2023.01.16

 

 

 range(len(리스트))를  좀 더 파이써닉한 방법으로 개선해 본다면?

- index 순서를 가져오기 위해 range(len(리스트)) 사용했습니다.

- 이 방법 외에도 인덱스 값을 가져올 수 있는 방법 : enumerate

- enumerate(a,b) : 두번째 인자로 인덱스 시작을 지정할 수 있다.

 

🙋🏻‍♂️질문 : 사람마다 get이랑 post가 다르게 보일 수도 있나요?
- 일반적으로는 GET 메소드를 통해 데이터를 읽어올 수 있게 서버에서 작성하지만 POST 메서드로 데이터를 읽어올 수 있게하는 경우는, GET 메서드는 파라미터를 URL에 포함하여 전달해야하기 때문에 파라미터들의 정보가 히스토리에 남지만 POST는 파라미터가 요청의 body 에 담겨 전달되기 때문에 브라우저 히스토리에 남겨지지 않습니다.
- 따라서 보안을 위해서 파라미터에 민감한 정보가 담길 가능성이 있는 경우에는 GET대신에 POST를 쓰기도 합니다
- 네트워크 탭에서 requests Method를 통해서 get이나 post 방식 중에 어느 것으로 해야하는지 확인할 수 있다.

 

 HTTPSConnectionPool 에러

요청을 너무 많이 해서 서버 접속을 일시적으로 막은 것이다.

- 서버에 너무 많은 요청을 하면 에러가 발생 

- 일시적인 접속을 막은 것으로 시간이 지나면 다시 접속이 가능하다.

 

 


내용정리

  • 변수명을 예약어로 사용하면 안된다.
    - ex) list, False, and, def, continue 등등
    - 클래스, 함수명 등등
    - dir()로 확인 가능

  • snake_case와 CamelCase
      1) 함수명 => snake_case (lower_case_with_underscores) 
      2) 클래스명 => CamelCase(CapitalizedWords (or CapWords, or CamelCase ))

       - 권장하지 않는 방법 => Capitalized_Words_With_Underscores (ugly!)
       - some_function_that_takes_arguments 언더스코어 방식으로 변수 혹은 함수명을 쓰는 것은?
          : snake_case
      - CapWords convention 의 다른 이름은?
          : CamelCase

  •  get방식이나 post 방식
    - 서버 설정에 따라 다르다. 
    - 둘 다 열어 두면 둘 다 가능하지만 보통 둘 중 하나로 가능
    - 웹크롤링, 웹 스크랩핑 전에 Requests Method가 둘 중 어떤 방식인지 확인하자!

  •  map, apply, applymap
    - progress_map : tqdm 라이브러리 사용시 map의 진행상황을 나타내며 수행할 수 있는 map
    - prgress_apply : tqdm 라이브러리 사용시 apply의 진행상황을 나타내며 수행할 수 있는 apply


 


2023.01.18

이전까지는 코랩을 통해 코드작성을 했지만 이번부터는 Jupyter notebook을 통하여 진행하였다.

주피터 노트북의 특징과 단축키 등을 익히고 공부하였다.

 


 

 .py 확장자 파일은 어떻게 편집해야 할까요?

: .py 파일을 편집할 때는 => 파이썬 내장 IDE, 메모장, Visual Studio Code, PyCharm, 서브라임텍스트 등

 

 Jupyter notebook에서 pc 내의 경로 찾는 코드

# In:
import os
os.getcwd()

# Out:
'/Users/macbook/Likelion_AI/codes'

 

 

  실행모드와 편집모드

실행모드(ESC) 편집모드(Enter)
- 커서가 사라짐
- a키를 누르면 위에 셀이 생성.
- b키를 누르면 아래에 셀이 생성.
- dd키를 누르면 셀이 삭제.
- m키를 누르면 마크다운 셀(왼쪽에 In[]: 이 없음,
  마크다운 문법 적용)로 변경.

- y키를 누르면 코드 셀(왼쪽에 In[]: 이 있음)로 변경.
- 커서가 생김
- shift + Enter 키를 누르면 셀이 실행되고 다음셀로 이동.
- ctrl + Enter 키를 누르면 해당 셀이 실행되고 다음셀로 이동하지 않음.

 

 어떤 편집기가 좋은 편집기 일까요?

: 본인한테 제일 편한것

 

● Jupyter localhost 로 실습할 때의 장점?

1) 오프라인에서도 사용이 가능하다. 예를 들어 산속으로 캠핑을 가서도 인터넷이 안 될 때 코딩을 할 수 있다.

2) 데이터 파일 등을 매번 로드할 필요가 없다 => 로컬 드라이브에 저장해 두면 경로만 지정하면 바로 불러올 수 있기 때문에!

3) 주피터 노트북의 서버를 끄지 않는 이상 네트워크 상황에 따라 연결이 끊겨서 다시 노트북을 실행할 필요가 없다.

4) 라이브러리를 한번 설치하면 노트북을 새로 열 때마다 설치하지 않고 import 만 해서 사용할 수 있다.

     => colab은 설치해야 하는 라이브러리를 매번 설치해 주어야 합니다.

5) colab 보다 좋은 성능의 컴퓨터라면 더 빠르게 사용할 수도 있지만 그렇지 않다면 colab 이 더 빠를 수도 있습니다.

 

🙋🏻‍♂️질문 : read_html에 requests 응답으로 받은 response.text를 인자로 넣는 게 서버에 요청을 하는 건가요?
: 서버에 요청하지 않습니다. 서버의 요청 결과값만 받아서 넣어주었기 때문에 table 태그를 찾는 parsing만 합니다.

 

 try: except: 를 사용할 때 try를 어느 위치로 지정하는게 좋을까요?

: try 구문 작성시 

- 안전하게 맨 위에 작성해 주면 어떤 오류든 대처가능하기 때문에 오류를 줄이는데 도움이 됨.

- 여러 페이지를 수집할 때 어떤 상황에서 오류가 날지 예측이 잘 안 되거나 예외상황이 있다든지 하면 오류가 날만한 곳 맨 위에 try 구문을 작성

- 오류가 났을 때 오류 메시지가 떠야 어떤 오류인지 보고 수정할 수 있는데 오류가 났는데도 예외 관련 문구를 디테일하게 작성하지 않으면 어떤 오류인지 찾기 어렵다는 단점도 있음.

 

🙋🏻‍♂️질문 : df_one is None or df_one.shape[0] == 0 이런식으로 작성해도 괜찮은건가요?
: 반환값이 무조건 데이터프레임이거나 넘파이 배열일 때 가능합니다.

 

● 요한 데이터를 Query String 에 담아 전송 하는 형태의 URL을 수집할 때 적절한 방법은?

: get 

- form을 가져올 때는 post 방식이 적절


내용정리

  • 경로 찾기
    - 윈도우 : 파일탐색기 사용
    - 맥 :  Finder => Cmd + Shift + g => 경로를 입력

  • ignore_index  : 인덱스의 중복값을 제거
     - ex) df = pd.concat(table_list, ignore_index = True)
     - 인덱스값을 기존 값으로 사용할지, 새로 부여할지에 대한 기능입니다.
     - df.reset_index(drop=True) 를 사용하면 ignore_index=True 와 같은 효과가 있습니다.
  •  네트워크 이슈가 있어서 수집을 하다가 메모리가 날아갔을 때을 대비한다면, 
    1) 페이지마다 파일로 저장하는 방법도 있음
    2) 생성된 파일을 한 번에 읽어와서 리스트로 만들어 줌. 
    3) 리스트에 담긴 데이터프레임을 concat()으로 합쳐서 하나의 데이터프레임으로 만듦.
  • 내용 수집을 할 때 10개만 먼저 수집하는 이유
    1) 네트워크 부담을 줄이기 위해서 
    2) 중간에 오류가 났을 때 찾기 쉽게 하기 위해서

  •  transpose() 
     - 전치행렬로 사용
    - Index와 columns을 바꿔준다.
    - .T 로 대체가능
  •  concat()
     - 기본적으로 행을 기준으로 합침
    - axis = 0(행), 1(열)
     - 인덱스 값 주의 : 같게 해주거나 reset_index(drop=True)로 리셋하여 맞춰준다.   
    - pandas의 내장 메서드

2023.01.18

 

🙋🏻‍♂️질문 : find와 select 중 메모리를 좀 더 효율적으로 처리한다고 볼 수 있는 건 어느 쪽인가요? 어느 쪽이 더 선호되나요?
- %time, %timeit을 사용하여 확인 가능


- find가 select보다 시간이 적게 걸리는 것을 확인
-> 메모리 효율성 : find > select


%time: 단일 명령문의 실행 시간 
- %timeit: 정확도 향상을 위해 단일 명령문을 반복적으로 실행하는 시간, 평균값을 측정
- %prun: 프로파일러로 코드 실행 %lprun: 라인별 프로파일러로 코드 실행 
- %memit: 단일 문장의 메모리 사용량 측정 
- %mprun: 라인별 메모리 프로파일러로 코드 실행

 

  progress_map과 progress_apply의 차이는?

- map, apply 는 pandas의 메서드 입니다. => 반복문 대신 사용할 수 있습니다.

- 반복문을 사용했을 때에 비해 속도가 빠릅니다. 많은 작업을 할 때는 어디까지 진행되었는지 상태 확인이 어렵습니다.

- 그래서 tqdm의 도움을 받습니다.

- progress_map(), progress_apply() 는 tqdm에서 판다스를 지원하는 기능입니다. => 진행상태를 표시해 줍니다.

 

  셀 안에서 도움말을 보는 단축키는 무엇일까요?

: shift + Tab

 

  ETF 페이지를 수집할 때 무엇을 가장 먼저 봐야 할까요?

1) 수집하고자 하는 데이터가 어떤 태그에 들어있는지 봅니다. table 태그라면 pd.read_html() 로도 불러올 수 있고,

2) pd.read_html() 로 수집이 안 된다면 requests 요청을 보냅니다.

- requests 요청을 보내기 위한 주소를 Network 메뉴에서 찾습니다.

- URL => Preview 로 봤을 때 해당 데이터가 있는지 확인합니다!

- Fetch/XHR, JS 중에 있다.

 

  API 를 사용하는 이유

1) 허락된 사람에게만 정보를 제공하고 누가 수집해 갔는지 알기 위해 

2) 유료로 데이터를 판매하고 있는 사이트는 데이터 용량 등에 따라 과금하기도 합니다.

3) 공공데이터는 실시간성으로 제공하고자 하는 데이터의 경우 예) 부동산실거래가 정보 등

4) 특정 사이트에 무리하게 네트워크 요청을 보내면 서버에 무리가 갈 수 있습니다.

 

 Web Scraping vs API

1) Web Scraping : 

- 웹 브라우저에 보여지는 정보 중 원하는 데이터를 수집하고 저장하는 것입니다.

- 이용하는 서비스마다 출력내용이 달라 표준화할 수 없습니다.

- 정보에 접근하려면 중요정보가 필요할 수 있습니다. (ID, PW)

- 이용자의 개인정보 등 위험하고 불필요한 정보가 스크래핑 범위에 포함될 수 있습니다.

2) API : 

- 서비스 제공자가 제공하는 방식대로 정보를 요청하여 받아오는 것입니다.

- API 요청 방식과 요청에 따른 응답 데이터 형식을 표준화할 수 있습니다.

- 중요정보 대신 정보를 요청하기 위한 token이나 key를 이용합니다.
- 서비스 제공자가 정한 범위 안에서만 정보이용이 가능하고 제공자 입장에서는 정보 접근 통제가 용이합니다.

 


내용정리
  •  strip() : 출력의 공백을 제거해줌.
    - ex) '      hello.     '  -> hello. : 양 옆에 공백이 사라짐
  •  list(view_detail) view_detail.tolist()의 차이
    - list(view_detail) => 파이썬 표준 라이브러리 사용 
    - view_detail.tolist() => 판다스를 사용 => 공통점은 리스트 형태로 변경해 줍니다
  • tolist()랑 to_list() 차이
    - 원래는 tolist() 가 있었는데 판다스 개발자들이 논의를 한것으로 보여져요. to_list()도 생겼습니다.
    - 버전에 따라 to_list() 가 동작하지 않기도 합니다.
    - tolist() :  array를 python의 list로 바꿔줌, 변경할 때 array의 차원을 그대로 유지, 
    - 2차원 array에 tolist를 적용시키면 list속에 다른 list가 있는 2차원 list의 형태로 반환해준다는 의미
  • merge와  join
    - merge : 컬럼, 혹은 인덱스를 기준으로 병합
    - join : 인덱스 기준으로 병합
  • nlargest(n, 'value')와 nsmallest(n, 'value')
    nlargest(n, 'value') : value 값 중 큰 값 n개
    - nsmallest(n, 'value') : value 값 중 작은 값 n개
  •  XML : 
    - eXtensible Markup Language의 약어
    - XML은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적
  • 12. to_datetime() 
    - 실수형태 데이터를 날짜형태 데이터로 변환할 때 사용
    - ex) pd.to_datetime(df_list["UPDATE_YMDHMS"].astype(str).str[:14]

 


 

출처:- https://cosmosproject.tistory.com/410

 

'멋쟁이사자처럼 > Python' 카테고리의 다른 글

멋사 AI스쿨 TIL - (11)  (0) 2023.01.31
멋사 AI스쿨 TIL - (10)  (0) 2023.01.31
멋사 AI스쿨 WIL - (8)  (0) 2023.01.12
멋사 AI스쿨 TIL - (7)  (0) 2023.01.06
멋사 AI스쿨 TIL - (6)  (2) 2023.01.05
Comments