
- 셀레늄은 웹 애플리케이션 테스트를 위한 포터블 프레임워크이다.
- pyautogui와 비슷하게 마우스를 컨트롤할 수 있지만,
웹 브라우저에서만 가능한 것이 다른점이다.- selenium은 웹브라우저 자동화 작업 도구이다.
- 웹 페이지는 크게 HTML과 CSS로 분류할 수 있다.
- CSS의 선택자를 Beautiful Soup에서 사용하게 된다.
*: 모든 요소 선택.: 클래스 선택자, 모든 클래스 요소 선택#: ID 선택자, ID 요소 선택[autoplay]: autoplay특성을 설정한 모든 요소 선택결합자
- A, B : A태그와 B태그 둘다
- A B : A태그 안의 B태그 선택
- A > B : A태그 안의 첫번째 B태그 선택
- ul > li : ul태그 바로 아래 첫번째 li태그 선택
conda update --all: conda의 업데이트 하는법, 베이스에 설치되어있는 패키지들의 업데이트가 있는지 확인 및 업데이트conda install -c conda-forge selenium: 셀레니움 설치conda install -c conda-forge webdriver-manager: 웹드라이버 매니저 설치
- 웹드라이버 매니저가 설치되어 있다.
- 패키지지만
__init__.py에서 패키지처럼 사용할 수 있게 정의되어 있다.웹 크롤링
# 셀레니움으로 크롬 웹브라우저 오픈 from webdriver_manager.chrome import ChromeDriverManager from selenium import webdriver # driver = webdriver.Chrome(ChromeDriverManager().install()) # URL='https://www.google.co.kr/imghp' driver.get(url=URL) # 브라우저가 완전히 켜질때까지 대기 (최대 10초) driver.implicitly_wait(time_to_wait=10)
- CSS에서 요소를 찾을 것이다. sbtc아이디의 첫번째 div의 첫번 째 div클래스 a5bIc의 첫번째 인풋요소를 찾는다.
- input태그가 유니크하기 때문에 위 경로에서 줄여서 아래 경로처럼 써도 똑같은 결과가 나온다.
- html -> 오른쪽마우스 -> copy -> copy selector 에서 요소의 Path를 복사할 수 있다.
- body태그를 찾고, 거기에서 반복문으로 page_down키를 60번 입력한다.
#islmp > div > div > div > div.gBPM8 > div.qvfT1 > div.YstHxe > input위치는 input (결과더보기 버튼) 을 찾아서 또다시 Page_down키를 60번입력한다.- headless모드로, 웹 브라우저를 띄우지 않고 화면 띄움 없이 작업하면 더 빠르게 작업 할 수 있다.
- 이미지의 src (url)을 links리스트에 추가한다.
- css셀렉터에서 요소를 찾고, 그 요소에서 src요소의 정보를 link에 append한다.
- deprecated Warning : 이제 곧 지원이 종료된다.
- find_elements_by_css_selector 대신 다른 명령어를 쓰는 것이 좋을 것이다.
- urllib.request.urlretrive명령어로 이미지를 다운받고, 저장한다.
- 사진들이 잘 들어와있다.
- 이미지, 영상처리를 위한 파이썬 모듈
conda install -c conda-forge opencv-python: opencv 설치
- 안된다면
pip install opencv-contrib-python을 사용한다.
bagging
- 여러개의 모델을 돌려 결과를 병합하여 사용하는것
boosting
- 하나의모델을 강화하는 것
stacking
- 데이터를 part로 나누고 각각 다른 모델을 적용해 학습?
- 겹겹이 쌓여있다 해서 stacking이다.
- 계단식 폭포를 뜻한다.
- 단계적으로 영상의 feature를 찾는 알고리즘이다.
- fase_cascade, eye_cascade로 얼굴과 눈을 찾을 것이다.
- ff : np.fromfile은 이미지를 nparray로 바꿔주는 것 같다.
- cv2.imdecode해서 nparray를 cv2의 읽기전용 데이터형태로 바꿔준다.
- cv2.resize로 사이즈를 맞춰준다.
- face_cascade로 얼굴을 감지해준다. 리턴값은 얼굴의 (x, y, w, h)값이다.
- 방금전 웹 크롤링 프로그램에서 얼굴을 크롤링해서 데이터를 사용해 보았다.
- 얼굴과 눈에 사각형이 생겼지만 입이 눈으로 인식되는 등, 성능이 좋지는 않다.
- 얼굴과 눈의 (x,y,w,h)값이 주어지기 때문에 그 부분만 따로 작업을 진행할 수 있다.
- 위 코드와 비슷하지만, 얼굴부분의 사이즈를 매우 작은 이미지로 만들고 다시 키우는 방법으로 모자이크를 생성한다.
- 위 코드와 비슷하다.
- 이미지를 그림처럼 바꿀 수 있다.
- GUI를 추가하여 조정할 수 있게 해준다.
conda install -c conda-forge pandas: 판다스 설치conda install -c conda-forge openpyxl: 엑셀파일을 읽을 수 있는 openpyxl 설치
- 엑셀파일을 읽어왔다.
- 0~1 인덱스를 제거했다. 컬럼정보가 컬럼이아니라 데이터처럼 들어가있기 때문에 지워주었다
- 컬럼의 정보를 다시 정해주었다.
- 아래와 같이 회차별 당첨 금액이 그래프로 잘 그려졌다.
- 가장 많이 나온 숫자도 살펴볼 수 있다.
- 전국의 대학교 위치를 DataFrame으로 만들어서, 컬럼별로 출력해봤다.
- df 컬럼별로 보기 (Series로 출력됨)
- 인덱스로 검색해서 보기
- 둘다써서 인덱스로 검색해서 컬럼정보만 보기
- .iloc로 슬라이싱 할 수 있다. 또, 이때는 Dataframe형태로 나온다.
- array형으로 데이터만 꺼내 올 수 있다.
지역이름으로 위도, 경도 알아보기
- 미리 url과 url에 함께보낼 데이터들을 정의하고, primary_key도 넣어서 API를 사용해보았다. 현재 key에러인지 x값, y값이 0으로 나온다.
- 지도에 위도와 경도를 넣어서 마커를 넣는다.
지도그리기
conda install -c conda-forge folium: folium 설치
- 파이썬에 웹서버를 구동시킬 수 있도록 하는 대표적인 어플리케이션
- Django
- RDBM과 상호작용을 완전히 지원하는 기본 내장 ORM (Object-relative mapping)과 함께 제공
- Object : 프로그램
- relative : 데이터베이스
- 프로그램과 데이터베이스간 상호작용을 완전히 지원하는 mapping이 잘되어있다
- 이 ORM은 마이그레이션 생성 및 관리도 지원.
- 내장 된 유효성 검사를 사용하여 데이터베이스 모델을 만드는 것이 상대적으로 더 쳔안함
- 유지보수하기 편함
- Flask
- 매우 가볍고 심플한 Framework를 지향하는 것이 특징 (Micro framework)
- Flask는 기본 기능 제공에 다양한 확장 모듈을 이용할 수 있다.
- 기본 flask의 형태라고 볼 수 있다.
@는 파이썬의 데코레이터이다. 작성할때는 def hello만 사용할 것 같지만, @app.route가 def hello를 감싸 더 내용을 추가해준다. (프레임워크 같이?)
- greeting.py를 만들어서 패키지로 불러와본다.
- 기본적인 flask를 실행해본다.
- 서버는 작동하지만 접속이 안된다....
localhost/map으로 접속하면 지도가 나올 것이다.
- tkinter라는 모듈을 사용한다.
- PYQT랑 비슷한 모듈이지만 tkinter가 더 촌스럽다고 한다...
- GUI를 꾸며주는 모듈이다.
- 위 코드 실행 결과.
- 폰트를 바꿀 수 있따.
- window.mainloop()는 window창이 떠있을 때, 무한루프로 유지시켜주는 것이다.
- window.pack()은 내부 요소의 위치를 지정해줄 수 있는 것 같다.
- 함수 외부의 변수 cnt를 1씩 증가시켜 출력해준다.
- 함수 외부의 변수 cnt를 글로벌로 만들어 줘야 내부 함수에서 똑같이 사용할 수 있다.
- 내부 로컬 변수에 글로벌 변수 값을 받아서 출력해주는 방식이다.
- 글로벌 변수 cnt는 이후, 가상화폐 가격정보가 될 것이다.
- window.after(1000, get_coin_1sec) : 1000 밀리초 = 1초, 마다 get_coin_1sec를 실행한다.
- 터미널에
designer입력
- PYQT는 GUI를 쉽게 만들 수 있게 이런 도구를 지원한다.
- 계산기 GUI를 만들어준다. 먼저 Layout을 vertical로 만들어준다.
input output이 되는 곳을 넣어준다.
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
ui_path = r"33. 계산기 만들기(PYQT)\계산기.ui"
form_class = uic.loadUiType(ui_path)[0]
class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self)
self.btn_C.clicked.connect(self.btn_clicked)
self.btn_number0.clicked.connect(self.btn_clicked)
self.btn_number1.clicked.connect(self.btn_clicked)
self.btn_number2.clicked.connect(self.btn_clicked)
self.btn_number3.clicked.connect(self.btn_clicked)
self.btn_number4.clicked.connect(self.btn_clicked)
self.btn_number5.clicked.connect(self.btn_clicked)
self.btn_number6.clicked.connect(self.btn_clicked)
self.btn_number7.clicked.connect(self.btn_clicked)
self.btn_number8.clicked.connect(self.btn_clicked)
self.btn_number9.clicked.connect(self.btn_clicked)
self.btn_result.clicked.connect(self.btn_clicked)
self.btn_minus.clicked.connect(self.btn_clicked)
self.btn_add.clicked.connect(self.btn_clicked)
self.btn_multipy.clicked.connect(self.btn_clicked)
self.btn_divide.clicked.connect(self.btn_clicked)
self.le_view.setEnabled(False)
self.text_value = ""
def btn_clicked(self):
btn_value = self.sender().text()
if btn_value == 'C':
print("clear")
self.le_view.setText("0")
self.text_value = ""
elif btn_value == '=':
print("=")
try:
resultValue = eval(self.text_value.lstrip("0"))
self.le_view.setText(str(resultValue))
except:
self.le_view.setText("error")
else:
if btn_value == 'X':
btn_value = '*'
self.text_value = self.text_value + btn_value
print(self.text_value)
self.le_view.setText(self.text_value)
if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
PyQt에서 자동으로 생성해주는 것도 있다.
- keras가 지원하는 백엔드중 하나였지만, 현재는 tensorflow에 keras가 편입되었다.
keras
- 현재 keras는 TensorFlow, Theano, CNTK의 세가지 백엔드를 지원한다.
- Theano는 현재 개발이 종료되었다.
- CNTK는 Microsoft가 지원하는 오픈소스 딥러닝 툴킷이다.
pytorch
- 오픈소스 머신러닝 프레임워크이다. 연구에서부터 상품화까지 지원한다.
TeachableMachine
https://teachablemachine.withgoogle.com/
- google과 함께하는 간단한 머신러닝 모델을 만들 수 있는 웹 사이트이다.
- 이미지, 오디오, 포즈등 다양한 프로젝트를 지원한다.
- 임베디드용 이미지도 지원하는 듯 하다.
- 여기서 데이터와 feature를 추가할 수 있다.
- 모델이 완성되면 이렇게 나온다.
- 완성된 모델을 사용하여 사과와 오렌지를 분류해본다.
- normalized_image_array : SVM등 여러 모델들은 입력받는 데이터의 스케일에 민감하다. 각 컬럼의 값(Feature)들의 범위가 들쭉날쭉하면 학습에 영향을 많이 끼치게 된다. 그래서 모든 값이 비슷비슷한 범위에 있도록 하기위해 정규화, 표준화 시킨다.
- 순서가 중요한 데이터는 시계열데이터라고 하는데, RNN 모델이 유효하다.
from keras.models import Sequential로 시계열 데이터 모델 툴을 불러온다.from keras.layers import LSTM, Dense를 불러온다. LSTM이 시계열데이터 학습에 유효한 학습방법일 것이다.데이터 불러오기
트레이닝, 테스트 데이터 분리
모델 빌드
모델 학습
모델 검증
- 파랑색은 실제 주가를 뜻하고, 노란색이 예측한 주가이다. 조금 다르지만 이정도면 매우 정확하다고 할 수 있다.