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
댓글남기기