실전 프로젝트 시작 Day5

hyun-jin·2025년 5월 15일

데이터 분석

목록 보기
63/100

데이터 분석 59일

태블로 작업

  • 큰 틀을 짜놓은 상태에서 오늘 필요한 그래프들을 만드는 작업을 시작했다.
  • 내가 만들고 싶은 지도 가 마음처럼 나오지 않아 왜 그러는지 고민해봤는데
    문제점: 우리 데이터에는 221개의 지역이름이 있는 컬럼과 위도/경도 컬럼이 있지만 그 것들은 각각의 위치를 알려주지 딱 지역별로 경계를 나눠져 있지 않았다...
    해결책: zipcode라는 우편번호 같은걸 만들어 줘야 한다. 새 컬럼 만들기
  • 그래서 이걸 아래와 같은 코드로 해결했다.

방법: 공식 ZIP Code 경계 데이터와 공간 조인 (GeoPandas)

  • ZIP Code 경계 데이터: NYC Open Data: MODZCTA
  • geopandas 설치 필요 (pip install geopandas)

코드:

import geopandas as gpd
from shapely.geometry import Point

# 1. 사용자 데이터를 GeoDataFrame으로 변환
gdf = gpd.GeoDataFrame(
    df,
    geometry=[Point(lon, lat) for lon, lat in zip(df['lon'], df['lat'])]
)

#2. 공식 ZIP Code 경계 데이터 로드
zip_gdf = gpd.read_file('https://data.cityofnewyork.us/resource/pri4-ifjk.geojson')
zip_gdf = zip_gdf[['modzcta', 'geometry']].rename(columns={'modzcta': 'zipcode'})

# 3. 공간 조인 (좌표가 ZIP Code 영역 내에 있는지 확인)
result = gpd.sjoin(gdf, zip_gdf, how='left', predicate='within')

# 4. 중복 제거 (동일 좌표에 여러 ZIP Code가 있을 경우 첫 번째 선택)
result = result.drop_duplicates(subset=['neighbourhood_cleansed', 'geometry'])

# 결과 확인
print(result[['neighbourhood_cleansed', 'zipcode']].head())

오늘 하루종일 거의 이것만 한것 같다. 그래도 해결해서 기분 좋다 :)

0개의 댓글