약 9,343만 행 검사와 18개 시군 보고자료를 바탕으로, 9월에는 33존 명절 OD와 춘천 4개 단지의 4,741셀 지도로 확장했습니다. 전후 이동 분석은 동일 단지 내부 이동을 제외한 최신 집계까지 반영했습니다.
VISUAL EVIDENCE · 2026.09.09 작업까지
최신 결과 · 춘천 4개 단지의 전후 이동
외부에서 관광단지에 도착한 뒤 춘천 안에서 어디로 이동했는지, 마지막 관측 목적지가 단지인 경우 어디를 거쳤는지 나눠 보았습니다. 같은 단지 안의 이동은 제외했습니다.
4개 단지의 전후 이동 · 전체 지도와 범례
상단 주황색: 단지 방문 후 이동의 도착 셀. 하단 파란색: 단지가 마지막 관측 목적지인 경우 앞선 경유 통행의 출발 셀. 각 지도 아래는 점선 범위 확대입니다. 흰색은 0건이며 선·번호는 단지 경계와 번호입니다. 2025.10.13–19 관측 · 500m 셀 · 동일 단지 내부 이동 제외. 원본 확대 ↗
단지
단지 방문 후 이동
단지가 마지막 목적지인 경우의 앞선 이동
레고랜드
153
11
삼악산호수케이블카
115
9
강촌레일파크
6
0
남이섬
1
0
합계
275
20
첫 집계는 단지 방문 후 이동한 통행의 도착 셀을 셉니다. 두 번째는 마지막으로 관측된 목적지가 단지인 경우, 그전에 경유한 통행의 출발 셀을 셉니다. 두 번째 수치는 마지막 목적지 개수가 아닙니다. 두 집계 모두 고유 방문객 수가 아니며, 0건은 조건을 통과한 관측이 없다는 뜻입니다. 외부 직행은 별도입니다.
춘천 내부 출발·도착 분포 보기 · 9월 8일출발·도착 원천 코드가 모두 춘천인 통행. 출발 3,494건·도착 4,559건, 4,741셀. 위 전후 이동 분석과 달리 이 지도에는 단지 내부·단지 간 통행도 포함됩니다. 평일 5일+주말 2일 합계이며 일평균이 아닙니다. 원본 확대 ↗설·추석 날짜별 유입·유출 비교 보기 · 9월 2일설 2025.01.28–30(D-1~D+1), 추석 2025.10.06–08(D~D+2). 33존 OD로 일별 합계와 3일 평균을 검산했습니다. 상대 날짜 구성이 다르고 표본 규모·계절 차이를 통제하지 않아 명절 효과로 해석하지 않습니다. 원본 확대 ↗기존 수도권→강원 접근 경로 보기 · 7월 기록
R1
홍천군 → 춘천시
7일 13,788건 · 일평균 1,969.7건
R2
홍천군 → 춘천시 → 홍천군
7일 7,494건 · 일평균 1,070.6건
R3
원주시 → 횡성군
7일 4,075건 · 일평균 582.1건
R4
원주시 → 횡성군 → 평창군
7일 3,713건 · 일평균 530.4건
색 선: 경로 유형 / 화살표: 진행 방향 굵은 선: 원본에서 강조한 대표 통로
2025.10.13–19 수도권 출발 승용차의 강원 내부 경유 유형입니다. 위 9월 단지별 집계와 대상·단위가 다릅니다. 전체 원본 지도 ↗
제출한 PDF는 보존하고 최신 후속 작업은 이 웹에 추가했습니다. 이미지와 수치는 TMAP 관측표본의 결과이며 실제 관광활동·체류·정책 효과를 확정하지 않습니다.
실무 분석 · 위치기반 강원 방문통행 분석
어느 지역에서 들어오고, 평일과 주말에 어떻게 달라지는가
2025.10.13–19 승용차 내비게이션 표본. 보고서의 시군별 집계를 같은 하루 기준으로 비교합니다.
비교할 시군
아래 지표·그래프·표에 모두 적용됩니다. 평일과 주말은 동시에 표시합니다.
차이를 어떻게 읽었나
평일은 5일, 주말은 2일이라 합계를 바로 비교하면 기간 차이가 섞입니다. 각 기간의 통행량을 일수로 나누고, 도내·도외 유입과 유출을 분리했습니다.
관측 통행은 고유 방문객 수가 아닙니다. 같은 시군 내부 통행은 이 화면의 유입·유출에서 제외했습니다.
평일 2025.10.13–17, 주말 10.18–19. 제주 제외. CSV 한 행은 평일/주말 × 출발 지역 × 도착 지역이며, 적어도 한쪽이 강원인 조합입니다. CSV에는 같은 시군 내부 통행도 포함되지만 이 화면의 유입·유출 지표에서는 제외합니다. 일평균 × 관측일수 = 기간 합계를 1,728행에서 검사했습니다.
기준정보와 결합되지 않은 3,861,720행은 승용차 OD·여정 분석에 포함하지 않았습니다. 해당 자료의 차종·지역을 복원하지 않아 최종 집계 영향량은 산정하지 않았습니다. 교통 표본의 한 주 결과를 전체 차량·관광객의 행동으로 확대하지 않습니다.
CODE & VALIDATION
코드 구성과 검증 방식
DuckDB는 원천 선별·집계, Parquet는 반복 검수, GeoPandas·QGIS는 공간 결합과 지도에 사용했습니다. 행정코드 선별 → 시간구간 검수 → 단지·셀 대응 → 분석별 제외 조건 → CSV·지도 합계 검산으로 책임을 나눴습니다.
날짜·통행 키 결합과 제외 사유를 함께 검산하는 SQL
-- DuckDB 실행 예시: 전부 가상 자료이며 회사 원본 SQL이 아닙니다.
WITH trips(day, trip_id) AS (VALUES
('2025-10-13', 'A'), ('2025-10-13', 'B'),
('2025-10-13', 'C'), ('2025-10-13', 'D'),
('2025-10-13', 'E'), ('2025-10-14', 'A')
), info(day, trip_id, vehicle_type) AS (VALUES
('2025-10-13', 'A', 'passenger'),
('2025-10-13', 'A', 'passenger'), -- 동일 기준정보 중복
('2025-10-13', 'B', 'passenger'),
('2025-10-13', 'C', 'commercial'),
('2025-10-13', 'E', 'passenger'),
('2025-10-13', 'E', 'commercial'), -- 상충 정보: 임의 선택 금지
('2025-10-14', 'A', 'passenger')
), dim AS (
SELECT day, trip_id, MAX(vehicle_type) AS vehicle_type,
COUNT(DISTINCT vehicle_type) = 1
AND COUNT(vehicle_type) = COUNT(*) AS valid
FROM info GROUP BY day, trip_id -- 키당 한 행으로 결합 증식 방지
), classified AS (
SELECT t.day, t.trip_id,
CASE WHEN d.trip_id IS NULL THEN 'unmatched'
WHEN NOT d.valid THEN 'conflict_or_null'
WHEN d.vehicle_type <> 'passenger' THEN 'non_passenger'
ELSE 'included' END AS status
FROM trips t LEFT JOIN dim d USING (day, trip_id)
)
SELECT COUNT(*) AS joined_rows,
COUNT(*) FILTER (WHERE status = 'included') AS passenger_rows,
COUNT(*) FILTER (WHERE status = 'non_passenger') AS excluded_type,
COUNT(*) FILTER (WHERE status = 'unmatched') AS unmatched,
COUNT(*) FILTER (WHERE status = 'conflict_or_null') AS invalid_info
FROM classified;
기존 분석의 결합·대상 선별 원리를 가상 6행으로 재구성한 설명용 예시입니다. 실제 운영 SQL·원천 데이터·실측 결과가 아닙니다. 예상 결과는 전체 6 = 승용차 3 + 비승용차 1 + 미결합 1 + 상충 정보 1입니다. MAX 값은 기준정보가 유일하고 결측이 없을 때만 사용합니다. 실무에서는 원천 키의 결측·중복 0건을 먼저 확인했고, 그 조건을 만족하지 않는 입력은 이 집계 전에 중단·검토해야 합니다.
WORK LOG
작업 타임라인
10월 7일 OD·명절 비교·춘천 내부 통행·외부 유입 후 이동의 작업 순서입니다. 분석 대상이 서로 달라 합산하지 않습니다.
상세 작업 기록 · 8단계 펼치기
01
2026.07.16 기록
원천 자료와 결합 기준 확인
통행 기록과 차종·지역 기준정보를 날짜와 통행 식별자로 연결했습니다. 먼저 전체 자료의 키 결측·중복과 결합 여부를 점검해 분석에 포함할 수 있는 범위를 정했습니다.
구분
확인 내용
원천 검사
14개 파일, 7일 자료의 구조·키·결합 상태
미결합 자료
3,861,720행 별도 구분
분석 대상
4종 승용차 원천 79,777,257행
측정 조건
DuckDB 1.5.1 · 4 threads · 단일 실행환경
확인한 결과결합 89,570,695행과 미결합 3,861,720행을 나눠 전체 93,432,415행과 대조했습니다.
02
원천 점검 이후
미결합 기록과 최종 분석 대상을 분리
기준정보가 없는 기록을 승용차나 특정 지역으로 임의 분류할 수 없었습니다. 감사 기록에는 남기되 최종 승용차 OD와 경로 분석의 포함 조건을 구분했습니다.
확인한 결과미결합 자료 전체를 강원 승용차 누락으로 해석하지 않았으며, 영향량을 확정하지 않은 범위를 남겼습니다.
03
2026.08.03 검산 기록
평일·주말 기준을 맞춰 다시 비교
초기의 월–목·금–일 구분과 보고서의 월–금·토–일 기준이 달랐습니다. 보고서 기준으로 집계를 맞추고 각각 5일과 2일의 일평균으로 바꿨습니다.
막대 길이는 하루 평균 통행량입니다. 도내는 강원도 안의 다른 지역, 도외는 강원도 밖을 뜻합니다.
확인한 결과춘천의 일평균에 해당 일수를 곱한 합계를 원본 7일 총량과 대조했습니다.
04
2026.08.31 원고 기록
결과를 시군별 표·경로·해설로 전달
이동 규모를 보여주는 출발–도착 표와 거쳐 간 지역의 순서를 보여주는 경로 자료를 따로 설명했습니다. 표별 해설에 편집용 Excel 파일과 시트를 연결했습니다.
수도권에서 강원으로 접근한 경로의 지도입니다. 이동량 표와 별도로, 어느 지역을 거쳤는지 설명하는 자료입니다.
확인한 결과최종 산출물은 18개 시군 분석표와 보고서 원고입니다. 관측된 이동을 설명하는 자료이며 관광지 입장·체류나 정책 효과를 입증한 결과는 아닙니다.
05
2026.09.02
설·추석을 날짜와 33존 OD로 비교
설은 1월 28–30일(D-1·D·D+1), 추석은 10월 6–8일(D·D+1·D+2)을 대상으로 18개 강원 시군과 비강원 15개 시도의 OD를 구성했습니다. 두 명절의 상대 날짜 구성이 다르므로 같은 연휴 단계로 간주하지 않았습니다.
확인한 결과33×33×6 = 6,534개 날짜별 조합과 33×33×2 = 2,178개 평균 조합을 구성했습니다. 0 통행을 보존하고 일별 교차합계와 3일 평균을 검산했습니다.
06
2026.09.08 · 공간 검증
지도 경계뿐 아니라 원천 행정코드로 춘천 내부를 선별
공간적으로 춘천에 표시되는 것만으로 내부 통행으로 정하지 않았습니다. 원천 출발·도착 시군구 코드가 모두 춘천인 자료를 먼저 선별하고 4개 단지와 상대 셀을 연결했습니다. QGIS에서 동일 건수 구간과 출발·도착 색상을 사용했습니다.
확인한 결과4,741개 셀의 출발 3,494건·도착 4,559건을 CSV와 대조했습니다. 두 방향에 중복 포함되는 통행이 있어 합을 고유 통행 수로 쓰지 않습니다.
07
2026.09.08 · 시간 검증
시간 겹침 때문에 ID 전체를 버리지 않고 구간 단위로 재검토
같은 시각의 관측을 모두 중복으로 보거나 가장 긴 통행 하나만 선택하면 정상 구간까지 사라질 수 있었습니다. 관측 속성이 같은 중복만 축약하고, 서로 겹쳐 순서를 확정할 수 없는 구간은 보류했습니다. 마지막 목적지 판정에는 보류 기록도 고려해 앞선 정상 기록으로 임의 대체하지 않았습니다.
확인한 결과정상 구간은 보존하되 보류 구간을 가로질러 연속 경로가 복원됐다고 표현하지 않았습니다. 지도는 개인 궤적이 아닌 500m 셀별 합계로 공개합니다.
08
2026.09.09 · 최신 보정
동일 단지 내부 이동을 제외하고 지도와 집계 동기화
관광단지 전후의 외부 이동을 보기 위해 출발·도착 단지가 같은 통행만 제외했습니다. 외부와의 이동, 다른 단지 간 이동, 외부에서 단지로 재방문한 통행은 유지했습니다. 이 조건은 전후 이동 분석에 적용하며 앞 단계의 춘천 내부 출발·도착 지도와는 구분됩니다.
확인한 결과단지 방문 후 이동의 도착 셀 집계는 294→275건입니다. 단지가 마지막 관측 목적지인 경우 그전에 경유한 통행의 출발 셀 집계는 23→20건입니다. 4,741행·24개 수치 컬럼의 CSV와 지도 값이 일치했고 CSV 합계도 재계산했습니다.
분석 범위
표와 설명이 같은 집계 기준을 사용하도록 정리한 결과입니다. 정책 효과나 관광 매출 증가를 측정한 분석은 아닙니다.
세부 구현·검산·평가 조건 읽기
이동 기록과 기준정보가 연결되는지 확인
연결 대상은 tmap_log_session_no_err의 통행 기록과 tmap_user_master의 차종·출발/도착 행정정보입니다. 날짜와 trip_init_session_id가 같은지 검사했고, session에만 있는 3,861,720행을 확인했습니다. 도로 형상이나 관광지 POI와 연결되지 않은 행수가 아닙니다.
감사에서는 전체 통행 기록을 기준으로 결합 여부를 집계했습니다. 초기 행정코드 OD 품질 기록에는 SESSION_ONLY_ADMIN_UNRESOLVED로 남겼습니다. 이후 최종 승용차 OD는 user_master에서 4개 승용차 모델을 선별하므로 이 미결합 통행은 포함되지 않습니다. 경로 분석용 여정도 session과 승용차 master를 내부 결합한 통행에서 시작하므로 동일하게 포함되지 않습니다.
이는 원본을 삭제했다는 뜻이 아니라 분석 대상에 포함되지 않았다는 뜻입니다. 미결합 통행의 승용차 여부와 출발·도착 지역을 복원하지 않아 승용차 OD·경로 결과에 미친 영향량은 산정하지 않았습니다. 전체 3,861,720행을 강원 승용차 누락량으로 해석하지 않았습니다.
원천 검사 실행시간 357.67초·peak RSS 약 2.31GiB. 7일·14파일, DuckDB 1.5.1·4 threads의 단일 실행이며 전체 분석 소요시간은 아닙니다.
출발–도착 집계와 방문 경로를 구분
OD는 특정 지역에서 다른 지역으로 이동한 규모를 설명합니다. 접근 경로는 수도권 출발 승용차가 여러 지역을 거친 순서를 분석하는 별도 자료입니다. 두 결과가 같은 모집단이나 같은 행 단위를 가진 것으로 처리하지 않았습니다.
경로 복원 대상 153,224건 중 153,212건은 도로와 격자를 연결했고, 미복원 12건을 구분했습니다. 이 수치는 관측으로 구성한 방문과정이며 고유 사람 수나 확정 관광지 방문 수가 아닙니다.
행정구역·격자·관광지 주변 영역은 서로 다른 용도로 사용했습니다. 영역 통과를 실제 입장·체류로 해석하지 않았습니다.
춘천의 도외 이동은 주말에 더 크게 관측
춘천 시트의 전체 순위 행을 합산하고, 요약표의 전체 합계와 대조했습니다. 도내·도외 유입과 유출을 나눠야 지역 내부 이동과 다른 지역과의 왕래를 혼동하지 않습니다.
보고서의 기간 구분은 월–금 5일과 토·일 2일입니다. 초기 산출물의 월–목·금–일 구분을 그대로 가져오지 않고 현재 보고서 기준으로 검산했습니다. 평일·주말 일평균에 각각 5일·2일을 곱한 합계가 원본 7일 값과 일치하는지 확인했습니다.
내비게이션 승용차 표본·제주 제외. 2025.10.13–19 자료의 관측 결과이며 증가 원인이나 정책 효과를 입증한 분석은 아닙니다.
분석표와 원고를 같은 기준으로 연결
보고서에는 어떤 지역과의 이동이 큰지와 전체 이동이 어느 정도인지를 함께 설명했습니다. 각 해설이 어느 표를 설명하는지 알 수 있도록 편집용 파일·시트를 연결했습니다.
춘천 도외 유출은 두 기간 모두 서울이 가장 큰 흐름으로 정리했습니다. 본문의 정수 표현과 Excel의 소수값은 반올림 차이이며, 이를 다른 수치로 오인하지 않도록 구분했습니다.
공개 승인된 집계 지도입니다. 7월 접근 경로와 9월 춘천 단지별 집계는 분석 대상과 단위가 다릅니다.
원본 7일 합계 대조
평일·주말 일평균의 가중합을 원본 7일 합계와 비교했습니다. 도내 유출 25,192, 도내 유입 24,827, 도외 유출 49,491, 도외 유입 46,325통행으로 일치합니다. 표본·기간·차종이 다른 경로 지표와 이 합계를 합산하지 않습니다.
실제 활용 범위
확인된 산출물은 시군별 분석표, 원고, 편집용 자료입니다. 발주처 최종 채택이나 정책 집행에 따른 효과는 이 사례의 성과로 포함하지 않았습니다.