Jost Do It.

그냥 IT해.

반응형

Programming/Python 8

[sqlalchemy] immutabledict is not a sequence 에러 해결

문제 상황 sqlalchemy 라이브러리를 통해서 엔진을 생성하고 SQL문을 실행했더니 다음 에러가 발생했다. [...] TypeError: sqlalchemy.cyextension.immutabledict.immutabledict is not a sequence 실행한 코드는 다음과 같다. from sqlalchemy import create_engine conn_str = "{DB_TYPE}://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}".format(**os.environ) engine = create_engine(conn_str, client_encoding='utf8') del_sql = "DELETE FROM test" where = ('%..

Programming/Python 2024.03.09

[Pandas] 정규식을 이용해서 특정 문자만 제거하기

문제상황 데이터 수집을 하는 중에 원본 데이터에서 잘못된 형식으로 값이 저장된 경우가 있었다. 원래 형식은 수치값이 string 형식으로 천단위 구분 기호로 절대값을 표시 (ex> 2,000)하거나 00.00%형식으로 돼 있어야 하는데, 잘못된 형식의 데이터에서는 00,00%로 온점이 아니라 반점으로 기재돼 있었다. 따라서 절대값이나 00.00%로 잘 기재된 경우에는 그대로 출력하고, 00,00%로 돼 있는 경우에만 ,를 .으로 바꿔줘야 했다. 해결 방법 판다스 데이터프레임의 str.replace를 이용해 다음과 같이 해결할 수 있다. df['column1'] = df['column1'].str.replace(r'^([0-9]{2}),([0-9]{2})%', r'\1.\2%', regex = True) ..

Programming/Python 2024.02.27

[Python] upsert문 간접 구현하기

문제 상황 관계형 데이터베이스에 테이블에는 중복 방지와 무결성을 위해 primary key를 설정한다. 이 때 primary key를 설정하면 primary key 값이 중복된 데이터들은 업로드할 수 없다. 보통 SQL문에서는 중복된 데이터인 경우 INSERT INTO ... ON CONFLICT ... 구문을 통해 데이터를 덮어쓸 수 있다. 하지만 pd.to_sql 함수의 경우 데이터 업로드 시 해당 기능이 구현돼 있지 않아 다음 코드를 작성했다. 해결 방법 함수의 동작방식을 다음과 같이 하여 upsert를 간접 구현하였다. 간단히 말하면 pk 중복 데이터를 제거하고 다시 insert하는 방식으로 완전한 upsert는 아닐 수 있다. 1. 시스템 테이블에서 해당 테이블의 primary_key 이름 찾기..

Programming/Python 2024.02.05

[Python] json 출력 포맷 설정하기

개요 API는 사용자 이해를 돕기 위해 일반적으로 docs문서를 제공한다. 특히 각 API마다 출력 결과 예시를 추가하면 사용자들에게 예상 결과, 에러 종류들을 안내하기 용이하다. 이 때 출력 결과 예시는 일반적으로 미리 출력해 저장한 json 데이터이다. 문제 상황 아래와 같이 출력 결과 예시 데이터는 미리 저장된 데이터로 원본 그대로이거나 원본을 간소화한 데이터다. { "api_name": "/api/v5/daily-stcok.json", "data": [ { "date": "2020-03-02", "A005930": 55000, "A035720": 35125, "...": "..." }, { "date": "2020-03-03", "A005930": 55400, "A035720": 35125, "...

Programming/Python 2023.12.19

[Python] pip freeze 시, 버전명이 '@ file:///' 로 뜨는 문제

문제 상황 현재 환경에서 사용하고 있는 라이브러리 패키지 정보들을 가져올 때 보통 아래처럼 `pip freeze` 명령어를 사용해 `requirements.txt` 파일로 저장한다. pip freeze > requirements.txt 그럼 아래와 같이 해당 환경에 설치된 패키지들의 정보가 `requirements.txt` 파일에 저장된다. clickhouse-driver==0.2.5 clickhouse-sqlalchemy==0.2.3 colorama @ file:///croot/colorama_1672386526460/work colorlog==4.8.0 colour==0.1.5 commonmark @ file:///Users/ktietz/demo/mc3/conda-bld/commonmark_16306..

Programming/Python 2023.06.16

[Python] 하버사인 (haversine)으로 위경도가 주어진 두 지점 거리 구하기

두 지점 A, B의 위도와 경도가 주어졌을 때에는 haversine을 이용해서 거리를 계산할 수 있다. haversine의 개념에 대해서는 아래 링크에 정리하였다. https://jost-do-it.tistory.com/16 [haversine] 두 지점의 위도, 경도를 이용해서 거리 구하기 두 지점의 좌표 (x1, y1)과 (x2, y2)가 주어질 때 보통 피타고라스의 정리를 이용해서 거리를 구할 수 있다. 하지만 지구는 타원체이기 때문에 두 지점의 위경도가 주어진 경우 거리를 간단하게 구할 jost-do-it.tistory.com 이번에는 python의 haversine package를 이용해서 실제로 위경도가 주어진 지점들의 거리를 계산해보자. haversine package install 파이썬에..

Programming/Python 2022.10.12

[Python] Ray 라이브러리를 이용한 코드 병렬 처리와 이에 대한 고찰

보통 코드를 실행하면 작성된 순서대로 순차적으로 처리된다. 그런데 코드를 작성하다보면 특정 행위를 반복하는 코드를 작성할 때가 많다. 간단한 반복행위는 for나 while로 순차적으로 처리해도 문제가 없는데, 연산량이 커지면 시간이 그만큼 많이 소요가 된다. 이 때 코드 병렬화를 진행하면 연산 시간을 많이 줄일 수 있다. 간략한 Ray 라이브러리 소개 Ray는 작성된 코드를 병렬화 해주는 라이브러리이다. 그럼 병렬화는 어떻게 하는걸까? 이는 CPU의 코어와 관련이 깊다. CPU는 일을 하는 회사, 코어는 CPU 속 일하는 일꾼의 수로 보면 이해하기 쉬운데, 기술이 발전하면서 CPU속 코어의 수도 많아지고 있다. 보통 코드를 돌리면 단일 코어에서 코드가 작성된 순서대로 실행된다. 이 코드 실행은 하나의 일..

Programming/Python 2022.09.30

[Python] functools의 partial 함수 알아보기

partial 함수는 functools package에서 제공하는 함수로, functools package는 유용한 여러가지 함수들을 제공하는 라이브러리다. 이 글에서는 functools 패키지의 partial 함수를 언제 사용하는지를 알아보고, 예제와 함수 동작 원리에 대해서 알아보려고 한다. partial 함수는 언제 사용하는가? 파이썬에서 함수(function)는 특정 변수(parameter)를 입력받아 어떤 작업을 수행한다. 보통 함수는 변하는 값을 입력받을 때 parameter로 정의하지만, 실제 함수를 사용할 때는 parameter 값을 고정해 사용할 때도 많다. 이 때 사용하는 것이 partial 함수이다. partial 함수 튜토리얼 예제를 통해서 partial 함수를 이해해보자. 먼저 p..

Programming/Python 2022.09.25
반응형