글

공공데이터로 수원시 주차 문제를 진단하다 — 데이터 기반 정책 제언 프로젝트 리뷰

이미지
프로젝트 개요 대회명: SRI 데이터 경진대회 — 수원시 정책 아이디어 제안 주제: 공공데이터를 활용한 수원시 주차 문제 해소를 위한 정책 제언 인원: 3명 역할: 데이터 수집·전처리·시각화, 정책 제언 도출 수원시는 약 120만 명이 거주하는 경기도 최대 도시이자 삼성전자 본사가 위치한 산업 중심지이다. 그러나 급격한 도시화와 차량 증가로 인해 주차 문제가 시민 생활의 주요 민원으로 부상하고 있다. 문제의 크기는 수원시 도시정책지표에 그대로 드러난다. 등록 차량은 2014년 433,967대에서 2023년 569,460대로 9년간 31.2% 늘었고 같은 기간 주차장확보율(주차면수 ÷ 자동차등록대수)은 2022년 기준 73.3% — 차량 4대당 주차면이 3개도 되지 않는다. 본 프로젝트는 수원시가 공개한 시민 서베이 데이터와 주정차 위반 단속 데이터를 결합 분석하여, 데이터 기반의 실효성 있는 주차 정책을 제언하는 것을 목표로 하였다. 데이터 소개 분석에 활용한 데이터는 크게 세 가지이다. 1. 수원서베이 (시민 인식 조사) 수원시가 분기별로 실시하는 시민 패널 조사 데이터로, 교통·주거·생활환경 등 도시 전반에 대한 시민 인식을 담고 있다. 2023년 수원서베이 용역 데이터 2024년 3·4분기 패널조사 데이터 (가중치 포함) 2025년 1·2분기 패널조사 데이터 (가중치 포함) 2. 주정차 위반 단속 데이터 (공공데이터포털) 수원시 4개 구(장안구·권선구·팔달구·영통구)의 주정차 위반 단속 이력 데이터로, 단속 일시·장소·방법 등의 정보를 포함한다. 2022년 1월 1일 ~ 2023년 10월 31일, 총 794,738건 의 단속 레코드 분석 단속 일시를 연·월·요일·시간대·계절로 파생 변수 생성 단속 방법이 한 가지가 아니라는 점이 이후 분석의 핵심 열쇠가 되며. 무인 CCTV가 자동으로 잡는 것과 사람이 나가서 적발하는 것, 시민이 직접 신고하는 것이 모두 섞여 있다. 단속 방법 건수 비중...

카카오 로컬 API로 입지 데이터 수집하기

이미지
프로젝트 개요 주제: 카카오 로컬(Local) API를 활용한 입지 분석용 장소 데이터 수집 파이프라인 구축 저장소: location_analysis 세부 입지 분석 과정에서 가장 필요한 것은 "A 현장 반경 내에 무엇이 있는가" 라는 정보다. 지하철역까지는 몇 미터인지, 반경 500m 내에 초등학교는 있는지, 2km 내에 얼마나 많은 생활 편의시설이 있는지 같은 것들이다. 카카오 로컬 API는 이러한 질문에 답할 수 있는 API로, 주소를 좌표로 바꾸고 좌표 인근 장소를 타입별(업종)로 검색할 수 있다. 이 포스트는 API를 실제로 써 보며 정리한 기록이다. [이미지1 - 완성 결과 대표 컷: 업종별로 색을 나눈 folium 레이어 지도] 목차 준비: API 키 발급 및 .env에 저장하기 주소 검색과 지오코딩 역지오코딩: 좌표에서 주소로 키워드 검색 vs 카테고리 검색 지도에 올리기 45건 상한, 그리고 재귀 격자 탐색 준비: API 키 발급 및 .env에 저장하기 카카오 개발자 콘솔 에서 애플리케이션을 만들어 REST API 키를 받는다. API 키는 .env 나 별도 문서에 적어 저장해 놓고 쓰는 것이 간편하고 안전하다. .env 파일에 넣고 .gitignore 로 막는 방식을 통해 유출을 방지한다. # .env (커밋하지 않음) KAKAO_REST_API_KEY = 발급받은_REST_API_키 # .gitignore .env *.key *.pem import os from dotenv import load_dotenv load_dotenv () API_KEY = os . environ [ "KAKAO_REST_API_KEY" ] BASE = "https://dapi.kakao.com/v2/local" HEADERS = { "Authorization" : f "KakaoAK { API_KEY } " ...

[Bigdata #정리] 데이터분석 방법론 CRISP-DM

이미지
  CRISP-DM(Cross-Industry Standard Process for Data Mining) 데이터 분석 절차로 크게 6가지의 단계로 나눌 수 있다. Business Understanding 문제 이해 Data Understanding 데이터 분석 데이터 수집 웹 크롤링 등. Data Preparation 전처리 데이터 형태 및 타입 확인 데이터 분포 확인 결측치 제거 원핫인코딩, 표준화, 정규화 등 Modeling 모델링 머신러닝 딥러닝 언어지능 시각지능 등 Evaluation 평가 Deplayment 배치 웹 서비스 구축 MLOps

[Algorithm #정리] Python의 sorting 알고리즘 및 예제 코드

이미지
정렬(Sorting) 데이터를 특정 기준에 따라 순서대로 나열하는 것. 정렬 알고리즘 selection sort (선택정렬) 가장 작은것 탐색 ⇒ 자리 변경 ⇒ 반복 시간복잡도 N-1만큼 작은것 탐색, {N*(N+1)}/2 ⇒ O(N^2) insertion sort (삽입 정렬) 하나씩 ⇒ 적절한 위치에 삽입 무조건 자리를 바꾸는 선택정렬과의 차이 ⇒ 삽입정렬은 필요시에만 자리 변경 발생 시간복잡도 반복문 2번 사용 O(N^2), 단 최선(완벽하게 정렬된)의 경우 O(N) quick sort (퀵 정렬) 기준이 되는 요소(pivot)지정, 한쪽 끝 ⇒ 한쪽은 pivot보다 작은것, 다른쪽은 pivot보다 큰 것⇒ 큰 것 ↔ 작은 것 자리 교환 ⇒ 반복 ⇒ 큰 것 탐색과 작은 것 탐색 간 교차 발생 시 ⇒ 작은 것 ↔ pivot 간 자리 교환(분할, partition 발생) → 파티션 기준 데이터 분할 발생 ⇒ pivot 다시 선정 ⇒ 반복 ⇒ 분할된 리스트의 요소가 1이거나 비는 경우 ⇒ 종료 시간복잡도 평균 O(NlogN) 단, 최악의 경우 O(N^2). 데이터가 이미 정렬되어 있는 경우다. <code1> array = [ 5 , 7 , 9 , 0 , 3 , 1 , 6 , 2 , 4 , 8 ] def quick_sort ( array , start , end ): if start >= end : return pivot = start print ( 'pivot element is ' , pivot , end = ':' ) left = start + 1 right = end while left <= right : while left <= end and array [ left ] <= array [ pivot ]: ...