Geopandas 분석 (2) 좌표변환

geopandas 분석방법 (2)

  • 위치가 포함된 데이터를 이용하여 데이터 분석하기!
  • 좌표변환 에러없이 깔끔하게
  • 위도와 경도를 하나의 point로 만들기

< 순서 >

1) 위도 경도를 geometry로 추가하는 법
2) shp파일 파이썬에서 데이터프레임형식으로 읽기
3) 좌표변환방법 (최신으로 경고창 안뜨는 방법)
4) GeoDataFrame 형식으로 보기

import geopandas as gpd
from geopandas import GeoDataFrame
from shapely.geometry import Point
import pandas as pd

1) 위도 경도를 geometry로 추가하는 법

  • 1번째: 패키지 Point를 이용
local_people_1['adm_cd'] = local_people_1.apply(lambda x: Point(x['경도'], x['위도']), axis=1) # 좌표 정보를 합쳐서 geometry 정보 부여  
local = GeoDataFrame(local_people_1, crs='EPSG:4326', geometry='adm_cd') # 좌표계 지정
local
Unnamed: 0 ?"기준일ID" 시간대구분 행정동코드 집계구코드 총생활인구수 남자0세부터9세생활인구수 남자10세부터14세생활인구수 남자15세부터19세생활인구수 남자20세부터24세생활인구수 ... 여자60세부터64세생활인구수 여자65세부터69세생활인구수 여자70세이상생활인구수 시도명 시군구명 행정동명 위도 경도 new adm_cd
0 0 20200513 8 11110560 1101056030003 35.3457 * * * * ... * * * 서울 종로구 평창동 37.613029 126.974485 1101056 POINT (126.97449 37.61303)
1 1 20200513 15 11110560 1101056030003 37.6209 * * * * ... * * * 서울 종로구 평창동 37.613029 126.974485 1101056 POINT (126.97449 37.61303)
2 2 20200513 15 11260600 1107061020001 574.4813 42.1455 16.7482 15.6067 19.3199 ... 19.3208 15.4995 56.5716 서울 중랑구 중화1동 37.606736 127.092924 1107061 POINT (127.09292 37.60674)
3 3 20200513 22 11260600 1107061020001 723.2091 31.9927 12.7136 11.4994 17.9117 ... 22.6266 15.1406 60.5972 서울 중랑구 중화1동 37.606736 127.092924 1107061 POINT (127.09292 37.60674)
4 4 20200513 5 11260600 1107061020002 449.9735 13.6301 5.4165 7.6755 18.3191 ... 9.6071 11.1375 38.5124 서울 중랑구 중화1동 37.606736 127.092924 1107061 POINT (127.09292 37.60674)
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
459647 459647 20200513 10 11740700 1125071022701 140.6605 8.22 4.1466 6.1204 7.0038 ... 8.7991 4.4082 11.6574 서울 강동구 둔촌2동 37.530120 127.123858 1125071 POINT (127.12386 37.53012)
459648 459648 20200513 17 11740700 1125071022701 131.8683 5.861 * 5.1135 6.3122 ... 5.5181 6.8579 5.2525 서울 강동구 둔촌2동 37.530120 127.123858 1125071 POINT (127.12386 37.53012)
459649 459649 20200513 6 11740700 1125071023701 519.4448 14.5584 7.344 17.7149 13.6748 ... 13.2756 11.1782 40.81 서울 강동구 둔촌2동 37.530120 127.123858 1125071 POINT (127.12386 37.53012)
459650 459650 20200513 13 11740700 1125071023701 251.7987 11.8529 5.9792 11.1546 4.6372 ... 10.8003 6.2 19.2498 서울 강동구 둔촌2동 37.530120 127.123858 1125071 POINT (127.12386 37.53012)
459651 459651 20200513 20 11740700 1125071023701 398.0623 12.9668 6.5411 10.1468 * ... 13.3851 18.0771 31.7392 서울 강동구 둔촌2동 37.530120 127.123858 1125071 POINT (127.12386 37.53012)

459652 rows × 41 columns

  • 2번째 방법 : geodataframe 내부에서 하기
subway_geo = GeoDataFrame(subway, geometry=gpd.points_from_xy(subway['lng'], subway['lat']))
subway_geo.set_crs(epsg = 4326, inplace = True)
line name code lat lng geometry
0 01호선 녹양역 1908.0 37.759380 127.042292 POINT (127.04229 37.75938)
1 01호선 남영역 1002.0 37.541021 126.971300 POINT (126.97130 37.54102)
2 01호선 용산역 1003.0 37.529849 126.964561 POINT (126.96456 37.52985)
3 01호선 노량진역 1004.0 37.514219 126.942454 POINT (126.94245 37.51422)
4 01호선 대방역 1005.0 37.513342 126.926382 POINT (126.92638 37.51334)
... ... ... ... ... ... ...
611 인천선 지식정보단지역 3135.0 37.378384 126.645168 POINT (126.64517 37.37838)
612 인천선 인천대입구역 3136.0 37.386007 126.639484 POINT (126.63948 37.38601)
613 인천선 센트럴파크역 3137.0 37.393054 126.634729 POINT (126.63473 37.39305)
614 인천선 국제업무지구역 3138.0 37.399907 126.630347 POINT (126.63035 37.39991)
615 인천선 간석오거리역 3123.0 37.467048 126.707938 POINT (126.70794 37.46705)

616 rows × 6 columns

2) shp파일 파이썬에서 데이터프레임형식으로 읽기

gep=gpd.read_file('통계지역경계(2016년+기준) (1)\집계구.shp')
gep
TOT_REG_CD ADM_NM ADM_CD geometry
0 1101053010006 사직동 1101053 POLYGON ((953231.968 1953435.866, 953237.202 1...
1 1101053010001 사직동 1101053 POLYGON ((952858.566 1952976.274, 952875.055 1...
2 1101053010003 사직동 1101053 POLYGON ((952889.178 1953405.246, 952890.836 1...
3 1101053010002 사직동 1101053 POLYGON ((953093.801 1953337.962, 953094.292 1...
4 1101053010005 사직동 1101053 POLYGON ((953553.932 1953335.742, 953555.211 1...
... ... ... ... ...
19148 1102073010501 동화동 1102073 POLYGON ((957399.426 1951569.498, 957398.627 1...
19149 1102055030001 명동 1102055 POLYGON ((954867.147 1952204.599, 954868.740 1...
19150 1102058040004 장충동 1102058 POLYGON ((956138.572 1951190.621, 956143.782 1...
19151 1121052010002 보라매동 1121052 POLYGON ((949365.807 1944046.501, 949356.440 1...
19152 1121052010001 보라매동 1121052 POLYGON ((949249.809 1943731.164, 949254.519 1...

19153 rows × 4 columns

3) 좌표변환방법 (최신으로 경고창 안뜨는 방법)

  • 데이터: 서울열린데이터광장 생활인구 데이터

  • shp파일의 crs확인하기 : 좌표계가 어떤지 확인하는 과정

gep.crs
  • 현재 아무지정도 안되어 있어서 직접 해당하는 좌표계를 지정
gep.crs='EPSG:5179'
  • 변환할 좌표계를 to_crs를 이용하여 지정
gep.geometry=gep.geometry.to_crs('EPSG:4326')
gep.geometry
0        POLYGON ((126.97033 37.57912, 126.97039 37.579...
1        POLYGON ((126.96613 37.57496, 126.96632 37.574...
2        POLYGON ((126.96645 37.57883, 126.96647 37.578...
3        POLYGON ((126.96877 37.57823, 126.96878 37.578...
4        POLYGON ((126.97399 37.57823, 126.97400 37.578...
                               ...                        
19148    POLYGON ((127.01764 37.56250, 127.01763 37.562...
19149    POLYGON ((126.98893 37.56810, 126.98895 37.568...
19150    POLYGON ((127.00338 37.55903, 127.00344 37.559...
19151    POLYGON ((126.92720 37.49429, 126.92709 37.493...
19152    POLYGON ((126.92591 37.49144, 126.92596 37.491...
Name: geometry, Length: 19153, dtype: geometry

### 4) GeoDataFrame 형식으로 보기

cen_str_df= GeoDataFrame(gep, crs='EPSG:4326', geometry='geometry') 
cen_str_df
TOT_REG_CD ADM_NM ADM_CD geometry
0 1101053010006 사직동 1101053 POLYGON ((126.97033 37.57912, 126.97039 37.579...
1 1101053010001 사직동 1101053 POLYGON ((126.96613 37.57496, 126.96632 37.574...
2 1101053010003 사직동 1101053 POLYGON ((126.96645 37.57883, 126.96647 37.578...
3 1101053010002 사직동 1101053 POLYGON ((126.96877 37.57823, 126.96878 37.578...
4 1101053010005 사직동 1101053 POLYGON ((126.97399 37.57823, 126.97400 37.578...
... ... ... ... ...
19148 1102073010501 동화동 1102073 POLYGON ((127.01764 37.56250, 127.01763 37.562...
19149 1102055030001 명동 1102055 POLYGON ((126.98893 37.56810, 126.98895 37.568...
19150 1102058040004 장충동 1102058 POLYGON ((127.00338 37.55903, 127.00344 37.559...
19151 1121052010002 보라매동 1121052 POLYGON ((126.92720 37.49429, 126.92709 37.493...
19152 1121052010001 보라매동 1121052 POLYGON ((126.92591 37.49144, 126.92596 37.491...

19153 rows × 4 columns

댓글남기기