파이썬 Python과 Pandas를 이용한 MS SQL 데이터 연동 및 막대그래프 시각화
안녕하세요! MS SQL Server의 데이터를 Python으로 연동하여 Pandas로 데이터를 처리하고, Matplotlib 라이브러리를 사용해 간단한 막대그래프로 시각화하는 전체 과정과 소스 코드를 상세히 설명해 드리겠습니다.
전체 프로세스 요약
- 환경 설정: 필요한 Python 라이브러리를 설치합니다.
- DB 연결 정보 설정: Python이 MS SQL Server에 접속할 수 있도록 연결 정보를 설정합니다.
- 데이터 가져오기: '아빠를 사용하여 SQL 쿼리를 실행하고, 결과를 DataFrame 객체로 불러옵니다.팬더
- 데이터 가공 (필요시): 시각화에 적합한 형태로 데이터를 집계하거나 가공합니다.
- 시각화: '마을 사용하여 가공된 데이터를 막대그래프로 그립니다.매트플롯립
1단계: 환경 설정 및 라이브러리 설치
가장 먼저, 데이터베이스 연동, 데이터 처리, 시각화에 필요한 라이브러리들을 설치해야 합니다. 터미널(CMD, PowerShell 등)을 열고 아래 명령어를 실행하세요.
- 팬더: 데이터를 표(DataFrame) 형태로 다루기 위한 필수 라이브러리입니다.
- 파이오드비씨: Python이 MS SQL Server와 통신할 수 있도록 해주는 ODBC 드라이버 연결 라이브러리입니다.
- 매트플롯립: 데이터를 그래프로 시각화하는 라이브러리입니다.
생성된 bash
pip install pandas pyodbc matplotlib
※ 참고: 파이오드비씨를 사용하려면 시스템에 가 설치되어 있어야 합니다. 최신 Windows 환경에는 대부분 기본적으로 포함되어 있지만, 만약 연결 오류가 발생한다면 SQL Server용 ODBC 드라이버Microsoft ODBC Driver for SQL Server 다운로드 페이지에서 직접 설치해주세요.
2단계: 소스 코드 작성 (연결부터 시각화까지)
이제 전체 과정을 하나의 Python 스크립트로 작성해 보겠습니다.
아래 예제는 가상의 테이블에서 **제품 카테고리(ProductCategory)별 매출 합계(SalesAmount)**를 계산하여 막대그래프로 보여주는 시나리오를 기반으로 합니다.영업
예시 테이블 구조 (dbo입니다. 영업)
| 주문 ID | 제품 카테고리 | 판매 금액 | 주문 날짜 |
| 1 | 전자제품 | 1200000 | 2023-01-05 |
| 2 | 의류 | 85000 | 2023-01-06 |
| 3 | 전자제품 | 850000 | 2023-01-07 |
| 4 | 도서 | 25000 | 2023-01-08 |
| 5 | 의류 | 150000 | 2023-01-09 |
전체 Python 소스 코드
생성된 파이썬
import pandas as pd
import pyodbc
import matplotlib.pyplot as plt
import platform
# -------------------------------------------------------------
# 1. DB 연결 정보 설정 (사용자 환경에 맞게 수정해주세요)
# -------------------------------------------------------------
# Windows 인증을 사용하는 경우
# conn_str = (
# r'DRIVER={ODBC Driver 17 for SQL Server};'
# r'SERVER=your_server_name;' # 예: DESKTOP-12345\SQLEXPRESS 또는 IP주소
# r'DATABASE=your_database_name;'
# r'Trusted_Connection=yes;'
# )
# SQL Server 인증을 사용하는 경우
conn_str = (
r'DRIVER={ODBC Driver 17 for SQL Server};'
r'SERVER=your_server_name_or_ip;' # 예: 192.168.0.100 or SERVER_NAME
r'DATABASE=your_database_name;' # 예: MyDatabase
r'UID=your_username;' # 예: sa
r'PWD=your_password;' # 예: 1234
)
# -------------------------------------------------------------
# 2. DB 연결 및 데이터 가져오기
# -------------------------------------------------------------
conn = None # 연결 객체 초기화
try:
# 데이터베이스에 연결
conn = pyodbc.connect(conn_str)
print("MS SQL 데이터베이스 연결 성공!")
# 실행할 SQL 쿼리 작성
# 제품 카테고리별로 매출(SalesAmount)의 합계를 구하는 쿼리
sql_query = """
SELECT
ProductCategory,
SUM(SalesAmount) AS TotalSales
FROM
dbo.Sales
GROUP BY
ProductCategory
ORDER BY
TotalSales DESC;
"""
# pandas의 read_sql_query 함수로 쿼리 결과를 바로 DataFrame으로 로드
df = pd.read_sql_query(sql_query, conn)
print("\n--- 불러온 데이터 (DataFrame) ---")
print(df)
# 예외 처리
except pyodbc.Error as ex:
sqlstate = ex.args[0]
print(f"데이터베이스 연결 또는 쿼리 실행 중 오류 발생: {sqlstate}")
df = pd.DataFrame() # 오류 발생 시 빈 데이터프레임 생성
# finally 블록을 사용하여 연결이 성공했든 실패했든 항상 연결을 닫도록 보장
finally:
if conn:
conn.close()
print("\n데이터베이스 연결이 종료되었습니다.")
# -------------------------------------------------------------
# 3. 데이터 시각화 (막대 그래프)
# -------------------------------------------------------------
if not df.empty:
# 한글 폰트 설정 (Windows, Mac 환경에 맞게)
if platform.system() == 'Windows':
plt.rc('font', family='Malgun Gothic')
elif platform.system() == 'Darwin': # Mac OS
plt.rc('font', family='AppleGothic')
else: # Linux
# 리눅스의 경우 나눔고딕 등 설치된 폰트를 지정해야 합니다.
plt.rc('font', family='NanumGothic')
# 마이너스 부호 깨짐 방지
plt.rcParams['axes.unicode_minus'] = False
# 그래프 그리기
plt.figure(figsize=(10, 6)) # 그래프 크기 설정
# 막대 그래프 생성
# x축에는 'ProductCategory', y축에는 'TotalSales' 데이터를 사용
plt.bar(df['ProductCategory'], df['TotalSales'], color='skyblue')
# 그래프 제목 및 축 레이블 설정
plt.title('카테고리별 총 매출', fontsize=16)
plt.xlabel('제품 카테고리', fontsize=12)
plt.ylabel('총 매출액 (원)', fontsize=12)
# x축 레이블이 길 경우 45도 회전하여 겹치지 않게 함
plt.xticks(rotation=45)
# 그래프 레이아웃을 깔끔하게 조정
plt.tight_layout()
# 그래프 보여주기
plt.show()
else:
print("\n시각화할 데이터가 없습니다.")
코드 단계별 상세 설명
1. DB 연결정보 설정 (conn_str)
- 운전사: 사용할 ODBC 드라이버를 지정합니다. 가 가장 최신이며 안정적입니다.{SQL Server용 ODBC 드라이버 17}
- 서버: 연결할 MS SQL Server의 이름이나 IP 주소를 입력합니다. (예: , , localhost192.168.1.5PC이름\SQLEXPRESS)
- 데이터베이스: 접속할 데이터베이스의 이름을 입력합니다.
- 사용자 정의 / 증권 시세 표시기: SQL Server 인증 방식일 경우 사용자 아이디와 비밀번호를 입력합니다.
- Trusted_Connection=예;: Windows 인증(현재 로그인한 Windows 계정으로 인증)을 사용할 경우 / 대신 이 옵션을 사용합니다.사용자 정의증권 시세 표시기
⚠️ 보안 경고: 실제 프로젝트에서는 위 코드처럼 소스에 직접 비밀번호를 적는 것은 위험합니다. 환경 변수나 별도의 설정 파일을 사용하여 관리하는 것이 좋습니다.
2. DB 연결 및 데이터 가져오기 (노력하다... 제외한... 마침내)
- pyodbc.connect(conn_str): 위에서 정의한 연결 문자열을 사용해 데이터베이스에 접속합니다.
- sql_query: 실행하고 싶은 SQL 문을 문자열로 작성합니다. 이 예제에서는 카테고리별로 매출 합계를 구하는 집계 쿼리를 사용했습니다. 를 사용하여 데이터를 시각화하기 좋은 형태로 미리 가공하는 것이 효율적입니다.그룹화 기준
- pd.read_sql_query(sql_query, 코네티컷): 이 함수는 데이터베이스 연결()과 SQL 쿼리()를 인자로 받아, 쿼리 실행 결과를 즉시 Pandas DataFrame 객체로 만들어 반환합니다. 이 함수 덕분에 커서(cursor)를 생성하고 데이터를 하나씩 가져오는 복잡한 과정 없이 코드를 매우 간결하게 작성할 수 있습니다.가장 핵심적인 부분입니다.코네티컷sql_query
- 노력하다... 마침내: 데이터베이스 작업 시에는 구문을 사용하여, 프로그램 실행 중 오류가 발생하더라도 노력하다... 마침내마침내 블록의 가 반드시 실행되도록 하여 안전하게 데이터베이스 연결을 종료하는 것이 좋습니다.conn.close()
3. 데이터 시각화 (matplotlib.pyplot)
- 한글 폰트 설정: Matplotlib의 기본 폰트는 한글을 지원하지 않아 글자가 깨져 보입니다. 따라서 운영체제에 맞는 한글 폰트를 명시적으로 설정해주어야 합니다. 으로 현재 운영체제를 확인하여 자동으로 폰트를 지정하도록 했습니다.플랫폼.system()
- plt.figure(figsize=(10, 6)): 그래프가 그려질 도화지(Figure)의 크기를 정합니다.
- plt.bar(x, y): 막대그래프를 그리는 함수입니다.
- 첫 번째 인자 는 x축에 표시될 항목들입니다.df['제품 카테고리']
- 두 번째 인자 는 y축에 표시될 값(막대의 높이)입니다.df['총 판매량']
- plt.title(), , : 그래프의 제목과 각 축의 이름을 지정하여 그래프의 가독성을 높입니다.plt.xlabel()을 참조하십시오.plt.ylabel()
- plt.xticks(회전=45): x축의 라벨(카테고리 이름)이 길어서 서로 겹칠 때, 45도 기울여서 잘 보이게 만듭니다.
- plt.tight_layout(): 제목, 라벨 등이 그래프 영역 밖으로 나가지 않도록 자동으로 여백을 조절해줍니다.
- plt.show()를 참조하십시오.: 위에서 설정한 모든 내용으로 그래프를 화면에 최종적으로 출력합니다.
이 과정을 통해 MS SQL Server의 데이터를 손쉽게 Python으로 분석하고 시각화할 수 있습니다. SQL 쿼리만 변경하면 얼마든지 다른 데이터를 가져와 다양한 그래프로 표현할 수 있습니다.
'데이터' 카테고리의 다른 글
| IT 프리랜서 계약해지와 실업급여 수급 가능성 (0) | 2025.07.31 |
|---|---|
| EXCEL 엑셀 버튼으로 MSSQL 데이터베이스에 데이터 적재하기 (VBA + Stored Procedure) 엑셀고수 (0) | 2025.07.30 |
| MSSQL에서 파티션 테이블 구성하기 파티션 테이블 만드는 법 (0) | 2025.07.02 |
| 파이썬(Python) 처음 배울때 무조건 외워야할 핵심사항! (0) | 2025.03.31 |
| 데이터베이스 설계에서 효과적인 키(Key) 설정은 (0) | 2025.02.21 |
댓글