python 메모

python 메모

[pandas] excel로 저장할 때 IllegalCharacterError가 뜰 때

pandas DataFrame을 excel로 저장할 때 IllegalCharacterError 같은 에러가 뜰 때가 있다. 이때 openpyxl로 저장하는 부분을 df.to_excel("test.xlsx", engine='openpyxl') xlsxwriter로 바꿔서 사용하면 에러가 안뜬다. df.to_excel("test.xlsx", engine='xlsxwriter')

python 메모

[sqlite] cx.read_sql, pd.read_sql 속도비교

pandas로 sqlite3 파일에서 300백만개 정도 되는 row의 데이터를 읽어올 일이 있었다. 하지만 이건 속도가 너무 느리다. connectorx와 비교해보자. 1. 사용법 비교 (1) pandas import sqlite3 import pandas as pd local_file_path = "/absolute/path/to/sqlite3/db" conn = sqlite3.connect(local_file_path) to_read = pd.read_sql( "SELECT * FROM '{tbl_name}'".format(tbl_name=tbl_name), conn, parse_dates=['timestamp'] ) (2) connectorx import connectorx as cx local_f..

python 메모

[matplotlib] 여러개의 다른 y축 그래프를 한 그래프에 그리기

같은 x축에 대해 서로 다른 y scale의 그래프를 그릴 일이 있다. 아래와 같이 그리면 된다. import matplotlib.pyplot as plt fig, ax = plt.subplots() fig.subplots_adjust(right=0.75) twin1 = ax.twinx() twin2 = ax.twinx() twin3 = ax.twinx() # Offset the right spine of twin2. The ticks and label have already been # placed on the right by twinx above. twin2.spines.right.set_position(("axes", 1.2)) twin3.spines.right.set_position(("axes"..

python 메모

[python] list를 chunk로 나누는 방법들(메모)

ChatGPT가 알려준 리스트를 나누는 방법들을 정리해두고자 한다. 1. 리스트를 특정 크기로 자르기 def split_list_into_chunks(lst, chunk_size): """ Split a list into chunks of the specified size. Parameters: - lst: The list to be split. - chunk_size: The size of each chunk. Returns: A list of chunks, where each chunk is a sublist of the original list. """ return [lst[i:i + chunk_size] for i in range(0, len(lst), chunk_size)] my_list = [..

python 메모

[regex] 정규표현식 메모용

일하면서 사용했던 정규표현식을 정리해두고자 한다. 1. HTML에서 주석() 부분 찾기 HTML에서 주석 부분만 찾는 표현식이다. 정규표현식: python으로는 아래와 같이 사용할 수 있다. text = """ 이것은 주석이 아닙니다 """ import re text = re.sub(r'','', text) text >>>> '\n이것은 주석이 아닙니다\n\n' 2. HTML에서 공백인 부분 제거 BeautifulSoup을 사용해서 표를 파싱한 후 soup.prettify(formatter="html")를 하면 불필요한 공백이 많이 생성된다. 이때 2개 이상 이어진 공백에서 하나만 남기고 나머지 공백들을 제거하는 표현식이다. 정규표현식: \B\s+|\s+\B^ python으로는 아래와 같이 사용할 수 있..

python 메모

[websocket] 연결이 끊겼을 때 reconnect를 위한 방법들

파이썬에는 웹소켓 사용을 위한 websocket, websockets(두개가 다른 거다) 라이브러리가 있다. 웹소켓 연결이 끊겼을 때를 대비하기 위한 방법이 각각 다른데 이를 간단히 정리해두고자 한다. 1. websocket websocket 라이브러리는 pip install websocket-client로 설치할 수 있다. 공식 github에 가서 보면 아래와 같은 설명이 있다(링크). The WebSocketApp run_forever loop will automatically try to reconnect to an open WebSocket connection when a network connection... run_forever does not automatically reconnect if ..

python 메모

[GPU] pynvml 모듈로 gpu 사용량 체크하기

GPU 모니터링 툴이 별도로 없을 때 pynvml을 사용하여 GPU 사용량 정보 등을 로그로 남길 수 있는 방법을 정리하고자 한다. 1. GPU 정보 확인하기 import pynvml print("Driver Version:", pynvml.nvmlSystemGetDriverVersion()) >>>> Driver Version: 4xx.1xx.xx 2. GPU 사용량 체크하기 GPU가 여러 장 있을 때 GPU별 utilization, memory 사용량 평균을 다음과 같이 기록해둘 수 있다. from threading import Thread import numpy as np import torch .... if __name__ == "__main__": def schedule_gpu_memory_lo..

python 메모

[python] jsonl로 데이터 읽고 쓰기

json보다 jsonl이 편할 때는 파일로 데이터를 읽고 쓸 때이다. json은 데이터를 한꺼번에 불러와야 하지만 jsonl은 file 객체로 읽고 쓰기 때문에 a 모드를 지원한다. 즉, jsonl 파일에 데이터 한줄만 추가하는 형태로 사용할 수 있지만 json은 그게 안된다. 1. 데이터 쓰기 주의사항은 indent=4을 주게되면 저장된 파일에 newline이 생겨 읽을 때 에러가 뜬다. 이거 빼준다. import json d = { "a":[1,2,3], "b":[4,5,6,7], "C": "qwer", "D": "한글" } data_list = [d]*4 with open("test.jsonl", "a") as f: for data in data_list: f.write( json.dumps(dat..

python 메모

[datetime] int형 시간을 datetime으로 바꾸기

시간을 int형으로 생성하기 import time int_time = int(time.time()*1000) int_time >>>> 1701069339870 int형 시간을 datetime 모듈로 변환하기 import datetime int_time = 1701069339870 datetime_time = datetime.datetime.fromtimestamp(int_time / 1e3) datetime_time >>>> datetime.datetime(2023, 11, 27, 16, 15, 39, 870000)

python 메모

[pandas] 모든 셀에서 찾고자 하는 string이 있는 row 찾기

다음과 같은 dataframe이 있다고 하자. import pandas as pd import numpy as np df = pd.DataFrame( { 'Zodiac' : ['Libra','Capricorn','Scorpio','January','Scorpio', 'Capricorn','Capricorn', 'Taurus'], 'Month' : ['January', 'February', 'February', 'April', 'January', 'March', 'April', 'April'], 'values' : [23, 45,89, 91, "january", "february", "april", "january"] } ) df >>>> 이때 어떤 컬럼도 상관없이 단어 Jan을 포함하고 있는 row들을 ..

python 메모

[pkill] 여러 프로세스 동시에 종료시키기

Linux 계열에서 pkill을 사용하면 여러 프로세스를 동시에 종료시킬 수 있다. 다음과 같이 3개의 파이썬 스크립트가 돌고 있다고 하자. 이때 pkill -f [파일이름 또는 사용자명]로 다음과 같이 한번에 종료시킬 수 있다. [참고] https://unix.stackexchange.com/questions/57605/i-want-to-kill-all-processes-that-result-from-the-following-command

python 메모

[matplotlib] 두개 그래프 y축 동시에 plot하기

matplotlib.pyplt을 사용하다 보면 하나의 그래프에 y_label 2개를 양쪽에 둬서 두개의 그래프를 동시에 표현하고 싶은 순간들이 있다. 이때 ax.twinx()를 사용하면 아래와 같이 표현할 수 있다. import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 10, 0.1) y1 = 0.05 * x**2 y2 = -1 *y1 fig, ax1 = plt.subplots(figsize=(12,6)) ax2 = ax1.twinx() ax1.plot(x, y1, 'g-', label="green") ax2.plot(x, y2, 'b-', label="blue") ax1.set_xlabel('X data') ax1.set_ylabel(..

python 메모

[JSON] JSON 파일 읽고 저장하고 예쁘게 프린트하기

0. JSON이란? JSON은 JavaScript Object Notation의 약자로 데이터 객체를 저장하거나 전송할 때 많이 사용되는 방법으로 이해하기 쉬우며 용량이 작아서 많아 사용된다. 1. json 저장하고 읽어오기 import json data = {"a": 1, "b":[1,2,3], "c":"abcd"} # 저장하기 with open("file.json", "w") as f: json.dump(data, f) # 읽어오기 with open("file.json", 'r') as f: data = json.load(f) 2. JSON 보기 좋기 프린트하기 print(json.dumps(data, indent=4)) >>>> { "a": 1, "b": [ 1, 2, 3 ], "c": "abcd" }

python 메모

[huggingface] transformers 모델 onnx로 변환하기

hugginface의 transformers 라이브러리로 만든 커스텀 모델을 onnx로 변환하고 서빙하는 과정을 정리하고자 한다. PyTorch, ONNX Runtime 튜토리얼을 참고하였으며 실제 사용 시 참고해야될 부분들을 적어두고자 한다. 0. ONNX ONNX는 프레임워크에 종속되었던 AI, machine learning 모델들을 하나의 형식으로 통합하기 위한 오픈소스 프로젝트이다. Pytorch, Keras, TensorFlow등을 사용해 생성된 모델(연산자, parameter 집합)을 ONNX로 변환하기 위한 튜토리얼은 여기에 잘 정리되어 있다. 참고로 ONNX는 파일 포맷을 의미한다고 생각하면 되며, ONNX로 변환된 모델을 ONNX Runtime 등의 프레임워크를 통해 CPU, GPU 및 ..

python 메모

[python] Thread-Local Data

파이썬에서 thread-local data와 관련된 좋은 글이 있어 정리하고자 한다. 원글은 이 글인데 이 사이트에 Threading, Multiprocessing, ThreadPoolExecutor, ProcessPoolExecutor에 대한 설명들이 매우 잘 돼있다. 0. Thread-local data의 필요성 Thread는 프로그램의 실행 단위이며, 파이썬 프로그램은 실행 시 하나의 main thread를 가지고 실행된다. 이때 추가적인 thread가 필요한 상황이 생기는데 파이썬은 threading.Thread 모듈로 이를 지원한다. 이때 모든 thread들은 process가 할당받은 메모리 중 heap, static 등의 영역을 공유하면서 각자의 stack 메모리 공간을 보유하고 있다. 즉, ..

Fine애플
'python 메모' 카테고리의 글 목록