반응형

IT일지/파이썬 14

[파이썬] matplotlib에서 주말 제외하고 plot 또는 bar 그래프 그리기

matplotlib로 주식 일봉 캔들 차트와 거래량을 나눠서 출력하려고 했는데 캔들 차트는 mplfinance.plot 입력값으로 데이터프레임에 주말값 빼고 넣으면 정상적으로 출력이 되었지만, 거래량을 matplotlib.pyplot으로 출력하려고 하니 x축값에 주말을 뺀 날짜를 넣어도 그래프에는 주말이 포함되어 출력되는 문제가 발생했습니다. plt.bar에서 원하지 않는 주말 데이터가 포함되어 출력되는 상황을 간략화한 테스트 코드는 다음과 같습니다. import matplotlib.pyplot as plt from datetime import datetime import random date_strings = ['240110', '240111', '240112', '240115', '240116', '..

IT일지/파이썬 2024.02.18

[파이썬] matplotlib 차트 제목에 한글 출력하기

matplotlib로 차트를 그리는데 제목과 x, y 축 라벨에 한글을 넣어서 실행했더니 발생한 경고문입니다. 아래는 테스트 코드입니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt # 날짜 생성 dates = pd.date_range(start='2024-01-01', end='2024-01-31') # 랜덤 데이터 생성 data = np.random.randint(50, 150, size=len(dates)) # 그래프 그리기 plt.figure(figsize=(10, 6)) plt.plot(dates, data, marker='o', linestyle='-') plt.title('제목') plt.xlabel('날짜')..

IT일지/파이썬 2024.02.14

[파이썬] Pyqt5 mplfinance 차트 출력 시 발생하는 The event loop is already running 경고 메시지 처리하기

pyqt5와 mplfinance를 이용하여 위와같이 버튼을 누르면 캔들차트를 출력하는 간단한 프로그램을 테스트 하던 중 발생한 에러는 아니고 경고 메시지입니다. QCoreApplication::exec: The event loop is already running 사용한 코드는 다음과 같습니다. import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget import mplfinance as mpf import pandas as pd class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTit..

IT일지/파이썬 2024.02.09

[파이썬] ThreadPoolExecutor + requests + bs4 로 웹 스크랩하기

이전글인 concurrent.futures 모듈로 병렬처리하기에서 빼먹은 웹 스크랩하는 방법입니다. 웹 크롤링은 검색엔진이 웹 사이트 찾아다니듯이 자동으로 여기저기 찾아다니는 것을 말하는데, 여기서는 단순히 웹 페이지 접속해서 해당 페이지 정보만 읽어오는 작업이라 웹 스크랩이라 표현했습니다. 네이버 증권 주소에 증권 코드를 담아 보내고 응답이 정상이면 해당 페이지 제목만 가져오는 간단한 스크랩 작업하는 예시입니다. 코드확인 이전 포스팅과 구조는 동일한데 import concurrent.futures 를 from concurrent.futures import ThreadPoolExecutor 로 바꿔서 17번 라인을 좀 더 줄여서 썼습니다. 전체적인 흐름은 code_list에 증권 코드들을 리스트 타입으로..

IT일지/파이썬 2024.01.28

[파이썬] concurrent.futures 모듈로 병렬처리하기

웹 크롤링을 하는데 1페이지씩 하려니 오래걸려서 비동기로 처리하는 방법을 찾다가 발견한 방법입니다. 아래는 크롤링 부분은 빼고 concurrent.futures 사용방법에 대한 예시입니다. 코드확인 각 라인별로 간단히 정리해보면 line 5 ~ 9 / 병렬 실행할 do_work 함수를 정의 line 12 / do_work에 입력할 값을 리스트로 저장 line 15 ~ 17 / 병렬처리 실행 및 결과 저장 line 20 ~ 21 / 결과 출력 다른 부분은 기본적인 내용이라 넘어가고 ThreadPoolExecutor부분만 자세히 살펴보면 다음과 같은 구조로 되어있습니다. with concurrent.futures.ThreadPoolExecutor() as executor: results = executor...

IT일지/파이썬 2024.01.27

[파이썬 에러] sqlite3.OperationalError database is locked 해결하기

문제상황 sqlite3.OperationalError: database is locked 이전글과 동일한 방식으로 db에 값을 입력하려고 하는데 발생한 문제입니다. 코드에는 문제가 없 해결방법 위 상황에서는 DB Browser에서 값을 수정했다면 변경사항 저장하기 또는 취소하기를 눌러주거나 아예 데이터베이스 닫기를 하면 해결됩니다. 위 상황과 별개로 DB Browser를 사용하지 않을 경우에도 'database is locked'가 발생할 수 있는데, 트랜잭션으로 여러개의 insert 또는 update 작업을 처리하는 사이에 또다시 insert나 update 작업을 실행하게 되면 해당 에러가 발생하게 됩니다. 이 경우에는 트랜잭션을 빠르게 닫아주거나 try except 로 에러가 발생하면 기다렸다가 다시..

IT일지/파이썬 2024.01.26

[파이썬 에러] sqlite3.ProgrammingError Incorrect number of bindings supplied. The current statement uses 1, and there are 5 supplied 해결하기

문제상황 sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 5 supplied 이전 글과 같은 구조의 테이블에 INSERT하려고 하는데 발생한 다른 에러입니다. sql 쿼리에는 값을 받을 곳, 즉 물음표가 1개 뿐인데 입력값을 5개나 넣었다고 에러를 띄우고 있네요 왼쪽의 경우에는 'name2'라고 넣어서 n, a, m, e, 2 하나씩 들어가는 상황이고, 오른쪽은 괄호로 묶어서 튜플로 만들어줬는데도 왼쪽과 같은 결과가 발생한 상황입니다. 해결방법 1 문제 상황 오른쪽에서 튜플 안에 콤마(,) 를 마지막에 붙여주면 됩니다. 해결방법 2 params라는 리스트 변수..

IT일지/파이썬 2024.01.25

[파이썬 에러] sqlite3.OperationalError table info has 2 columns but 1 values were supplied 해결하기

문제상황 sqlite3.OperationalError: table info has 2 columns but 1 values were supplied 1 다음과 같은 info 테이블에 값을 추가하려고 할 때 발생한 에러입니다. CREATE TABLE IF NOT EXISTS info ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE) id와 name 칼럼 2개가 있는데 id칼럼은 AUTOINCREMENT로 해놨기 때문에 INSERT문에 VALUES를 1개만 넣었는데 문제가 발생했네요 해결방법 1 가장 단순한 방법으로는 모든 칼럼에 해당하는 값을 VALUES 에 넣어서 INSERT하면 됩니다. 해결방법 2 INSERT INTO 테이블명 (칼럼명) VALUE..

IT일지/파이썬 2024.01.24

[파이썬 에러] sqlite3.OperationalError near ) syntax error 해결하기

문제상황 sqlite3.OperationalError: near ")": syntax error sqlite3 모듈을 사용하여 테이블을 생성하려고 할 때 발생한 에러입니다. 오류 내용 자체는 ) 근처에서 문법 오류가 발생했다는 것이라서 매우 다양한 경우의 수가 있을 수 있는데, 일단 여기서 발생한 문제점에 대해서만 대처해보겠습니다. 해결방법 파이썬에서 리스트에 값 입력할 때 ls = [1, 2, 3,] 이런식으로 마지막값 뒤에 콤마(,) 를 넣어도 잘 동작해서 무의식적으로 sql 쿼리에도 마지막값 뒤에 콤마를 종종 넣는데, sql 쿼리에서는 괄호 앞에 콤마(,) 가 있으면 위의 에러가 발생하므로 괄호 앞에 있는 콤마를 없애주면 정상적으로 테이블이 생성됩니다.

IT일지/파이썬 2024.01.23

[파이썬 에러] RuntimeError super-class __init__() of type MyWidget was never called

문제상황 RuntimeError: super-class __init__() of type MyWidget was never called pyqt5에서 Qwidget을 상속받은 커스텀 위젯을 만들고 실행할 때 발생한 문제입니다. 해당 에러는 부모 클래스의 __init__()함수가 자식 클래스에서 호출되지 않을 때 발생합니다. 해결방법 자식클래스의 __init__ 함수 안에 super().__init__() 를 추가해주면 정상적으로 동작합니다.

IT일지/파이썬 2024.01.23