본문 바로가기
스터디 열기

상권 데이터 분석

1. 상권 데이터 분석

10장 1절에서 손님이 "언제" 오는지를 읽었다면, 여기서는 가게가 "어디에" 몰려 있는지를 봅니다. 상권 데이터는 표로 보면 상호명과 업종이 줄줄이 나열된 목록일 뿐이지만, 위도와 경도 두 열이 있으면 지도 위의 점으로 바뀝니다. 그 순간 "중문에는 숙박이 많고 연동은 식당과 생활 서비스가 섞여 있다"는 사실이 표를 읽지 않아도 눈에 들어옵니다. 업종 분포와 밀집도를 Gemini로 살펴본 뒤, Claude에게 Leaflet 지도 HTML 파일을 만들게 합니다.

시간: 3:00~4:00, 60분입니다. 앞 25분은 Gemini로 업종과 지역 분포를 탐색하고, 뒤 35분은 Claude로 지도 파일을 만들고 다듬습니다. 지도는 처음 만들 때 시행착오가 있으니 탐색을 길게 끌지 마세요. 완성한 stores_map.html은 11장 5절의 최종 대시보드에 합칠 수 있습니다.

1.1 데이터 살펴보기

실습 데이터 폴더의 jeju_stores.csv를 씁니다. 420개 점포가 한 줄에 하나씩 들어 있고, 열은 여섯 개입니다.

열의미
상호명가게 이름
업종대분류음식, 소매, 숙박, 관광·여가, 생활서비스 다섯 가지
업종중분류한식, 카페, 펜션, 렌터카처럼 조금 더 잘게 나눈 업종
지역연동, 중문, 애월읍처럼 점포가 있는 동네
위도남북 위치를 나타내는 숫자
경도동서 위치를 나타내는 숫자

이 파일은 위니브가 실습용으로 만든 가상 데이터입니다. 상호명과 위치는 모두 지어낸 것이라 실제 가게와 관계가 없습니다. 실제 상가 정보는 아래에서 받을 수 있고, 거기에도 상호명, 업종 분류, 위도, 경도 열이 그대로 있습니다. 열 이름만 맞추면 오늘 만든 지도에 실제 데이터를 넣을 수 있습니다.

실제 상권 데이터는 위니브가 이전 데이터 분석 강의에서 쓴 공공데이터포털의 소상공인시장진흥공단 상가(상권)정보입니다. 2025년 6월 기준 제주 파일을 아래 버튼으로 받을 수 있습니다. 원본 이름은 소상공인시장진흥공단_상가(상권)정보_제주_202506.csv이고, 57,865개 점포가 39개 열에 담겨 있습니다.

제주 상가(상권)정보 2025년 6월

실제 파일은 열 이름이 실습 파일과 다릅니다. 상호명과 경도, 위도는 같고, 업종은 상권업종대분류명과 상권업종중분류명, 지역은 시군구명과 행정동명에 들어 있습니다. 대분류는 음식, 소매, 숙박 등 10종이고 제주시 41,522곳, 서귀포시 16,343곳입니다. 원본은 약 33MB입니다. 업로드 도움말의 대화 파일 한도는 500MB, 프로젝트 파일은 30MB로 다르고, 파일 생성·실행 도움말에는 별도 30MB 안내도 남아 있습니다. 크기만으로 모든 대화 첨부가 실패하거나 전체 분석이 성공한다고 단정하지 않습니다. 이 실습은 분석 범위·행 수·문맥량을 줄이려고 Colab에서 카페와 필요한 열만 골라 Claude로 넘깁니다. 실제 첨부·실행 가능 여부는 사용하는 계정에서 확인합니다.

jeju_stores_sbiz_202506.csv를 불러와서 상권업종소분류명이 '카페'인 행만 남기고,
상호명, 상권업종대분류명, 상권업종소분류명, 행정동명, 위도, 경도 여섯 열만 골라
열 이름을 상호명, 업종대분류, 업종중분류, 지역, 위도, 경도로 바꿔서 jeju_cafe.csv로 저장해줘

9장 2절에서 만든 Colab 노트북의 파일 패널에 jeju_stores.csv를 추가로 올리고, Gemini에게 맥락과 함께 첫 질문을 합니다.

jeju_stores.csv는 제주 상가 목록이야. 상호명, 업종대분류, 업종중분류, 지역, 위도, 경도 열이 있어.
불러와서 전체 행 수, 업종대분류의 종류, 지역의 종류를 알려줘.

420행, 업종대분류 5종, 지역 10곳이 나오면 준비가 끝났습니다.

1.2 업종 분포와 밀집도

먼저 무엇이 많은지 봅니다.

업종대분류별 점포 수를 많은 순으로 막대그래프로 그려줘. 업종중분류 상위 6개도 표로 보여줘.
업종대분류점포 수비중
음식15837.6%
숙박8720.7%
소매7517.9%
관광·여가5613.3%
생활서비스4410.5%

음식이 가장 많고, 그다음이 숙박입니다. 관광지답게 숙박이 소매보다 앞서 있습니다. 중분류에서는 게스트하우스 33곳, 일식 32곳, 펜션 29곳, 양식 29곳, 중식 29곳, 카페 25곳 순입니다.

다음은 어디에 많은지입니다. 데이터를 "○○별"로 묶어 각 묶음의 개수나 합계, 평균을 구하는 것을 그룹별 집계라고 합니다. 데이터 분석에서 가장 자주 쓰는 방법이고, 온라인 과정 4장 4절에서는 이것으로 카테고리별 객단가를 구했습니다. "지역별 점포 수"도, "지역별 업종별 점포 수"도 모두 그룹별 집계입니다.

지역별 점포 수를 많은 순으로 표로 보여줘.
그리고 지역을 행, 업종대분류를 열로 하는 교차표를 만들어서, 각 지역에서 어떤 업종이 많은지 알려줘.
지역점포 수특징
연동71음식 28, 소매 12, 생활서비스 11이 섞인 생활 상권
노형동50연동과 비슷한 도심 상권
이도이동49음식 비중이 약 51%로 가장 높은 먹자골목형
중문47숙박이 15곳으로 관광지형
서귀포 시내43음식 비중 44%
일도이동39구도심
애월읍34음식과 숙박이 함께
조천읍 함덕30숙박과 관광·여가
구좌읍 월정30카페와 숙박
성산읍27관광지형

점포 수만 보면 연동이 가장 많습니다. 그런데 "많다"가 곧 "밀집"은 아닙니다. 연동은 좁은 도심에 71곳이 모여 있고, 애월읍은 넓은 읍 전체에 34곳이 흩어져 있습니다. 표에는 면적이 없으니 이 차이가 보이지 않습니다. 밀집도를 제대로 보려면 지도 위에 점을 찍어야 합니다.

받은 결과에 9장 5절의 검증 3질문을 적용합니다. 숫자가 상식적인가, 내 의도대로 계산했나, 다른 방법으로도 같은가입니다. 업종별 점포 수 다섯 개를 더하면 420이 되어야 하고, 교차표의 행 합계는 지역별 점포 수 표와 같아야 합니다. "비중"이 전체 대비인지 지역 안에서의 비중인지 Gemini에게 물어 확인합니다.

1.3 위도와 경도

위도와 경도는 지구 위의 주소입니다. 위도는 적도에서 얼마나 북쪽인지, 경도는 기준선에서 얼마나 동쪽인지를 나타내는 숫자입니다. 제주도는 위도 33.2에서 33.6 사이, 경도 126.2에서 126.9 사이에 들어갑니다.

위도와 경도의 최솟값과 최댓값을 알려줘. 그리고 위도를 세로축, 경도를 가로축으로 해서 업종대분류별로 색을 다르게 산점도를 그려줘.

산점도는 두 숫자를 가로와 세로 좌표로 삼아 점을 찍는 그래프입니다. 온라인 과정 5장 3절에서는 이것으로 가격과 판매량의 관계를 봤는데, 경도와 위도로 찍으면 이미 제주섬 모양이 어렴풋이 보입니다. 산점도가 여기서는 지도의 밑그림이 되는 셈입니다. 이 두 열만 있으면 어떤 데이터든 지도 위에 올릴 수 있습니다. 실제 공공데이터의 상가 정보, 관광지 목록, 버스 정류장 데이터에도 같은 열이 있습니다.

위도·경도 두 열만 찍어도 상가 420곳이 섬 둘레의 동네 덩어리로 갈라져 보인다.

위 프롬프트의 산점도를 직접 그린 결과입니다. 가로축이 경도(126.31~126.95), 세로축이 위도(33.22~33.58)이고, 점 색은 업종대분류입니다. 연습 데이터라 가게가 열 개 동네에만 있어서 섬 모양이 선으로 이어지지는 않지만, 북쪽 해안(애월·제주 시내·함덕·월정), 동쪽(성산), 남쪽(중문·서귀포)으로 덩어리가 섬 둘레를 따라 놓인 것이 보입니다. 가운데가 텅 빈 것은 한라산 쪽에 가게를 넣지 않았기 때문입니다. 제주 시내 덩어리는 연동·노형동·이도이동·일도이동 네 동네가 붙어 하나로 보입니다. Gemini의 그래프와 비교할 때는 점이 이 범위 밖으로 나간 것이 없는지, 덩어리가 위아래로 뒤집히지 않았는지를 봅니다.

산점도는 배경이 없어 어느 점이 바다이고 어느 점이 시내인지 알 수 없습니다. 그래서 진짜 지도 위에 점을 올려야 하고, 그 일을 하는 도구가 Leaflet입니다.

아래는 상권이 아닌 한국전력 데이터의 위치를 진짜 지도 위에 찍은 예입니다. 점이 수천 개여도 위도와 경도만 있으면 같은 방법으로 올라갑니다. 표로는 숫자 목록일 뿐이던 데이터가 지도 위에서는 해안과 마을을 따라 촘촘하게 늘어서고, 한라산 국립공원 안쪽은 거의 비어 있다는 사실을 한눈에 보여 줍니다. 오늘 만들 상가 지도도 같은 원리입니다.

한국전력 데이터의 위치를 제주 지도에 찍은 예. 점이 해안선과 마을을 따라 몰려 있고 한라산 국립공원 안쪽은 비어 있습니다.

1.4 Leaflet, 파일 하나로 지도 그리기

Leaflet은 웹페이지에 지도를 넣는 오픈소스 라이브러리입니다. 9장 3절에서 본 CDN 방식으로 HTML 파일 안에서 불러오며, 지도 배경은 OpenStreetMap이라는 무료 지도 타일을 씁니다. 그래서 인터넷만 되면 비용 없이 지도가 뜹니다.

Claude에게 지도를 시킬 때 알아 두면 좋은 용어가 몇 개 있습니다. 코드를 쓰기 위해서가 아니라, 무엇을 고쳐 달라고 말할지 알기 위해서입니다.

용어무엇인가이렇게 요청합니다
타일지도 배경 그림배경이 안 뜨면 "타일 주소 확인해줘"
마커위치를 표시하는 핀"각 점포를 마커로 찍어줘"
원형 마커핀 대신 작은 원"원형 마커로, 업종별로 색을 다르게"
팝업클릭하면 뜨는 말풍선"클릭하면 상호와 업종이 보이게"
클러스터가까운 점을 하나로 묶어 숫자로 표시"점이 겹치면 클러스터로 묶어줘"
범례색과 업종의 대응표"오른쪽 아래에 범례를 넣어줘"

1.5 지도 파일 만들기

claude.ai에서 새 대화를 열고 jeju_stores.csv를 첨부한 뒤 요청합니다. 9장 5절의 좋은 질문 공식대로 맥락(이 데이터가 무엇인지), 목표(무엇을 보고 싶은지), 형식(어떤 모양으로 받을지)이 모두 들어 있습니다.

첨부한 jeju_stores.csv는 제주 상가 420곳의 목록이야. 상호명, 업종대분류, 업종중분류, 지역, 위도, 경도 열이 있어. 연습용 가상 데이터야.
어느 지역에 어떤 업종이 몰려 있는지 한눈에 보이는 지도를 만들고 싶어.
Leaflet을 CDN으로 불러오는 HTML 파일 하나로 만들어줘. 데이터 420행은 파일 안에 넣어줘.
- 배경은 OpenStreetMap, 처음 화면은 제주도 전체가 보이게
- 각 점포는 원형 마커로, 업종대분류 5종에 따라 색을 다르게
- 마커를 클릭하면 상호명, 업종, 지역이 팝업으로
- 오른쪽 아래에 업종별 색 범례
- 제목은 "제주 상가 분포"

Claude가 만든 코드를 9장 2절에서 한 방법대로 stores_map.html로 저장하고 브라우저에서 엽니다. 지도가 뜨고 제주섬 위에 색색의 점이 찍히면 성공입니다.

지도가 뜨지 않거나 배경이 회색이면 대부분 인터넷 연결 문제입니다. 타일과 Leaflet 자체를 CDN에서 받아오기 때문입니다. 실습실 와이파이를 확인하고, 그래도 안 되면 Claude에게 "Leaflet CDN 주소가 맞는지 확인하고 최신 안정 버전으로 바꿔줘"라고 요청합니다.

지도가 떴다면 이제 검증입니다. 차트와 달리 지도는 틀려도 그럴듯해 보이기 때문에 더 꼼꼼히 봅니다.

  • 점 개수: 마커가 420개인지 Claude에게 "지도에 찍은 마커 수를 화면 한쪽에 표시해줘"라고 요청해 확인합니다.
  • 점 위치: 바다 위에 점이 찍혀 있거나 섬 밖으로 나가 있으면 위도와 경도 열이 뒤바뀐 것입니다. 이 데이터에서 위도는 33으로, 경도는 126으로 시작해야 합니다.
  • 범례와 색: 범례의 음식 색과 실제 식당 마커의 색이 같은지, 다섯 업종이 모두 범례에 있는지 봅니다.
  • 팝업 내용: 아무 점이나 세 개 클릭해 상호명과 업종이 CSV의 그 행과 일치하는지 확인합니다.

검증이 끝나면 다듬습니다. 처음부터 다시 시키지 말고 이어서 말합니다.

지도 위에 업종대분류를 고르는 드롭다운을 추가해서, 고른 업종의 점만 보이게 해줘. "전체"도 넣어줘.
연동처럼 점이 겹치는 곳은 확대하기 전까지 클러스터로 묶어서 숫자로 보여줘.
원형 마커를 조금 더 크게, 테두리는 흰색으로 해서 겹쳐도 구분이 되게 해줘.

드롭다운으로 숙박만 남겨 보면 중문과 함덕, 애월 해안에 점이 몰리고 연동에는 몇 개 없습니다. 반대로 생활서비스만 남기면 연동과 노형동에 몰리고 관광지에는 거의 없습니다. 표의 교차표가 말하던 것이 지도에서는 한 번의 클릭으로 보입니다.

마지막으로 지도 아래에 한 줄을 씁니다. 10장 1절과 같은 숫자(무엇이 얼마인가), 의미(그래서 무슨 뜻인가), 액션(그래서 무엇을 하자)의 순서입니다. "중문은 47곳 중 15곳이 숙박이고 생활서비스는 3곳뿐이다. 관광객 상권이라 세탁이나 미용 같은 생활 서비스가 비어 있다. 우리가 세탁 서비스를 낸다면 연동보다 중문의 숙박업소 대상이 낫다." 3교시 발표에서 쓸 "내 지도가 하는 말"입니다.

진행자 메모: 클러스터는 Leaflet 본체가 아니라 별도 플러그인이라 CDN이 하나 더 필요합니다. Claude가 알아서 넣지만, 참여자 화면에서 클러스터만 안 되면 이 플러그인 주소가 빠졌거나 틀린 경우입니다. 시간이 부족하면 클러스터는 건너뛰고 드롭다운 필터까지만 완성하게 하세요. CSV 첨부가 안 되는 참여자에게는 Gemini가 만든 표를 복사해 붙이게 하면 됩니다.

두 파일 visitors.html과 stores_map.html이 손에 있으면 2교시는 끝입니다. 3교시에서는 회사 안의 숫자인 매출 데이터로 넘어가, 이 두 파일과 함께 하나의 대시보드로 묶습니다.

1.6 직접 해보기

  1. 드롭다운으로 음식만 남기고 지도를 확대해, 이도이동과 연동 중 어디가 더 빽빽한지 눈으로 비교해 봅니다. 표의 점포 수와 지도의 밀집도가 다르게 느껴지는 이유를 한 문장으로 적어 봅니다.
  2. 업종중분류 기준으로 카페만 지도에 남겨 달라고 Claude에게 요청해 봅니다. 카페가 어느 해안에 몰려 있는지 확인합니다.
  3. 위도와 경도 열을 일부러 바꿔서 지도를 그려 달라고 요청하고, 점이 어디에 찍히는지 봅니다. 실제 업무 데이터에서 이런 실수를 어떻게 잡아낼지 생각해 봅니다.
  4. 우리 회사의 고객 주소나 거래처 목록에 위도와 경도가 없다면, 무엇이 있어야 지도를 그릴 수 있는지, 그 정보를 어디서 얻을 수 있을지 적어 봅니다.

마지막 수정