1 minute read

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 진행

시각화 결과

image

  • 지도 내 색상 사이는 해당 자치구 내에서 따릉이 대여한 횟수에 따라 색상 차이를 표시함.
  • 대여 횟수가 많은 상위 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

image