본문 바로가기
반응형

Language18

[python] GitPython 라이브러리 branch로 프로젝트 관리를 하다보니 현재 사용하고 있는 브랜치명을 가져와야하는 경우가 생겼다.이때 사용한 라이브러리가 GitPython !1. GitPython?git 저장소와 상호작용(작업을 자동화하고 조작)하는데 사용되는 python 라이브러리이다. 버전 관리 시스템을 활용하는 개발 프로젝트에 유용하다.명령줄 프로그램을 호출하여 git 저장소 데이터에 쉽게 엑세스할 수 있도록 git 객체의 추상화를 제공한다. 2. 주요기능저장소 관리: 로컬 및 원격 저장소의 생성, 복제, 삭제 등을 관리할 수 있습니다.커밋 관리: 커밋 생성, 로그 검색, 커밋 간 비교 등의 기능을 제공합니다.브랜치 및 태그 관리: 브랜치 생성, 삭제, 체크아웃, 태그 작업 등을 수행할 수 있습니다.파일 상태 및 변경 내용 추적:.. 2024. 10. 13.
[python] Clean Code in Python 1. 코드 포매팅과 도구 1. 프로그래밍 언어프로그래밍 언어를 컴파일하고 실행시키는 주체는 컴퓨터이나, 프로그램은 단 한번 실행하고 멈추는 것이 아니라 지속적으로 유지보수하고 발전해나가는 존재이다. 즉, 프로그래밍 언어는 인간의 아이디어를 다른 개발자에게 전달하는 것이다. 컴파일 (compile)? 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정2. 클린코드좋은 코드와 나쁜 코드를 구분할 수 있어야한다. 코드 포매팅 != 클린코드→ PEP-8과 같은 지침에 따라 코드를 포매팅하고 구조화하는 것은 클린코드의 최소요건이다.일관성 → PEP-8과 같은 코딩 가이드를 준수하는 것은 SW 일관성을 유지하는 것에 도움을 준다. →일관성 있는 코드는 오류를 감지하기 쉬우며, 신속하게 패턴을 파악하여 개발자의 이해를 높일.. 2024. 5. 1.
[python] SOLID principles 객체 지향 프로그래밍(OOP)을 사용하여 python 프로젝트를 진행할 때 다양한 클래스와 객체가 상호작용하여 특정 문제를 해결하는 방법을 계획하는 것(OOD)은 중요하다. 객체 지향 프로그래밍(OOP) ? Object-Oriented Programming 필요한 데이터를 추상화하여 속성, 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호 작용을 통해 로직을 구성하는 방식 객체 지향 설계 (OOD) ? 다양한 클래스와 객체가 상호작용하여 특정 문제를 해결하는 방법을 계획하는 것 (Class design) SOLID 원칙 참고 (5가지의 객체 지향 설계 원칙 세트) 목표 1. 각 SOLID 원칙의 의미와 목적을 이해한다. 2. SOLID 원칙 중 일부를 위반하는 python 코드를 식별한다. 3... 2024. 2. 23.
[python] 'dict' object has no attribute 'to_csv' AttributeError: 'dict' object has no attribute 'to_csv' 해결방법 dict -> dataframe -> csv 파일로 저장 (to_csv) import pandas as pd dict = {...} dataframe = pd.DataFrame(dict) dataframe.to_csv("data.csv", header=True) 2024. 2. 13.
[이미지 처리] 알파채널 제거 def del_alpha_channel(rgba, background=(255,255,255)): ''' 알파채널 제거 ''' row, col, ch = rgba.shape if ch == 3: return rgba assert ch == 4, 'RGBA image has 4 channels.' rgb = np.zeros( (row, col, 3), dtype='float32' ) r, g, b, a = rgba[:,:,0], rgba[:,:,1], rgba[:,:,2], rgba[:,:,3] a = np.asarray( a, dtype='float32' ) / 255.0 R, G, B = background rgb[:,:,0] = r * a + (1.0 - a) * R rgb[:,:,1] = g * a.. 2024. 2. 6.
[결측값 처리] fillna / backfill / bfill / pad / ffill 요약 DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None) DataFrame.backfill( ) / DataFrame.bfill : DataFrame.fillna(mathod='bfill')과 동일합니다. DataFrame.bfill : 뒤 방향으로 결측값 채우기 DataFrame.pad / DataFrame.ffill : DataFrame.fillna(method='ffill')과 동일합니다. DataFrame.ffill : 앞 방향으로 결측값 채우기 fillna 메서드 : DataFrame에서 결측값을 원하는 값으로 변경하는 기능을 가지고 있음 사용 방법 df.fillna(value=.. 2024. 2. 5.
[FastAPI] 3. 멀티프로세싱 fastAPI는 ASGI중 한 종류인 uvicorn와 함께 비동기적인 형태로 동작한다.  * 비동기적 : 어떤 작업을 요청했을 때 그 작업이 종료될때 까지 기다리지 않고 다른 작업을 하고 있다가, 요청했던 작업이 종료되면 그에 대한 추가 작업을 수행하는 방식* 동기적 : 어떤 작업을 요청했을 때 그 작업이 종료될때 까지 기다린 후 다음 작업을 수행하는 방식 fastAPI로 mutiprocessing을 진행하기 위해 두가지 방법으로 접근을 해봤다.  1. 리스트 형태의 입력값을 받고, 해당 값들로 병렬처리하는 방법import timefrom multiprocessing import Processdef print_sum(input): num1 = input[0] num2 = input[1] .. 2023. 12. 6.
[ Pytorch ] torch 기반의 모델 저장과 불러오기 Pytorch 모델을 불러올때 있었던 이슈는 모델을 잘 저장을 했지만, 불러올때 자꾸 GPU를 잡는 문제가 있었다. 처음에는 디바이스 설정을 잘못한줄 알았지만.. 디버깅을 해보았을때 모델을 불러올때부터 GPU를 사용한다는 것을 알게 되어서 torch 모델 저장과 불러오는 방법을 다시 찾아보게 되었다 ㅎㅎ.. 지금 생각해보면 pytorch를 제대로 공부해보고 써보지 않아서 생긴 문제 같기도...ㅎㅎ 01. 모델 저장 모델을 저장하면 '모델 구조 자체'와 '학습한 파라미터' 두가지를 저장하게 된다. pytorch에서는 'state_dict' 함수를 사용하여 파라미터의 텐서를 사전 형식으로 추출할 수.. 2023. 8. 15.
[FastAPI] 2. 라우팅 1. 용어 1.1. "라우팅"이란? 클라이언트가 서버로 보내는 HTTP 요청을 처리하는 프로세스이다. 1.2. "라우트"란? HTTP 요청 메서드의 요청을 수락하고 선택적으로 인수를 받을 수 있도록 정의된다. 요청이 특정 라우트로 전달되면 애플리케이션은 라우트 처리기(route handler)가 요청을 처리하기전에 해당 라우트가 정의되어 있는지 확인한다. 1.3. "라우트 처리기 (route handler)"란? 서버로 전송된 요청을 처리하는 함수이다. ex) 요청을 받아 데이터베이스에서 특정 데이터를 추출하는 함수 1.4. "HTTP 요청 메서드"란? HTTP 메서드 처리 유형을 정의하는 식별자이다. 표준 메서드에는 GET, POST, PUT, PATCH, DELETE등이 있다. 2. 라우팅 예시 20.. 2023. 7. 14.
[FastAPI] 1. 시작하기 1. 가상환경 설정 익숙한 pip으로 가상환경을 설정해줘도 상관없지만, 사용해보지 않은 virtualenv를 활용해보려고 한다. 1.1. virtualenv를 사용한 개발 환경 구축 #-- fastapi라는 폴더를 만들고 이 폴더 안에 가상환경을 생성 $ mkdir fastapi && cd fastapi $ python3 -m venv fastapi_env venv 모듈은 가상 환경을 설치할 폴더명을 인수로 지정 > 두번째 인수인 fastapi는 가상환경으로 사용할 폴더명이다. > 생성된 가상 환경 폴더 (fastapi)에는 파이썬 인터프리터가 설치된 lib 폴더와 가상 환경 내에서 상호작용 (가상 환경 활성화 / 비활성화 등)이 필요한 파일을 저장하는 bin 폴더가 있다. 1.2. 가상환경 활성화 / .. 2023. 7. 14.
[에러] If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. detectron2 모델을 학습하다가 에러가 발생 If you cannot immediately regenerate your protos, some other possible workarounds are: 1. Downgrade the protobuf package to 3.20.x or lower. 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower). 해결 방법 : 라이브러리 재설치 pip install protobuf==3.20. 2023. 7. 11.
[Python] requirements.txt로 패키지 관리 파이썬으로 프로젝트를 진행할때 여러가지 라이브러리를 설치하게된다. 설치한 라이브러리를 확인하고 싶을때 pip list 명령어를 입력하면된다. 다른 환경에서 똑같은 패키지를 한번에 설치하고 싶을때 패키지들을 모두 텍스트 파일로 생성해서 설치할 수 있다. 이때 만드는 텍스트 파일 이름으로는 requirements.txt 를 가장 많이 사용한다. 아래의 명령어로 텍스트 파일 생성이 가능하다. $ pip freeze > requirements.txt 파일을 열어보면 버전 정보까지 모두 정리가 되어있는 것을 볼 수 있다. 만든 text파일로 모든 패키지를 한번에 설치해주는 명령어는 다음과 같다. $ pip install -r requirements.txt 2023. 6. 29.
[Python] 파일 확장자명 일괄변경 목표 폴더내에 확장자명을 일괄적으로 변경하는 코드를 정리하고자 한다. import os, glob files = glob.glob("*.png") #-- 변경하려는 확장자명을 가진 파일들을 모두 가져온다. for file in files: n_split = os.path.splitext(name) #-- 파일명에서 확장자와 basename을 구분해준다. os.rename(file, n_split[0]+".jpg") #-- basename에 "jpg" 확장자를 붙이고 파일명을 변경해준다. 2023. 4. 27.
[Python] 리스트 안의 원소들을 한번에 int type 으로 변환 # 여러 원소가 들어가 있는 하나의 리스트 (list_a)를 한번에 int 형태로 바꾸고자 한다. int_list = [int(i) for i in list_a] 또는 int_list = list(map(int, list_a)) 2023. 2. 14.
[Python] Image 읽는 방법 1. PIL # pip install Pillow from PIL import Image img_path = "test_img.jpg" img = Image.open(img_path) #-- "RGB"로 불러오고 싶을 경우 img = Image.open(img_path).convert("RGB") 2. Opencv opencv를 활용해서 이미지를 불러오면 "RGB"가 아니라 "BGR" 형태로 불러오는것을 확인 할 수 있다. 이를 RGB 형태의 배열로 변환해서 이미지를 확인하는 것을 추천한다. # pip install opencv-python import cv2 img_path = "test_img.jpg" img = cv2.imread(img_path) #-- BGR 형태의 배열을 RGB 형태의 배열로 .. 2023. 2. 10.
[에러] TypeError : can't convert CUDA tensor to numpy 에러 원인 : GPU에 할당되어 있는 tensor를 Numpy 배열로 변환할 때 생기는 에러 gpu에 할당된 tensor를 .numpy()로 변경을 하려고 할 때 생김 .cpu( )를 사용하여 gpu에 할당된 tensor를 cpu tensor로 변환 # if X is CPU tensor X.cpu().numpy() 2023. 2. 9.
[numpy] numpy 소수점 반올림하기 / array 전체 출력 / 출력 형식 변경 반올림을 하거나 소수점 제한을 줘서 출력할 때, numpy에 있는 np.set_printoptions라는 메소드라는 것을 사용하면 된다. jupyter로 작업을 할 경우, 상단의 셀에서 한번만 설정해주면 해당 파일의 작업들 전체에 설정을 따르게 된다. 소수점 반올림하기(precision) * default = 8 np.array([0.123456789]) array([0.12345679]) np.set_printoptions(precision=5) np.array([0.123456789]) array([0.12346]) np.set_printoptions(precision=8) np.array([0.123456789]) array([0.12345679]) array 전체 출력(threshold) * de.. 2023. 1. 25.
[matplotlib] matplotlib 그래프 그리기 matplotlib 으로 하나의 프레임에 여러개 그래프 그리는 방법 fig, ax = plt.subplots() fig (figure) 데이터가 담기는 큰 프레임을 의미 (여러개의 그래프를 그릴 수 있는 액자와 같다) 크기, 모양을 변형할 수 있음 ax (axes) 실제 그래프가 그려지는 캔버스를 의미 모든 그래프는 axes 에서 실행 되어야 함 1. 4개의 axes를 가진 하나의 figure생성 (figure의 크기는 (10,8)) fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 10)) 2. 그래프 그리기 # 필요 라이브러리 불러오기 import matplotlib.pyplot as plt import numpy as np # 임의의 데이터 생성 x.. 2023. 1. 17.
반응형