분류 전체보기
-
파이썬 round 함수의 오류 (2.5가 2가되는 마법 - 사사오입과 오사오입)Tips 2022. 9. 30. 00:33
코드에 결과값이 이상하게 나와서 디버깅을 하다보니 round함수를 거치니 2.5가 2가되는 현상을 발견했다. 생각해보니 예전에도 이런 적이 있었는데 또 까먹고 이걸 쓰고 있는 내 자신을 보고 이번엔 궁금증을 해결한 흐름에 따라 글로 남겨보려고 한다. 왜 2.5의 반올림이 2가 되었는가? 결론부터 말하면 파이썬의 round함수는 오사오입(5미만이면 죽이고 5이상이면 올리는)방식을 채택하고 있기 때문이다. 영어로 Banker's Rounding이라고 한다. 이 방법을 따르면 소숫점이 0.5가 아닌 경우에는 일반적으로 우리가 알고 있는 반올림과 같은 방법으로 수행되지만, 소숫점이 0.5인 경우에는 정수 부분이 짝수인 경우 소숫점을 버린다. 즉, 2.5, 4.5, 14.5 ... 는 2,4,14가 된다. (원칙..
-
String형태로 들어온 시간 리스트의 총합을 구하는 법궁금점의 기록 2022. 9. 9. 18:41
1. Input data 형태: ["시간 1", "시간 2", ..., "시간 n"] 2. len(Input data) = n 3. 시간의 형태는 총 세 가지 - "시:분:초", "분:초", "초" 4. 각 시/분/초는 00으로 표현 될 수 있음 - e.g. "00:00:01", "00:00" 5. 하나의 Input data안에 세 가지 형태가 섞여서 나타날 수도, 아닐 수도 있음 생각했던 Sudo code sum_times = [0,0,0] for 시간 in input_data: new_times = 시간.split(":") carry = 0 for i in new_times와 sum_times 중 긴 리스트의 길이 역순: if 두 리스트의 길이 같다면: idx = 0 elif 두 리스트의 길이 다르면..
-
처음 시작하는 마이크로서비스 + 헬름 배우기 : 쿠버네티스 정리Data Engineering/Books 2022. 8. 29. 01:02
Microservices Up & Running (처음 시작하는 마이크로서비스) (필요한 부분 먼저 읽고 요약 진행합니다. 전체적으로 실습 코드 위주의 도서라 개념 정리가 필요한 분들에게는 추천하지 않습니다.) Learn Helm (교보문고에서 슬쩍 읽고 구매했는데 더 좋은 책이 있으리라 믿습니다.. 번역 별로..) 7.1.1 Network (AWS 네트워크 관련 공식 문서) 가용영역 (Availability zone): 별도의 분리된 데이터 센터 VPC (Virtual Private Cloud): AWS 가상 네트워크의 상위 객체 VPC는 여러 개의 작은 네트워크인 서브넷으로 나뉠 수 있다. 서브넷은 네트워크 트래픽을 구성하고 리소스에 대한 엑세스를 제어한다 (VPC의 ip 주소 범위 결정). 예를 들..
-
파이썬에서 psycopg2 사용하지 않고 Redshift 연결하는 법 (feat. Error: pg_config executable not found)Tips 2022. 7. 26. 00:50
Python에서 Postgresql 데이터베이스를 사용하려면 psycopgy2라이브러리를 사용해야한다. Redshift역시 postgresql 기반이므로 psycopg2를 많이 사용한다. Psycopg2 설치하면서 pg_config 에러는 한번씩은 다 마주쳐봤을 것이다. 보통 이 에러는 psycopgy-binary를 설치하여 해결할 수 있는데, 맥북 m1칩 + Big Sur이상이거나 python 3.6~3.9이외의 버전에서는 psycopg2-binary 설치시에도 동일한 에러가 뜬다는 것이다. 해결방법은 다음과 같이 여러가지가 있다 (에러메세지 길이에 비해 생각보다 간단해서 화남) Postgresql을 설치해준다 $brew install postgresql Python 3.6 ~ 3.9 사이로 버전을 맞..
-
파이썬 패키지 만들어서 Pypi에 배포하기 (+ README.md 홈 화면에 띄우기)Tips 2022. 7. 25. 23:57
DA분들 중에 Python을 사용하여 분석을하고자 하시는데 Redshift에서 데이터를 바로 불러오시지 못해 번거로운 과정을 거치고 계시는 걸 알게 되었다. Psycopgy2나 Boto3와 같은 라이브러리를 사용하시면 되지만 이런 필요성이 생길 때마다 여러 줄의 코드를 알려드리고 동작 방법에 대해서 설명드리기보다는 차라리 메소드 하나로 바로 Pandas frame으로 불러올 수 있는 패키지를 만드는 것이 빠르겠다는 판단이 들어 Python 패키지를 만들어 pypi에 배포했다. (처음에는 Pypi에 배포하지 않고 사내에만 공유하여 모듈 내부에 DB user 인증정보까지 넣어서 좀 더 간단하게 쓰실 수 있게 하려고 했는데 확장성을 위해 내부 회의 후 Pypi에 배포하고 계정 정보는 제외하는 것으로 결정했다...
-
세마포어 CI로 Github CI/CD 구축하기 - 4. 환경변수 설정하기, AWS CLI 계정 credentials 파일 생성하기Project/CICD 2022. 7. 25. 00:49
작업시 AWS 계정 정보 같은 여러가지 민감 정보를 사용할 때가 있는데, 이를 코드에 그대로 넣고 github에 올려버리면 불특정 다수에게 노출되는 위험성이 있다. 사실 회사의 작업 repository는 private repo이기때문에 그대로 넣고 올려도 엄청난 문제 상황이 예상되지 않지만 데이터 보안에 대한 경각심은 데이터 엔지니어로써 기본적으로 가져야할 부분이라고 생각한다. 해서 최대한 권한이 부여된 정보들을 볼 수 없도록 하는 방법들을 생각해봤다. 배포 파일은 python을 이용하므로 크게 env파일에 관련 변수들을 저장하고 해당 파일을 github에서 encycrpt하기 Github의 secrets 기능 사용하기 (repository단위로 설정할 수 있다) Semaphore의 secrets 설정하..
-
세마포어 CI로 Github CI/CD 구축하기 - 3. yaml파일 작성하기Project/CICD 2022. 7. 24. 23:35
세마포어 CI/CD 파이프라인 설정은 UI를 통해 간단하고 직관적으로 할 수 있지만 수정할 때마다 웹에 들어가는 게 귀찮기도 하고 해서 yaml파일을 작성했다. 설정 파일 경로는 기본적으로 트리거 할 브랜치에 .semaphore/semaphore.yaml로 지정되어있는데 프로젝트 setting에서 변경할 수 있다. yaml파일은 다음과 같이 구성된다 (자세한 내용은 공식문서 참고) version: 세마포어 yaml 버전 name: 파이프라인 이름 agent: 하드웨어와 소프트웨어 스펙 정의 (machine type, os image, container). Task 단위로 다르게 설정 가능하다.머신 종류에 따라 부과되는 금액이 다르거나 현재 사용하는 플랜에 따라 사용할 수 있는 머신 종류가 다르므로 미리 ..
-
[Trouble shooting] Glue에서 사용자 정의 함수(udf) 만들어서 사용하기 (+apply, map, applymap 함수의 차이)Data Engineering/AWS, Spark 2022. 7. 4. 00:43
*바로 udf코드를 보고싶다면 아래의 "Glue UDF 적용하기"부터 읽어주세요 Redshift에 json으로 데이터가 쌓이고 있는 테이블이 있어서 이 테이블에서 데이터를 가져와 → 파싱 → 다른 데이터들과 함께 새로운 분석용 테이블을 만드는 ETL 스크립트를 Glue로 작성하고 있던 중이었다. 사실 기존에 유사한 작업으로 생성되어있는 Job이 있어 거기에서 조금만 고치면 되는데 그 Job은 SQL로 작성이 되어있었고, 2주의 넉넉한 기간이 주어졌고, 그래서 spark도 써 볼겸 pyspark으로 처음부터 작성해봤다. 처음에는 데이터 불러온 뒤 부터는 pandas처럼 쓰면 될 거라고 아주 가볍게 생각해서 이틀 컷이다 이러면서 spark도 깔아보고 이것 저것 해가면서 진행했는데 정말 생각대로 흘러가지 않았..