{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chapter1. Data Visualization: Where are the WIZnet chatbot users?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\Acorn\\anaconda3\\envs\\DeepLearning\\lib\\site-packages\\openpyxl\\styles\\stylesheet.py:226: UserWarning: Workbook contains no default style, apply openpyxl's default\n",
      "  warn(\"Workbook contains no default style, apply openpyxl's default\")\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0           경기도 성남시 분당구\n",
      "1           경기도 성남시 분당구\n",
      "2                광주시 북구\n",
      "3               Haryana\n",
      "4           경기도 성남시 분당구\n",
      "             ...       \n",
      "1250    Yoqne'am 'Illit\n",
      "1251        경기도 안양시 동안구\n",
      "1252        경기도 안양시 동안구\n",
      "1253                NaN\n",
      "1254                NaN\n",
      "Name: city, Length: 1255, dtype: object\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "# 파일에서 데이터 읽기\n",
    "df = pd.read_excel('ChannelTalk_clientData.xlsx')\n",
    "\n",
    "# 'country' 칼럼의 값이 'KR'인 행에서 'city' 칼럼의 데이터만 조회\n",
    "cities = df['city']\n",
    "\n",
    "\n",
    "# 조회한 데이터 출력\n",
    "print(df['profile.type'])\n",
    "print(df['profile.type'])\n",
    "print(cities)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Convert the location to [latitude, longitude] data using the geopy module."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from geopy.geocoders import Nominatim\n",
    "geo_local = Nominatim(user_agent='South Korea')\n",
    "\n",
    "# 위도, 경도 반환하는 함수\n",
    "def geocoding(address):\n",
    "    try:\n",
    "        geo = geo_local.geocode(address)\n",
    "        x_y = [geo.latitude, geo.longitude]\n",
    "        return x_y\n",
    "\n",
    "    except:\n",
    "        return [0,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "latitude = []\n",
    "longitude = []\n",
    "\n",
    "for i in cities:\n",
    "    latitude.append(geocoding(i)[0])\n",
    "    longitude.append(geocoding(i)[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## User location data using ChannelTalk viewed as a marker"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import folium\n",
    "\n",
    "# 초기 지도 생성 (첫 번째 좌표로 중심 설정)\n",
    "m = folium.Map(location=[latitude[0], longitude[0]], zoom_start=10)\n",
    "\n",
    "# 각 좌표를 지도에 표시\n",
    "for lat, lon in zip(latitude, longitude):\n",
    "    folium.Marker([lat, lon]).add_to(m)\n",
    "\n",
    "m.save('ChannelMarker.html')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## User location data using ChannelTalk viewed as a markercluster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from folium.plugins import MarkerCluster\n",
    "\n",
    "# 초기 지도 생성 (첫 번째 좌표로 중심 설정)\n",
    "m = folium.Map(location=[latitude[0], longitude[0]], zoom_start=10)\n",
    "\n",
    "# MarkerCluster 객체 생성, single_marker_mode=True로 설정\n",
    "marker_cluster = MarkerCluster(single_marker_mode=True).add_to(m)\n",
    "\n",
    "# 각 좌표를 MarkerCluster에 추가\n",
    "for lat, lon in zip(latitude, longitude):\n",
    "    folium.Marker([lat, lon],tooltip=).add_to(marker_cluster)\n",
    "\n",
    "# 지도 표시\n",
    "m.save('ChannelMarkerCluster.html')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'raw' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mc:\\workspace\\ChannelTalk_Structing.ipynb Cell 10\u001b[0m line \u001b[0;36m1\n\u001b[0;32m     <a href='vscode-notebook-cell:/c%3A/workspace/ChannelTalk_Structing.ipynb#X24sZmlsZQ%3D%3D?line=10'>11</a>\u001b[0m m\u001b[39m.\u001b[39madd_child(minimap) \n\u001b[0;32m     <a href='vscode-notebook-cell:/c%3A/workspace/ChannelTalk_Structing.ipynb#X24sZmlsZQ%3D%3D?line=13'>14</a>\u001b[0m \u001b[39m# 대피소 마커 추가하기\u001b[39;00m\n\u001b[1;32m---> <a href='vscode-notebook-cell:/c%3A/workspace/ChannelTalk_Structing.ipynb#X24sZmlsZQ%3D%3D?line=14'>15</a>\u001b[0m \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m \u001b[39mrange\u001b[39m(\u001b[39mlen\u001b[39m(raw)):\n\u001b[0;32m     <a href='vscode-notebook-cell:/c%3A/workspace/ChannelTalk_Structing.ipynb#X24sZmlsZQ%3D%3D?line=15'>16</a>\u001b[0m     lat \u001b[39m=\u001b[39m raw\u001b[39m.\u001b[39mloc[i, \u001b[39m'\u001b[39m\u001b[39m위도\u001b[39m\u001b[39m'\u001b[39m]\n\u001b[0;32m     <a href='vscode-notebook-cell:/c%3A/workspace/ChannelTalk_Structing.ipynb#X24sZmlsZQ%3D%3D?line=16'>17</a>\u001b[0m     long \u001b[39m=\u001b[39m raw\u001b[39m.\u001b[39mloc[i, \u001b[39m'\u001b[39m\u001b[39m경도\u001b[39m\u001b[39m'\u001b[39m]\n",
      "\u001b[1;31mNameError\u001b[0m: name 'raw' is not defined"
     ]
    }
   ],
   "source": [
    "from folium.plugins import MiniMap\n",
    "\n",
    "# 지도 생성하기\n",
    "m = folium.Map(location=[37.5536067,126.9674308],\n",
    "               zoom_start=12)\n",
    "marker_cluster = MarkerCluster().add_to(m)  # 클러스터 추가하기\n",
    "\n",
    "\n",
    "# 미니맵 추가 \n",
    "minimap = MiniMap()\n",
    "m.add_child(minimap) \n",
    "\n",
    "\n",
    "# 대피소 마커 추가하기\n",
    "for i in range(len(raw)):\n",
    "    lat = raw.loc[i, '위도']\n",
    "    long = raw.loc[i, '경도']\n",
    "    name = raw.loc[i,'대피소명칭']\n",
    "    num = raw.loc[i, '최대수용인원']\n",
    "\n",
    "\n",
    "    folium.Marker([lat, long],tooltip= name, popup='%d명'%num).add_to(marker_cluster)    \n",
    "m"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "mapenv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
