5 파이썬 데이터 분석 입문 2탄 ✨ 합계·평균·그래프까지 한 번에!
파이썬 데이터 분석 입문 2탄 ✨ 합계·평균·그래프까지 한 번에!
1탄에서 CSV 파일 불러오기까지 해봤다면, 이번에는 그 데이터를 가지고 합계·평균을 계산하고, 한글이 잘 보이는 그래프까지 완성해 볼게요.
윈도우 + 엑셀 + 파이썬(IDLE) 기준으로, 왕초보도 따라 할 수 있도록 단계별로 정리했습니다.
1. 1탄 복습: CSV 불러오기 한 번만 다시 확인하기
먼저, 1탄에서 만든 scores.csv 파일을 다시 떠올려 볼게요.
폴더 구조는 다음과 같습니다.
C:\python_practice ├─ scores.csv └─ read_csv_test.py (또는 이번 2탄용 파일)
scores.csv 안에는 이런 데이터가 들어 있어요.
이름,국어,영어,수학 철수,90,85,80 영희,100,95,90 민수,70,88,92
파이썬에서 이 파일을 불러오는 코드는 아래와 같았습니다.
import pandas as pd
df = pd.read_csv("C:/python_practice/scores.csv", encoding="cp949")
print(df)
실행 결과:
이름 국어 영어 수학 0 철수 90 85 80 1 영희 100 95 90 2 민수 70 88 92
df를 기반으로 총점·평균 계산을 하고, 학생별 총점 그래프 + 과목별 평균 그래프를 그려볼 거예요.
2. 합계·평균·len()으로 데이터 가공하기
2-1. 학생별 총점 구하기
엑셀에서는 =B2+C2+D2처럼 쓰던 총점을, 파이썬에서는 이렇게 구할 수 있어요.
# 학생별 총점 구하기
df["총점"] = df["국어"] + df["영어"] + df["수학"]
print(df)
실행 결과:
이름 국어 영어 수학 총점 0 철수 90 85 80 255 1 영희 100 95 90 285 2 민수 70 88 92 250
2-2. 평균 점수 구하기
총점을 3으로 나누면 평균이 됩니다.
# 평균 점수 구하기
df["평균"] = df["총점"] / 3
print(df)
실행 결과:
이름 국어 영어 수학 총점 평균 0 철수 90 85 80 255 85.0 1 영희 100 95 90 285 95.0 2 민수 70 88 92 250 83.3
2-3. len()으로 학생 수 세기
len() 함수는 데이터 개수를 세는 함수입니다.
count = len(df)
print("학생 수:", count)
결과:
학생 수: 3
3. Matplotlib 설치 + 한글 폰트 설정
그래프를 그리기 위해서는 matplotlib라는 라이브러리가 필요합니다.
3-1. cmd에서 설치하기
- 윈도우 검색창에 cmd 입력 → 명령 프롬프트 실행
- 아래 명령 입력 후 엔터
pip install matplotlib
3-2. 한글 깨짐 방지 설정
그래프 안에 한글(이름, 과목, 제목)이 □ 로 깨져 보이지 않도록, 맨 위에 폰트 설정 코드를 넣어 줍니다.
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
# ✅ 한글 폰트 설정 (윈도우 기본: 맑은 고딕)
font_path = "C:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
# ✅ 마이너스 기호 깨짐 방지
plt.rcParams['axes.unicode_minus'] = False
4. 학생별 총점 막대그래프 (한글 폰트 반영)
이제 학생별 총점 비교 그래프를 만들어 볼게요. 아래 코드는 “불러오기 + 계산 + 그래프”를 한 번에 실행하는 예시입니다.
파이썬에서 아래 새파일을 열기한후 아래 코드를 붙여넣고 저장해줍니다.
(파일명 예시 : graph_test.py) 아래 참고
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
# ✅ 한글 폰트 설정
font_path = "C:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
plt.rcParams['axes.unicode_minus'] = False
# 1) CSV 불러오기
df = pd.read_csv("C:/python_practice/scores.csv", encoding="cp949")
# 2) 총점·평균 계산
df["총점"] = df["국어"] + df["영어"] + df["수학"]
df["평균"] = df["총점"] / 3
# 3) 학생별 총점 막대그래프
plt.figure(figsize=(6,4))
bars = plt.bar(df["이름"], df["총점"], color="#38bdf8")
plt.title("학생별 총점 비교", fontsize=14, pad=10)
plt.xlabel("이름", fontsize=12)
plt.ylabel("총점", fontsize=12)
plt.ylim(0, 110)
plt.grid(axis="y", linestyle="--", alpha=0.3)
# 막대 위에 점수 표시
for bar in bars:
yval = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2, yval + 1,
f"{yval:.0f}", ha="center", va="bottom", fontsize=10)
plt.show()
F5 (또는 RUN)실행하면 “철수·영희·민수” 이름이 한글로 잘 나오고, 각 막대 위에 총점 숫자도 표시된 막대그래프가 나타납니다 📊
5. 과목별 평균 그래프 (국어·영어·수학 비교)
이번에는 과목별 평균을 구해서, 어떤 과목이 상대적으로 높은지/낮은지 한눈에 볼 수 있도록 그래프를 그려볼게요.
5-1. 과목별 평균 계산
kor_avg = df["국어"].mean()
eng_avg = df["영어"].mean()
math_avg = df["수학"].mean()
print("국어 평균:", kor_avg)
print("영어 평균:", eng_avg)
print("수학 평균:", math_avg)
5-2. 과목별 평균 막대그래프
subjects = ["국어", "영어", "수학"]
averages = [kor_avg, eng_avg, math_avg]
plt.figure(figsize=(6,4))
bars2 = plt.bar(subjects, averages,
color=["#4f46e5", "#22c55e", "#f97316"],
width=0.6)
plt.title("과목별 평균 점수", fontsize=14, pad=10)
plt.xlabel("과목", fontsize=12)
plt.ylabel("평균 점수", fontsize=12)
plt.ylim(0, 110)
plt.grid(axis="y", linestyle="--", alpha=0.3)
# 막대 위에 평균 점수 표시
for bar in bars2:
yval = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2, yval + 1,
f"{yval:.1f}", ha="center", va="bottom", fontsize=10)
plt.show()
이렇게 하면 “국어 / 영어 / 수학” 각각의 평균 점수가 막대로 표시되고, 위에 숫자까지 떠서 어떤 과목의 평균이 높은지 직관적으로 보이게 됩니다.
6. 한 번에 실행 가능한 전체 코드 모음
위에서 나눠서 보던 코드를 하나로 정리하면 아래처럼 사용할 수 있어요.
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
# ✅ 한글 폰트 설정
font_path = "C:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
plt.rcParams['axes.unicode_minus'] = False
# 1) CSV 불러오기
df = pd.read_csv("C:/python_practice/scores.csv", encoding="cp949")
# 2) 총점·평균·학생 수 계산
df["총점"] = df["국어"] + df["영어"] + df["수학"]
df["평균"] = df["총점"] / 3
count = len(df)
print("학생 수:", count)
print(df)
# 3) 학생별 총점 그래프
plt.figure(figsize=(6,4))
bars = plt.bar(df["이름"], df["총점"], color="#38bdf8")
plt.title("학생별 총점 비교", fontsize=14, pad=10)
plt.xlabel("이름", fontsize=12)
plt.ylabel("총점", fontsize=12)
plt.ylim(0, 110)
plt.grid(axis="y", linestyle="--", alpha=0.3)
for bar in bars:
yval = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2, yval + 1,
f"{yval:.0f}", ha="center", va="bottom", fontsize=10)
plt.show()
# 4) 과목별 평균 그래프
kor_avg = df["국어"].mean()
eng_avg = df["영어"].mean()
math_avg = df["수학"].mean()
subjects = ["국어", "영어", "수학"]
averages = [kor_avg, eng_avg, math_avg]
plt.figure(figsize=(6,4))
bars2 = plt.bar(subjects, averages,
color=["#4f46e5", "#22c55e", "#f97316"],
width=0.6)
plt.title("과목별 평균 점수", fontsize=14, pad=10)
plt.xlabel("과목", fontsize=12)
plt.ylabel("평균 점수", fontsize=12)
plt.ylim(0, 110)
plt.grid(axis="y", linestyle="--", alpha=0.3)
for bar in bars2:
yval = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2, yval + 1,
f"{yval:.1f}", ha="center", va="bottom", fontsize=10)
plt.show()
7. 다음 단계로 확장해 보면 좋은 아이디어들
- 90점 이상인 학생만 따로 뽑아서 그래프 그리기
- 월별 매출, 요일별 방문자 수 등 실제 가계부·블로그·쇼핑몰 데이터를 CSV로 만들어 분석해 보기
- 날짜별 데이터를 사용해서 선 그래프(
plt.plot()) 연습해 보기
“엑셀로 하던 반복 작업을, 파이썬 그래프까지 포함해서 자동화한다”는 느낌으로 하나씩 경험해 보시면, 파이썬이 훨씬 더 친근하게 느껴질 거예요 😊