[COMPAS 광양시] 현재 설치 되어있는 전기차 충전소에 대해 알아보자!
솜씨좋은장씨
·2020. 9. 27. 12:31
데이터 분석 활용 시간
2020년 9월 27일 12시 ~ 14시 30분 ( 총 2시간 30분 소요 )
사용 데이터
01.광양시_충전기설치현황.csv
19.광양시_법정경계(읍면동).geojson
활용 코드 및 내용
필요 라이브러리 import
from shapely.geometry import Point, Polygon
import pandas as pd
import geopandas as gpd
from tqdm import tqdm
데이터 load 하기
- 충전기 설치 현황 정보
# file_list[0] == 01.광양시_충전기설치현황.csv
charge_st_df = pd.read_csv("./data/" + file_list[0])
charge_st_df.head()
- 읍면동 ( 법정경계 ) 정보
# file_list[14] == 19.광양시_법정경계(읍면동).geojson
emd_gdf = gpd.read_file("./data/" + file_list[14])
emd_gdf
- 읍면동 ( 행정경계 ) 정보
# file_list[15] == 20.광양시_행정경계(읍면동).geojson
emd_df_hangjung = gpd.read_file("./data/" + file_list[15])
emd_df_hangjung
충전소의 읍면동 ( 법정경계 ) 정보 확인하기
point_dict = {}
for i in range(len(charge_st_df)):
point_dict[charge_st_df['충전소명'].iloc[i]] = {}
point_dict[charge_st_df['충전소명'].iloc[i]]['Point'] = Point(charge_st_df['lon'].iloc[i], charge_st_df['lat'].iloc[i])
여기서 주의할 점은 평소에 좌표를 볼때 사용하는 순서인 ( 위도, 경도 ) 즉 ( lat, lon ) 순서로 Point를 만들 경우
within 또는 contains가 제대로 동작하지 않음
-> ( lon, lat ) , ( 경도, 위도 ) 순서로 작성하여야 함
point_dict_keys = list(point_dict.keys())
umd_keys = list(umd_polys.keys())
for key in point_dict_keys:
for umd_key in umd_keys:
umd_ploy_lists = umd_polys[umd_key]
for umd_polygon in umd_ploy_lists:
if umd_polygon.contains(point_dict[key]['Point']) == True:
point_dict[key]['umd'] = umd_key
break
point_dict
{'LF스퀘어 광양점': {'Point': <shapely.geometry.point.Point at 0x7fae78940cc0>,
'umd': '광양읍'},
'광양만권경제자유구역청': {'Point': <shapely.geometry.point.Point at 0x7fae78940b70>,
'umd': '광양읍'},
'광양송보파인빌5차아파트': {'Point': <shapely.geometry.point.Point at 0x7fae78940ac8>,
'umd': '마동'},
'광양시 모리스모텔': {'Point': <shapely.geometry.point.Point at 0x7fae789490f0>,
'umd': '광영동'},
'광양시 백운쇼핑센타': {'Point': <shapely.geometry.point.Point at 0x7fae78949978>,
'umd': '금호동'},
'광양시 블루핸즈(광양정비센터)': {'Point': <shapely.geometry.point.Point at 0x7fae789492e8>,
'umd': '광양읍'},
'광양시 비치모텔': {'Point': <shapely.geometry.point.Point at 0x7fae78949438>,
'umd': '진월면'},
'광양시 포스코 ICT 광양사업소': {'Point': <shapely.geometry.point.Point at 0x7fae78937cc0>,
'umd': '태인동'},
'광양시 프라자모텔': {'Point': <shapely.geometry.point.Point at 0x7fae78937f60>,
'umd': '광영동'},
'광양시 광양읍사무소': {'Point': <shapely.geometry.point.Point at 0x7fae78937780>,
'umd': '광양읍'},
'광양시 광영동주민센터': {'Point': <shapely.geometry.point.Point at 0x7fae78937b70>,
'umd': '광영동'},
'광양시 옥곡면사무소': {'Point': <shapely.geometry.point.Point at 0x7fae78937c50>,
'umd': '옥곡면'},
'광양읍사무소 앞 주차장': {'Point': <shapely.geometry.point.Point at 0x7fae78937e10>,
'umd': '광양읍'},
'광양주공이차아파트': {'Point': <shapely.geometry.point.Point at 0x7fae78937390>,
'umd': '중동'},
'한국전력광양지사': {'Point': <shapely.geometry.point.Point at 0x7fae78937cf8>,
'umd': '중동'},
'광영 근린공원': {'Point': <shapely.geometry.point.Point at 0x7fae78937198>,
'umd': '광영동'},
'광영동 가야아파트': {'Point': <shapely.geometry.point.Point at 0x7fae78937b00>,
'umd': '광영동'},
'구산칠성이편한세상': {'Point': <shapely.geometry.point.Point at 0x7fae78937be0>,
'umd': '광양읍'},
'대광로제비앙2차 아파트': {'Point': <shapely.geometry.point.Point at 0x7fae789376a0>,
'umd': '중동'},
'대신증권앞 주차장': {'Point': <shapely.geometry.point.Point at 0x7fae789375f8>,
'umd': '중동'},
'마틴모텔': {'Point': <shapely.geometry.point.Point at 0x7fae78937550>,
'umd': '광영동'},
'섬진강휴게소(부산방향)': {'Point': <shapely.geometry.point.Point at 0x7fae789374a8>,
'umd': '진월면'},
'섬진강휴게소(순천방향)': {'Point': <shapely.geometry.point.Point at 0x7fae78937400>,
'umd': '진월면'},
'쉐보레동광양지점서비스': {'Point': <shapely.geometry.point.Point at 0x7fae78937358>,
'umd': '태인동'},
'인동숲주차장': {'Point': <shapely.geometry.point.Point at 0x7fae789372b0>,
'umd': '광양읍'},
'중마버스터미널 공영주차장': {'Point': <shapely.geometry.point.Point at 0x7fae789371d0>,
'umd': '중동'},
'중마상설시장 주차장': {'Point': <shapely.geometry.point.Point at 0x7fae78937208>,
'umd': '중동'},
'호텔자바': {'Point': <shapely.geometry.point.Point at 0x7fae789370f0>,
'umd': '중동'},
'홈플러스 광양점': {'Point': <shapely.geometry.point.Point at 0x7fae78937518>,
'umd': '중동'},
'마동근린체육공원': {'Point': <shapely.geometry.point.Point at 0x7fae789374e0>,
'umd': '중동'},
'광양중마호반리젠시빌': {'Point': <shapely.geometry.point.Point at 0x7fae78937080>,
'umd': '중동'},
'태영1차 아파트': {'Point': <shapely.geometry.point.Point at 0x7fae78937978>,
'umd': '중동'},
'태영2차 아파트': {'Point': <shapely.geometry.point.Point at 0x7fae789372e8>,
'umd': '중동'},
'성호2-1차 아파트': {'Point': <shapely.geometry.point.Point at 0x7fae78937668>,
'umd': '중동'},
'송보파인빌 6차 아파트': {'Point': <shapely.geometry.point.Point at 0x7fae78937320>,
'umd': '마동'},
'송보파인빌 7차 아파트': {'Point': <shapely.geometry.point.Point at 0x7fae78937278>,
'umd': '광양읍'},
'남해오네뜨 아파트': {'Point': <shapely.geometry.point.Point at 0x7fae78937a58>,
'umd': '광양읍'},
'광양읍 목성 주공아파트': {'Point': <shapely.geometry.point.Point at 0x7fae78937e48>,
'umd': '광양읍'}}
충전기 설치 현황 정보 파일에 읍면동 ( 법정경계 ) column 추가하기
st_names = list(charge_st_df['충전소명'])
umd_infos = []
for st_name in st_names:
umd_name = point_dict[st_name]['umd']
umd_infos.append(umd_name)
charge_st_df['읍면동 (법정경계)'] = umd_infos
charge_st_df.head()
이전 게시물에서 만들어둔 차량 등록정보 정보를 활용해 차량 등록정보 column 추가하기
charge_st_umd_list = list(charge_st_df['읍면동 (법정경계)'])
car_enroll_infos = []
for umd in charge_st_umd_list:
car_enroll_info = umd_car_infos[umd]
car_enroll_infos.append(car_enroll_info)
charge_st_df['자동차 등록 현황 (법정경계)'] = car_enroll_infos
charge_st_df.head()
각 읍면동 ( 법정경계 ) 별 충전기 개수 확인해보기
umd_station_info_dict = {}
for umd_key in umd_keys:
umd_station_info_dict[umd_key] = {}
umd_station_info_dict[umd_key]['충전소명'] = []
umd_station_info_dict[umd_key]['급속'] = 0
umd_station_info_dict[umd_key]['완속'] = 0
umd_station_info_dict[umd_key]['전체'] = 0
for i in range(len(charge_st_df)):
umd = charge_st_df['읍면동 (법정경계)'].iloc[i]
fast_slow = charge_st_df['급속/완속'].iloc[i]
umd_station_info_dict[umd]['충전소명'].append(charge_st_df['충전소명'].iloc[i])
umd_station_info_dict[umd][fast_slow] += 1
umd_station_info_dict[umd]['전체'] += 1
umd_station_info_dict
{'황금동': {'충전소명': [], '급속': 0, '완속': 0, '전체': 0},
'황길동': {'충전소명': [], '급속': 0, '완속': 0, '전체': 0},
'도이동': {'충전소명': [], '급속': 0, '완속': 0, '전체': 0},
'성황동': {'충전소명': [], '급속': 0, '완속': 0, '전체': 0},
'중군동': {'충전소명': [], '급속': 0, '완속': 0, '전체': 0},
'중동': {'충전소명': ['광양주공이차아파트',
'한국전력광양지사',
'대광로제비앙2차 아파트',
'대신증권앞 주차장',
'중마버스터미널 공영주차장',
'중마상설시장 주차장',
'호텔자바',
'홈플러스 광양점',
'마동근린체육공원',
'광양중마호반리젠시빌',
'광양중마호반리젠시빌',
'태영1차 아파트',
'태영2차 아파트',
'성호2-1차 아파트'],
'급속': 10,
'완속': 4,
'전체': 14},
'마동': {'충전소명': ['광양송보파인빌5차아파트', '송보파인빌 6차 아파트'], '급속': 1, '완속': 1, '전체': 2},
'광영동': {'충전소명': ['광양시 모리스모텔',
'광양시 프라자모텔',
'광양시 광영동주민센터',
'광영 근린공원',
'광영동 가야아파트',
'마틴모텔'],
'급속': 1,
'완속': 5,
'전체': 6},
'태인동': {'충전소명': ['광양시 포스코 ICT 광양사업소', '쉐보레동광양지점서비스'],
'급속': 0,
'완속': 2,
'전체': 2},
'금호동': {'충전소명': ['광양시 백운쇼핑센타'], '급속': 0, '완속': 1, '전체': 1},
'광양읍': {'충전소명': ['LF스퀘어 광양점',
'광양만권경제자유구역청',
'광양시 블루핸즈(광양정비센터)',
'광양시 광양읍사무소',
'광양읍사무소 앞 주차장',
'구산칠성이편한세상',
'인동숲주차장',
'인동숲주차장',
'송보파인빌 7차 아파트',
'송보파인빌 7차 아파트',
'남해오네뜨 아파트',
'남해오네뜨 아파트',
'광양읍 목성 주공아파트'],
'급속': 7,
'완속': 6,
'전체': 13},
'봉강면': {'충전소명': [], '급속': 0, '완속': 0, '전체': 0},
'옥룡면': {'충전소명': [], '급속': 0, '완속': 0, '전체': 0},
'옥곡면': {'충전소명': ['광양시 옥곡면사무소'], '급속': 0, '완속': 1, '전체': 1},
'진상면': {'충전소명': [], '급속': 0, '완속': 0, '전체': 0},
'진월면': {'충전소명': ['광양시 비치모텔',
'섬진강휴게소(부산방향)',
'섬진강휴게소(부산방향)',
'섬진강휴게소(순천방향)',
'섬진강휴게소(순천방향)'],
'급속': 4,
'완속': 1,
'전체': 5},
'다압면': {'충전소명': [], '급속': 0, '완속': 0, '전체': 0}}
읍면동 ( 법정경계 ) 정보 DataFrame 만들기
umd_names = list(umd_station_info_dict.keys())
charge_st_names = []
fast_list = []
slow_list = []
whole_list = []
car_enroll_list = []
for key in umd_names:
charge_st_name = " | ".join(umd_station_info_dict[key]['충전소명'])
if charge_st_name == '':
charge_st_name = None
charge_st_names.append(charge_st_name)
fast_list.append(umd_station_info_dict[key]['급속'])
slow_list.append(umd_station_info_dict[key]['완속'])
whole_list.append(umd_station_info_dict[key]['전체'])
car_enroll_list.append(umd_car_infos[key])
umd_infos_df = pd.DataFrame({"읍면동":umd_names, "충전소 목록":charge_st_names,
"급속 충전소/개":fast_list, "완속 충전소/개":slow_list, "전체 충전소/개":whole_list,
"차량등록현황":car_enroll_list})
umd_infos_df.head()
같은 방법으로 읍면동 ( 행정경계 ) 정보 DataFrame 만들기
'경진대회, 공모전 > COMPAS 광양시 전기자동차 충전소 최적입지 선정' 카테고리의 다른 글
[COMPAS 광양시] 주어진 데이터를 활용하여 행정동별 정보를 모아보자! 2 ( 주차장, 건물, 기타 정보 ) (0) | 2020.10.04 |
---|---|
[COMPAS 광양시] 2019년 환경부 충전인프라 설치 지침 읽어보기 (0) | 2020.10.03 |
[COMPAS 광양시] 주어진 데이터를 활용하여 행정동별 정보를 모아보자! ( 충전소, 인구 수, 전기차 보급현황 ) (7) | 2020.10.01 |
[COMPAS 광양시] 100 x 100 격자 데이터 활용 각 읍면동별 차량 등록 정보 데이터 만들기 (0) | 2020.09.26 |
[COMPAS 광양시] 공모전 제공 데이터 살펴보기 (0) | 2020.09.20 |