{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "co-create-00",
      "metadata": {},
      "source": "# 선택 참고 · CSV 읽기와 기록 선택\n\n현재 9주차 공통 강의는 AI와 데이터 시각화 프로젝트를 진행하는 방법을 다룹니다. 이 노트북은 필요한 학생이 찾아보는 기술 복습 자료이며 필수 실행 순서가 아닙니다.\n\n코드 셀 5개로 CSV 읽기 → 구조 확인 → 열 선택 → 지역 선택을 연결합니다. 기존 11개 셀 참고 실습과 구분합니다.\n\n## 먼저 준비\n\n교안에서 원본 CSV를 내려받아 Colab 파일 패널에 올립니다. 셀 1의 파일명은 실제 업로드한 이름과 맞춥니다. 이름에 (1)이 붙었다면 그 이름을 사용하세요. 입력 파일을 바꾸거나 런타임을 다시 시작하면 셀 1부터 실행합니다.\n\n보관본: 서울시 문화공간 정보 · 서울특별시 문화본부 문화정책과 · 2026-10-21 수집 · 공공누리 제1유형(출처표시).\n\n출처: https://data.seoul.go.kr/dataList/OA-15487/S/1/datasetView.do\n\n자료의 실제 기록과 AI의 설명을 대조합니다. 보관본의 행 수는 현재 시설 운영 현황을 보장하는 숫자가 아닙니다."
    },
    {
      "cell_type": "markdown",
      "id": "co-create-01",
      "metadata": {},
      "source": "## 셀 1 · 파일 위치와 읽을 방법 준비\n\n시연 CSV를 Colab 파일 패널에 업로드합니다. 파일명이 다르면 source_path만 실제 이름으로 바꿉니다. CP949는 이 수업 보관본의 문자 인코딩입니다."
    },
    {
      "cell_type": "code",
      "id": "co-create-02",
      "metadata": {
        "week09_demo_step": 1
      },
      "source": "from pathlib import Path\nimport pandas as pd\nfrom IPython.display import display\n\nsource_path = Path(\"서울시 문화공간 정보.csv\")\nsource_encoding = \"cp949\"\nif not source_path.is_file():\n    raise FileNotFoundError(\"CSV를 업로드하고 source_path를 실제 파일명과 맞춰 주세요.\")\nprint(\"사용할 파일:\", source_path.name)\n",
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "id": "co-create-03",
      "metadata": {},
      "source": "## 셀 2 · CSV를 표로 읽고 일부 보기\n\n첫 5행을 봅니다. head()로 표시한 행 수와 원본 전체의 행 수는 다릅니다. 다음 셀에서 전체 크기를 확인합니다."
    },
    {
      "cell_type": "code",
      "id": "co-create-04",
      "metadata": {
        "week09_demo_step": 2
      },
      "source": "df = pd.read_csv(source_path, encoding=source_encoding)\ndisplay(df.head())\n",
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "id": "co-create-05",
      "metadata": {},
      "source": "## 셀 3 · 전체 크기와 열 이름 확인\n\n보관본은 (1096, 26)입니다. 실제 열 목록에서 문화시설명, 주제분류, 자치구, 주소를 찾습니다. 직접 받은 최신 파일의 행 수는 달라도 됩니다."
    },
    {
      "cell_type": "code",
      "id": "co-create-06",
      "metadata": {
        "week09_demo_step": 3
      },
      "source": "print(\"행, 열:\", df.shape)\nprint(\"열 이름:\", df.columns.tolist())\n",
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "id": "co-create-07",
      "metadata": {},
      "source": "## 셀 4 · 목적에 필요한 네 열 고르기\n\n보관본은 (1096, 4)입니다. 행은 유지하고 열 네 개를 선택했습니다. 원본 CSV에 쓰는 작업은 없습니다."
    },
    {
      "cell_type": "code",
      "id": "co-create-08",
      "metadata": {
        "week09_demo_step": 4
      },
      "source": "keep_columns = [\"문화시설명\", \"주제분류\", \"자치구\", \"주소\"]\nplaces = df[keep_columns].copy()\ndisplay(places.head())\nprint(\"행, 열:\", places.shape)\n",
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "id": "co-create-09",
      "metadata": {},
      "source": "## 셀 5 · 지역 조건으로 기록 선택\n\n보관본에서 마포구는 55행이고 화면에는 앞 5행이 보입니다. 지역을 바꾸면 이 셀을 다시 실행합니다. 입력 파일을 바꿨다면 첫 셀부터 순서대로 실행합니다."
    },
    {
      "cell_type": "code",
      "id": "co-create-10",
      "metadata": {
        "week09_demo_step": 5
      },
      "source": "district = \"마포구\"\nis_district = places[\"자치구\"] == district\nselected = places.loc[is_district].copy()\nprint(f\"전체 {len(places)}행 → {district} {len(selected)}행\")\ndisplay(selected.head())\n",
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "id": "co-create-11",
      "metadata": {},
      "source": "## 실행 뒤 함께 검토하기\n\n- 보관본은 원본 (1096, 26), 열 선택 (1096, 4), 마포구 선택 (55, 4)입니다. head()는 그중 앞 5행을 보여 줍니다.\n- 지역을 바꾸려면 셀 5의 district를 실제 자치구 값으로 바꾸고 실행합니다. 마포와 마포구는 다른 조건입니다.\n- 파일명이 바뀌면 셀 1, 열 이름이 다르면 셀 3의 출력부터 확인합니다.\n- 자료가 알려 주는 사실과 학생의 선택, 추가 자료가 필요한 질문을 구분합니다.\n- 다음에 실행할 작업 하나와 확인할 결과를 정합니다.\n\n개인 데이터는 파일 형식·인코딩·열 구조가 다를 수 있습니다. 이 사례의 조건을 그대로 적용하지 말고 실제 자료부터 확인하세요."
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "name": "python",
      "version": "3"
    },
    "week09_source": {
      "title": "서울시 문화공간 정보",
      "provider": "서울특별시 문화본부 문화정책과",
      "source_url": "https://data.seoul.go.kr/dataList/OA-15487/S/1/datasetView.do",
      "original_system": "서울문화포털",
      "retrieved_on": "2026-10-21",
      "portal_data_updated_on": "2026-10-21",
      "license": "공공누리 제1유형: 출처표시 (상업적 이용 및 변경 가능)",
      "original_filename": "서울시 문화공간 정보.csv",
      "snapshot_filename": "week-09-seoul-culture-original.csv",
      "encoding": "cp949",
      "rows": 1096,
      "columns": 26,
      "sha256": "67fb08d319421114e425a1b66548c4563de6f067519aa353a2d45e71c0dfb201",
      "changes": "없음. Sheet 탭의 CSV 내려받기로 받은 원본 바이트를 보존함.",
      "note": "수집일 기준의 시설 목록이며 모든 시설의 운영 정보가 수집일에 확인되었다는 의미는 아님."
    },
    "week09_use": "선택 기술 참고; 현재 공통 강의의 필수 실행 순서 아님"
  },
  "nbformat": 4,
  "nbformat_minor": 5
}
