모든 예제는
matplotlib의 한글 폰트와 마이너스 기호 설정을 포함합니다.
그래프 코드는 pandas, matplotlib, numpy만 사용하여 실행 오류와 경고를 최소화했습니다.
선그래프
1. 하루 시간대별 기온 변화
핵심 개념: 시간에 따른 변화, 평균선, 주석
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"시간": ["06시", "09시", "12시", "15시", "18시", "21시"],
"기온": [12, 15, 21, 24, 20, 16]
})
plt.figure(figsize=(7.8, 4.8))
plt.plot(df["시간"], df["기온"],
marker="o", linewidth=3, markersize=8,
label="기온 변화")
plt.axhline(df["기온"].mean(), linestyle="--", label="평균 기온")
plt.annotate("최고 기온", xy=("15시", 24), xytext=("12시", 25),
arrowprops=dict(arrowstyle="->"))
plt.title("하루 시간대별 기온 변화")
plt.xlabel("시간")
plt.ylabel("기온(℃)")
plt.grid(True, linestyle=":", alpha=0.5)
plt.legend()
plt.tight_layout()
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
이 그래프에서 평균선과 주석을 함께 사용한 이유로 가장 적절한 것은?
정답: 1번
상세 풀이: 평균선은 전체 기준을 제공하고, 주석은 15시의 최고 기온을 강조합니다.
상세 풀이: 평균선은 전체 기준을 제공하고, 주석은 15시의 최고 기온을 강조합니다.
막대그래프
2. 과목별 평균 점수 비교
핵심 개념: 항목 비교, 기준선, 값 라벨
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"과목": ["국어", "수학", "영어", "과학", "정보"],
"평균점수": [84, 92, 88, 95, 90]
})
plt.figure(figsize=(7.8, 4.8))
bars = plt.bar(df["과목"], df["평균점수"],
edgecolor="black", hatch="//", label="평균점수")
plt.axhline(90, linestyle="--", label="90점 기준선")
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2, height + 1,
f"{height:g}", ha="center")
plt.title("과목별 평균 점수 비교")
plt.xlabel("과목")
plt.ylabel("평균점수")
plt.ylim(0, 105)
plt.grid(True, axis="y", linestyle=":", alpha=0.5)
plt.legend()
plt.tight_layout()
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
90점 기준선을 기준으로 바르게 해석한 것은?
정답: 1번
상세 풀이: 수학 92, 과학 95, 정보 90은 기준선 90점 이상입니다.
상세 풀이: 수학 92, 과학 95, 정보 90은 기준선 90점 이상입니다.
원그래프
3. 스마트폰 사용 목적 비율
핵심 개념: 전체 중 비율, autopct
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"사용목적": ["공부", "게임", "영상 시청", "메신저", "기타"],
"비율": [25, 20, 30, 15, 10]
})
plt.figure(figsize=(6.2, 6.2))
plt.pie(df["비율"], labels=df["사용목적"],
autopct="%1.1f%%", startangle=90,
wedgeprops={"edgecolor": "white"})
plt.title("스마트폰 사용 목적 비율")
plt.tight_layout()
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
이 원그래프에 대한 설명으로 가장 적절한 것은?
정답: 1번
상세 풀이: 비율 값 중 영상 시청 30이 가장 크므로 가장 큰 조각으로 표현됩니다.
상세 풀이: 비율 값 중 영상 시청 30이 가장 크므로 가장 큰 조각으로 표현됩니다.
히스토그램
4. 학생들의 수면 시간 분포
핵심 개념: 분포, bins, 평균선
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"수면시간": [5.5, 6, 6, 6.5, 7, 7, 7, 7.5, 8, 8, 8.5,
6.5, 7.2, 6.8, 7.1, 5.8, 6.3, 7.7, 8.1, 6.9]
})
plt.figure(figsize=(7.8, 4.8))
plt.hist(df["수면시간"], bins=6, edgecolor="black")
plt.axvline(df["수면시간"].mean(), linestyle="--", label="평균 수면시간")
plt.title("학생들의 수면 시간 분포")
plt.xlabel("수면 시간")
plt.ylabel("학생 수")
plt.grid(True, axis="y", linestyle=":", alpha=0.5)
plt.legend()
plt.tight_layout()
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
히스토그램에서 bins=6의 의미로 가장 적절한 것은?
정답: 1번
상세 풀이: 히스토그램은 수치 데이터를 구간으로 나누고 각 구간에 속한 데이터 개수를 보여줍니다.
상세 풀이: 히스토그램은 수치 데이터를 구간으로 나누고 각 구간에 속한 데이터 개수를 보여줍니다.
산점도
5. 공부 시간과 시험 점수의 관계
핵심 개념: 두 변수 관계, 추세선
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"공부시간": [1, 2, 2.5, 3, 4, 4.5, 5, 6, 6.5, 7, 8],
"시험점수": [50, 55, 58, 65, 70, 72, 78, 83, 85, 90, 94]
})
plt.figure(figsize=(7.8, 4.8))
plt.scatter(df["공부시간"], df["시험점수"], s=80, alpha=0.8)
z = np.polyfit(df["공부시간"], df["시험점수"], 1)
p = np.poly1d(z)
plt.plot(df["공부시간"], p(df["공부시간"]), linestyle="--", label="추세선")
plt.title("공부 시간과 시험 점수의 관계")
plt.xlabel("공부 시간")
plt.ylabel("시험 점수")
plt.grid(True, linestyle=":", alpha=0.5)
plt.legend()
plt.tight_layout()
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
이 산점도와 추세선에 대한 해석으로 가장 적절한 것은?
정답: 1번
상세 풀이: 점들이 오른쪽 위로 증가하고 추세선도 상승하므로 양의 관계를 해석할 수 있습니다.
상세 풀이: 점들이 오른쪽 위로 증가하고 추세선도 상승하므로 양의 관계를 해석할 수 있습니다.
가로 막대그래프
6. 동아리별 회원 수 비교
핵심 개념: barh, 정렬 후 비교, 값 라벨
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"동아리": ["코딩", "과학", "수학", "로봇", "천문"],
"회원수": [28, 24, 18, 22, 15]
})
df = df.sort_values("회원수")
plt.figure(figsize=(7.8, 4.8))
bars = plt.barh(df["동아리"], df["회원수"], edgecolor="black")
for bar in bars:
width = bar.get_width()
plt.text(width + 0.5, bar.get_y() + bar.get_height()/2,
f"{int(width)}명", va="center")
plt.title("동아리별 회원 수 비교")
plt.xlabel("회원 수")
plt.ylabel("동아리")
plt.grid(True, axis="x", linestyle=":", alpha=0.5)
plt.tight_layout()
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
가로 막대그래프에서 회원수 라벨을 get_width()로 표시한 이유는?
정답: 1번
상세 풀이: barh에서 데이터 값은 막대의 가로 길이로 표현되므로 get_width()로 값을 가져옵니다.
상세 풀이: barh에서 데이터 값은 막대의 가로 길이로 표현되므로 get_width()로 값을 가져옵니다.
누적 막대그래프
7. 요일별 공부 시간 구성
핵심 개념: bottom, 구성 비교
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"요일": ["월", "화", "수", "목", "금"],
"수업공부": [2.0, 2.5, 2.0, 3.0, 2.5],
"자율공부": [1.0, 1.5, 2.0, 1.0, 2.5]
})
plt.figure(figsize=(7.8, 4.8))
plt.bar(df["요일"], df["수업공부"], label="수업공부", edgecolor="black")
plt.bar(df["요일"], df["자율공부"],
bottom=df["수업공부"], label="자율공부", edgecolor="black")
plt.title("요일별 공부 시간 구성")
plt.xlabel("요일")
plt.ylabel("공부 시간")
plt.grid(True, axis="y", linestyle=":", alpha=0.5)
plt.legend()
plt.tight_layout()
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
누적 막대그래프에서 bottom=df['수업공부']의 역할은?
정답: 1번
상세 풀이: bottom 옵션은 두 번째 막대가 어디에서 시작할지 정합니다. 그래서 자율공부가 수업공부 위에 쌓입니다.
상세 풀이: bottom 옵션은 두 번째 막대가 어디에서 시작할지 정합니다. 그래서 자율공부가 수업공부 위에 쌓입니다.
상자그림
8. 반별 시험 점수 분포
핵심 개념: 중앙값, 사분위수, 분포 비교
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"1반": [78, 82, 85, 90, 92, 88, 76, 95],
"2반": [70, 75, 80, 82, 84, 86, 88, 90],
"3반": [60, 68, 72, 85, 87, 91, 94, 98]
})
plt.figure(figsize=(7.8, 4.8))
plt.boxplot([df["1반"], df["2반"], df["3반"]],
labels=["1반", "2반", "3반"], patch_artist=True)
plt.title("반별 시험 점수 분포")
plt.xlabel("반")
plt.ylabel("점수")
plt.grid(True, axis="y", linestyle=":", alpha=0.5)
plt.tight_layout()
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
상자그림을 사용하는 가장 적절한 이유는?
정답: 1번
상세 풀이: 상자그림은 중앙값, 사분위 범위, 데이터의 퍼짐을 한 번에 비교할 수 있습니다.
상세 풀이: 상자그림은 중앙값, 사분위 범위, 데이터의 퍼짐을 한 번에 비교할 수 있습니다.
히트맵
9. 학생별 과목 점수 히트맵
핵심 개념: 행렬형 데이터, colorbar, 값 표시
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"국어": [88, 92, 75, 95, 81],
"수학": [91, 85, 80, 90, 88],
"영어": [84, 96, 78, 93, 86],
"과학": [90, 89, 82, 97, 85]
}, index=["민준", "서연", "지후", "하은", "도윤"])
plt.figure(figsize=(7.8, 4.8))
plt.imshow(df.values, aspect="auto")
plt.xticks(range(len(df.columns)), df.columns)
plt.yticks(range(len(df.index)), df.index)
plt.colorbar(label="점수")
for i in range(df.shape[0]):
for j in range(df.shape[1]):
plt.text(j, i, df.iloc[i, j], ha="center", va="center")
plt.title("학생별 과목 점수 히트맵")
plt.xlabel("과목")
plt.ylabel("학생")
plt.tight_layout()
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
히트맵에서 colorbar의 역할로 가장 적절한 것은?
정답: 1번
상세 풀이: 히트맵은 값의 크기를 색으로 표현하므로 colorbar는 색과 수치의 대응 관계를 설명합니다.
상세 풀이: 히트맵은 값의 크기를 색으로 표현하므로 colorbar는 색과 수치의 대응 관계를 설명합니다.
인포그래픽
10. 하루 생활 데이터 인포그래픽
핵심 개념: 핵심 수치 요약, axis off, text
🐍 에러와 경고 없이 실행되는 파이썬 코드
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 한글 깨짐 방지 + 마이너스 기호 깨짐 방지
plt.rcParams["font.family"] = "NanumGothic"
plt.rcParams["axes.unicode_minus"] = False
# 그래프가 잘리지 않도록 설정
plt.rcParams["figure.dpi"] = 130
df = pd.DataFrame({
"항목": ["공부 시간", "수면 시간", "스마트폰 사용", "걸음 수"],
"값": [5.5, 7.0, 2.5, 8420],
"단위": ["시간", "시간", "시간", "보"]
})
fig = plt.figure(figsize=(8.5, 5.2))
ax = fig.add_axes([0, 0, 1, 1])
ax.axis("off")
plt.text(0.5, 0.9, "하루 생활 데이터 인포그래픽",
ha="center", fontsize=20, weight="bold")
positions = [(0.2, 0.62), (0.5, 0.62), (0.8, 0.62), (0.5, 0.28)]
for (x, y), row in zip(positions, df.itertuples()):
plt.text(x, y, row.항목, ha="center", fontsize=14)
plt.text(x, y - 0.12, f"{row.값:g}{row.단위}",
ha="center", fontsize=24, weight="bold")
plt.show()
🖼️ 코드가 출력한 실제 그래프
🎯 코드 관련 심화형 5지선다형 문제
이 코드에서 ax.axis('off')를 사용하는 이유로 가장 적절한 것은?
정답: 1번
상세 풀이: 인포그래픽은 축보다 핵심 수치 전달이 중요하므로 axis('off')로 좌표축을 숨깁니다.
상세 풀이: 인포그래픽은 축보다 핵심 수치 전달이 중요하므로 axis('off')로 좌표축을 숨깁니다.