[PySpark] PySpark vs. Pandas 속도 비교
·
Databases/Data Engineering
서론 PySpark를 통해 대량의 데이터를 빠르게 처리할 수 있다. 또한 디스크 기반이 아닌 메모리 기반 처리를 통해 반복적인 계산이 많은 경우에 장점을 가진다. PySpark를 사용하는 경우, 사용하지 않는 경우(Pandas) 처리 속도가 어느 정도 차이가 나는지 간단히 확인해보고자 한다.코드# 예제 데이터 생성names = [f'Name{i}' for i in range(1, 101)]mbti_types = ['INTJ', 'ENTP', 'INFJ', 'ENFP', 'ISTJ', 'ESFP', 'ISFJ', 'ESTP', 'INTP', 'ENTJ', 'ISTP', 'ENFJ']data = { 'Name': names, 'MBTI': [random.choice(mbt..
[Python] *args와 **kwargs
·
Programming Languages/Python
*args와 **kwargs는 모두 함수에서 가변 인자를 처리하는 데 사용된다. 함수에 전달된 인자의 개수가 정해져 있지 않을 때 사용한다. *args*args는 인자를 튜플 형태로 받아온다.  def print_numbers(*args): for number in args: print(number)print_numbers(1, 2, 3, 4, 5)print_numbers()는 여러 인자를 받아 각각을 출력한다. args에는 (1, 2, 3, 4, 5)가 전달된다. **kwargs**kwargs는 인자를 딕셔너리 형태로 받아온다. def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {va..
[Python] 예외처리 / try, except, else, finally, raise
·
Programming Languages/Python
파이썬의 예외 처리 방법에 대해 알아보자.try-exceptdef try_except_1(): try: num = int(input("정수를 입력하세요: ")) result = 10 / num except ZeroDivisionError: print("0으로 나눌 수 없습니다.")간단한 try-except 예제이다. num의 값이 0이 들어오면 에러를 발생한다. def try_except_2(): try: num = int(input("정수를 입력하세요: ")) result = 10 / num except ValueError: print("유효하지 않은 입력입니다. 정수를 입력해야 합니다.") excep..
대한민국 출산율 시각화하기(KOSIS OpenAPI)
·
Databases/Data Visualization
https://kosis.kr/openapi/index.jsp KOSIS 공유서비스KOSIS 통계정보를웹 또는 모바일앱 개발에 활용할 수 있도록인터페이스(API)를 제공하는 서비스 입니다.kosis.kr먼저 위 사이트에 접속하여 회원가입 후 OpenAPI 인증키를 발급받아야 한다. https://kosis.kr/index/index.do KOSIS 국가통계포털내가 본 통계표 최근 본 통계표 25개가 저장됩니다. 닫기kosis.krAPI 키를 발급받은 후 위 사이트에 접속하여 '출산율'을 검색한다. '시군구/합계출산율, 모의 연령별 출산율'를 클릭한다. 클릭 후 'OPENAPI' 버튼을 눌러 API URL을 생성한다. 생성한 URL을 통해 데이터를 다음과 같은 방법으로 가져올 수 있다.from config..
[Python] 텔레그램 봇을 통해 메세지 송수신하기
·
Programming Languages/Python
텔레그램의 BotFather를 통해 API 토큰 및 chat_id를 구하는 부분은 생략하였다. 메세지 전송import telegramfrom config import telegram_configimport asynciotoken = telegram_config['token']bot = telegram.Bot(token)chat_id = telegram_config['chat_id']async def send_message(message): await bot.send_message(chat_id, message) if __name__ == "__main__": asyncio.run(send_message("Hello, World!")) token = telegram_config['toke..
[Python] 동기와 비동기 프로그래밍, asyncio
·
Programming Languages/Python
동기 프로그래밍동기 프로그래밍은 작업이 순차적으로 진행된다. 한 작업이 완료될 때까지 다음 작업이 시작되지 않는다. 따라서 코드의 흐름을 쉽게 이해할 수 있다. 그러나 I/O 작업이 진행되는 동안 프로그램은 작업이 완료될 때까지 잠시 중단되게 된다. def read_file(filename): with open(filename, 'r') as file: data = file.read() return datadef main(): filenames = ['file1.txt', 'file2.txt', 'file3.txt'] for filename in filenames: data = read_file(filename) print(f"{filename}..
[Flask] 4. 게시판 기능 추가
·
Web Development/BackEnd
준비게시판 기능을 추가하려면 다음과 같은 파일들이 필요하다. 게시판에 대한 라우터를 정의하는 board.py작성된 게시글을 보여주는 템플릿인 board.html글을 작성하는 페이지인 new_post.html 추가된 파일들에 맞게 기존 파일들을 적절히 수정해야 할 것이다.먼저 게시글에 대한 DB 테이블을 구현해야 한다. 테이블명이 post인 테이블을 생성했다.config.pyfrom flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(150), unique=True, nullable=..
[Flask] 3. Flask와 MySQL 연결하기
·
Web Development/BackEnd
준비Flask 애플리케이션과 MySQL을 연결하여 회원 정보를 관리하려고 한다. 먼저 회원 정보를 저장하는 테이블을 생성한다. 나는 다음과 같이 생성하였다. model.pyfrom flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(150), unique=True, nullable=False) password = db.Column(db.String(150), nullable=False)model.py는 SQLAlchemy를 통해 DB 모델을 정의한다.생성한 테이블의 구조와 동일..
[Flask] 2. 회원가입, 로그인 기능 만들기 / Blueprint
·
Web Development/BackEnd
준비/templates에 register.html, login.html을 작성하고 /routes에 __init__.py와 회원가입 및 로그인에 관련된 라우터인 auth.py를 작성할 예정이다.Blueprint먼저 Flask의 Blueprint에 대해 알아보자. Blueprint는 Flask 애플리케이션의 구성 요소를 모듈화하게 하는 기능이다. bp = Blueprint('bp_name', __name__)Blueprint는 위와 같이 생성할 수 있다. bp_name은 생성된 Blueprint의 이름, bp는 Blueprint 인스턴스, __name__은 현재 모듈의 이름이다. app = Flask(__name__)app.register_blueprint(bp)Blueprint를 생성한 후, Flask 애..
[Flask] 1. 프로젝트 환경 만들기
·
Web Development/BackEnd
목표파이썬 Flask 프레임워크, MySQL을 통한 기본적인 회원가입, 로그인, 게시판 기능을 구현해보고자 한다.가상환경 구축본격적으로 프로젝트를 진행하기 전, 가상환경을 구축하여 진행하고자 한다. 혹시 모를 의존성 충돌 방지 및 시스템 환경을 보호하기 위함이다. 프로젝트 폴더명은 'practice_flask'이다. python -m venv .venv터미널에 위 명령을 입력하여 가상환경을 생성한다. 폴더명은 '.venv'로 설정하였다.여담으로, 가상환경을 구축할 때 폴더명 앞에 온점('.')을 붙이는 이유는 해당 폴더를 숨김으로써 프로젝트 폴더를 깔끔하게 유지하고 실수로 폴더를 삭제하는 일을 방지하기 위함이라고 한다. 지금 같은 상황에도 굳이 폴더를 숨겨야 하나 싶지만... 관습이라고 하니 넘어가려고 ..