Skip to content

Instantly share code, notes, and snippets.

View 6mini's full-sized avatar

Yoonmin Lee 6mini

View GitHub Profile
@6mini
6mini / extract_numbers_from_string.py
Created July 11, 2024 09:19
입력받은 문자열에서 모든 숫자를 추출하여 정수 형태로 반환한다.
def extract_numbers_from_string(str):
return int(''.join(i for i in str if i.isdigit()))
@6mini
6mini / check_business_day_kr.py
Created May 16, 2024 07:06
이 스크립트는 현재 시각이 대한민국에서 영업일인지 여부를 확인한다. UTC 시간을 KST로 변환하고, 현재 요일이 평일인지와 공휴일 여부를 확인하여 프로그램 실행 여부를 결정한다. 이를 통해 프로그램이 한국의 영업일에만 동작하도록 한다.
from datetime import datetime, timedelta
from holidayskr import today_is_holiday
def check_if_business_day():
# 현재 UTC 시간
now_utc = datetime.utcnow()
# 한국 시간
kst_offset = timedelta(hours=9)
now_kst = now_utc + kst_offset
@6mini
6mini / web_crawling_ip_bypass_with_ec2.py
Created February 15, 2024 04:40
크롤링 중 발생할 수 있는 IP 차단 문제를 우회하기 위한 전략을 구현한다. Python의 requests와 BeautifulSoup 라이브러리를 사용하여 웹 페이지에서 제품 정보를 수집하고, 동시에 여러 요청을 관리하기 위해 concurrent.futures와 스레딩을 활용한다. IP 차단 감지 시, AWS Lambda 함수를 트리거하여 EC2 인스턴스를 재부팅하고 새로운 IP 주소를 획득함으로써 연속적인 데이터 수집 작업을 중단 없이 계속할 수 있다. 데이터는 로컬 환경에서 pickle 형태로 상태 관리되며, AWS S3를 통해 작업 완료 혹은 재부팅 필요성을 판단하는 트리거를 생성한다.
import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor, as_completed
import pandas as pd
import threading
import datetime
import boto3
from pytz import timezone
import pickle
@6mini
6mini / get_kst_dates.py
Created February 6, 2024 07:57
UTC 시간을 기준으로 한국 시간대(KST)의 '오늘'과 '어제' 날짜를 계산하고, 이를 문자열 형식으로 반환한다.
from datetime import datetime, timedelta
def get_kst_dates():
"""
현재 UTC 시간을 기준으로 한국 시간대(KST)의 '오늘'과 '어제' 날짜를 문자열 형태로 반환한다.
반환값:
today_str (str): 오늘 날짜 (KST)의 문자열 형태 ('YYYY-MM-DD').
yesterday_str (str): 어제 날짜 (KST)의 문자열 형태 ('YYYY-MM-DD').
"""
@6mini
6mini / slack_error_notification.py
Last active June 20, 2024 02:17
파이썬(Python) 프로그램에서 에러가 발생했을 때 슬랙(Slack)으로 알림을 보내는 기능이다. send_slack_notification 함수를 통해 Slack API에 메시지를 전송하고, handle_error 함수를 통해 발생한 예외의 내용과 스택 트레이스를 슬랙으로 전송한다. 스택 트레이스가 길 경우, 여러 메시지로 분할하여 전송하며, 깔끔한 알림 시스템 구축을 위해 스레드의 댓글로 전송한다.
import json
import requests
import traceback
import time
def send_slack_notification(blocks, thread_ts=None):
"""
Slack 채널에 메시지를 전송하는 함수이다.
Args:
@6mini
6mini / measure_runtime_decorator.py
Created February 6, 2024 07:26
파이썬(Python) 함수의 실행 시간을 측정하는 데코레이터이다. 실행 시간은 시간(h), 분(m), 초(s) 단위로 출력하여, 함수의 성능 분석이나 최적화를 돕는다. 단순히 측정하고자 하는 함수에 @measure_runtime 데코레이터를 추가하기만 하면 해당 함수의 실행 시간을 확인할 수 있다.
import time
def measure_runtime(func):
"""
함수의 실행 시간을 측정하여 시간, 분, 초 단위로 표시하는 데코레이터 함수입니다.
인자:
func (function): 실행 시간을 측정할 함수입니다.
반환값:
@6mini
6mini / mysql_to_pandas.py
Last active February 6, 2024 08:04
Amazon RDS MySQL 데이터베이스에서 SQL 쿼리를 실행하고 결과를 Pandas DataFrame으로 변환하는 과정을 보여준다.
import pandas as pd
from sqlalchemy import create_engine
def query_to_dataframe(host, port, username, password, database, query):
"""
주어진 SQL 쿼리를 실행하고 결과를 pandas DataFrame으로 반환한다.
매개변수:
host (str): 데이터베이스 서버 호스트 주소
port (int): 데이터베이스 서버 포트 번호
@6mini
6mini / save_dataframe_to_s3_as_parquet.py
Last active February 6, 2024 07:41
Pandas DataFrame을 Parquet 형식으로 변환하여 Amazon S3 버킷에 저장한다. 함수는 DataFrame을 받아 Parquet 형식으로 변환한 후 지정된 S3 경로에 파일을 업로드한다.
import pandas as pd
import boto3
from io import BytesIO
import time
def save_dataframe_to_parquet_on_s3(s3_bucket_name, df, s3_path):
"""
Pandas DataFrame을 S3 버킷에 Parquet 파일로 저장한다.
주어진 DataFrame을 Parquet 형식으로 변환한 후, 지정된 S3 경로에 저장한다.
@6mini
6mini / s3_parquet_handler.py
Last active November 24, 2023 03:30
S3ParquetHandler 클래스는 AWS S3에서 Parquet 파일을 읽고, Pandas DataFrame을 S3에 저장하는 기능을 제공한다. 이 클래스는 boto3 세션 초기화, 단일 및 다중 Parquet 파일 읽기, 멀티스레딩을 통한 성능 향상, 경로 부분 추출하여 컬럼으로 추가, 여러 경로 파일 병합, DataFrame을 Parquet으로 변환하여 S3에 저장 등의 기능을 갖추고 있다.
"""
이 파일은 S3ParquetHandler 클래스를 정의하고 있으며, 이 클래스는 AWS S3에서 Parquet 파일을 효율적으로 읽거나 Pandas DataFrame을 S3에 Parquet 형태로 저장하기 위한 기능을 제공한다. 클래스의 주요 기능은 다음과 같다:
1. 클래스 초기화 (__init__ 메소드):
- AWS S3 자격 증명 및 지역 설정을 받아 boto3 세션을 초기화한다.
- 멀티스레딩 사용 여부(use_multithreading)와 최대 스레드 수(max_threads)를 설정할 수 있다. 멀티스레딩 사용 시, 파일 로딩 속도가 향상될 수 있다.
2. 단일 Parquet 파일 읽기 (read_parquet_from_s3 메소드):
- 지정된 S3 버킷과 키를 사용하여 단일 Parquet 파일을 읽고, Pandas DataFrame으로 반환한다.
@6mini
6mini / pandas-csv-to-mongo.py
Last active November 6, 2021 15:22
Insert in the csv file MongoDB using Pandas.
import pandas as pd
from pymongo import MongoClient
import json
data = json.loads(pd.read_csv('csv.csv').to_json(orient='records'))
coll = MongoClient(MONGO_URI)[DATABASE_NAME][COLLECTION_NAME]
coll.remove()
coll.insert_many(data)