파이썬 기반의 전국 주요 관광지 데이터 분석 및 시각화 시스템

0 서론

최근 몇 년간 졸업 과제와 방학 발표의 기준이 점점 더 높아지고 있으며, 전통적인 주제는 창의성과 차별점을 갖추기 어렵습니다. 많은 학우들이 학부모님께 자신의 프로젝트가 지도교수님의 기대에 못 미친다고 고민하고 있습니다.

이에 따라 학우 여러분이 최소한의 노력으로 원활하게 졸업 과제를 완수할 수 있도록, 우수한 졸업 프로젝트 사례를 공유합니다. 이번에는 파이썬을 활용한 관광지 데이터 분석 및 시각화 시스템을 소개합니다.

주제 평가 (각 항목 만점 5점 기준)

  • 난이도: 3점
  • 작업량: 4점
  • 혁신성: 4점

자세한 주제 안내 및 프로젝트 공유는 본문 하단에서 확인 가능합니다.

1 연구 배경

사회 발전과 문화 수준 향상에 따라 여행은 대중의 주요 여가 활동이자 경제적 활동으로 자리 잡았습니다. 관광 산업은 다양한 산업군과 연계되어 산업 구조 조정을 이끌며, 사람들의 정서적·문화적 욕구를 충족시킵니다. 특히 최근 팬데믹 이후에도 관광객 수는 꾸준히 증가하는 추세입니다.

이와 함께 발생하는 대규모의 비정형 관광 데이터는 효율적인 분석과 예측을 통해 관광 정책 수립, 인프라 배치, 자원 최적화 등에 중요한 역할을 합니다. 따라서 관광 산업의 성장은 데이터 기반 의사결정과 밀접하게 연결되어 있습니다.

2 데이터 수집 및 전처리

Python의 크롤링 기술을 활용해 특정 지역의 관광지 정보를 수집하였으며, 이후 Pandas 라이브러리를 사용하여 데이터를 정제하였습니다. 수집된 데이터는 먼저 DataFrame 형식으로 변환하고, 여러 차원에서 처리 작업을 수행했습니다.

결측치가 전체 데이터의 90% 이상을 차지하는 열은 정보 가치가 낮다고 판단하여 삭제하였습니다. 결측값 처리는 데이터 타입에 따라 적절한 고정값으로 채워넣는 방식(예: `fillna`)을 적용했습니다. 중복 행은 `duplicated()` 함수를 이용해 탐지 후 제거하였으며, 이상치 탐지는 데이터 무결성 확보에 필수적인 단계입니다.

데이터 집계 및 분석은 `loc`, `groupby`, `merge`, `mean` 등의 메서드를 활용하여 수행되었고, 최종적으로 결과를 MySQL 데이터베이스에 저장하였습니다.

3 Django + ECharts를 통한 시각화 구현 (MySQL 연동)

3.1 settings.py에서 MySQL 연결 설정


# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'tourism_db',           # 데이터베이스 이름
        'USER': 'admin',               # 사용자 계정
        'PASSWORD': 'securepass',      # 비밀번호
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

3.2 모델 정의 및 데이터 로드

Django 모델을 통해 데이터베이스 테이블을 정의하고, 관리자 페이지 또는 직접 SQL을 통해 데이터를 입력할 수 있습니다.


from django.db import models

class TouristSpot(models.Model):
    id = models.AutoField(primary_key=True)
    city = models.CharField(max_length=100, blank=True)
    rating = models.CharField(max_length=50, blank=True)  # 인기도
    grade = models.CharField(max_length=20, blank=True)   # 등급 (A, AA, AAA 등)

    class Meta:
        db_table = 'tourist_spots'

모델 생성 후 다음 명령어로 데이터베이스 스키마를 반영합니다:

python manage.py makemigrations
python manage.py migrate

3.3 ECharts 시각화 구성

정적 파일 경로 설정:


STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

디렉터리 구조 예시:

  • static/
    • js/ → echarts 라이브러리 포함
    • index.html → HTML 레이아웃

HTML 파일 내에서 필요한 자바스크립트 라이브러리 로드:


<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>관광지 시각화 시스템</title>
    <script src="/static/js/echarts.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
</head>
<body>
    <div id="chart1" style="width: 100%; height: 300px;"></div>
    <div id="chart2" style="width: 100%; height: 250px;"></div>
</body>
</html>

3.4 뷰에서 데이터 전달

Django 뷰에서 데이터베이스 정보를 JSON 형식으로 전달합니다.


from django.http import JsonResponse
from django.shortcuts import render
from .models import TouristSpot
import json

def dashboard(request):
    spots = TouristSpot.objects.all()
    data_list = list(spots.values('city', 'rating', 'grade'))
    return render(request, 'dashboard.html', {'data': json.dumps(data_list)})

4 시스템 작동 결과

사전 처리된 데이터를 기반으로 웹 서버를 실행하면 다음과 같은 시각화 결과를 확인할 수 있습니다.

실행 명령어:

python manage.py runserver

4.1 사용자 인터페이스 화면

다양한 차트를 통해 관광지 인기도, 등급 분포, 지역별 비교 등을 직관적으로 확인할 수 있습니다.

4.2 인기 도시 분석

전국 각지의 인기 관광지 중심지를 지도 기반으로 시각화하며, 방문객 수, 평균 평점, 지역 특성 등을 종합적으로 비교합니다.

4.3 추천 알고리즘 기반 관광 코스 제공

현재 관광지의 혼잡도, 교통 흐름, 평점 등을 기반으로 최적의 방문 순서를 제안하는 스마트 추천 시스템을 구현했습니다.

4.4 백엔드 모니터링 대시보드

시스템의 실시간 상태, 데이터 업데이트 주기, 접근 로그 등을 한눈에 파악할 수 있는 관리자용 대시보드 제공.

본 프로젝트는 학습용으로 자유롭게 활용 가능하며, 구체적인 다운로드 방법은 본문 하단에 안내되어 있습니다.

태그: python Django MySQL ECharts Data Visualization

10월 6일 07:29에 게시됨