- 셀레늄은 웹 애플리케이션 테스트를 위한 포터블 프레임워크이다.
- 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이 시계열데이터 학습에 유효한 학습방법일 것이다.데이터 불러오기
트레이닝, 테스트 데이터 분리
모델 빌드
모델 학습
모델 검증
- 파랑색은 실제 주가를 뜻하고, 노란색이 예측한 주가이다. 조금 다르지만 이정도면 매우 정확하다고 할 수 있다.