따릉이 이용 데이터를 이용한 연관 키워드 분석 (1)_Data 전처리 및 지도 시각화 편
Project Process 별 자료 (총 4편)
따릉이 이용 데이터를 이용한 연관 키워드 분석 결과_요약
따릉이 이용 데이터를 이용한 연관 키워드 분석 (1)_Data 전처리 및 지도 시각화 편
따릉이 이용 데이터를 이용한 연관 키워드 분석 (2)_이용자 후기 크롤링 편
따릉이 이용 데이터를 이용한 연관 키워드 분석 (3)_키워드 정리 및 시각화
다룰내용
- 데이터 전처리 및 지도 시각화 진행과정 서술
이용 데이터
- 서울시 열린 데이터 광장
- 서울특별시 공공자전거 대여이력 정보 (http://data.seoul.go.kr/dataList/OA-15182/F/1/datasetView.do)
- 서울특별시 공공자전거 대여소 정보 (http://data.seoul.go.kr/dataList/OA-13252/F/1/datasetView.do)
전처리 과정
- 대여 이력 정보 내 대여일시, 대여소명, 이용시간, 이용거리 data만 사용
- 이 중, 이동거리가 0인 data는 결측치로 판단하여 제거.
- 따릉이 대여소 정보의 경우, 중복 data가 있어 해당 데이터 확인 후 제거하여 진행
(set 함수 이용하여 중복 data 확인) - 대여 이력 정보와 대여소 정보 data를 inner로 merge 진행
- 자치구별 대여횟수 및 대여소 별 대여 횟수 count 진행
시각화 결과
- 지도 내 색상 사이는 해당 자치구 내에서 따릉이 대여한 횟수에 따라 색상 차이를 표시함.
- 대여 횟수가 많은 상위 50개소는 마크로 표시
- 한강 주변 대여소에서 대부분 대여한 것이 시각적으로 확인됨.
코드 특이사항
- 중복값으로 인한 오류 발생
- 대여소 정보의 경우, 주소 및 위도/경도가 있어 중복이 없을 것이라 판단하고 사용한 결과 지속적인 오류 발생
- Set 함수를 사용하여 전체 길이 비교 후 value_counts 함수를 이용하여 중복 값을 확인 후 제거
- 지도로 시각화 진행
- Groupby를 이용하여 각 대여소 별 대여 data 수집
- Groupby 진행 후 size로 순차배열한 결과를 DataFrame으로 변환하면 기존 자료에서 집계 수량이 추가되어 DataFrame 생성
(집계 수량에 대한 열 정보 추가해줘야 함.) - 지도 파일을 불러와 서울 위도/경도를 입력하여 출력 위치를 고정시킴
- 자치구 별 대여 횟수 data 전달하여 색상으로 비교 표시
- Marker의 경우, 위도/경도에 대한 정보를 전달하고 popup에 대여소 명을 넣어줌
(Marker를 클릭할 때 대여소 명 출력)
# 상위 50개 대여소 위치 시각화
# DataFrame 불러오기
df_mark = df_final.groupby(['대여소번호','대여 대여소명', '자치구', '위도', '경도'])
group_sort = df_mark.size().sort_values(ascending = False)
df_info = pd.DataFrame(group_sort, columns=['대여횟수']).reset_index()
df_mark_top50 = df_info[:50]
# 지도 시각화 진행
import folium
import json
geo_path = 'skorea_municipalities_geo_simple.json'
geo_str = json.load(open(geo_path, encoding='utf-8'))
map1 = folium.Map(location=[37.5502, 126.982], zoom_start=11, tiles='Stamen Toner')
for i in range(len(df_mark_top50)):
marker = folium.Marker(
location=[df_mark_top50['위도'][i], df_mark_top50['경도'][i]],
popup=folium.Popup(df_mark_top50['대여 대여소명'][i], max_width='100'))
map2.add_child(marker)
i += 1
map1.choropleth(geo_data = geo_str,
data = df_gu['대여횟수'],
columns = [df_gu.index, df_gu['대여횟수']],
fill_color = 'YlGn',
key_on = 'feature.id')
map1