본문 바로가기
카테고리 없음

파이썬으로 엑셀 금융 데이터 분석하는 법

by 백터마스터 2025. 2. 26.
반응형

파이썬은 **금융 데이터 분석 및 자동화**에 강력한 도구예요. 특히 **엑셀 파일(.xlsx, .csv)과의 연동**을 통해 손쉽게 데이터를 처리할 수 있어요. 📊

 

이번 글에서는 **파이썬을 활용해 엑셀 금융 데이터를 불러오고, 분석하며, 시각화**하는 방법을 알아볼게요! 🚀 실제 주식 데이터, 금융 데이터 등을 다뤄보며 실습할 수 있도록 준비했어요.

 

그럼, 먼저 엑셀을 활용한 금융 데이터 분석이 왜 중요한지 알아볼까요?

엑셀을 활용한 금융 데이터 분석

엑셀은 금융 데이터를 다루는 데 **가장 많이 사용되는 도구** 중 하나예요. 하지만 수작업으로 데이터를 정리하고 분석하는 것은 시간이 많이 걸리고 오류가 발생하기 쉬워요. ⏳

 

✅ 파이썬을 활용하면?

  • 📌 **엑셀 데이터를 자동으로 불러오고 가공**할 수 있어요.
  • 📌 **주가, 환율, 금융 지표 등을 분석**할 수 있어요.
  • 📌 **차트 및 시각화**를 통해 인사이트를 얻을 수 있어요.
  • 📌 **반복적인 리포트 작업을 자동화**할 수 있어요.

 

💡 엑셀 vs 파이썬 금융 데이터 분석

비교 항목 엑셀 파이썬
데이터 처리 속도 대량 데이터 처리 시 느림 빠른 연산 처리 가능
자동화 매크로 사용 가능 반복 작업 자동화 가능
시각화 기본 차트 제공 Matplotlib, Seaborn 활용
외부 데이터 연동 API 연동 어려움 금융 데이터 API 연동 가능

 

📌 **엑셀과 파이썬을 함께 활용하면 금융 데이터 분석이 훨씬 강력해져요!**

 

이제 필요한 파이썬 라이브러리를 설치하고 환경을 설정해볼까요? 🚀

필요한 라이브러리 설치 및 환경 설정

엑셀 데이터를 파이썬에서 분석하려면 몇 가지 필수 라이브러리가 필요해요. 아래 명령어를 실행해서 필요한 패키지를 설치해볼게요. 🚀

 

✅ 1. 필수 라이브러리 설치

pip install pandas openpyxl xlrd matplotlib seaborn

📌 각 라이브러리의 역할:

  • 📊 **pandas** → 데이터 분석 및 처리
  • 📂 **openpyxl, xlrd** → 엑셀 파일(.xlsx, .xls) 읽기/쓰기
  • 📈 **matplotlib, seaborn** → 데이터 시각화

 

✅ 2. 파이썬에서 라이브러리 불러오기

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

📌 설치가 잘 되었는지 확인하려면 위 코드를 실행해보세요! 에러 없이 실행되면 라이브러리가 정상적으로 설치된 거예요. 🎉

 

이제 엑셀 데이터를 불러오고 저장하는 방법을 알아볼까요? 📂

엑셀 데이터 불러오기 및 저장하기

이제 파이썬을 사용해 엑셀 데이터를 불러오고 저장하는 방법을 알아볼게요! 엑셀 데이터는 `.xlsx` 또는 `.csv` 형식으로 많이 사용되며, **pandas** 라이브러리를 활용하면 쉽게 다룰 수 있어요. 📂

 

✅ 1. 엑셀 데이터 불러오기

엑셀 파일(`financial_data.xlsx`)을 불러오는 예제 코드예요.

import pandas as pd

# 엑셀 파일 불러오기
df = pd.read_excel("financial_data.xlsx", engine="openpyxl")

# 데이터 확인
print(df.head())

📌 `head()`를 사용하면 상위 5개 데이터를 확인할 수 있어요.

 

✅ 2. CSV 파일 불러오기

CSV 파일(`financial_data.csv`)을 불러오는 방법도 거의 동일해요.

df = pd.read_csv("financial_data.csv")

print(df.head())

📌 CSV 파일을 다룰 때는 `encoding="utf-8"` 또는 `encoding="cp949"`을 지정하면 한글 데이터가 깨지지 않아요.

 

✅ 3. 엑셀 파일로 저장하기

분석한 데이터를 새로운 엑셀 파일로 저장할 수도 있어요.

df.to_excel("processed_financial_data.xlsx", index=False, engine="openpyxl")

📌 `index=False`를 설정하면 **엑셀 파일에 인덱스 컬럼이 추가되지 않아요.**

 

📂 엑셀 파일 읽기/쓰기 기능 비교

파일 형식 불러오기 저장하기
엑셀 (.xlsx) pd.read_excel("파일명.xlsx", engine="openpyxl") df.to_excel("파일명.xlsx", index=False, engine="openpyxl")
CSV (.csv) pd.read_csv("파일명.csv") df.to_csv("파일명.csv", index=False)

 

이제 불러온 금융 데이터를 분석하는 방법을 알아볼까요? 📊

기본적인 금융 데이터 분석

이제 불러온 금융 데이터를 분석하는 방법을 알아볼게요! 주가 데이터, 거래량, 변동성 등을 분석하며 금융 데이터에서 중요한 인사이트를 추출할 수 있어요. 📊

 

✅ 1. 데이터 기본 정보 확인

우선, 데이터의 기본적인 구조를 확인해볼게요.

# 데이터 크기 확인
print(df.shape)

# 데이터 타입 및 결측값 확인
print(df.info())

# 기초 통계량 확인
print(df.describe())

📌 `shape`는 데이터 크기를, `info()`는 컬럼별 데이터 타입을, `describe()`는 통계 요약을 제공해요.

 

✅ 2. 날짜별 주가 변동 확인

날짜별로 **종가(Close)**의 평균을 계산할 수 있어요.

# 날짜 데이터를 인덱스로 설정
df["Date"] = pd.to_datetime(df["Date"])
df.set_index("Date", inplace=True)

# 날짜별 평균 종가 계산
daily_avg = df["Close"].resample("D").mean()
print(daily_avg.head())

📌 `resample("D")`은 날짜별(Daily) 데이터를 그룹화하는 기능이에요.

 

✅ 3. 특정 기간 동안의 최고가/최저가 찾기

특정 기간 동안 **최고가(High)와 최저가(Low)**를 찾는 방법을 알아볼게요.

# 최근 3개월 동안 최고가와 최저가
three_months = df.loc["2023-01-01":"2023-03-31"]
print("최고가:", three_months["High"].max())
print("최저가:", three_months["Low"].min())

📌 `loc["날짜 시작":"날짜 끝"]`을 사용하면 특정 기간을 선택할 수 있어요.

 

✅ 4. 거래량이 가장 많았던 날 찾기

거래량이 가장 많았던 날짜를 확인해볼게요.

max_volume_date = df["Volume"].idxmax()
print(f"거래량이 가장 많았던 날짜: {max_volume_date}")

📌 `idxmax()`는 최대값을 가진 행의 인덱스를 반환해요.

 

📊 주요 금융 데이터 분석 지표

분석 지표 설명 예제 코드
이동평균 (Moving Average) 주가 변동성을 줄이기 위한 평균값 df["Close"].rolling(20).mean()
거래량 분석 가장 활발했던 거래일 찾기 df["Volume"].idxmax()
주가 변동률 전날 대비 주가 변동 퍼센트 df["Close"].pct_change() * 100

 

이제 데이터를 시각화하여 좀 더 인사이트를 찾아볼까요? 📈

시각화를 통한 금융 데이터 인사이트

데이터 분석에서 **시각화**는 가장 중요한 과정 중 하나예요. 📊 주가 변동, 이동평균선, 거래량 변화 등을 그래프로 표현하면 **데이터의 패턴을 직관적으로 파악**할 수 있어요!

 

✅ 1. 종가(Close) 변동 그래프

우선, 날짜별 종가 변동을 **라인 차트(line plot)**로 시각화해볼게요.

import matplotlib.pyplot as plt

# 그래프 크기 설정
plt.figure(figsize=(12, 5))

# 종가 그래프
plt.plot(df.index, df["Close"], label="Close Price", color="blue")

# 그래프 제목 및 레이블
plt.title("주가 변동 그래프")
plt.xlabel("날짜")
plt.ylabel("종가 (Close Price)")
plt.legend()
plt.show()

📌 **주가의 흐름을 한눈에 확인**할 수 있어요!

 

✅ 2. 이동평균선(Moving Average) 추가

이동평균선(MA)은 **단기 변동성을 줄이고 전체적인 트렌드를 파악하는 데 유용**해요.

# 이동평균선 계산
df["MA_20"] = df["Close"].rolling(window=20).mean()
df["MA_50"] = df["Close"].rolling(window=50).mean()

# 그래프 크기 설정
plt.figure(figsize=(12, 5))

# 종가 & 이동평균선 그래프
plt.plot(df.index, df["Close"], label="Close Price", color="blue")
plt.plot(df.index, df["MA_20"], label="20-Day MA", color="red")
plt.plot(df.index, df["MA_50"], label="50-Day MA", color="green")

# 그래프 제목 및 레이블
plt.title("주가 및 이동평균선")
plt.xlabel("날짜")
plt.ylabel("가격")
plt.legend()
plt.show()

📌 **이동평균선이 주가와 교차하는 지점을 분석하면 투자 전략을 세울 수 있어요!**

 

✅ 3. 거래량(Volume) 변화 시각화

거래량은 **주가 변동성과 밀접한 관계**가 있어요. 거래량이 급증하면 가격 변동이 발생할 가능성이 높아요.

import seaborn as sns

# 그래프 크기 설정
plt.figure(figsize=(12, 5))

# 거래량 막대그래프
sns.barplot(x=df.index, y=df["Volume"], color="orange")

# 그래프 제목 및 레이블
plt.title("거래량 변동")
plt.xlabel("날짜")
plt.ylabel("거래량 (Volume)")
plt.xticks(rotation=45)
plt.show()

📌 **거래량 급등 구간을 분석하면 시장의 관심도가 높은 시점을 파악할 수 있어요!**

 

📈 주요 금융 데이터 시각화 방법

그래프 유형 설명 예제 코드
라인 차트 주가 변동 확인 plt.plot(df.index, df["Close"])
이동평균선 주가 흐름 분석 df["Close"].rolling(20).mean()
막대 그래프 거래량 분석 sns.barplot(x=df.index, y=df["Volume"])

 

이제 엑셀 자동화를 통해 금융 리포트를 자동으로 생성해볼까요? 📝

엑셀 자동화 및 리포트 생성

엑셀 작업을 자동화하면 반복적인 금융 데이터 분석을 더욱 효율적으로 할 수 있어요! 📝 이제 **파이썬을 활용하여 자동으로 금융 리포트를 생성하는 방법**을 배워볼게요.

 

✅ 1. 특정 조건을 만족하는 데이터 필터링

예를 들어, **거래량이 100만 이상인 데이터만 필터링**해서 새로운 엑셀 파일로 저장할 수 있어요.

# 거래량이 1,000,000 이상인 데이터만 필터링
high_volume_df = df[df["Volume"] > 1000000]

# 필터링된 데이터 저장
high_volume_df.to_excel("high_volume_stocks.xlsx", index=False, engine="openpyxl")

📌 **대량의 금융 데이터에서 중요한 정보만 추출**할 때 유용해요.

 

✅ 2. 자동으로 요약 리포트 생성

주요 지표를 **엑셀 리포트로 자동 생성**하는 방법을 알아볼게요.

import openpyxl

# 새로운 엑셀 파일 생성
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "금융 데이터 요약"

# 헤더 추가
ws.append(["지표", "값"])

# 데이터 추가
ws.append(["최고 종가", df["Close"].max()])
ws.append(["최저 종가", df["Close"].min()])
ws.append(["평균 종가", df["Close"].mean()])
ws.append(["총 거래량", df["Volume"].sum()])

# 파일 저장
wb.save("financial_summary.xlsx")

📌 실행하면 **"financial_summary.xlsx"** 파일이 생성되고, 금융 데이터 요약이 정리돼요!

 

✅ 3. 이메일로 자동 보고서 전송

자동화된 보고서를 이메일로 보내는 방법도 가능해요! 이메일 전송에는 `smtplib`과 `email` 라이브러리를 사용할 수 있어요.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

# 이메일 설정
sender_email = "your_email@example.com"
receiver_email = "recipient@example.com"
subject = "금융 리포트 자동 전송"
body = "첨부된 파일에서 금융 데이터 요약을 확인하세요."

# 이메일 메시지 작성
msg = MIMEMultipart()
msg["From"] = sender_email
msg["To"] = receiver_email
msg["Subject"] = subject
msg.attach(MIMEBase("application", "octet-stream"))

# 파일 첨부
filename = "financial_summary.xlsx"
with open(filename, "rb") as attachment:
    part = MIMEBase("application", "octet-stream")
    part.set_payload(attachment.read())
    encoders.encode_base64(part)
    part.add_header("Content-Disposition", f"attachment; filename={filename}")
    msg.attach(part)

# SMTP 서버를 이용한 이메일 전송
with smtplib.SMTP("smtp.gmail.com", 587) as server:
    server.starttls()
    server.login(sender_email, "your_password")
    server.sendmail(sender_email, receiver_email, msg.as_string())

📌 **매일 자동으로 금융 리포트를 생성하고 이메일로 보내는 자동화 시스템을 구축할 수 있어요!**

 

📂 엑셀 자동화 주요 기능

자동화 기능 설명 예제 코드
필터링 특정 조건의 데이터만 추출 df[df["Volume"] > 1000000]
요약 리포트 엑셀 파일로 분석 결과 저장 wb.save("report.xlsx")
이메일 전송 자동으로 리포트 공유 smtplib 사용

 

이제 자주 묻는 질문(FAQ)을 정리해볼까요? 🔥

FAQ

Q1. 엑셀 대신 데이터베이스를 사용할 수 있나요?

 

A1. 네! 엑셀 파일 대신 MySQL, PostgreSQL, SQLite 같은 **데이터베이스(DB)**를 활용하면 더 많은 데이터를 효율적으로 관리할 수 있어요. ✔ `pandas.read_sql()`을 사용하면 SQL 데이터를 바로 분석할 수 있어요.

 

Q2. Yahoo Finance에서 실시간 주가 데이터를 가져올 수 있나요?

 

A2. 네! `yfinance` 라이브러리를 사용하면 실시간 주가 데이터를 가져올 수 있어요.

import yfinance as yf

# 삼성전자 주가 데이터 가져오기
samsung = yf.Ticker("005930.KQ")
df = samsung.history(period="1mo")  # 최근 1개월 데이터
print(df.head())

📌 `history(period="1mo")`를 사용하면 최근 1개월 데이터를 가져올 수 있어요.

 

Q3. 특정 시간마다 자동으로 데이터를 업데이트할 수 있나요?

 

A3. 네! `schedule` 라이브러리를 사용하면 특정 시간마다 자동으로 코드를 실행할 수 있어요.

import schedule
import time

def update_data():
    print("새로운 데이터를 가져옵니다!")

# 매일 오전 9시에 실행
schedule.every().day.at("09:00").do(update_data)

while True:
    schedule.run_pending()
    time.sleep(60)

📌 **자동 업데이트 시스템을 구축하면 실시간 금융 데이터를 활용할 수 있어요!**

 

Q4. 여러 개의 엑셀 파일을 한 번에 분석할 수 있나요?

 

A4. 네! `glob` 라이브러리를 사용하면 특정 폴더 내의 모든 엑셀 파일을 한 번에 분석할 수 있어요.

import glob

# 폴더 내 모든 엑셀 파일 불러오기
files = glob.glob("data/*.xlsx")

dfs = [pd.read_excel(f, engine="openpyxl") for f in files]
merged_df = pd.concat(dfs, ignore_index=True)

print(merged_df.head())

📌 `glob.glob("data/*.xlsx")`를 사용하면 `data` 폴더 내 모든 `.xlsx` 파일을 불러올 수 있어요.

 

Q5. 금융 데이터를 머신러닝 모델에 활용할 수 있나요?

 

A5. 네! 금융 데이터를 머신러닝 모델에 적용하여 주가 예측, 리스크 분석 등을 할 수 있어요. ✔ `scikit-learn`을 활용하면 간단한 모델을 만들 수 있어요.

from sklearn.linear_model import LinearRegression

# X: 주가, y: 다음날 주가 예측
X = df[["Open", "High", "Low"]]
y = df["Close"].shift(-1)

model = LinearRegression()
model.fit(X[:-1], y[:-1])

# 예측값 출력
predicted = model.predict(X[-1:])
print(f"다음 날 예측 주가: {predicted[0]:.2f}")

📌 `LinearRegression()` 모델을 활용하면 간단한 주가 예측을 수행할 수 있어요.

 

Q6. 엑셀을 파이썬 코드 없이 자동으로 업데이트할 수 있나요?

 

A6. 네! **Power Query**(엑셀 내장 기능)를 활용하면 파이썬 코드 없이 데이터를 자동으로 업데이트할 수 있어요. ✔ 파이썬과 연동하면 더욱 강력한 자동화 시스템을 구축할 수 있어요!

 

Q7. 그래프를 엑셀 파일에 자동으로 삽입할 수 있나요?

 

A7. 네! `openpyxl.drawing.image` 모듈을 사용하면 **엑셀에 그래프 이미지를 삽입**할 수 있어요.

from openpyxl import Workbook
from openpyxl.drawing.image import Image

# 그래프 저장
plt.figure(figsize=(8,4))
df["Close"].plot()
plt.savefig("chart.png")

# 엑셀에 그래프 삽입
wb = Workbook()
ws = wb.active
img = Image("chart.png")
ws.add_image(img, "B2")
wb.save("financial_chart.xlsx")

📌 **엑셀 파일 내에서 차트를 직접 삽입하고 저장할 수 있어요!**

 

Q8. 엑셀 자동화 작업을 GUI 프로그램으로 만들 수 있나요?

 

A8. 네! `tkinter` 또는 `PyQt`를 사용하면 **엑셀 분석을 수행하는 GUI 프로그램**을 만들 수 있어요. ✔ 버튼 클릭 한 번으로 엑셀 데이터를 불러오고 분석하는 기능을 추가할 수 있어요!

 

🎯 마무리

여기까지 **파이썬을 활용한 엑셀 금융 데이터 분석 및 자동화** 방법을 알아봤어요! 🚀 이제 여러분도 **엑셀 데이터를 분석하고, 시각화하고, 자동화하는 기술을 활용**할 수 있어요. 😊

 

📌 요약:

  • 엑셀 데이터를 파이썬에서 불러오고 저장
  • 주가 변동, 거래량 분석, 이동평균 계산
  • 시각화(Matplotlib, Seaborn)로 인사이트 도출
  • 자동화된 리포트 생성 및 이메일 전송
  • 실시간 금융 데이터 활용 및 머신러닝 적용

 

 

반응형