목록Python (58)
YOGYUI
회사에서 사원별 공수(Man Hour) 관리 프로그램을 하나 만들었는데, 공휴일에는 입력이 안되게 만드는 기능이 필요하게 됐다 파이썬 써드파티 라이브러리 종류도 몇 개 있어 찾아봤는데, 중국의 국경일을 기반으로 한국의 실정에 맞게 변환해야 하는 경우가 대부분이라 번거로울 뿐만 아니라 대통령 선거같은 이벤트나 임시공휴일은 유저가 따로 입력해야 하는 불편함이 있다 확실한 건 웹크롤링인데, (ex: 주식시장 개장일) 공공데이터포털에서도 API 몇 개가 공개되어 있어서 그 중 한개를 사용하도록 했다 1. 공공데이터포털 API 활용신청 데이터 타이틀은 "특일 정보", URL은 아래 링크 참고 www.data.go.kr/iim/api/selectAPIAcountView.do 한국천문연구원(?!)에서 제공하는 데이터..
파이썬 3.10에 마침내 C, C++의 switch/case문과 유사한 문법이 추가된다고 한다 PEP 634은 구조적 패턴 매칭(Structural Pattern Matching)이라 하여 switch/case문과 유사한 match/case 문법에 대한 내용을 담고 있다 해당 내용은 다음 기사에서 최초로 접했다 (3월5일 기사니 꽤 뒷북인 느낌 ㅎㅎ) www.ciokorea.com/news/185423 파이썬 3.10의 새 '패턴 매칭'이 할 수 있는 일 파이썬(Python)은 강력하고 인기가 높지만, 다른 언어에는 있는 플로우 제어(flow control)가 결여되어 있었다. 이는 하나의 값을 가져와, 여러 가능한 조건 중 하나에 대해 명쾌하게 매칭 할 수 있는 www.ciokorea.com C, C+..
1. Introduction 지난 2월 24일 빅데이터분석기사 필기시험 1회 응시 접수자를 대상으로 2회 시험 고사장 우선 변경 이벤트가 있었다 (1회 시험은 코로나19 확산때문에 취소됐었는데... 2회도 무사히 치러질지도 의문 ㅠ) www.dataq.or.kr/www/board/view.do?bbsKey=eyJiYnNhdHRyU2VxIjoxLCJiYnNTZXEiOjUwODA1MX0=&boardKind=notice 데이터자격시험 www.dataq.or.kr ※ 경기 지역 거주자들은 서울에서 치뤄야만 하는 슬픈 현실... 수원에서 제일 가까운 수험장을 찾아야하는데, 사이트가 제공하는 웹 UI는 한번에 하나의 고사장만, 그것도 아주 좁은 지역만 확대된 채로 보여줘서 (줌아웃도 안된다...뭔 API를 쓴거야...
몇달전에 Netflix에서 방영하는 오리지널 다큐멘터리 "커넥티드: 세상을 잇는 과학" (영문명 connected: The Hidden Science of Everything) 중 4화 '수의 법칙'을 보고 충격을 받은 적이 있어 그 내용을 정리해보고자 한다 ※ 6화 모두 엄청 재밌다, 강력 추천! 포스트 작성한다고 2번을 다시 돌려봤다 제목인 '수의 법칙' 답게 하나의 수학 공식(법칙?)에 대한 내용을 다루고 있는데, 법칙의 이름은 바로 '벤포드의 법칙' (Benford's Law) 내 나름대로는 수학이나 공학 지식이 풍부하다고 자부하는데 이 법칙은 완전히 처음 접해봤는데다가 실생활에서 광범위하게 활용된다고 하니 꽤 놀라웠다 내가 이해한대로 설명하면 장황해질 수 있으니 위키피디아의 정의를 그대로 옮겨적..
공공데이터포털에서 국내 코로나19 감염현황에 대한 데이터를 얻어보자 (OpenAPI 실습) 데이터 타이틀은 "보건복지부_코로나 19 감염_현황"이고 URL은 아래 링크를 참고 www.data.go.kr/data/15043376/openapi.do RESTful API로 호출하여 XML 포맷으로 데이터를 받아볼 수 있을 것 같다 1. 데이터 활용신청 로그인 후 페이지 내 "활용신청" 버튼을 클릭 후 개발계정 신청서를 작성하자 승인되면 다음과 같이 API가 활용가능한 것으로 디스플레이된다 (원래 사용하는 계정은 신청/활용건수가 너무 많아 포스팅을 위해 계정을 새로 하나 만들었다...) 개발계정 상세보기로 가면 실제 API에서 사용해야 할 Key (일반 인증키)를 얻을 수 있다 Key값 (일반인증키)는 API..
[ Web Crawling (Python) ] 지난 포스트에서 동행복권 로또6/45 당첨번호를 웹크롤링해봤다 yogyui.tistory.com/entry/PythonBeautifulSoup-%EB%A1%9C%EB%98%90-645-%EB%8B%B9%EC%B2%A8%EB%B2%88%ED%98%B8-%ED%81%AC%EB%A1%A4%EB%A7%81 Python::BeautifulSoup - 동행복권 로또 6/45 당첨번호 크롤링 [ Web Crawling (Python) ] 동행복권 사이트에서 로또 6/45 역대 당첨번호들을 크롤링한 뒤 DB에 저장해보자 동행복권 메인 사이트 동행복권 당첨번호 3 4 15 22 28 40 보너스번호 10 1등 총 당첨금 263억원(8명 yogyui.tistory.com 메인..
[ Web Crawling (Python) ] 동행복권 사이트에서 로또 6/45 역대 당첨번호들을 크롤링한 뒤 DB에 저장해보자 동행복권 메인 사이트 동행복권 당첨번호 3 4 15 22 28 40 보너스번호 10 1등 총 당첨금 263억원(8명 / 33억) 이전 회차 당첨정보 보기 다음 회차 당첨정보 보기 dhlottery.co.kr 1. 최신 회차 크롤링 동행복권 메인 페이지에 접속하면 좌측 상단에 최신 회차 및 당첨번호를 확인할 수 있다 고민할 것 없이 바로 requests 사용해서 GET method로 HTTP 요청을 넣은 후 html 코드를 읽어보자 import requests url = "https://dhlottery.co.kr/common.do?method=main" html = reques..
[ Web Crawling (Python) ] 기상청 날씨누리 사이트의 '도시별 현재날씨' 정보를 pandas DataFrame 객체로 저장해보자 www.weather.go.kr/weather/observation/currentweather.jsp 도시별 현재날씨 > 지상관측자료 > 관측자료 > 날씨 > 기상청 홈 > 관측자료 > 지상관측자료 > 도시별 현재날씨 |날씨|관측자료|지상관측자료|도시별 현재날씨 기상실황표2021.02.07.16:00 기상실황표 강릉 6.6 7.1 1.9 4.7 70 북서 1018.9 강진군 4.0 12 www.weather.go.kr 1. HTML GET requests 라이브러리를 사용해 해당 url의 html을 가져온다 import requests from bs4 impo..
Flowchart를 웹에서 보여줘야 할 필요가 생겨서 이리저리 검색하다가 python, matplotlib 기반 라이브러리인 schemdraw를 한번 써보기로 했다 schemdraw.readthedocs.io/en/latest/ Schemdraw documentation — SchemDraw 0.8 documentation schemdraw.readthedocs.io 전자회로, 논리회로, 신호처리 등 다양한 종류의 schematics를 그리기 위한 Element들이 구현돼있다 (Latex도 지원되는듯) 예제코드를 보면 알겠지만, 한땀한땀 노가다로 코딩해줘야된다 사용성을 높이려면 고수준의 커스터마이징이 필요할 것 같다 각설하고, 다음과 같이 Flowchart도 어렵지 않게 구현할 수 있다 # test.py..
3. Implementation 우선, 256개 Timestamp에 대한 하행 호출 패킷을 모으기 위해 다음과 같이 코드를 짜봤다 (패킷을 리스트에 담는데, 동일한 timestamp 값을 모은적이 있다면 패스, 리스트 자체를 직렬화해서 로컬에 저장) import os from SerialComm import SerialComm from SmartParser import SmartParser if __name__ == '__main__': import time import pickle picklepath = './smart_elevator_down_packets.pkl' os.system('clear') ser1 = SerialComm() ser2 = SerialComm() par = SmartParser..
나중에 시간날때 Git에 올려야겠다... [Structure] ---- -------- Define.py -------- Threads.py -------- SerialComm.py # Define.py import datetime import threading def checkAgrumentType(obj, arg): if type(obj) == arg: return True if arg == object: return True if arg in obj.__class__.__bases__: return True return False class Callback(object): _args = None _callback = None def __init__(self, *args): self._args = a..
[4] HTTP 서버 구축 테스트 라즈베리파이에 연결된 RS-485 to USB 디바이스를 외부에서 접근 가능하게 하는 여러 방법 중 가장 보편적인 방법은 HTTP 서버를 구축하는 것이라고 생각했다 (외부에서 인터넷을 통한 접근, 궁극적으로는 아이폰/아이패드 활용) JAVA, Node.js, 혹은 Python Flask, Python Django 등 다양한 프레임워크로 서버 구축을 해보았는데, 경험상 빠른 프로토타이핑에는 Flask가 제일 좋아 보여 선택했다 (시리얼 통신 프로토타이핑을 파이썬으로 하는 바람에...) 추후 안정성이나 사용자 인증같은 부가기능을 사용하기 위해 Node로 교체할 지 여부는 TODO로 남겨놓기로 한다 https://flask.palletsprojects.com/en/1.1.x/..
[3] RS-485 Signal Hooking 최신버전 라즈비안 깔아두면 FT232 계열은 드라이버 별도로 설치하지 않아도 장치가 잘 인식된다 pyserial 패키지 이용해서 우선 어떤 패킷이 RS-485 통신 라인에 실리는지 후킹해보자 pip3 install pyserial # Test.py # 1. 일단 신호 들어오는지나 보자 import serial recv_cnt = 0 max_recv = 200 ser = serial.Serial() ser.port = '/dev/ttyUSB0' ser.baudrate = 9600 ser.open() while True: if ser.in_waiting > 0: recv = ser.read(ser.in_waiting) print(' '.join(['{:02X}'..