Upstage AI Lab 3기

[2024-04-03] 프로젝트 수행을 위한 이론 1 : Python (김인섭 강사님)

코코스섬 2024. 4. 4. 11:28

 


자료형

Pydantic 라이브러리를 사용하면 데이터 타입을 지정할 수 있음.

 

Python coding convention

가장 많이 사용하는 문자열 포맷은 "f 스트링"

i = 0
print(f"숫자를 입력하세요 {i + 1}번째")

중괄호 안에 변수명이나 수식 넣을 수 있어서 직관적.

 

아래 방식과 비교해보자.

name = 'haha'
age = 30

print("name : " + name + ", Age: " + str(age))
print("name : {}, Age: {}".format(name, age))

 

튜플은 수정, 추가, 제거가 안되니, 추가하고 싶다면 새로 만들면 된다

new_a = a + (10,)

 

딕셔너리

  • API 라고 불리는 형태와 동일
  • 딕셔너리 안에 딕셔너리도 들어갈 수 있음
  • get() 함수는 디폴트값을 지정할 수 있어서 오류 대응 가능
  • items() 함수
  • update() 함수
  • Key 삭제는 어떻게?
    • 새로운 딕셔너리를 만들어서 삭제 하고자 하는 key 를 패스
    • del() 함수 : del x['name']
    • pop() 함수 : x.pop('name')

Set

  • 순서가 없다
  • 중복을 허용하지 않는다

제어문

 

파이썬 3.? 버전부터 조건문에 and, or 대신 &, | 사용 가능

 

for-else 문 : 반복문이 끝나고 else 부분이 실행됨.

for i in range(3):
	print(i)
else:
	print("done")​

 

다음과 같이 조건문을 작성할 수도 있음

if 3 <= i <= 5:

함수

 

내장함수 (Build-in functions) : https://docs.python.org/ko/3/library/functions.html

 

외장함수 (External functions) : import 를 통해 사용

 

# 파이썬 버전 출력
import sys
print(sys.version)

 

# 현재 디렉터리 출력
import os
print(os.getcwd())

 

import time
print(time.time())	# UTC 기준 현재 시각을 초 단위로 반환
print(time.localtime(time.time())	# 서버시간

 

 


크롤링

목적 : 인터넷 상의 데이터 수집

라이브러리 : Selenium, webdriver-manager

 

코드 작성은 Jupyter Notebook 을 사용하는데,

Anaconda 를 설치하면 Jupyter Notebook 이 함께 설치된다.

 

Jupyter Notebook 에서 아래 내용을 셀에 입력해보자.

 

# VSC 에서는 ! 대신 % 를 사용할것.
!pip install selenium
!pip install webdriver-manager

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

ChromeDriverManager().install()
browser = webdriver.Chrome()

url = 'https://www.naver.com'
browser.get(url)

# 크롬 브라우저 타이틀바에 표시된 텍스트 출력
print(browser.title)

 

위 코드에서 browser 는 웹페이지 전체라고 생각하면 됨.

그래서 웹페이지 내에서 내가 원하는 요소(element)를 찾을려면 browser 를 대상으로 찾아야 함.

 

크롤링을 잘 하려면 element 를 잘 찾아야 함.

 

from selenium.webdriver.common.by import By
browser.find_element(By.CLASS_NAME, 'search_input').click()

browser.find_element(By.CLASS_NAME, 'search_input').send_keys('날씨')

browser.find_element(By.CLASS_NAME, 'btn_search').click()

temp = browser.find_element(By.CLASS_NAME, 'temperature_text').text
temp.split('\n')[1]

# 체감, 습도, 풍향
data = browser.find_element(By.CLASS_NAME, 'summary_list').text
data.split(' ')

 

네이버 화면에서 검색어 입력하는 부분을 찾고 싶다면,

그 부분 위에서 마우스 우클릭 -> "검사" 클릭

 

By.CLASS_NAME 외에도 아래와 같인것들이 있음.

By.TAG_NAME

By.ID

By.XPATH

 

 

위 그림에서 제일 좌측 버튼을 클릭하고,

웹 페이지에서 마우스를 움직여 보면, 마우스 커서 위치에 있는 부분의 element 가 하이라이트되서 찾기 편함.

참고로 크롬 개발자도구가 자꾸 닫힌다면, nprotect online 을 삭제해보자.

 

selenium 에서 엔터 키 등을 누르는것처럼 할 수 있음.

https://www.geeksforgeeks.org/special-keys-in-selenium-python/

 

Special Keys in Selenium Python - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

url = 'https://new.land.naver.com/complexes/111515?ms=37.497624,127.107268,17&a=APT:ABYG:JGC:PRE&e=RETAIL&ad=true'
browser.get(url)

browser.find_element(By.CLASS_NAME, 'complex_price--trade').find_element(By.CLASS_NAME, 'data').text

 


 

파이썬 기초 문법 시간이였지만, 파이썬 이외에 알짜 팁들을 많이 알려주셨다.

 

주식 자동 매매 시스템

 

AI 개발자가 백엔드 개발을 할 수 있으면, 할 수 있는 일이 더 많아짐.

 

AI 를 붙이면 앱 개발 단가가 수직 상승.

 

개발이 임팩트가 있는 이유 : 생산성을 높여갈 수 있음

 

새로운 기술 정보를 얻는 방법

  • 공식 홈페이지
  • Amazon Books : 킨들에서 볼 수 있음
  • 논문 : Google Scholar
  • 모임

정보 자체는 돈이 안되지만, 쌓인 정보를 가공하면 돈이 된다.

 

큰 프로젝트에서 나를 지켜주는 방법 : Divide and Conquer

 

수집하려는 정보에 대해서는 법무법인과 얘기 필요

 

사람이 바뀌려면 3가지 필요

  • 만나는 사람
  • 공간
  • 시간

아직 상장하지 않은 네카라쿠배의 계열사로 가라

  • 우리사주!

연봉

  • 억대 연봉자에게 잡무를 시킬 수 있을까? 그럴 수 없다. 양질의 업무를 준다.
  • 양극화
    • 좋은 프로젝트 경험이 있으면 --> 연봉이 높아짐 --> 다시 좋은 프로젝트로 이어짐
  • 초반 연봉 중요
    • 3천 -> 5천, 5년
    • 4천 -> 7천, 2~3년

배울게 많다는건 좋은 것

Learning Curve 가 좋아짐 --> 새로운 기술의 학습 속도가 빨라짐