# data[].attributes.body
반복 업무 자동화를 넘어, 인간의 업무 설명을 바탕으로 ChatGPT가 코드를 생성하고 수정하는 방식까지 익힙니다.

실무자 입장에서 파이썬 코드를 직접 다 짜지 않더라도, ChatGPT의 도움을 받아 자동화 코드를 확장하는 전략을 배웁니다.

# data[].attributes.headline
숫자가 많아질수록 통계와 시각화는 필수입니다

# data[].attributes.subject
숫자가 많아질수록 통계와 시각화는 필수입니다

# data[].attributes.body
매일 수천 명의 고객 데이터를 다룰 때, 단순한 필터링만으로는 부족합니다.
전체의 분포를 요약하거나 시각적으로 파악할 수 있어야 패턴이 보입니다.

하지만 엑셀에서는 피벗테이블 만들고, 차트 수정하고, 저장하고…
매번 반복하기엔 너무 번거롭고 자동화하기 어렵습니다.

👉 파이썬에서는 단 몇 줄의 코드로 요약과 시각화까지 자동화가 가능합니다.

# data[].attributes.headline
“조건별로 나눠 저장하는 작업, 매일 수작업으로 하시나요?”

# data[].attributes.subject
“조건별로 나눠 저장하는 작업, 매일 수작업으로 하시나요?”

# data[].attributes.body
많은 금융업 실무자들이 매일 다음과 같은 업무를 반복합니다:

거래금액 100만 원 이상 고객만 별도 저장

연체 이력이 있는 고객만 따로 정리

지점별, 담당자별로 고객 데이터를 분할 저장

엑셀이나 파워쿼리로는 이 작업을 하려면:

필터 후 복사 → 새 시트 붙여넣기 → 저장 반복

파워쿼리로 시도해도 분할 저장은 번거로운 루틴

👉 파이썬에서는 조건별로 자동 분할 저장이 가능합니다.

# data[].attributes.headline
엑셀 데이터를 불러오는 것은 효율적인 업무 흐름을 설계하는 첫 단계입니다.

# data[].attributes.subject
엑셀 데이터를 불러오는 것은 효율적인 업무 흐름을 설계하는 첫 단계입니다.

# data[].attributes.body
엑셀 파일은 대부분의 금융 실무자에게 가장 익숙한 데이터 포맷입니다.
따라서 파이썬을 활용한 효율적인 업무 흐름의 재설계는 엑셀 데이터를 불러오는 것부터 시작하는 것이 가장 자연스럽습니다.

예제 코드:

import pandas as pd

df = pd.read_excel('고객가입데이터.xlsx')

df.head()

⚠️ 고객가입데이터.xlsx는 Jupyter Notebook 실행 위치의 폴더에 있어야 합니다.

# data[].attributes.headline
파이썬의 진짜 힘은 ‘라이브러리’에 있습니다

# data[].attributes.subject
파이썬의 진짜 힘은 ‘라이브러리’에 있습니다

# data[].attributes.body
파이썬 자체도 강력하지만,
그 진짜 위력은 분야별로 특화된 라이브러리(기능 묶음)에서 나옵니다.

엑셀에서는 하나하나 기능을 손으로 조작해야 하지만,
파이썬에서는 라이브러리를 불러오기만 하면
분석, 시각화, 통계, 자동화를 손쉽게 실행할 수 있습니다.

# data[].attributes.headline
설치가 걱정이라면, 아나콘다부터 시작하세요

# data[].attributes.subject
설치가 걱정이라면, 아나콘다부터 시작하세요

# data[].attributes.body
많은 실무자들이 “파이썬 설치는 어렵다”고 느낍니다.
하지만 지금은 Anaconda(아나콘다) 라는 통합 설치 프로그램 덕분에
별도 설정 없이도 데이터 분석에 필요한 환경을 한 번에 구성할 수 있습니다.

아나콘다에는 다음이 포함되어 있습니다.

파이썬 언어 실행 환경

pandas, numpy 등 분석용 라이브러리

Jupyter Notebook (엑셀처럼 셀 단위로 실행할 수 있는 환경)

✅ 설치 사이트: https://www.anaconda.com/download

윈도우 사용자라면 Anaconda for Windows (64-bit)를 내려받아 설치하면 됩니다.
설치 후 바탕화면에서 Jupyter Notebook 실행 아이콘을 클릭하면 바로 파이썬 분석 환경이 열립니다.

# data[].attributes.attachment_link.description
Anaconda’s open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.

# data[].attributes.body
파이썬 자동화를 위한 환경을 부담 없이 시작할 수 있도록 한다.

설치, 인터페이스, 파일 불러오기 등 첫 단계를 실습 중심으로 익히게 한다.

엑셀을 대체할 수 있는 최소 기능(pandas 기본기)을 직접 실행해보게 한다.

# data[].attributes.body
모든 걸 파이썬으로 할 필요는 없다.

각 도구의 강점과 한계를 정확히 이해해야 한다.

상황에 따라 가장 효율적인 도구를 골라야 한다.

파이썬은 필요할 때 꺼낼 수 있는 강력한 무기다.

# data[].attributes.body
데이터는 늘어나고 있다.

엑셀, 파워쿼리, BI만으로는 대응이 한계에 부딪히고 있다.

파이썬은 대량 데이터, 복합 조건, 반복 작업을 해결할 수 있는 강력한 도구다.

도구에 얽매이지 말고, 파이썬을 필요할 때 꺼내 쓸 수 있는 준비가 필요하다.

# data[].attributes.body
수작업으로 반복하던 데이터 필터링, 분할 저장, 요약 집계를 파이썬 코드로 자동화합니다.

반복 조건이 많고 매일 처리해야 하는 작업을 중심으로, 실무에 바로 적용 가능한 자동화 흐름을 구성합니다.

groupby, 조건 필터링, 파일 저장 등 엑셀에서 복잡했던 루틴을 단순화합니다.

# data[].attributes.body
Part1  금융 데이터 실무와 자동화의 필요성

Part 2. 금융 데이터 자동화를 위한 파이썬 준비

Part 3. 반복 업무 자동화: 조건, 저장, 요약까지 한 번에

Part 4. ChatGPT와 함께 확장하는 자동화

Part 5. 실무 적용과 확장 전략

# data[].attributes.body
df.describe()

# 지점별 평균 거래금액

branch_summary = df.groupby('지점명')['거래금액'].mean()

수치형 컬럼 전체 요약 → .describe()

특정 기준별 요약 → .groupby() + 집계함수

# data[].attributes.body
for 등급, group in df.groupby('고객등급'):

    filename = f'{등급}_고객리스트.xlsx'

    group.to_excel(filename, index=False)

이 코드는 고객등급별로 데이터를 나눠 각각 다른 파일로 저장합니다.

# data[].attributes.headline
금융 실무에서 자주 쓰이는 파이썬 라이브러리

# data[].attributes.subject
금융 실무에서 자주 쓰이는 파이썬 라이브러리

# data[].attributes.body
금융 데이터를 다룰 때 가장 많이 쓰이는 라이브러리입니다.

# data[].attributes.body
Jupyter Notebook은 "셀 단위 실행" 방식으로, 엑셀과 비슷한 감각으로 코드를 작성하고 실행할 수 있습니다.

📌 TIP: 새 파일을 만들 때는 메뉴에서 Notebook을 선택하세요.

# data[].attributes.headline
파이썬만으로 모든 것을 해결할 필요는 없습니다

# data[].attributes.subject
파이썬만으로 모든 것을 해결할 필요는 없습니다

# data[].attributes.body
파이썬은 매우 강력한 도구입니다.
하지만 모든 업무를 파이썬으로 처리할 필요는 없습니다.

간단한 데이터 확인

소규모 테이블 분석

빠른 보고서 작성 이런 작업은 여전히 엑셀이나 파워쿼리, BI 툴이 더 편리합니다.

핵심은 "상황에 따라 가장 효율적인 도구를 쓰는 것"입니다.
파이썬은 필요할 때 꺼낼 수 있는 강력한 무기이지, 무조건 대체해야 하는 도구가 아닙니다.

# data[].attributes.headline
데이터는 늘어나는데, 우리의 방식은 그대로입니다

# data[].attributes.subject
데이터는 늘어나는데, 우리의 방식은 그대로입니다

# data[].attributes.body
금융업 실무에서 데이터는 이제 특별한 것이 아닙니다.
지점별 가입 데이터, 계좌 거래 이력, 연체 관리 기록, 상품별 실적 데이터 등.
매일같이 대량의 데이터가 쏟아집니다.

하지만,
이 데이터를 다루는 방식은 여전히 엑셀, 파워쿼리, BI 툴에 의존하고 있습니다.
수기로 데이터를 병합하고, 수식으로 조건을 필터링하며, 보고서를 작성합니다.

이 방식은 익숙하지만, 점점 커지는 데이터의 양과 복잡성을 감당하기에는 점점 버거워지고 있습니다.

# data[].attributes.headline
신규 고객 수 추이 시각화 예제

# data[].attributes.subject
신규 고객 수 추이 시각화 예제

# data[].attributes.body
import seaborn as sns

import matplotlib.pyplot as plt

monthly = df.groupby('가입월')['고객ID'].count().reset_index()

sns.barplot(x='가입월', y='고객ID', data=monthly)

plt.title('월별 신규 고객 수')

plt.show()

seaborn으로 막대그래프, 선그래프, 박스플롯 등 다양한 시각화 가능

matplotlib과 함께 사용하면 제목, 저장, 폰트 등 커스터마이징 용이

# data[].attributes.headline
다양한 조건을 적용한 분할 저장 예제

# data[].attributes.subject
다양한 조건을 적용한 분할 저장 예제

# data[].attributes.body
# 연체 1회 이상 고객 중, 등급별로 저장

filtered = df[df['연체횟수'] >= 1]

for 등급, group in filtered.groupby('고객등급'):

    filename = f'연체고객_{등급}.xlsx'

group.to_excel(filename, index=False)

groupby()로 원하는 기준으로 나누고

to_excel()로 자동 저장하는 구조입니다.

이 방식은 반복성과 유연성 측면에서 엑셀보다 월등히 유리합니다.

# data[].attributes.headline
라이브러리별 핵심 기능 미리 체험해보기

# data[].attributes.subject
라이브러리별 핵심 기능 미리 체험해보기

# data[].attributes.body
① pandas – 엑셀을 대체하는 데이터 처리 핵심 도구

import pandas as pd

df = pd.read_excel('가입데이터.xlsx')

df_filtered = df[(df['연체횟수'] >= 2) & (df['거래금액'] < 500000)]

✅ 엑셀의 VLOOKUP, 필터, 수식 → 단 몇 줄로 대체 가능

② numpy – 대량 숫자 연산의 엔진

import numpy as np

x = np.array([100000, 200000, 300000])

x.mean()

✅ 연산 속도 향상, 벡터 계산에 유리

③ matplotlib + seaborn – 보고용 시각화

import matplotlib.pyplot as plt

import seaborn as sns

 sns.histplot(df['거래금액'])

plt.title('거래금액 분포')

plt.show()

✅ 업무 리포트에 바로 쓸 수 있는 그래프 생성

④ glob – 폴더 내 모든 파일 자동 병합

import glob

import pandas as pd

files = glob.glob('data/*.xlsx')

df = pd.concat([pd.read_excel(f) for f in files])

✅ 매일 생성되는 지점별 엑셀 파일을 자동 병합 가능

# data[].attributes.body
이제 직접 실습해봅니다.
다음 코드는 엑셀 데이터를 불러오고, 화면에 출력하는 가장 기본적인 흐름입니다.

import pandas as pd

import os

# 현재 작업 디렉토리 확인
print(os.getcwd())

# Working directory 변경
os.chdir(r"C:\Python\data")
# os.chdir("C:/Python/data")도 가능

# 확인
print("현재 작업 디렉토리:", os.getcwd())

# 엑셀 파일 목록 확인
print(os.listdir())

# 엑셀 파일 불러오기
df = pd.read_excel('고객가입데이터.xlsx')
print(df.head())

파일이 다른 위치에 있다면 파일 경로를 절대 경로 또는 상대 경로로 명확히 지정해야 합니다.

실습 파일은 Jupyter Notebook 실행 위치와 같은 폴더에 저장해두는 것을 권장합니다.

# data[].attributes.headline
주요 데이터 분석 도구의 역할 정리

# data[].attributes.subject
주요 데이터 분석 도구의 역할 정리

# data[].attributes.body
각 도구는 저마다 강점과 한계를 가지고 있습니다.
이것을 이해하면 상황별로 최적의 선택을 할 수 있습니다.

※ ChatGPT는 단순한 코드 생성기를 넘어,
데이터 작업 전체 흐름과 판단 구조를 함께 설계하는 AI 도우미입니다.

# data[].attributes.headline
반복되는 문제들: 현장에서 매일 겪는 현실

# data[].attributes.subject
반복되는 문제들: 현장에서 매일 겪는 현실

# data[].attributes.body
10만 건이 넘는 데이터를 다루다 보면 엑셀이 멈춥니다.
복잡한 조건 필터를 만들다가 오류가 발생합니다.
매일 비슷한 병합, 필터링, 요약 작업을 수작업으로 반복합니다.

이로 인해 발생하는 문제는 명확합니다.

속도 저하: 단순한 필터링, 병합에도 수십 분이 걸립니다.

오류 위험 증가: 복잡한 수식이나 매뉴얼 조작에서 실수가 빈번합니다.

시간 낭비: 반복 작업에 쏟아야 하는 시간과 체력 소모.

분석 여력 감소: 중요한 인사이트 도출에 쏟을 시간이 부족해집니다.

# data[].attributes.body
https://padlet.com/barefootlab/python-3yqwd4o2zywyxuyj

https://bit.ly/3HBkMEs

# data[].attributes.body
이번 실습의 목표는 다음과 같습니다.
실습을 진행하면서 아래 항목들을 하나씩 달성해보세요.

수치형 데이터를 .describe()와 직접 요약 방식으로 통계 분석한다

groupby()를 활용하여 지점별/등급별 집계를 수행한다

연체율 등 파생 지표를 계산하고 새 DataFrame으로 정리한다

월별 신규 고객, 연체율 추이를 시각화한다

등급/지점별 거래금액 분포를 시각화하고 커스터마이징한다

요약 통계 + 그래프를 .xlsx, .png 등으로 저장한다

보고서에 활용될 수 있도록 한 엑셀 파일에 통계와 그래프 시트를 분리 저장한다

# data[].attributes.body
이번 실습의 목표는 다음과 같습니다.
실습을 진행하면서 아래 항목들을 하나씩 달성해보세요.

groupby를 활용해 데이터를 조건별로 나누어 저장한다

필터링 조건을 적용한 뒤 그룹별로 저장하는 구조를 구현한다

파일명을 고객 속성(지점명, 등급 등) 기반으로 동적으로 생성해 저장한다

여러 시트로 나누어 파일 1개에 조건별 데이터를 저장한다

저장 경로를 설정하고, 분할 저장 파일을 정리/압축한다

# data[].attributes.body
import pandas as pd

# 1. 연체 정보와 거래 정보 불러오기

overdue = pd.read_excel("연체정보.xlsx")

transaction = pd.read_excel("거래정보.xlsx")

# 2. 고객별 연체 횟수 집계

# 👉 '연체상태' 컬럼 기준으로 고객별로 몇 건의 연체가 있는지를 count()로 계산

# 👉 agg()는 groupby 이후 여러 개의 요약값(집계값)을 만들 때 사용하는 집계 함수

overdue_summary = overdue.groupby("고객ID").agg(연체횟수=("연체상태", "count")).reset_index()

# 3. 고객별 누적 거래금액 집계

# 👉 출금(-)과 입금(+)을 모두 고려하기 위해 절대값으로 변환 후 합산

transaction["거래금액"] = transaction["거래금액"].abs()

transaction_summary = transaction.groupby("고객ID").agg(거래금액=("거래금액", "sum")).reset_index()



# 4. 연체 요약 + 거래 요약 병합

# 👉 고객ID 기준으로 두 집계 테이블을 병합

# 👉 how="inner"는 SQL의 INNER JOIN과 같음: 양쪽에 모두 존재하는 고객만 남김

#     - 예: 연체는 했지만 거래기록이 없는 고객은 제외됨

df = pd.merge(overdue_summary, transaction_summary, on="고객ID", how="inner")



# 💡 참고: 병합 방식 요약

# - how="inner" : 양쪽 다 있는 고객만 (교집합)

# - how="left"   : 왼쪽(df1) 기준으로 모두 유지, 오른쪽(df2)은 없으면 NaN

# - how="outer"  : 모든 고객 다 포함 (합집합), 없는 값은 NaN

# - how="right"  : 오른쪽(df2) 기준으로 모두 유지



# 5. 조건 필터링: 연체 2회 이상 & 누적 거래금액 50만 원 초과

df_filtered = df[(df['연체횟수'] >= 2) & (df['거래금액'] > 500000)]



# 6. 결과 상위 5개 출력

print("✅ 조건을 만족하는 고객 상위 5명:")

print(df_filtered.head())

# data[].attributes.headline
pandas의 기본 구조 이해: 엑셀과 비슷하지만 훨씬 유연하다

# data[].attributes.subject
pandas의 기본 구조 이해: 엑셀과 비슷하지만 훨씬 유연하다

# data[].attributes.body
pandas는 데이터를 DataFrame이라는 구조로 다룹니다.이는 엑셀 시트와 거의 유사한 형태입니다.

예시:

df['고객등급']
df # 엑셀 테이블 전체

이 명령어는 ‘고객등급’ 열만 추출합니다.
엑셀에서 열을 복사하는 것과 비슷하지만, 반복성과 확장성 면에서 훨씬 강력합니다.

# data[].attributes.headline
상황별 도구 선택 가이드

# data[].attributes.subject
상황별 도구 선택 가이드

# data[].attributes.body
간단한 데이터 필터링, 요약 → Excel 사용

작은 규모(수천 건 이내)

단순 조건 필터

빠른 가시화 필요

반복되는 전처리, 파일 통합 → Power Query 사용

정형화된 파일 포맷

매일/매주 업데이트되는 데이터

파일 이름/형식이 일정할 때

대시보드 구축 및 시각화 → Power BI 사용

지표 모니터링

비주얼 중심의 경영 리포트

다양한 드릴다운/필터링 옵션 필요

대량 데이터 처리, 복합 조건 필터링, 반복 자동화 → Python (pandas, numpy) 사용

10만~100만 건 이상의 데이터

다중 조건(AND/OR/복합) 필터링

파일 분할 저장, 반복 작업 자동화

데이터 구조가 수시로 변경될 가능성

특수한 통계 분석 또는 고급 데이터 과학 → R 사용

로지스틱 회귀, 시계열 예측, 머신러닝

복잡한 통계 모델링

특수 분석 프로젝트

코드 자동 생성 + 데이터 업무 설계 + 의사결정 지원 → ChatGPT 사용

반복적인 코드 작성 및 예외 처리 자동화

데이터 처리 흐름 설계 및 도구 선택 가이드

분석 방향 제안, 조건 비교, 작업 순서 추천 등 실무 판단 보조

# data[].attributes.headline
기존 도구들의 강점과 한계

# data[].attributes.subject
기존 도구들의 강점과 한계

# data[].attributes.body
이 도구들은 매우 유용합니다.
하지만 대량 데이터와 복합적인 처리가 필요한 상황에서는 한계가 명확해집니다.

예를 들어, 전국 100여 개 지점에서 매일 신규 가입 데이터를 엑셀 파일로 수집하는 업무가 있다고 가정해보자. 각 파일의 구조는 비슷하지만, 지점마다 열 순서나 날짜 포맷이 조금씩 다르다. 이 데이터를 하나로 모아 매일 보고서를 만드는 작업은 단순해 보이지만, 수작업으로는 매번 복사/붙여넣기와 오류 수정의 반복이다.

파이썬에서는 glob를 사용해 특정 폴더 내의 모든 파일을 자동으로 불러오고, pandas로 열 이름을 통일하고 병합한 뒤, 날짜 기준으로 정렬까지 자동 처리할 수 있다.
매일 1~2시간 걸리던 작업이 단 수십 초 안에 끝나는 것이다.

# data[].attributes.body
“지점별로 신규 고객 수, 거래금액, 연체율 같은 걸 매달 요약해서 보고합니다. 그걸 매번 수작업으로 만들어야 해서 시간이 꽤 걸려요.”

파이썬에서는 조건 필터 + groupby + 시각화 → 자동 저장까지 한 번에 처리할 수 있습니다.

# data[].attributes.body
“VIP 고객 중에서 1년 이상 거래 고객만 별도로 추출해 매주 보고해야 해요. 엑셀에서 하려면 필터 돌리고, 복사해서 파일 나누고, 저장까지 10분 이상 걸립니다.”

파이썬으로는 이렇게 작성할 수 있습니다:

vip = df[(df['고객등급'] == 'VIP') & (df['거래기간'] >= 365)]
vip.to_excel('vip_1년이상.xlsx', index=False)

단 한 줄로 보고서 작성이 끝납니다.

# data[].attributes.headline
처음 시작할 때 자주 하는 질문 정리

# data[].attributes.subject
처음 시작할 때 자주 하는 질문 정리

# data[].attributes.headline
현실적 조언: 툴에 얽매이지 말자

# data[].attributes.subject
현실적 조언: 툴에 얽매이지 말자

# data[].attributes.body
"모든 것을 파이썬으로 하겠다"
"엑셀은 구식이다"

이런 생각은 실무에서는 오히려 위험할 수 있습니다.

엑셀, 파워쿼리, BI 툴은 각각 필요한 순간이 있습니다.
파이썬은 그 틈을 메우고, 보다 큰 문제를 해결할 수 있도록 확장하는 도구입니다.

핵심은 "도구는 수단일 뿐"이라는 점을 잊지 않는 것입니다.

필요한 곳에는 빠르게 엑셀을 쓰고,
반복적인 곳에는 파워쿼리를 쓰고,
대시보드는 BI를 쓰고,
대량 데이터 자동화에는 파이썬을 쓰는 것.

이런 유연한 접근이 결국 업무 생산성을 가장 크게 높입니다.

# data[].attributes.headline
대량 데이터가 바꿔놓은 게임의 법칙

# data[].attributes.subject
대량 데이터가 바꿔놓은 게임의 법칙

# data[].attributes.body
데이터가 단순히 많아진 것이 아닙니다.
요구되는 작업의 복잡성도 함께 높아졌습니다.

지점별, 등급별, 상품별로 세분화한 통계

신규 고객 중 특정 행동 패턴을 보이는 그룹 추출

연체 가능성 예측을 위한 특성별 필터링

이러한 작업은 단순한 피벗테이블이나 필터로는 다루기 어렵습니다.
다중 조건, 복합 로직, 반복 자동화가 필수인 시대가 온 것입니다.

# data[].attributes.body
1. 전체 데이터 요약

.describe()를 사용해 수치형 컬럼의 요약 통계값(평균, 표준편차, 사분위수 등)을 확인해보세요.

거래금액, 연체횟수, 거래건수 등의 컬럼을 선택적으로 요약하고,
통계 결과를 엑셀 파일로 저장해보세요.

2. 기준별 집계

groupby()를 활용해 지점별 평균 거래금액과 평균 연체횟수를 계산해보세요.

고객등급, 지점명, 담당자 기준으로 다중 groupby를 적용해
거래금액 합계, 고객 수, 연체율 등을 요약해보세요.

3. 특정 지표 계산 (파생 통계)

고객등급별 연체율 = 연체고객 수 / 전체 고객 수를 계산해보세요.

등급별 연체율을 새로운 DataFrame으로 정리한 뒤,
높은 순으로 정렬하고 요약 리포트로 저장해보세요.

4. 추이 분석용 시각화

월별 신규 고객 수 추이를 seaborn.barplot() 또는 lineplot()으로 시각화해보세요.

연체율의 월별 변화를 선형 그래프로 시각화하고,
최고/최저 구간에 색상 강조나 주석을 추가해보세요.

5. 등급/지점별 비교 시각화

등급별 거래금액 분포를 박스플롯으로 그려보세요.

지점별 평균 거래금액을 막대그래프로 시각화하고,
matplotlib으로 제목, 축, 저장 설정을 커스터마이징해보세요.

6. 결과 저장 및 보고서 활용

요약된 통계 결과나 그래프를 .png 이미지 또는 .xlsx로 저장해보세요.

한 엑셀 파일에 요약 테이블 + 통계 그래프 시트를 함께 구성해 저장해보세요.
(예: summary.xlsx 파일에 '통계', '그래프' 시트 분리 저장)

# data[].attributes.body
1. 단순 그룹 기준 분할 저장

고객 데이터를 ‘고객등급’ 기준으로 나누어 등급별 .xlsx 파일로 각각 저장해보세요.
(예: A.xlsx, B.xlsx, VIP.xlsx)

‘지점명’ 기준으로 데이터를 나누어, 각 지점명을 포함한 파일로 저장해보세요.
(예: 강남지점.xlsx, 분당지점.xlsx 등)

2. 조건 필터 + 그룹 저장

거래금액이 100만 원 이상이고, 연체횟수가 1회 이상인 고객만 필터링한 후
고객등급별로 나누어 저장해보세요.

VIP 고객 중 연체 이력이 없는 고객만 추출한 후,
지점명 기준으로 나누어 저장해보세요.

3. 파일명 동적 구성 + 저장

각 파일을 지점명_고객등급.xlsx 형식으로 저장해보세요.

저장하는 파일명에 오늘 날짜를 포함시켜 지점명_YYYYMMDD.xlsx 형식으로 저장해보세요.
(예: 대전지점_20240525.xlsx)

4. 시트 분리 저장 (파일 1개에 여러 조건 저장)

고객 데이터를 등급별로 나누어 하나의 엑셀 파일에 시트로 저장해보세요.
(ExcelWriter 활용)

지점별로 나누어 각각 파일을 만들고, 그 안에 고객등급별 시트를 구성해 저장해보세요.
(파일 → 지점별, 시트 → 등급별)

5. 파일 저장 경로 설정 및 정리

저장 폴더 경로를 reports/2025/05 형식으로 지정하여 파일을 저장해보세요.

조건별로 분할 저장한 파일들을 모두 하나의 폴더에 저장하고,
작업 완료 후 zip 파일로 압축해보세요. (선택 과제)

# data[].attributes.headline
왜 이 단계를 꼭 거쳐야 할까?

# data[].attributes.subject
왜 이 단계를 꼭 거쳐야 할까?

# data[].attributes.body
파이썬으로 자동화를 하려면,
엑셀 데이터를 읽고, 필터링하고, 저장하는 흐름을 자유롭게 다룰 수 있어야 합니다.
이 장에서는 그중 "읽기"에 해당하는 부분을 다뤘고,
다음 장에서는 데이터 다루기(pandas)를 심화해볼 예정입니다.

# data[].attributes.body
한 금융사 영업팀은 매일 아침 고객 가입 추이와 상품별 판매 실적을 요약한 리포트를 작성한다.
기존에는 담당자가 엑셀로 데이터를 정리하고, 그래프를 만들고, PDF로 저장한 뒤 메일로 보내는 작업을 반복해야 했다.

파이썬을 활용해 이 업무를 일부 자동화한 이후에는:

전날 데이터 자동 병합

요약 통계와 시각화 초안 자동 생성

PDF 저장 및 메일 전송은 담당자가 확인 후 실행

반복적인 작업은 자동 처리되고, 담당자는 결과 검토와 판단 중심의 업무에 집중할 수 있게 되었다.

# data[].attributes.headline
이럴 때 필요한 것이 파이썬입니다

# data[].attributes.subject
이럴 때 필요한 것이 파이썬입니다

# data[].attributes.body
파이썬은 이런 문제들을 해결할 수 있습니다.

대량 데이터 처리: numpy 기반 연산으로 수십만 ~ 수백만 건도 빠르게 처리

복합 조건 적용: pandas로 여러 조건을 간단한 코드로 적용 가능

반복 작업 자동화: 매일/매주 반복되는 데이터 작업을 한 번의 실행으로 완료

오류 관리와 유연성: try-except 구조로 예외를 관리하고, 데이터 변화에도 유연하게 대응

파이썬은 처음에는 조금 낯설 수 있지만,
한 번 익히면 금융 데이터 실무에서 '시간을 벌어주는 가장 강력한 무기'가 됩니다.

연체 가능성이 있는 고객을 선별해 리스트를 추출하는 작업은 리스크 관리 업무에서 매우 중요합니다.
그런데 그 선별 조건은 생각보다 단순하지 않습니다. 예를 들어,

최근 3개월 내 2회 이상 연체

평균 거래금액이 50만 원 이하

VIP 등급이 아닌 고객

이런 조건들을 엑셀에서 구현하려면, 여러 시트를 참조하거나 피벗테이블, 보조열, 수식 조합이 필요해지고 작업 과정이 길고 실수가 발생하기 쉽습니다.

하지만 파이썬에서는 pandas를 활용해 한 줄 조건 필터링으로 이 모든 조건을 적용할 수 있습니다.
여기에 해당 고객 리스트를 자동 저장하거나 특정 담당자에게 메일을 보내는 프로세스까지 연동하면,
반복 수작업이 아닌 리스크 관리 자동화 흐름을 구축할 수 있습니다.

# data[].attributes.body
.describe()는 빠르게 전체 수치를 파악할 수 있지만, 필요한 지표만 뽑아 agg()로 커스터마이징하면 더 실용적입니다.

groupby(['등급', '지점명']) 같이 다중 집계는 피벗보다 유연하고, 조건 결합도 자유롭습니다.

연체율 계산은 단순 count 대비 비율이므로 직접 계산이 필요하며, 정렬과 함께 시각화하면 인사이트가 극대화됩니다.

seaborn.barplot()은 평균값 중심 시각화에 적합하며, lineplot()은 추이 분석에 강력합니다.

matplotlib에서 ax.set_title(), fig.savefig() 등으로 커스터마이징과 저장이 가능합니다.

ExcelWriter를 사용하면 한 파일에 ‘요약’ 시트와 ‘그래프’ 시트를 분리해 넣을 수 있습니다.

# data[].attributes.body
for key, group in df.groupby('지점명')
→ 엑셀의 ‘필터 후 복사-붙여넣기’ 작업을 코드 한 줄로 대체할 수 있는 구조입니다.

filename = f"{지점명}_{등급}.xlsx"
→ 파일명 동적 생성은 반복 저장 시 가장 중요한 자동화 포인트입니다.

with pd.ExcelWriter("파일명.xlsx") as writer:
→ 여러 시트를 저장할 때 사용하며, 실무 리포트에 자주 활용됩니다.

os.makedirs(path, exist_ok=True)
→ 저장 경로가 없는 경우에도 자동으로 폴더를 생성해줘 반복 보고에 적합합니다.

shutil.make_archive()
→ 저장된 여러 파일을 압축(zip)할 수 있으며, 이메일 첨부나 공유에도 편리합니다.

# data[].attributes.body
“매일 신규 고객 리스트가 엑셀로 저장돼요. 그걸 불러와서 거래이력과 비교하려면 항상 복사하고 붙여넣어야 해요.”

파이썬에서는 엑셀 불러오기도 자동화할 수 있고, 병합까지 한 번에 처리할 수 있습니다.

# data[].attributes.headline
도구는 많지만, 상황은 다르다

# data[].attributes.subject
도구는 많지만, 상황은 다르다

# data[].attributes.body
엑셀, 파워쿼리, BI 툴, SQL, 파이썬. 어떤 도구를 써야 할까요? 정답은 없습니다. 중요한 건 “상황에 따라 가장 효율적인 도구를 고르는 것”입니다.

# data[].attributes.headline
파이썬은 선택이 아니라 경쟁력을 결정하는 핵심 도구입니다

# data[].attributes.subject
파이썬은 선택이 아니라 경쟁력을 결정하는 핵심 도구입니다

# data[].attributes.body
파이썬을 쓸 수 있다고 해서 모든 업무를 파이썬으로 바꿔야 하는 것은 아닙니다.
엑셀로 빠르게 해결할 수 있는 일은 엑셀을 쓰면 됩니다.
BI 툴이 편한 작업은 BI를 쓰면 됩니다.

하지만,
복잡하고 반복적인 대량 데이터 작업을 더 빠르고 정확하게 처리할 수 있는 사람과
그렇지 않은 사람 사이에는
업무 속도, 품질, 분석 깊이에서 점점 더 큰 차이가 벌어지고 있습니다.

파이썬은 금융 데이터 실무자의 업무 경쟁력을 결정하는 핵심 도구가 되어가고 있습니다.

# data[].attributes.body
아래와 같은 실무에 그대로 적용됩니다.

지점별 실적 리포트 자동화: 평균 거래금액, 연체율, 신규 고객 수를 요약 → 매달 반복 저장

등급별 마케팅 대상 추출: 연체율이 높은 고객 등급 우선 검토 및 캠페인 제외 설정

시각화 기반 경영회의 자료: 연체율 추이, 고액 거래자 분포 등을 그래프로 제시

# data[].attributes.body
아래 사례와 같은 실무에 그대로 적용됩니다.

금융사 고객관리팀은 “VIP 중 연체 이력 없는 고객을 매주 등급별, 지점별로 나눠 리포트”로 저장합니다.

지점 매출 분석팀은 “매일 지점별 매출 데이터를 자동 저장하고, 날짜별 폴더에 정리한 뒤 압축 후 업로드”합니다.

CRM 운영팀은 고객 등급별 대상자 파일을 분리해 캠페인 대상 목록으로 활용합니다.

# data[].attributes.body
이번 실습의 목표는 다음과 같습니다.
실습을 진행하면서 아래 항목들을 하나씩 달성해봅니다.

엑셀 파일을 불러오고 상위 데이터를 확인한다

두 개 이상의 엑셀 파일을 병합한다

조건 필터링(거래금액, VIP 등급 제외)을 코드로 처리한다

등급별로 자동 저장하는 흐름을 구현한다

# data[].attributes.body
“VIP 등급이 아니면서 최근 3개월 내 연체가 2회 이상인 고객을 추출하고, 등급별로 나눠 엑셀 파일을 따로 저장한 뒤, 부서별로 메일을 보내야 해요.”

엑셀/파워쿼리로는

조건 수식 복잡

시트 분할 수동

메일 전송은 별도 작업

파이썬을 활용하면

조건 필터링, 등급별 분할 저장, 메일 전송 초안 생성까지 자동화가 가능하며,

담당자는 파일 내용을 확인 후 최종 전송만 진행하면 됩니다.

반복 작업은 자동화하고, 민감한 판단은 사람이 직접 확인하는 구조로 효율을 높일 수 있습니다.

# data[].attributes.headline
현업 데이터 처리의 현실

# data[].attributes.subject
현업 데이터 처리의 현실

# data[].attributes.body
금융 실무에서 다루는 데이터는 생각보다 훨씬 복잡하고 빠르게 늘어납니다. 상품 가입 정보, 거래 내역, 고객 등급, 연체 이력 등은 매일, 수천 건씩 들어옵니다.

이 데이터들을 엑셀이나 파워쿼리로 처리할 때 다음과 같은 상황을 많이 겪게 됩니다:

수작업 병합 중 열 순서가 달라서 오류 발생

필터링 조건이 많아질수록 수식이 길어지고 가독성 저하

10만 건 이상의 데이터 처리 시 프로그램 다운

# data[].attributes.body
.describe(), groupby().agg()는 통계 요약의 기본이며 반복 보고서 작성의 핵심 도구이다

seaborn과 matplotlib을 함께 사용하면 요약 + 시각화 + 저장까지 자동화할 수 있다

연체율, 고액 고객 비율 등 파생 지표 계산은 엑셀보다 파이썬에서 명확하고 재사용 가능하다

ExcelWriter로 통계 테이블과 그래프를 한 파일로 저장하면 보고서 활용성이 높아진다

# data[].attributes.body
groupby + to_excel만으로 복잡한 분할 저장 로직을 자동화할 수 있다

복합 조건 필터링과 저장을 결합하면 수작업 리포트 작성 시간을 대폭 절감할 수 있다

f-string, 날짜 삽입, 폴더 구조 지정 등은 실무 보고서 자동화에 매우 유용하다

ExcelWriter를 활용하면 파일 하나에 다중 시트를 구성할 수 있다

os, shutil 조합으로 폴더 생성부터 압축까지 일괄 처리 가능하다

# data[].attributes.body
고객가입.xlsx 파일을 불러오고 상위 5개 행을 출력해보세요.

두 개의 엑셀 파일(가입정보, 상품정보)을 병합해 상품명을 붙여보세요.

“전날 기준 거래실적 파일을 불러와서,

누적 거래금액이 50만 원 이상이면서

VIP 등급이 아닌 고객을 추출한 뒤

등급별로 파일을 나누어 저장하는 작업을 자동화해보세요.”

# data[].attributes.headline
파이썬이 필요한 이유는 명확하다

# data[].attributes.subject
파이썬이 필요한 이유는 명확하다

# data[].attributes.body
도구는 많지만, 자동화와 유연성 면에서 파이썬은 독보적입니다.

수만 건 이상, 복잡한 조건, 반복 작업이 있는 상황에서는 코딩이 더 단순하고 명확한 해결책이 될 수 있습니다.

# data[].attributes.body
“매일 전국 지점에서 보내오는 가입 데이터를 병합하고, 조건에 따라 요약해서 팀별 보고서를 만들어야 합니다. 파일이 30개를 넘으면 엑셀이 느려지고, 파워쿼리도 자주 멈춥니다.”

이럴 때 파이썬을 사용하면,

폴더 내 모든 엑셀을 자동으로 불러와 병합하고,

조건 필터링과 요약을 한 줄씩 코드로 실행하고,

필요한 리포트를 자동으로 저장하고 메일로 보낼 수 있습니다.

# data[].attributes.body
이 장은 특히 다음과 같은 반복 리포트 업무에서 매우 효과적입니다:

# data[].attributes.body
이 장은 특히 다음과 같은 실무 반복 작업을 자동화하는 데 효과적입니다:

# data[].attributes.headline
앞으로 우리가 자동화하게 될 작업 예시

# data[].attributes.subject
앞으로 우리가 자동화하게 될 작업 예시

# data[].attributes.body
아직은 파이썬 설치 전이므로 실습을 진행하지 않지만,
이후 pandas와 glob를 배우면 아래와 같은 업무를 자동화할 수 있습니다.

지점별로 저장된 5개의 엑셀 파일을 자동으로 불러와 병합하여 하나의 DataFrame으로 만들기

거래금액이 50만 원 이상인 고객만 필터링하여 새로운 엑셀 파일로 저장하기

이러한 작업은 모두 몇 줄의 코드로 자동화할 수 있으며, 앞으로 실습을 통해 직접 경험하게 됩니다.

# data[].attributes.body
https://drive.google.com/drive/folders/1EDcZrpNz7GyPqWgrEz1vNyf8bmmTZt9g?usp=drive_link

https://bit.ly/43GGvSW

# data[].attributes.attachment_link.description
Get access to files anywhere through secure cloud storage and file backup for your photos, videos, files and more with Google Drive.

# data[].attributes.body
백승훈 (白昇勳, SeungHoon Baik)

data_analytics@naver.com

https://blog.naver.com/data_analytics

주요 경력

제일제당(現 CJ) ㈜

SK Telecom㈜

SK Communications㈜

현대캐피탈㈜

베어풋 컴퍼니 주식회사

학력

서울대학교 경영학과 학사

KAIST 대학원 경영과학과 석사 (마케팅 Modeling 전공)

강의 경력 (2008년~ )

추계예대, 경희대, 경북대, 경상대, 연세대 , 동국대, 부산대, 한양대, 고려대 등 대학 강의

한국 표준 협회(KSA), 생산성본부, aT농수산식품유통교육원, 중부기술교육원, 흑자경영연구소 등 공개 강의

삼성전자, KT, SK, CJ대한통운, 이마트, 골프존, KIA, NH, 후성그룹, 수산그룹, 롯데정보통신, 산업은행, 유한양행, MG새마을금고, 동원, 신세계, 롯데마트, 삼성SDS, 일진전기, 우리은행, 현대증권, 롯데삼강, 제주JDC, 서브원 등 기업체 사내 강의

여행업 협회 회원 대상 강의, 청년 취업 아카데미 강의, 산업방송 강의, BIO21센터 강의, 대구경북과학기술원(DGIST) 강의, 충남 테크노파크, 대전 테크노파크, 제주 테크노파크 강의, 제주 바이오센터 강의, 제주하이테크산업진흥원 강의, 대구 상공회의소 강의, 능력개발교육원 교강사 대상 강의, 한국관광공사 강의

강의 분야

마케팅전략, 신시장/신제품 개발전략

마케팅통계분석, 수요예측 데이터 분석, 고객데이터 분석, 구매 데이터 분석, SCM 물류 효율화, 합리적 기획을 위한 데이터 분석, R활용 데이터 분석 실무

저서

판단의 기술(2025)

# data[].attributes.attachment_link.title
데이터 분석, 시각화 연구 : 네이버 블로그

# data[].attributes.attachment_link.description
데이터 분석 강의, 전략 컨설팅 HP: 010-3777-9284 e-mail: data_analytics@naver.com 강의 분야: Power Query 활용 데이터 수집 및 전처리, 엑셀 및 Power BI 활용 데이터 요약 및 시각화 그리고 교차 분석 , R 또는 Python 활용 데이터 분석, 통계 이론 및 실습, 고객 데이터 분석, 구매 데이터 분석, 물류 데이터 분석, 수요예측, 최적화 활용 시뮬레이션

# data[].attributes.body
왜 자동화가 필요한지,

왜 파이썬이 중요한지,

그리고 기존 도구(엑셀/파워쿼리/BI)와의 관계를
현실적으로, 논리적으로 설명하고 공감대 형성하는 것이 핵심입니다.

# data[].attributes.body
💡 왜 groupby를 사용할까?
→ 등급별로 데이터를 나누는 가장 직관적이면서 반복이 쉬운 방법이기 때문입니다.

💡 왜 f-string으로 파일명을 저장할까?
→ 자동화된 파일명을 만들기 위해 조건 값을 동적으로 삽입할 수 있습니다.

💡 조건이 2개 이상일 때는 & 와 () 괄호로 논리를 명확히 구분해야 오류를 방지할 수 있습니다.

# data[].attributes.body
“이 방식은 실제 한 카드사에서 매일 VIP 미방문 고객을 추출해 등급별 리포트를 자동 생성하는 데 쓰이고 있습니다.”

# data[].attributes.body
Anaconda 설치만으로 파이썬 분석 환경을 쉽게 시작할 수 있다.

Jupyter Notebook은 엑셀처럼 셀 단위로 코드를 실행할 수 있는 친숙한 환경이다.

pandas를 이용하면 엑셀 파일을 불러오고, 특정 열을 추출하고, 데이터를 가공할 수 있다.

이 과정은 금융 데이터 자동화를 위한 첫 단계다.

# data[].attributes.body
# 📁 Step 1: 고객 정보 불러오기
import pandas as pd
customer = pd.read_excel("customer.xlsx")

# 고객 정보 상위 5개 출력
print("✅ 고객 정보 상위 5개:")
print(customer.head())

# 📁 Step 2: 가입정보 + 상품정보 병합 (상품명 붙이기)
subscription = pd.read_excel("subscription.xlsx")
product = pd.read_excel("product.xlsx")

# 상품코드를 기준으로 병합
subscription_merged = pd.merge(subscription, product, on='product_code', how='left')
print("\n✅ 가입정보 + 상품명 병합 결과 상위 5개:")
print(subscription_merged.head())

# 📁 Step 3: 거래 데이터 불러오기 (파일명 변경 반영)
transaction = pd.read_excel("transaction.xlsx")

# 📊 Step 4: 누적 거래금액 계산
trans_summary = transaction.groupby('cust_id', as_index=False)['amount'].sum()
trans_summary.rename(columns={'amount': '누적거래금액'}, inplace=True)

# 📎 Step 5: 고객 정보와 병합
customer_full = pd.merge(customer, trans_summary, on='cust_id', how='left')
customer_full['누적거래금액'] = customer_full['누적거래금액'].fillna(0)

# 💡 Step 6: 실습용 고객 등급 생성 (상위 20% = VIP, 다음 30% = GOLD, 나머지 = NORMAL)
customer_full = customer_full.sort_values('누적거래금액', ascending=False).reset_index(drop=True)
total = len(customer_full)
vip_cut = int(total * 0.2)
gold_cut = int(total * 0.5)

def assign_grade(idx):
    if idx < vip_cut:
        return "VIP"
    elif idx < gold_cut:
        return "GOLD"
    else:
        return "NORMAL"
customer_full['grade'] = customer_full.index.map(assign_grade)

# ✅ 등급 분포 확인
print("\n🎯 고객 등급 분포:")
print(customer_full['grade'].value_counts())

# 🧪 Step 7: 조건 필터링 – 누적거래금액 50만 이상 & VIP 제외

# 💡 조건이 2개 이상일 때는 & 와 괄호로 논리를 명확히 구분해야 오류를 방지할 수 있습니다
filtered = customer_full[
    (customer_full['누적거래금액'] >= 500000) & (customer_full['grade'] != 'VIP')
]

# 🗂️ Step 8: 등급별 파일로 나누어 저장
# 💡 groupby를 사용하는 이유: 등급별로 데이터를 나누는 가장 직관적이면서 반복이 쉬운 방법이기 때문입니다
# 💡 f-string으로 파일명을 저장하는 이유: 자동화된 파일명을 만들기 위해 조건 값을 동적으로 삽입할 수 있습니다
for grade, group in filtered.groupby('grade'):
    filename = f"고객리스트_{grade}.xlsx"
    group.to_excel(filename, index=False)
    print(f"📁 저장 완료: {filename}")

# ✅ Step 9: 최종 결과 미리보기
print("\n🔍 추출된 고객 데이터 예시:")
print(filtered[['cust_id', 'name', 'grade', '누적거래금액']].head())

# 📂 저장된 GOLD, NORMAL 등급 파일 열기
gold_df = pd.read_excel("고객리스트_GOLD.xlsx")
normal_df = pd.read_excel("고객리스트_NORMAL.xlsx")

# 🔍 GOLD 등급 고객 상위 5개
print("\n🟨 GOLD 등급 고객 상위 5개:")
print(gold_df[['cust_id', 'name', 'grade', '누적거래금액']].head())

# 🔍 NORMAL 등급 고객 상위 5개
print("\n🟩 NORMAL 등급 고객 상위 5개:")
print(normal_df[['cust_id', 'name', 'grade', '누적거래금액']].head())

# data[].attributes.headline
✅ 핵심 함수 설명 정리

# data[].attributes.subject
✅ 핵심 함수 설명 정리

# data[].attributes.body
how='left' ⇒ 왼쪽 테이블을 기준으로 정보 보존

왼쪽 테이블의 행은 무조건 포함

오른쪽 테이블은 조건(on)이 일치할 때만 붙음

how='right' ⇒ 오른쪽 테이블을 기준으로 정보 보존

오른쪽 테이블의 행은 무조건 포함

왼쪽 테이블은 조건(on)이 일치할 때만 붙음

how='inner' ⇒  교집합 (공통 키가 있을 때만 병합)

양쪽 모두에 존재하는 키만 포함

how='outer' ⇒ 일치하지 않으면 NaN으로 채움 (합집합)

양쪽 테이블의 키 전체를 포함

# data[].attributes.body
import pandas as pd

# 예제 데이터: 고객 마스터 테이블 (왼쪽)

df_left = pd.DataFrame({

    '고객ID': [1, 2, 3],

    '이름': ['김철수', '이영희', '박민수']

})

# 예제 데이터: 거래 요약 테이블 (오른쪽)

df_right = pd.DataFrame({

    '고객ID': [2, 3, 4],

    '거래금액': [100000, 250000, 300000]

})

# LEFT JOIN: 왼쪽(df_left)을 기준으로 병합

left_join = pd.merge(df_left, df_right, on='고객ID', how='left')

print("📌 [LEFT] 왼쪽 기준 병합 결과:")

print(left_join)

print("-" * 40)

# RIGHT JOIN: 오른쪽(df_right)을 기준으로 병합
right_join = pd.merge(df_left, df_right, on='고객ID', how='right')
print("📌 [RIGHT] 오른쪽 기준 병합 결과:")
print(right_join)
print("-" * 40)

# INNER JOIN: 양쪽 모두 있는 고객만 남김
inner_join = pd.merge(df_left, df_right, on='고객ID', how='inner')
print("📌 [INNER] 교집합 병합 결과:")
print(inner_join)
print("-" * 40)

# OUTER JOIN: 모든 고객 포함 (합집합)
outer_join = pd.merge(df_left, df_right, on='고객ID', how='outer')
print("📌 [OUTER] 합집합 병합 결과:")
print(outer_join)

# data[].attributes.body
import pandas as pd

# 1. 파일 경로 설정

sales_file = "지점별_상품별_일별매출.csv"

rate_file = "환율.csv"

# 2. 데이터 불러오기

sales_df = pd.read_csv(sales_file, encoding="cp949")

rate_df = pd.read_csv(rate_file, encoding="utf-8")

# 3. 환율값만 추출 (첫 행 사용, 'no' 컬럼 제거)

rate_values = rate_df.drop(columns=["no"]).iloc[0].astype(float)

# 4. 국가별 환산매출 열 생성 (벡터 연산으로 한 번에)

환산매출_df = pd.DataFrame()
for col in rate_values.index:
    환산매출_df[f"국가{col}_환산매출"] = (sales_df["원화금액"] * rate_values[col]).round(2)

# 5. 원본 데이터와 합치기
result = pd.concat([sales_df, 환산매출_df], axis=1)

# 6. 결과 저장
result.to_excel("국가별_환산매출_결과.xlsx", index=False)

# 7. 상위 5행 확인 (옵션)
print(result.head())

# data[].attributes.headline
엑셀과 numpy 간의 속도 격차가 확실히 드러나는 순간

# data[].attributes.subject
엑셀과 numpy 간의 속도 격차가 확실히 드러나는 순간

# data[].attributes.body
1. 계산 열이 여러 개일 때 (예: 10만 행 × 100열 이상)

엑셀: 수식이 복잡하거나 다중 열에 퍼지면 계산 시간 급증, 셀 변경 시 전체 재계산 발생

numpy: 배열 전체 연산은 1~2초 안에 완료

2. 수식이 복잡할 때 (IF, INDEX, VLOOKUP 등)

엑셀: 복잡한 수식이 많을수록 처리 지연, 중간 셀 수정 시 재계산 부담

numpy: 벡터 조건식이나 np.where()는 훨씬 빠름

3. 대용량 저장/불러오기 반복

엑셀은 파일 크기가 10MB만 넘어도 느려지며, 읽기/쓰기 성능도 한계가 있음

pandas + numpy는 .csv, .parquet, .npy 등 빠른 포맷을 통해 효율적 처리 가능

4. 정규화, 지수변환, 회귀선 계산 등 과학적 연산

엑셀: 고급 수학/통계 수식은 구현이 번거롭고 느림

numpy: 내장 함수로 빠르고 정확하게 가능

💬 정리 포인트

“단일 열 연산은 엑셀도 충분히 빠릅니다.
하지만 열이 많아지고 수식이 복잡해질수록 numpy의 속도와 안정성이 두드러집니다.”

# data[].attributes.body
import pandas as pd

import matplotlib.pyplot as plt

import math

# 한글 폰트 설정

plt.rcParams['font.family'] = 'Malgun Gothic'

plt.rcParams['axes.unicode_minus'] = False

# 데이터 로드

df = pd.read_csv('지점별_상품별_일별매출.csv', encoding='cp949')

df.columns = df.columns.str.strip()

# 상품 리스트

products = df['상품'].unique()

n = len(products)

# 서브플롯 행, 열 자동 결정

cols = 10

rows = math.ceil(n / cols)
# 화면 사이즈 조정

fig, axs = plt.subplots(rows, cols, figsize=(4*cols, 3*rows))
axs = axs.flatten()

# 히스토그램 Binning 기준 (예: 0~5만원 단위)
bins = range(0, int(df['원화금액'].max()) + 50000, 50000)

# 상품별 히스토그램 그리기
for i, product in enumerate(products):
    sub = df[df['상품'] == product]

    axs[i].hist(sub['원화금액'], bins=bins, edgecolor='black', color='skyblue')

    axs[i].set_title(product, fontsize=9)

    axs[i].set_xticks([])

    axs[i].set_yticks([])

# 남은 빈 서브플롯 숨기기
for j in range(i+1, len(axs)):

    axs[j].axis('off')

plt.tight_layout()

plt.suptitle('상품별 일별 매출액 분포 (히스토그램)', fontsize=16, y=1.02)

plt.show()

# data[].attributes.headline
워킹 디렉토리에 있는 "지점실적데이터" 폴더에 들어 있는 엑셀 파일들을 동일한 이름의 CSV 파일로 일괄 변환한 후, 새로운 폴더 /지점실적데이터1 아래에 저장

# data[].attributes.subject
워킹 디렉토리에 있는 "지점실적데이터" 폴더에 들어 있는 엑셀 파일들을 동일한 이름의 CSV 파일로 일괄 변환한 후, 새로운 폴더 /지점실적데이터1 아래에 저장

# data[].attributes.body
import pandas as pd

import glob

import os

# 원본 폴더와 저장 폴더 경로 설정

source_folder = './지점실적데이터'

target_folder = './지점실적데이터1'

# 저장 폴더가 없으면 새로 생성

os.makedirs(target_folder, exist_ok=True)

# 엑셀 파일 목록 가져오기

excel_files = glob.glob(os.path.join(source_folder, '*.xlsx'))

# 변환 및 저장

for file in excel_files:

    df = pd.read_excel(file)
# 파일 이름만 추출하고, csv 확장자로 지정
    base_name = os.path.splitext(os.path.basename(file))[0]
    csv_path = os.path.join(target_folder, base_name + '.csv')

    # CSV 저장 (한글 깨짐 방지용 encoding 설정)
    df.to_csv(csv_path, index=False, encoding='utf-8-sig')
    print(f'✅ 저장 완료: {csv_path}')

# data[].attributes.body
import pandas as pd

import glob

import os

# 원본 폴더와 저장 폴더 경로 설정

source_folder = './지점실적데이터'

target_folder = './지점실적데이터1'

# 저장 폴더가 없으면 새로 생성

os.makedirs(target_folder, exist_ok=True)

# 엑셀 파일 목록 가져오기

excel_files = glob.glob(os.path.join(source_folder, '*.xlsx'))

# 변환 및 저장

for file in excel_files:

    df = pd.read_excel(file)

    # 파일 이름만 추출하고, csv 확장자로 지정

    base_name = os.path.splitext(os.path.basename(file))[0]

    csv_path = os.path.join(target_folder, base_name + '.csv')
    # CSV 저장 (한글 깨짐 방지용 encoding 설정)

    df.to_csv(csv_path, index=False, encoding='utf-8-sig')

    print(f'✅ 저장 완료: {csv_path}')

# data[].attributes.body
import pandas as pd

import glob

import os

# 원본 폴더 경로

folder_path = './지점실적데이터'

# 모든 엑셀 파일 경로 가져오기

excel_files = glob.glob(os.path.join(folder_path, '*.xlsx'))

for file in excel_files:

    df = pd.read_excel(file)

    # '지점명' 컬럼이 있으면 제거

    if '지점명' in df.columns:

        df = df.drop(columns=['지점명'])

        # 원래 파일에 덮어쓰기

        df.to_excel(file, index=False)

        print(f'✅ 지점명 컬럼 제거 완료: {file}')

    else:

        print(f'ℹ️ 이미 지점명 컬럼 없음: {file}')

# data[].attributes.headline
라이브러리를 외워야 하나요?

# data[].attributes.subject
라이브러리를 외워야 하나요?

# data[].attributes.body
아닙니다.
처음에는 어떤 라이브러리가 무엇을 할 때 유용한지만 감만 잡으면 충분합니다.
실제로 실습을 하면서 자주 쓰는 기능은 자연스럽게 익히게 됩니다.

오히려 중요한 건
“이런 작업이 가능하다”는 걸 알고,
필요할 때 찾아서 쓰는 습관을 들이는 것입니다.

# data[].attributes.headline
파이썬 핵심 라이브러리 미리보기

# data[].attributes.subject
파이썬 핵심 라이브러리 미리보기

# data[].attributes.body
pandas, numpy, matplotlib, seaborn, os, glob 등 개요

각 라이브러리별 주요 기능과 실제 적용 사례 요약

# data[].attributes.body
“거래금액의 분포를 시각화해서 팀장에게 보고해야 하는데, 매번 피벗 차트를 만들기 너무 번거로워요.”

파이썬에서는 seaborn으로 단 2줄의 코드로 히스토그램, 박스플롯 등을 그릴 수 있습니다.

# data[].attributes.body
이번 실습의 목표는 다음과 같습니다.
실습을 진행하면서 아래 항목들을 하나씩 달성해보세요.

pandas로 고객 데이터를 필터링하고, 집계한 값을 저장한다

os, glob을 활용해 파일 경로를 자동으로 탐색하고 처리한다

datetime을 이용해 최근 가입자를 추출한다

matplotlib, seaborn으로 가입자 분포 및 추이 시각화를 수행한다

numpy로 평균·표준편차를 계산하고 이상치를 제거해본다

openpyxl로 엑셀 시트와 셀을 직접 조작해본다

re를 사용해 텍스트 패턴을 탐지하거나 수정한다

# data[].attributes.body
1. pandas

고객 데이터 엑셀 파일을 불러오고, ‘등급’이 ‘VIP’인 고객만 추출해보세요.

등급별 평균 거래금액을 계산하고, 그 결과를 새로운 엑셀 파일로 저장해보세요.

2. os

현재 작업 디렉토리 경로를 확인하고, 폴더 안의 파일 목록을 출력해보세요.

지정 폴더에서 ‘2025’라는 이름이 포함된 엑셀 파일만 분류해 다른 폴더로 복사해보세요.

3. glob

특정 폴더 내의 모든 .xlsx 파일 경로를 불러와 리스트로 출력해보세요.

여러 개의 엑셀 파일을 불러와 하나의 DataFrame으로 병합한 뒤, VIP 고객을 제외하고 저장해보세요.

4. datetime

가입일자를 날짜형으로 변환하고, 오늘 날짜와 비교해보세요.

가입일 기준으로 최근 3개월 이내 고객만 추출해 파일로 저장해보세요.

5. matplotlib

일별 가입자 수를 선형 그래프로 시각화해보세요.

가입자 수와 평균 거래금액을 이중축 그래프로 시각화하고, 이미지로 저장해보세요.

6. seaborn

거래금액 분포를 히스토그램과 박스플롯으로 시각화해보세요.

고객 등급별 거래금액 분포를 바이올린 플롯으로 시각화하고, 상관관계를 heatmap으로 표현해보세요.

7. numpy

거래금액 리스트에서 평균과 표준편차를 구해보세요.

이상치(평균 ± 2표준편차 초과)를 제거하고 거래금액을 0~1 범위로 정규화해보세요.

8. openpyxl

새로운 엑셀 파일을 만들고, 특정 셀에 텍스트를 입력한 후 저장해보세요.

고객 등급별로 시트를 나눠 데이터를 기록하고, 서식을 적용해 저장해보세요.

9. re

고객 ID 중 'C-'로 시작하는 코드만 추출해보세요.

고객 데이터에서 휴대전화 번호 형식이 잘못된 항목을 정규표현식으로 찾아 수정해보세요.

# data[].attributes.body
pandas: 엑셀처럼 보이지만, 조건 필터링과 그룹 요약이 훨씬 빠르고 유연합니다.

os/glob: 폴더 내 자동 반복 처리의 핵심입니다. 매일 바뀌는 파일을 사람이 찾지 않아도 됩니다.

datetime: "최근 3개월", "오늘 기준" 조건은 실무에서 매우 빈번합니다.

matplotlib/seaborn: 선형 그래프, 분포, 관계 시각화 등 다양한 형태를 자동으로 구현할 수 있습니다.

numpy: 복잡한 계산 없이 평균, 표준편차, 정규화 등 통계 처리 가능

openpyxl: 기존 Excel 파일 편집을 파이썬 코드로 처리할 수 있어, 보고서 자동 생성에 유리합니다.

re: 정규표현식은 텍스트 전처리, 특히 ID/전화번호/패턴 확인에 매우 강력한 도구입니다.

# data[].attributes.body
각각의 라이브러리는 실제 실무에서 아래와 같이 응용됩니다.

pandas + glob 조합은 “매일 폴더에 쌓이는 파일 자동 통합”에 활용됩니다.

datetime은 "3개월 이내 고객 추출"처럼 특정 기간 조건 필터링 업무에 자주 쓰입니다.

seaborn은 “거래금액 이상치 시각화”, “등급별 분포 비교” 등을 보고서에 넣을 때 유용합니다.

openpyxl은 “자동 리포트 작성 후 시트 서식까지 자동 반영”하는 데 유용합니다.

# data[].attributes.body
파이썬은 다양한 라이브러리를 통해 엑셀이나 BI 툴로는 어려운 자동화 및 반복 작업을 효율적으로 처리할 수 있다.

pandas, numpy, matplotlib, seaborn은 데이터 분석의 기본기 역할을 한다.

os, glob, datetime, re는 반복 작업 자동화 및 텍스트·날짜 처리에 강력하다.

openpyxl은 보고서 자동 생성과 엑셀 서식 적용 등 실무 리포트 자동화에 핵심적이다.

# data[].attributes.headline
엑셀 열 구조를 확인하고 정제해야 분석이 시작됩니다

# data[].attributes.subject
엑셀 열 구조를 확인하고 정제해야 분석이 시작됩니다

# data[].attributes.body
엑셀에서 데이터를 불러온 뒤에는
열 이름, 값의 형태, 누락된 값 등을 먼저 점검해야 합니다.

df.columns      # 열 이름 확인

df.info()       # 데이터 구조와 결측치 확인

df.describe()   # 숫자형 요약 통계

✅ 실무에서는 데이터가 정제되지 않은 상태로 오는 경우가 많기 때문에 이 기본 점검이 매우 중요합니다.

# data[].attributes.headline
불필요한 열 제거 및 열 이름 정리

# data[].attributes.subject
불필요한 열 제거 및 열 이름 정리

# data[].attributes.body
df = df.drop(columns=['열1', '열2'])  # 열 제거

df.columns = df.columns.str.strip()            # 열 이름 공백 제거

df = df.rename(columns={'이름 ': '이름'})        # 열 이름 수정

💡 열 이름에 공백이나 특수문자가 있으면 오류가 자주 발생하므로
반드시 미리 정리해주는 습관을 들이는 것이 좋습니다.

# data[].attributes.headline
조건 필터링: 엑셀 필터 대신 코드를 써보자

# data[].attributes.subject
조건 필터링: 엑셀 필터 대신 코드를 써보자

# data[].attributes.body
df_filtered = df[(df['연체횟수'] >= 2) & (df['거래금액'] < 500000)]

&는 AND 조건, |는 OR 조건

괄호로 각 조건을 감싸야 오류가 없습니다

예: 연체 2회 이상 & 거래금액 50만 원 이하

✅ 엑셀의 필터 기능보다 빠르고 유연합니다. 특히 다중 조건이 많을수록 파이썬의 장점이 두드러집니다.

# data[].attributes.headline
결측치 처리: NA 값 다루는 법

# data[].attributes.subject
결측치 처리: NA 값 다루는 법

# data[].attributes.body
df.isna().sum()           # 결측치 개수 확인

df = df.dropna()          # 결측치 행 제거

df = df.fillna(0)         # 결측치 0으로 채우기

📌 실무에서는 일부 열만 결측치 제거하거나 특정 열만 채우는 방식이 일반적입니다.

# data[].attributes.body
가장 일반적인 정제 흐름을 요약하면 다음과 같습니다.

# 1. 데이터 불러오기

df = pd.read_excel('가입데이터.xlsx')

# 2. 구조 점검

df.info()

# 3. 열 이름 정리

df.columns = df.columns.str.strip()

# 4. 필요 없는 열 제거

df = df.drop(columns=['열1', '열2'])

# 5. 조건 필터링

df_filtered = df[df['거래금액'] > 1000000]

# 6. 결측치 처리

df_filtered = df_filtered.dropna()

📌 이 흐름은 모든 분석 자동화의 기본 골격이 됩니다.

# data[].attributes.headline
실전 데이터 불러오기와 기본 정제 실습

# data[].attributes.subject
실전 데이터 불러오기와 기본 정제 실습

# data[].attributes.body
열 구조 점검: .columns, .info(), .describe()

불필요한 열 제거, 공백 제거, 이름 변경

기본 조건 필터링 및 결측치 처리 (dropna, fillna)

# data[].attributes.body
이번 실습의 목표는 다음과 같습니다.
실습을 진행하면서 아래 항목들을 하나씩 달성해보세요.

엑셀 파일을 불러와 구조(df.columns, df.info)를 점검한다

열 이름을 정리하고, 필요한 열만 추려 DataFrame을 구성한다

결측값과 이상치를 처리한다 (0 대체, 평균±2표준편차 이상 제거 등)

중복 및 오류 데이터를 찾아 제거하거나 수정한다

복합 논리 조건 필터링을 수행하고 결과를 저장한다

새로운 파생 열을 만들어 고객 특성을 분류한다

등급별로 파일을 나눠 저장하는 자동화를 구현한다

# data[].attributes.body
“고객 등급이 VIP가 아닌데 거래금액도 낮고, 연체도 있는 고객만 골라내서 리스트를 만들고 있어요. 수식이 너무 길어지고, 필터가 자주 꼬여요.”

파이썬에서는 논리 조건을 조합해 한 줄로 조건을 설정할 수 있고, 필터링 결과를 바로 저장할 수 있습니다.

# data[].attributes.body
1. 엑셀 파일 불러오기

고객가입데이터.xlsx 파일을 불러오고, 상위 5개 행을 출력해보세요.

열 이름 목록과 데이터 형식을 확인해보세요 (df.columns, df.info() 활용).

2. 열 이름 및 열 구성 정리

열 이름의 공백을 제거하고, 모두 소문자로 통일해보세요.

분석에 필요한 열만 추려서 새로운 DataFrame으로 구성해보세요.

‘고객등급’ 같은 열 이름을 {"고객등급": "grade"}와 같은 매핑으로 바꿔보세요.

3. 결측값 및 이상치 처리

결측값이 포함된 행의 수를 확인해보고, 제거해보세요.

거래금액이 없는 경우 0으로 채우고, 고객등급이 비어있는 경우 ‘일반’으로 바꿔보세요.

거래금액에서 평균 ± 2표준편차를 벗어난 값을 이상치로 간주하고 제거해보세요.

4. 중복 및 오류 데이터 제거

전체 행 중 중복 데이터를 제거해보세요.

고객 ID + 가입일 기준으로 중복된 경우만 제거해보세요.

vmfha‘C-’로 시작하지 않는 고객 ID는 오류 데이터일 수 있습니다. 해당 항목을 확인한 후, 수정하거나 제거해보세요.

5. 조건 필터링

거래금액이 50만 원 미만이고 연체횟수가 2회 이상이며 VIP가 아닌 고객을 추출해보세요.

가입일 기준으로 최근 3개월 이내 고객만 따로 필터링해보세요.

등급이 ‘A’ 또는 ‘B’인 고객만 추출해 파일로 저장해보세요.

6. 정렬 및 파생 열 생성

거래금액을 기준으로 내림차순 정렬해보세요.

등급(‘A’ → ‘B’ → ‘C’) 우선 + 거래금액 내림차순으로 정렬해보세요.

거래금액을 기준으로 ‘고액 고객’(100만 원 이상), ‘일반 고객’ 구분 열을 새로 만들어보세요.

가입일로부터 경과된 개월 수를 계산하는 ‘가입연차’ 열을 만들어보세요.

7. 저장

정제한 결과를 새로운 엑셀 파일로 저장해보세요.

고객 등급별로 파일을 나눠 저장해보세요 (예: grade_A.xlsx, grade_B.xlsx 등).

# data[].attributes.body
df.columns.str.strip().str.lower()
→ 공백이나 대소문자 차이로 인한 오류를 예방합니다.

df.dropna()와 fillna()
→ 결측치 처리는 분석 전 가장 중요한 단계이며, 자동화의 기본입니다.

mean ± 2*std 방식의 이상치 제거
→ 통계 기반 필터링은 엑셀보다 일관된 기준으로 처리 가능합니다.

df[(조건1) & (조건2) & (조건3)]
→ 복합 조건 필터링에서는 & 연산자와 각 조건을 () 괄호로 감싸는 것이 필요합니다.

‘C'] = np.where(...)
→ 조건에 따라 라벨을 지정하는 분류 열을 쉽게 생성할 수 있습니다.

datetime 활용
→ 가입일과 오늘 날짜 차이를 계산해 "가입연차"를 계산할 수 있습니다.

# data[].attributes.body
아래와 같은 상황에서 이 실습 흐름이 그대로 사용됩니다:

카드사 고객관리팀에서는 “VIP가 아닌 연체 고객 중 거래금액이 낮은 대상”만 분류하여 캠페인 제외 대상을 추출합니다.

증권사 리서치팀은 “최근 3개월 내 가입한 고액 거래자”만 따로 분석 대상으로 삼기 위해 필터링 자동화를 적용합니다.

고객분석 보고서 자동화 팀은 정제된 데이터를 등급별 리포트로 분할 저장하여 일일 보고에 사용합니다.

# data[].attributes.body
엑셀 데이터를 자동화하려면 pandas를 활용한 구조 파악부터 시작해야 한다

df.head(), df.info(), df.describe()는 데이터 상태를 파악하는 기본 명령어이다

열 이름 정리 → 불필요 열 제거 → 결측치/이상치 처리는 모든 분석의 기본 루틴이다

복합 조건 필터링은 엑셀보다 파이썬이 명확하고 안정적이다

정제 결과를 저장하거나 분할 저장하는 작업은 실무 자동화의 핵심이다

# data[].attributes.headline
프롬프트를 정확히 작성하는 것만으로도 자동화가 가능합니다

# data[].attributes.subject
프롬프트를 정확히 작성하는 것만으로도 자동화가 가능합니다

# data[].attributes.body
ChatGPT에게 다음과 같이 말해보세요:

“엑셀로 된 고객 리스트에서 연체 2회 이상인 고객만 뽑아서 등급별로 엑셀 파일을 나눠 저장하는 파이썬 코드를 짜줘.”

ChatGPT는 파이썬 코드 전체를 생성해줍니다. 여기서 중요한 건:

프롬프트(명령문)를 명확히 전달하는 것

생성된 코드를 이해하고, 수정·확장할 수 있는 감각을 기르는 것

# data[].attributes.body
import pandas as pd

df = pd.read_excel('고객리스트.xlsx')

filtered = df[df['연체횟수'] >= 2]

for 등급, group in filtered.groupby('고객등급'):

    filename = f'{등급}_연체고객.xlsx'

    group.to_excel(filename, index=False)

이 코드는 ChatGPT가 한 번에 생성해줄 수 있습니다.

# data[].attributes.body
“연체 2회 이상 조건을, 최근 6개월 기준으로 바꿔줘.”

→ ChatGPT는 날짜 필터를 추가한 코드로 자동 수정해줍니다.

# data[].attributes.body
“엑셀 파일이 없을 때 오류 나지 않도록 예외처리도 넣어줘.”

→ try/except 구문을 넣어서 안정적인 실행 코드를 생성해줍니다.

# data[].attributes.body
이번 실습의 목표는 다음과 같습니다.
실습을 진행하면서 아래 항목들을 하나씩 달성해보세요.

실무 상황을 자연어로 설명하고 GPT에게 코드를 생성해보자

조건 변경 요청에 따라 코드가 어떻게 바뀌는지 확인해보자

파일명, 저장 방식 변경 등 자동화 요청을 다양하게 해보자

예외처리를 요청하고, GPT가 작성한 코드를 이해해보자

전체 업무 흐름을 통합적으로 설명하고 자동화 코드를 받아보자