{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# pandas 100제 실습 노트북\n",
    "\n",
    "위퀴즈 북스 「pandas 100제: 판다스 연습문제와 풀이」의 실습용 노트북입니다.\n",
    "\n",
    "1. 장마다 **준비 코드** 셀을 먼저 실행하세요 (Shift+Enter).\n",
    "2. 문제 아래 빈 셀에 코드를 써서 실행합니다. 같은 장의 문제는 번호 순서대로 이어집니다.\n",
    "3. 막히면 책의 힌트와 정답을 펼쳐 보세요: https://wequiz.org/books/pandas-100-exercises/\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 보너스 V01–V10 pandas 시각화: 선·막대·히스토그램·산점도\n",
    "\n",
    "해설·힌트·정답: https://wequiz.org/books/pandas-100-exercises/pandas-100-bonus-visualization/"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**준비 코드** — 첫 줄은 그래프 한글 글꼴 패키지 설치입니다. 이 셀을 먼저 실행하세요."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install -q koreanize-matplotlib setuptools   # 처음 한 번 설치 (터미널에서는 ! 없이)\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import koreanize_matplotlib            # 그래프 한글 깨짐 방지\n",
    "\n",
    "df = pd.DataFrame({\n",
    "    'name': ['김민준', '이서연', '박지호', '최수아', '정민서', '강도윤', '윤하은', '임시우'],\n",
    "    'class': ['A', 'B', 'A', 'C', 'B', 'C', 'A', 'B'],\n",
    "    'kor': [85, 92, 58, 77, 66, 90, 73, 81],\n",
    "    'eng': [78, 88, 64, 95, 59, 70, 82, 91],\n",
    "    'math': [92, 75, 49, 88, 71, 66, 95, 60],\n",
    "})\n",
    "df['total'] = df['kor'] + df['eng'] + df['math']\n",
    "\n",
    "sales = pd.DataFrame({\n",
    "    'date': ['2026-03-01', '2026-03-01', '2026-03-02', '2026-03-02',\n",
    "             '2026-03-03', '2026-03-03', '2026-03-04', '2026-03-04'],\n",
    "    'store': ['강남', '홍대', '강남', '홍대', '강남', '홍대', '강남', '홍대'],\n",
    "    'menu': ['아메리카노', '라떼', '라떼', '아메리카노', '아메리카노', '케이크', '케이크', '라떼'],\n",
    "    'qty': [30, 12, 18, 25, 28, 7, 9, 15],\n",
    "    'price': [4500, 5000, 5000, 4500, 4500, 6500, 6500, 5000],\n",
    "})\n",
    "sales['revenue'] = sales['qty'] * sales['price']\n",
    "\n",
    "daily = pd.DataFrame({\n",
    "    'date': pd.date_range('2026-03-01', periods=7, freq='D'),\n",
    "    'visitors': [120, 135, 128, 160, 155, 210, 198],\n",
    "})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V01. 선 그래프\n",
    "\n",
    "`daily`의 날짜별 방문자 수를 점이 찍힌 선 그래프로 그리세요. 제목은 `일별 방문자 수`로 합니다."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V02. 막대그래프\n",
    "\n",
    "매장별 매출 합계를 막대그래프로 그리세요. 가로축 글자는 눕히지 말고 똑바로 세우세요."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V03. 정렬한 가로 막대\n",
    "\n",
    "메뉴별 총매출을 가로 막대그래프로 그리되, 매출이 가장 큰 메뉴가 맨 위에 오게 하세요."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V04. 히스토그램\n",
    "\n",
    "수학 점수의 분포를 히스토그램으로 그리세요. 40점부터 100점까지 10점 간격(6개 구간)으로 나눕니다."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V05. 상자그림\n",
    "\n",
    "국어·영어·수학 점수 분포를 과목별 상자그림 하나에 나란히 그리세요."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V06. 산점도\n",
    "\n",
    "국어 점수(가로)와 수학 점수(세로)의 관계를 산점도로 그리고, 제목에 두 과목의 상관계수를 소수 둘째 자리까지 넣으세요."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V07. 묶은 막대\n",
    "\n",
    "메뉴(가로축)별로 매장의 판매 수량을 나란히 비교하는 묶은 막대그래프를 그리세요."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V08. 누적 막대\n",
    "\n",
    "날짜별 매출을 매장별로 쌓은 누적 막대그래프를 그리세요."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V09. 실제 값과 이동 평균\n",
    "\n",
    "방문자 수와 3일 이동 평균(096번)을 한 그래프에 함께 그리세요. 이동 평균은 점선으로 구분합니다."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### V10. 여러 그래프를 한 장에 저장\n",
    "\n",
    "왼쪽에는 매장별 매출 막대(V02), 오른쪽에는 방문자 선 그래프(V01)를 나란히 놓은 그림을 만들고 `report.png` 파일로 저장하세요."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 여기에 코드를 쓰고 Shift+Enter\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
