datetime은 파이썬에서 기본으로 제공하는 표준 라이브러리로, 간단하거나 복잡한 방식으로 날짜와 시각을 조작하기 위한 클래스를 제공합니다.
naive datetime: naive datetime 객체는 그 자체만으로 시간대를 찾을 수 있는 충분한 정보를 포함하지 않습니다. (e.g.datetime.datetime(2019, 2, 15, 4, 58, 4, 114979))
aware datetime(timezone-aware) : 시간대를 포함합니다. (e.g.datetime.datetime(2019, 2, 15, 4, 58, 4, 114979, tzinfo=<UTC>)) aware datetime 객체는 자신의 시각 정보를 다른 aware datetime 객체와 상대적인 값으로 조정할 수 있도록 시간대나일광 절약 시간 정책혹은 적용 가능한 알고리즘 정보를 담고 있습니다.
naive datetime은 어느 시간대를 기준으로 하는 시각인지 모호하므로 aware datetime을 이용하는 것을 권장합니다.
여기서는datetime을 쉽게 다루기 위해pytz라이브러리를 사용합니다.pytz는 아래와 같은 장점이 있습니다.
시간대를 시간차가 아닌 사람이 알아보기 쉬운 지역 이름으로 비교적 쉽게 설정할 수 있습니다.
원하는 시간대의 aware datetime으로 변경해주는localize()메소드를 제공합니다.
now는 UTC를 기준으로 현재 시각을 생성합니다. 하지만, naive한 시각입니다.
now=datetime.datetime.utcnow()
1. naive datetime은 절대 사용하지 않습니다.
가장 큰 이유는 naive datetime과 aware datetime을 서로 섞어서 쓰지 못한다는 것입니다.
동적 타입 언어에서 쓸 수 있는 가장 간단한 타입 검사 수단인isinstance()체크로도 이 둘을 구별할 수가 없으므로, 코드의 어느 지점에서 naive datetime이 섞이기 시작하면 예기치 않은 지점에서 버그 발생 가능성이 급격히 올라갑니다. Python 2에서str과unicode를 섞으면 안 되는 것과 비슷한 이유라고 생각하시면 됩니다.
2. 장기적으로 보존해야 하는 datetime은 항상 UTC를 기준으로 저장합니다.
지역 시간대는 지정학적 또는 정치적인 이유로 생각보다 자주 바뀝니다. 예컨대 1961년 이전까지 한국은 UTC+08:30을 지역 시간대로 사용했었고, 1988년 올림픽 즈음에는 일광 절약 시간대를 시행하고 있었습니다. 시간대 데이터베이스(tz database)는 이런 변경 내역을 담고 있고, pytz가 제공하는 시간대 객체의 동작에도 반영되어 있습니다. 그 때문에 시간대 데이터베이스가 제때 업데이트되지 않거나, 갑작스러운 시간대 변경으로 데이터베이스에 반영이 늦어지거나 하면, 시간 계산에서 오차가 발생할 여지가 있습니다. 또한 같은 aware datetime 이어도 서로 다른 시간대를 가진 datetime끼리 연산하거나 하는 상황도 문제를 복잡하게 만들고, DB나 다른 서비스의 API를 사용할 때, 그 서비스가 시간대를 제대로 다루는 데에 필요한 복잡도를 감수하는 대신 단순히 UTC 기준의 고정 오프셋 시간대만 사용하는 등의 이유로 서로 지원 범위가 맞지 않아 곤란을 겪을 수도 있습니다.
높은 이익성장이 예상되는 미국우량성장주에 투자를 하는 펀드로서 인덱스를 추종하는 펀드가 아닙니다.
k)DB차이나바이오헬스케어증권자투자신탁(UH)[주식]C-P2E(★★★★☆) (6% 투자) : P2는 퇴직연금용 의미
중국 헬스케어 섹터는 양회에서 정책적 수혜 기대감과 코로나 19 신약개발 기대감, 중국산 진단키트 및 방역 물자
대외 수요 증가에 강세를 기록하였습니다. 편입 비중이 높은 제약과 의료장비 관련주들이 강세를 지속하며 펀드
수익률에 긍정적으로 작용하였습니다.
참고로, 수수로 미징구 유형(C)로서, 4 년 이전에 환매할 경우 판매수수료선취형(A)보다 낮은 총비용을 지불할 수
있는 온라인판매 집합투자기구입니다.
l) 마이다스신성장기업포커스증권투자신탁(주식)C-Pe2(★★★★☆) (6.6% 투자)
ㅁ 상장지수 펀드(ETF)
ARIRANG 미국S&P500 ETF
- Apple Inc(애플, 정보기술)
- Microsoft Corp(마이크로소프트, 정보기술)
- Amazon.com Inc(아마존, 정보기술, 소비재)
- FaceBook Inc(페이스북, 정보기술)
- Berkshire Hathaway Inc B(버크셔 해서웨이, 금융)
- JPMorgan Chase & Co(제이피모건, 금융)
- Alphabet Inc Class A(알파벳, 정보기술)
- Alphabet Inc Class C(알파벳, 정보기술)
- Johnson & Johnson(존슨앤존슨, 헬스케어)
- Visa(비자, 금융)
ARIRANG 미국나스닥기술주 ETF(미국 4차산업 핵심종목)
주식시장이 하락할 때, 펀드도 어쩔 수 없이 하락할 수 있다. 주식처럼 상승이 둔화되었을 때, 또는 떨어질 때, 원하는 상품에 입금하는 습관도 주식형 펀드에서 요구된다. 큰돈을 한번에 맡겨서 수익을 올릴지, 아니면 적립식이나 소액 거치식으로 가느냐는 자신이 선택해야 합니다.
주식형 펀드를 고를 때 조심해야 할 것은, 수익이 미미한 펀드라고 해서 무조건 무시하지 말고, 수익이 높다고 해서 무조건 믿지 말아야 한다.
가장 좋은 펀드는 오를 때 지수보다 조금 더 오르고, 떨어질 때는 지수보다 좀 덜 떨어지면서 지속적으로 지수의 상승률과 차이를 벌일 수 있는 펀드가 좋다.
주식시장이 안 좋아 너무 떨어질 때, 펀드 구매가 많아 진다고 합니다.
그 만큼 요즘 투자자들도 경륜이 많아 지면서, 수준이 높아졌기 때문이라고 하죠?
단기적인 투자에 너무 휘둘리면, 절대로 간접 투자를 못합니다. 이점 명심하셔서 1주에,, 1달에,,, 한번씩 기간을 정해 놓으시고, 펀드를 점검한다면, 주말의 여가 생활로 재테크를 하실 수도 있겠고요. 수익률 점검으로 내 펀드가 안녕 하신 지를 보는 것은 좋은 습관입니다.
Qt Designer로 설계할 때 PyQt5 응용프로그램에서 사용자 정의 위젯을 사용하는 방법에 대해 알아보기
Qt Designer는 PyQt5 GUI를 설계하기 위한 훌륭한 도구로, PyQt5 위젯과 레이아웃의 전체 범위를 사용하여 앱을 구성할 수 있다. 그러나 응용프로그램이 점점 더 복잡해짐에 따라 사용자 정의 위젯을 작성하거나 Qt Designer 내에서 위젯을 사용할 수 없는 PyQtGraph와 같은 PyQt5 라이브러리를 사용할 수 있다.
Qt Designer는 설계에서 사용자 정의 또는 외부 위젯을 나타내기 위해 placeholder(자리 표시자) 위젯을 사용하는 메커니즘을 지원한다. 본 과정에서는 Qt Designer 내에서 MainWindow에 PyQtGraph plot을 포함하기 위해 placeholder(자리 표시자)를 사용하는 과정을 설명한다.
위젯 승격(Widget Promote)
Qt Designer에서 placeholder(자리 표시자)를 사용하는 원칙은 매우 간단하다.
Qt Designer에서 UI를 정상적으로 생성하십시오. 추가할 사용자 지정 위젯을 나타내는 placeholder(자리 표시자) 위젯을 추가하십시오. Qt에 UI를 작성할 때 placeholder(자리 표시자)를 실제 위젯으로 바꾸도록 지시하십시오. Qt에서 이 최종 단계는 (기본 클래스를 promote하는 것과 같이) 'promote'이라고 한다.
추가하려는 사용자 지정 위젯이 기존 Qt 위젯의 하위 클래스인 경우 기본 클래스를 승격할 placeholder로 사용할 수 있다. 예를 들어 QPushButton에서 하위 분류된 사용자 지정 MyAwesomeButton 위젯이 있는 경우 QPushButton을 placeholder로 사용하여 MyAwesomeButton으로 승격한다. 이를 통해 Qt Designer 내에서 기본 클래스 속성, 이벤트 및 작업에 액세스할 수 있다.
사용할 명백한 기본 클래스가 없는 경우 모든 Qt Widget의 공통 기본 클래스인 "Widget"을 사용할 수 있다.
PyQtGraph
데이터 과학에 있어서 Python은 향후 대중적인 사용이 될 것이며, PyQt5를 통해서 대시보드와 분석 도구를 일반적인 사용Case가 될 것이다. 이러한 점에서 UI에 plot을 추가할 수 있다는 것은 매우 유용하며 Qt Designer에서 이 작업을 수행할 수 있다는 것은 훨씬 더 유용하다고 할 수 있다.
Python에는 많은 plotting library가 있으며, matplotlib가 가장 인기 있고 PyQt5에 대한 기본적인 지원을 제공한다. PyQtGraph는 Qt의 기본적인 QGraphicsScene을 사용하여 애플리케이션의 자연스러운 부분을 느끼는 빠른 줌, 스케일링, 드래그 드롭 동작을 제공하는 인기 있는 대안이다.
Ploting을 위해 PyQtGraph를 사용하든 maplotlib를 사용하든, plot canvas 위젯은 Qt Designer 내에서 사용할 수 없다. 하지만 본 과정에서는 사용자 지정 위젯으로 사용하는 방법을 안내하도록 하겠다.
PyQtGraph를 아직 설치하지 않은 경우 다음을 사용하여 설치할 수 있다.
>pip install pyqtgraph
Qt Designer
이제 Qt Designer를 사용하여 간단한 UI 디자인을 만들고 PyQtGraph 위젯의 placeholder를 추가하도록 하겠다. 먼저 Qt Designer를 열고 정상적으로 새 MainWindow를 생성한다.
PyQtGraph 위젯에 적합한 기본 클래스가 없으므로 기본 "Widget"을 선택하여 창 중앙에 끌어 놓는다. 그리고, 위젯 Object Name을 "graphWidget"이라는 이름을 지정하고, 파이썬 코드에서 그 이름으로 참조하도록 한다.
위젯을 마우스 오른쪽 버튼으로 누르고 위젯의 상황에 맞는 메뉴에서 승격 대상을 선택한다. QWidget을 승격하면 PyQtGraph plot 위젯에서 지정된 하위 클래스로 교체해야 함을 나타낸다.
자리 표시자 위젯이 될 사용자 지정 위젯 클래스를 지정하는 대화상자가 표시된다.
헤더 파일은 클래스를 가져오는 데 사용되는 Python 모듈의 이름인 pyqtgraph이다. 대체할 위젯의 클래스 이름을 "PlotWidget"으로 지정한다.
짜잔! 그 위젯은 이제 plot이 가능한 canvas로 승격되었다. 하지만 Qt Designer 내에서는 어떤 변화도 볼 수 없을 것이다. MainWindow를 PyQt app과 동일한 디렉토리에 "mainwindow.ui"라는 이름으로 저장하자.
Loading the .ui file
이제 UI 정의를 포함하는 mainwindow.ui 파일이 있다. Python에서 이걸 로드해서 창과 사용자 지정 위젯을 보여줄 수 있다. 기본 앱 템플릿부터 시작해 봅시다.
우선, x와 y 데이타를 갖는 간단한 plot을 만드는 함수를 만들어보자.
그래서, 온도를 나타내는 temp와 시간을 나타내는 hour라는 두 개의 배열을 이용하여 plot() method를 추가하여 graph widget인 .plot() method를 사용하도록 했다. 이제 코드를 실행하여 다음을 확인하도록 하자.
자! 이제 당신은 방금 당신의 첫 plot을 PyQtGraph에 삽입하는데 성공했을 것이다.
기본 PyQtGraph plot은 그리 예쁘지 않지만 표시된 데이터를 변경하기 위해 .plot()을 호출하여 사용할 수 있다.
다음 기회가 되면, 라인 색상, 스타일 및 대체 유형의 plot을 포함하여 좀 더 복잡한 PyQtGraph plot과 plot customization을 다루려 한다.