1. 기업맞춤형 빅데이터 분석가 양성과정 소개
2. 기업맞춤형 빅데이터 분석가 양성과정 노트목록
https://crosefrog.tistory.com/entry/20210104-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-4%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240105-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-5%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240109-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-7%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240111-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-9%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240115-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-11%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
3. PyQt.py / ui
4. Notion 일과 삶 & 빅데이터 분석가 양성과정 대시보드
https://lifemoment.notion.site/497bff9488aa4dec9171d08224a7a978?pvs=4
5. Naver 블로그 포스팅
https://blog.naver.com/moment_by_moment/223324602355
6. 필기노트
성장배경 등의 form이 있다.
성격의 단점 및 극복
자기소개서 앞장: 표
자기소개서 뒷장: 서술
→ 뭘 해봤는지 등을 적어라.
이력서 쓸 때, 보유기술
뒷장에서 무엇을 할 수 있는지
사람마다 보는 눈이 다르다.
5,000만원 전세집 앞에 비닐하우스가 있었다.
이력서 쓸 때는 2장 정도 작성한다.
3~4장 길게 써보자.
IoT 포트폴리오
인하대학교에서 어떤 걸 배우면 좋은가?
인공지능, 빅데이터 ⇒ 사회 트렌드
이력서 작성할 때, 그런 경험이 많지 않으니 잘 표현하자.
나의 이력서를 보고, ‘대화’를 하고 싶을 수 있도록 공을 들여야한다.
셀 옮기기, 병합하기, 나누기
colab으로 보고서를 작성해보자.
(보통 보고서는 결과, 이야기가 중요하다.)
→ 코랩에서 텍스트로 꾸미는 것을 알아보자.
Visual Studio Code로 바꾸다보니, 코드의 결과를 바로 확인하기는 어렵다.
입문자에게는 colab베이스로 가르치는 것이 맞다.
위젯, Input Widgets - QLineEdit
단계 1. UI 파일 생성 - QLineEdit 위젯 배치
단계 1.2 새 Dialog 창 생성
새 폼 창에서 Dialog without Button 더블 클릭
class WindowClass(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.order)
def order(self):
a_lst =[]; b_lst = []; total_price = 0
if self.chkBox_A0.isChecked():
a_lst.append( self.chkBox_A0.text() )
total_price += self.get_price(self.lbl_A0.text())
if self.chkBox_A1.isChecked():
a_lst.append( self.chkBox_A1.text() )
total_price += self.get_price( self.lbl_A1.text() )
if self.chkBox_B0.isChecked():
b_lst.append( self.chkBox_B0.text() )
total_price += self.get_price( self.lbl_B0.text() )
if self.chkBox_B1.isChecked():
b_lst.append( self.chkBox_B1.text() )
total_price += self.get_price( self.lbl_B1.text() )
if self.chkBox_B2.isChecked():
b_lst.append( self.chkBox_B2.text() )
total_price += self.get_price( self.lbl_B2.text() )
QMessageBox.information(self, 'Info', f'총 금액은 {total_price}원입니다')
print('식사 :', a_lst,' 요리 :', b_lst, '를 주문합니다')
def get_price(self, str_price):
return int( str_price.replace('원', '').replace(',','') )
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import uic
form_class = uic.loadUiType("textEditTest.ui")[0]
class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self)
self.fontSize = 10
self.btn_PrintTextEdit.clicked.connect(self.printTextEdit)
self.btn_ClearTextEdit.clicked.connect(self.clearTextEdit)
self.btn_SetFont.clicked.connect(self.setFont)
self.btn_FontSizeUp.clicked.connect(self.fontSizeUp)
self.btn_FontSizeDown.clicked.connect(self.fontSizeDown)
self.btn_Append.clicked.connect(self.stringAppend)
def printTextEdit(self) :
print(self.textEdit.toPlainText())
def clearTextEdit(self) :
self.textEdit.clear()
def setFont(self) :
fontvar = QFont("Apple SD Gothic Neo",10)
self.textEdit.setCurrentFont(fontvar)
def fontSizeUp(self) :
self.fontSize = self.fontSize + 1
self.textEdit.setFontPointSize(self.fontSize)
def fontSizeDown(self) :
self.fontSize = self.fontSize - 1
self.textEdit.setFontPointSize(self.fontSize)
def stringAppend(self):
self.textEdit.append('ksp')
if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
# filename – menu_3.py
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
form_class = uic.loadUiType('./ui/menu3.ui')[0]
class WindowClass(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.total_price = 0
self.pushButton.clicked.connect(self.order)
self.ChkBox_A0.stateChanged.connect(self.priceftn)
self.ChkBox_A1.stateChanged.connect(self.priceftn)
self.ChkBox_B0.stateChanged.connect(self.priceftn)
self.ChkBox_B1.stateChanged.connect(self.priceftn)
self.ChkBox_B2.stateChanged.connect(self.priceftn)
def order(self):
a_lst =[]; b_lst = []; total_price = 0
if self.ChkBox_A0.isChecked():
a_lst.append( self.ChkBox_A0.text() )
if self.ChkBox_A1.isChecked():
a_lst.append( self.ChkBox_A1.text() )
if self.ChkBox_B0.isChecked():
b_lst.append( self.ChkBox_B0.text() )
if self.ChkBox_B1.isChecked():
b_lst.append( self.ChkBox_B1.text() )
if self.ChkBox_B2.isChecked():
b_lst.append( self.ChkBox_B2.text() )
QMessageBox.information(self, 'Info', f'총 금액은 {self.total_price}원입니다')
print('식사 :', a_lst,' 요리 :', b_lst, '를 주문합니다')
def get_price(self, str_price):
return int( str_price.replace('원', '').replace(',','') )
def priceftn(self):
self.total_price = 0
if self.ChkBox_A0.isChecked():
self.total_price += self.get_price(self.lbl_Price_A0.text())
if self.ChkBox_A1.isChecked():
self.total_price += self.get_price(self.lbl_Price_A1.text())
if self.ChkBox_B0.isChecked():
self.total_price += self.get_price(self.lbl_Price_B0.text())
if self.ChkBox_B1.isChecked():
self.total_price += self.get_price(self.lbl_Price_B1.text())
if self.ChkBox_B2.isChecked():
self.total_price += self.get_price(self.lbl_Price_B2.text())
# chkBoxList = [self.chkBox_A0, self.chkBox_A1, self.chkBox_B0, self.chkBox_B1, self.chkBox_B2]
# priceList = [ self.lbl_A0, self.lbl_A1, self.lbl_B0, self.lbl_B1, self.lbl_B2]
# self.total_price = sum( [ self.get_price( price.text() ) for chkBox, price in zip(chkBoxList, priceList) if chkBox.isChecked()])
self.lbl_total_price.setText( str( format( self.total_price, ',d') ) + '원' )
if __name__ == '__main__':
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
PyQt 시그널 → 슬롯
- 위젯에 정의된 이벤트를 시그널(signal)이라고 부름
- 특정 이벤트(signal)가 발생했을 때 호출되는 함수(메서드)를 슬롯(slot)이라고 부름
지금은 웹 형태로 많이 가지만 과거 전통적인 윈도우 프로그램이라고 하면
공정처리: 재고관리 등
클릭하면 리스트가 있어서 고르는 것.
ComboBox
PCB기판을 만드는 공정에서 기름이 기판에 뭍는다.
기판 그대로 쓰는 것이다. (깔끔해야 한다.)
기판에다 IC를 박더라도 균형감있게 만들어야 한다.
어떤 이벤트에 대해 반응하게 하고 싶다.
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
form_class = uic.loadUiType('./ui/ComBoxTest.ui')[0]
class WindowClass(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.comboBox.currentIndexChanged.connect(self.comboBoxftn)
def comboBoxftn(self):
self.label.setText(self.comboBox.currentText())
print(self.comboBox.currentText(), end = '\\t')
print(self.comboBox.currentIndex())
if __name__ == '__main__':
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
Input/QComboBox
QspinBox, QDoubleSpinBox
: 버튼을 이용하여 상자 안의 숫자 크기를 조절할 수 있는 위젯
Slider 이용
위젯, QTimer
전자레인지가 예를 들어서 ABC 회사제품이라고 하면 어느정도 돌려야되는지 물어본다.
만들려면 얼마든지 만들 수 있다, 그러나 일반 전자레인지에 비해 가격이 확 오를 수 있다.
TimeOut되면 텍스트로 변환하여 라벨에 쓰자.
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QTimer
import datetime
class windowClass(QMainWindow):
def __init__(self):
super().__init__()
self.timer = QTimer(self)
QTimer의 멤버 함수
- start() : QTimer가 시간을 체크하기 시작
- start(msec): msec는 interval (msec만큼 시간이 지난 후에 시간 체크 시작(단위는 millisecond)
- stop(): QTimer 중지
- setinterval(msec): Qtimer의 Interval 설정, 단위는 millisecond
- timeout.connect(함수명): 설정한 Interval 주기로 실행시킬 함수 지정, Interval이 설정되지 않은 경우 1ms마다 함수 실행
- Interval(): QTimer의 Interval를 반환
- isActive(): QTimer가 작동 중인지 확인(작동 중이면 True)
→ 초마다 움직이는 시간을 확인할 수 있다.