따릉 이 데이터 | [데이콘] 따릉이 데이터를 활용한 데이터 분석 (전처리) 답을 믿으세요

당신은 주제를 찾고 있습니까 “따릉 이 데이터 – [데이콘] 따릉이 데이터를 활용한 데이터 분석 (전처리)“? 다음 카테고리의 웹사이트 you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 데이콘 이(가) 작성한 기사에는 조회수 2,260회 및 좋아요 20개 개의 좋아요가 있습니다.

따릉 이 데이터 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [데이콘] 따릉이 데이터를 활용한 데이터 분석 (전처리) – 따릉 이 데이터 주제에 대한 세부정보를 참조하세요

따릉이 데이터를 활용한 데이터 분석 입문 영상입니다.
실습용 파일: https://bit.ly/3eDxLCq
https://dacon.io

따릉 이 데이터 주제에 대한 자세한 내용은 여기를 참조하세요.

서울특별시_공공자전거 이용현황_20210131 | 공공데이터포털

서울특별시 공공자전거 이용현황 데이터로 서울특별시에서 운영하는 공공자전거(따릉이)에 대한 일별 대여건수 데이터를 제공합니다.

+ 여기에 더 보기

Source: www.data.go.kr

Date Published: 8/19/2021

View: 4559

[공공 데이터] 따릉이 데이터 분석 1 (데이터 확인 / 질문하기)

따릉이 데이터 분석 데이터 출처 : https://data.seoul.go.kr/dataList/datasetList.do 서울 열린데이터 광장에서 제공하는 서울시 공공자전거 이용 …

+ 여기에 보기

Source: sks8410.tistory.com

Date Published: 9/20/2021

View: 6484

데이터 시각화 사례 | 서울시 공공자전거 따릉이 데이터 분석

서울특별시가 운영하는 공공자전거 ‘따릉이’의 이용행태를 태블로로 분석해봤습니다. 각 지역구별로 몇 개의 대여소가 설치되어 있는지, 시간대별로, 요일(주말/평일) …

+ 여기에 표시

Source: tableauwiki.com

Date Published: 10/27/2021

View: 9828

빅데이터 분석을 통한 서울시 자전거 대여소 개선방안 연구

서울 따릉이 자전거는 누구나, 언제나, 어디. 서나 쉽고 편리하게 이용할 수 있는 무인대여. 시스템이다. 서울시의 교통체증, 대기오염 등 다. 양한 문제해결을 통해 …

+ 여기에 표시

Source: www.koreascience.or.kr

Date Published: 10/27/2022

View: 7000

서울 공공자전거 따릉이 대여이력 시각화 – VW LAB

따릉이 데이터는 서울 열린데이터 광장에서 받을 수 있다. 열린데이터광장에서 제공되는 데이터 중 여러가지 데이터 중 연습삼아 분석해보기 좋은 …

+ 자세한 내용은 여기를 클릭하십시오

Source: www.vw-lab.com

Date Published: 3/26/2022

View: 8723

2-1. 따릉이 이용 분석 part_1[전처리 및 간단한 시각화]

지난 1년간 서울시 공공자전거를 대여소별 데이터로 분석하여 시민들의 이용경향을 분석하여 서울시 공공자전거 사업이 잘 운영될 수 있도록 효율적인 …

+ 더 읽기

Source: hwangtoemat.github.io

Date Published: 5/18/2022

View: 3202

주제와 관련된 이미지 따릉 이 데이터

주제와 관련된 더 많은 사진을 참조하십시오 [데이콘] 따릉이 데이터를 활용한 데이터 분석 (전처리). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[데이콘] 따릉이 데이터를 활용한 데이터 분석 (전처리)
[데이콘] 따릉이 데이터를 활용한 데이터 분석 (전처리)

주제에 대한 기사 평가 따릉 이 데이터

  • Author: 데이콘
  • Views: 조회수 2,260회
  • Likes: 좋아요 20개
  • Date Published: 2020. 6. 26.
  • Video Url link: https://www.youtube.com/watch?v=7IbTi1QicHU

서울특별시_공공자전거 이용현황_20210131

서울특별시_공공자전거 이용현황

서울특별시 공공자전거 이용현황 데이터로 서울특별시에서 운영하는 공공자전거(따릉이)에 대한 일별 대여건수 데이터를 제공합니다.

좋아요 선택 안함, 좋아요 선택한 사람 수 0

싫어요 선택 안함, 싫어요 선택한 사람 수 0

관심

[공공 데이터] 따릉이 데이터 분석 1 (데이터 확인 / 질문하기)

728×90

따릉이 데이터 분석

데이터 출처 : https://data.seoul.go.kr/dataList/datasetList.do

서울 열린데이터 광장에서 제공하는 서울시 공공자전거 이용현황 데이터

– Data 1 : 서울특별시 공공자전거 대여소 정보

– Data 2 : 서울특별시 공공자전거 대여소별 이용정보(월별)

– Data 3 : 서울특별시 공공자전거 이용정보(시간대별)

이용건수 : 해당 시간대에 대여한 건수의 합

그룹명 없음, 대여소명 없음, 정비센터 등인 경우 테스트 및 정비 목적이므로 분석에 제외하여 활용

1. 데이터 확인

# 기본 패키지 불러오기 import math import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns plt.style.use(“seaborn”) sns.set(font_scale = 1) sns.set_style(“whitegrid”) import plotly.express as px import chart_studio.plotly as py import cufflinks as cf cf.go_offline(connected=True) import plotly.graph_objects as go import plotly.offline as pyo pyo.init_notebook_mode() from plotly.subplots import make_subplots import missingno as msno import warnings # 경고 메세지 숨기기 warnings.filterwarnings(action=’ignore’) plt.rcParams[‘font.family’] = ‘S-Core Dream’ # 한글 폰트 가져오기 plt.rcParams[‘axes.unicode_minus’] = False # – 기호 깨짐 해결

# 데이터 불러오기 bike_1 = pd.read_csv(“data/공공자전거대여소정보(21.01.31기준).csv”, encoding = “cp949”) bike_2 = pd.read_csv(“data/공공자전거대여소별이용정보_2020.07_2021.01.csv”, encoding = “cp949”) bike_3 = pd.read_csv(“data/공공자전거이용정보(시간대별)_21.01.csv”, encoding = “cp949”) print(bike_1.shape) print(bike_2.shape) print(bike_3.shape) bike_1.head() #bike_2.head() #bike_3.head()

# 데이터 기본 정보 확인 #bike_1.info() #bike_2.info() bike_3.info()

bike_1 데이터의 대여소번호는 수치나 연속성을 나타내는 값이 아니기 때문에 전처리 시 object 타입으로 변경하도록 하겠습니다.

bike_3 데이터의 이용건수, 운동량, 탄소량, 이동거리, 사용시간 컬럼이 object 타입으로 되어 있어 전처리 시 수치형 타입으로 변경하도록 하겠습니다.

bike_1, bike_3 데이터에 날짜를 나타내는 컬럼이 object 타입으로 되어 있어 전처리 시 날짜 타입으로 변경하도록 하겠습니다.

# 수치형 데이터 통계 확인 #bike_1.describe() #bike_2.describe() bike_3.describe()

bike_3 데이터내 사용시간 컬럼에서 최대값이 1,753 시간이나 되는것으로 확인되어 데이터 값이 정확한지 확인할 필요가 있을 것 같습니다.

# 범주형 데이터 통계 확인 #bike_1.describe(include = np.object_) #bike_2.describe(include = np.object_) bike_3.describe(include = np.object_)

bike_3 데이터내 성별이 4가지 종류가 되는것으로 확인되어 데이터 값이 제대로 들어가 있는지 확인할 필요가 있을 것 같습니다.

# bike_1 데이터 결측치 확인 bike_1.isnull().sum()

# bike_1 데이터 결측치 시각화 msno.bar(bike_1)

# bike_2 데이터 결측치 확인 bike_2.isnull().sum()

# bike_3 데이터 결측치 확인 bike_3.isnull().sum()

# bike_3 데이터 결측치 시각화 msno.bar(bike_3)

2. 질문하기

– 이동거리 / 평균 사용시간이 높은 대여소는?

– 운동량과 이동거리의 상관관계?

– 따릉이를 가장 많이 이용하는 성별은?

– 따릉이를 가장 많이 이용하는 연령대는?

– 서울시 구별로 거치대 개수와 대여건수는?

728×90

서울시 공공자전거 따릉이 데이터 분석 – TABLEAU WIKI

시각화 주제

서울특별시가 운영하는 공공자전거 ‘따릉이’의 이용행태를 분석해봤습니다. 각 지역구별로 몇 개의 대여소가 설치되어 있는지, 시간대별로, 요일(주말/평일)별로 사용자의 이용패턴에 어떤 차이가 있는지를 중심으로 시각화하였습니다.

데이터 출처

서울열린데이터광장 (https://data.seoul.go.kr/ )에 가면 서울시와 관련한 다양한 공공데이터를 무료로 다운로드받을 수 있는데요, 최신 데이터가 주기적으로 업데이트되고, 사용자들의 Q&A 성격의 댓글도 답변이 잘 되어 있는 것으로 보아, 성실하게 관리되는 사이트인 것 같습니다.

이번 시각화를 위해, [서울시 공공자전거 시간대별 이용정보_201812-201905] 데이터와 [공공자전거 대여소 정보_201905]를 사용했습니다.

완성 대시보드

대시보드 다운로드

https://public.tableau.com/profile/soyoung.park#!/vizhome/13816/sheet0

메인 시각화 차트 | Radial Stacked Bar Chart

시간대별로 따릉이의 이용건수에 어떤 변화가 있는지를 한 눈에 확인하는 차트를 메인 차트로 사용했습니다.

또한, 필터를 이용하여 지역구 및 주말/평일에 따라 시간대별 이용분포에 차이가 있는지를 사용자가 직접 탐색할 수 있도록 했습니다.

이 차트를 만들기 위해서는 동일한 데이터 셋을 Union 해야 하는데, 두 개의 데이터 셋이 각각 안쪽 원과 바깥쪽 원을 그리는 원리입니다.

자세한 만드는 방법은 Tableau Tips에서 다루겠습니다.

서울 공공자전거 따릉이 대여이력 시각화

따릉이 데이터는 서울 열린데이터 광장에서 받을 수 있다. 열린데이터광장에서 제공되는 데이터 중 여러가지 데이터 중 연습삼아 분석해보기 좋은 대상이라 ‘따릉이 데이터 분석’ 정도로 구글링해봐도 읽어볼만한 좋은 글들이 많이 나온다.

여기서는 첫 대여 이력이 있는 2015년 9월부터 현재 공개된 최신자료인 2021년 1월까지의 대여이력을 시각화했다.

데이터 준비

대여이력 데이터는 아래 링크에 있다.

대여소 위치의 경우 서울 열린데이터 광장의 다른 게시판에 있지만, 철거된 대여소의 경우 좌표가 나와있지 않다. 열린데이터광장 담당자도 현업부서로부터 데이터를 단순히 받아서 게시하는 것 같다. 그래서 현재 누락된 대여소들을 요청하고 기다리느니 그냥 여기저기 뒤적여서 모두 모았다.

아래의 github에 2021년 1월까지 대여 이력에 나타나 있는 모든 따릉이 대여소의 좌표를 찍어놓았다.

2019년 하반기까지는 데이터를 꾸준히 받아놓아서 개인적으로 보유한 데이터에서 누락된 데이터가 20여개, 그리고 최근의 데이터를 받아서 합치니 총 50여개 정도가 누락되어 있었다. 따릉이 홈페이지, 구글링, 개인블로그, 다음로드뷰, 네이버거리뷰 등으로 잘 찾아보면 과거 대여소들을 모두 찾을 수 있다.

설치한 뒤 이용건수가 10건도 안되는 시점에서도 철거된 대여소들이 종종 있다는 사실을 알게 되었다. 생각보다 폐쇄 요청 민원이 많은 것 같다.

무엇을 보여줄 것인가?

대여이력에는 이용자에 대한 속성이 붙어있지 않다. 대여반납시각과 대여반납장소만 있을 뿐이다. 일정 기간과 대여소나 주중, 주말 등으로 집계해보면 어떤 식으로 이용되는지 대략 파악할 수 있다. 2년쯤 전에 간단히 대여건수를 합산해본 적이 있다.

이번에는 너무 길지 않은 길이의 영상을 만들어보기로 했다. 3~4분 정도의 길이에 5년 5개월을 모두 담자니 구체적인 이용량을 보여주는건 무리겠다는 생각이 들었다.

그래서, 대여소가 만들어진 후 한달 간 그 대여소에서 대여하거나 반납한 이용건은 주황색으로 표시해봤다. 4분의 러닝타임 동안에 따릉이 대여소가 서울 전역으로 퍼져나가는 모습을 볼 수 있다. 영상이 4k 이므로 모니터가 크다면, 중간에 멈추고 관찰해보면 대략적인 이용패턴도 확인할 수는 있다. 다만, 그림은 그림일 뿐이라 구체적으로 비교하기는 어렵다.

cpp에서 OpenGL로 작업했다.

‘The First Journey’

따릉이 데이터상의 첫 이동은 2015년 9월 19일 새벽에 상수에서 망원으로 이동한 기록이다. (아래 그림은 영상에는 없다.)

2015년의 대여이력을 보면, 첫 번째 줄은 같은 장소의 대여반납이라 실제 이동인지 알 수 없어 생략했다. 사실 두번째와 세번째 줄은 이용시간이 너무 길어서 실제 사용자 대여인지, 혹은 테스트인지 알 수 없다. 어쨌든 데이터상으로 확실한 이동을 그릴 수 있는 2015년 9월 19일 새벽 1시 22분의 대여를 ‘따릉이의 첫 이동’으로 보았다. 말 그대로 The First Journey 인 셈이다. 그리고 같은 날, 날이 밝자 여의도와 홍대 인근에서 따릉이를 본격적으로 이용하기 시작했다.

5년 5개월을 둘러보자

2015년 9월에는 홍대와 여의도에 대여소가 설치된 듯 하고, 각각의 지역 안에서, 혹은 한강을 건너서 이용했던 것 같다. 따릉이를 타고 처음 한강을 건넌 궤적이 궁금해졌지만 그냥 찾지 않기로 했다.

영상 1초에 8일 정도가 지나가기 때문에, 실제 반납이 끝난 후에도 한동안 궤적을 남겨서 이용 자취를 알아볼 수 있도록 했다. 그냥 정직하게 반납 직후 그려지는 궤적을 화면에서 지워버리게 되면 화면이 번쩍번쩍해서 아무것도 알아볼 수 없고 눈만 아프게 된다.

2015년 10월에는 도심, 디지털미디어시티, 성수 부근에 새로운 대여소가 생겼다. 홍대와 여의도 첫 대여소들은 첫 대여가 이루어진지 한 달이 넘었으므로 푸른색으로 표시된다.

2016년 6월에는 도심부에 대여소가 추가로 설치된다.

2016년 7월에 공덕역과 마포구 곳곳에 신설되는데 공덕역 인근에서 여러 지역으로 네트워크 효과가 상당한 것 같다.

2016년 8월쯤 되면 양천구, 영등포구, 용산구, 성동구, 광진구, 동대문구 등에 대여소가 생긴다.

2016년 10월에는 은평구,

2017년 5월에는 강서구와 송파구, 강동구로 확장된다.

같은 달에 성북, 중랑, 노원, 그리고 강북, 도봉구 일부에도 개설되기 시작한 것 같다.

그 다음달에는 구로, 금천, 관악구

이어서 곧바로 동작, 서초, 강남구에도 따릉이 대여소가 생겼다. 이 때 쯤 25개 자치구에 빠짐 없이 대여소가 설치된 것 같다. 총 이용량은 532,406건이고, 아직 이용량이 많은 가을을 향해 달려가는 중이다.

2017년 9월까지 서울 곳곳에 계속 생겨난다. 9월에는 그 때까지의 최고치인 88만건을 찍었다.

겨울에는 아무래도 이용량이 줄어들 수 밖에 없다. 대여소 설치는 계속되고 있다.

몇 년동안은 봄과 가을에 집중적으로 설치된다. 2018년 4월도 예외는 아니었다.

2018년 9월 역시 그 때까지 중 최고치를 찍었다. 143만건.

잠실역 부근에는 원래 대여소가 있었는데, 추가로 설치한 듯하다. 평지라는 송파구의 특성상 잠실역이 주요 허브가 되어 주변으로 많이들 타고다니는 모습이 보인다.

2019년에는 대여소 추가는 크게 보이지 않는데, 이번에는 10월에 최고치를 찍었다. 234만건

이제 주요 근거리 집중 클러스터들이 보이기 시작한다.

홍대~디지털미디어시티, 종로따라, 성수~건대, 잠실송파, 신림역 부근, 여의도, 강서구 공항근처 등이 그렇고, 주요 간선도로나 테헤란로도 확실히 대여반납선들이 많이 겹쳐보인다. 다만, 이용궤적이 아니라 대여반납소를 직선에 가까운 선으로 이어 그렸기 때문에 한강이나 중랑천 등 하천을 따라 움직이는 이동량은 확인할 수가 없다.

2020년 3월, 코로나 터진 직후에도 따릉이 이용량은 크게 영향받지 않은 것 같다. 하긴 2020년 5월에 자전거 잘 팔린다는 기사도 본 것 같다. 동네에서도 80년대처럼 아이들이 자전거타고 많이 다니는 모습을 봤던 것 같다.

평창동 쪽에 새로 생긴 대여소의 OD를 보면… 여기는 주로 하드코어 유저들의 도전무대 같은 곳인가보다.

2020년 6월에도 신규 설치가 많은데, 기억이 맞다면, 뉴따릉이 대여소들이 들어서기 시작했던 것 같다. 기존 따릉이 대여소가 교체되기도 했던 것 같고. 그래서 서울 전역에 새로운 대여소들이 표시되는 것 같다.

그리하여 2020년 10월에는 286만건을 찍었다. 역시 역대 최다 이용량이다. 그 때 서울 곳곳 전광판에서 상영되었던 광고덕분인가…

2021년 7월 현재, 공개된 데이터는 2021년 1월까지다. 당시에도 전년도 1월보다 조금 더 많이 타서 80만명정도였다.

대략 살펴보기는 끝.

아래 영상에서 4분 동안 5년 5개월을 돌아볼 수 있다.

4k까지 지원한다. 음향도 좀 만들어 넣고 싶었지만 늘 개인 작업은 없는 시간 짜내서 가까스로 해낼 뿐이다.

거의 세 달 가까이 조금씩 끄적거리다가 어제 밤, 오늘 밤에 좀 시간을 내서 완성해봤다.

2-1. 따릉이 이용 분석 part_1[전처리 및 간단한 시각화]

2-1. 따릉이 이용 분석 part_1[전처리 및 간단한 시각화] 지난 1년간 서울시 공공자전거를 대여소별 데이터로 분석하여 시민들의 이용경향을 분석하여 서울시 공공자전거 사업이 잘 운영될 수 있도록 효율적인 따릉이분배방법을 생각해 본다.

[main code]

지난 1년간 서울시 공공자전거 대여소별 이용 분석

(1) 주제 선정 이유

서울시를 돌아다니다보면 따릉이를 타고있는 사람을 보거나 진열된 따릉이를 보거나 대여소를 보는등 서욿시에서 하는 공공자전거 사업인 따릉이를 쉽게 볼 수 있다. 따릉이는 서울시의 친환경사업과 함께 시민들의 더욱더 편한 이동수단을 제공하기 위해 2015년부터 현재까지 계속 이루어지고 있는 사업이다. 실제로 시민들은 가까운거리를 가거나 출퇴근, 산책, 운동을 하는 등 여러 방면에서 따릉이를 이용하고 있다.

과거에 비해 점점 좋아지고 있기는 하지만 여전히 이용자에 비해 자전거의 수가 턱없이 부족한 실정이다. 이러한 문제를 해결하기 위해서 서울시는 몰려있는 따릉이 부족한곳에 분배시켜주는 따릉이 분배팀을 운영하고 있다. 따릉이분배팀의 원활한 운영을 위해서 자전거를 시간대별, 위치별 이용량을 분석하여 어느곳이 부족한지 알아보고 자전거를 효과적으로 배치해야 한다. 지금부터 서울시에서 제공 따릉이에 관련 데이터를 이용하여 시민들의 이용경향을 분석하고 어디가 언제 부족한지를 분석하여 어떻게 따릉이를 효과적으로 분배해야하는지 생각해 볼 것 이다.

(2) 가설 정의

지난 1년간 서울시 공공자전거를 대여소별 데이터로 분석하여 시민들의 이용경향을 분석하여 서울시 공공자전거 사업이 잘 운영될 수 있도록 효율적인 따릉이분배방법을 생각해 본다.

(3) 인터넷을 통한 데이터 획득

정부 3.0 공공 데이터 : http://www.data.go.kr/

서울시 열린 데이터 광장 : http://data.seoul.go.kr/

위의 두 페이지에 서울시 공공자전거에 대한 대여소별 월간 이용정보, 시간대별 이용정보를 csv형태의 파일로 얻어서 사용하는 목적에 맞게 가공하였다.

(4) 분석을 위한 데이터의 가공

1. 서울시 공공자전거 사업 17년, 18년 비교 데이터 가공

import pandas as pd import numpy as np

서울시 공공자전거 대여소 데이터가공

Bike_Stop = pd . read_csv ( ‘../raw data/서울시_공공자전거_대여소_정보.csv’ , engine = ‘python’ ) Bike_Stop . head ()

구분 대여소번호 대여소명 대여소 주소 거치대수 위도 경도 0 강남구 2301 현대고등학교 건너편 서울특별시 강남구 압구정로 134 10 37.524071 127.021790 1 강남구 2302 교보타워 버스정류장(신논현역 3번출구 후면) 서울특별시 강남구 봉은사로 지하 102 10 37.505581 127.024277 2 강남구 2303 논현역 7번출구 서울특별시 강남구 학동로 지하 102 15 37.511517 127.021477 3 강남구 2304 신영 ROYAL PALACE 앞 서울특별시 강남구 언주로 626 10 37.512527 127.035835 4 강남구 2305 MCM 본사 직영점 앞 서울특별시 강남구 언주로 734 10 37.520641 127.034508

다른 데이터와 비교하기 쉽게 unique 한 열인 ‘대여소번호’를 기준으로 오름차순 정렬 후 index를 다시 설정했다.

Bike_Stop = Bike_Stop . sort_values ( by = “대여소번호” , ascending = True ) # 대여소번호를 기준으로 오름차순 정렬 Bike_Stop = Bike_Stop . reset_index ( drop = ‘True’ ) # index를 다시 설정 Bike_Stop . head ()

구분 대여소번호 대여소명 대여소 주소 거치대수 위도 경도 0 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 5 37.549561 126.905754 1 마포구 102 망원역 1번출구 앞 서울특별시 마포구 월드컵로 72 20 37.556000 126.910454 2 마포구 103 망원역 2번출구 앞 서울특별시 마포구 월드컵로 79 14 37.554951 126.910835 3 마포구 104 합정역 1번출구 앞 서울특별시 마포구 양화로 59 13 37.550629 126.914986 4 마포구 105 합정역 5번출구 앞 서울특별시 마포구 양화로 48 5 37.550007 126.914825

서울특별시 공공자전거 대여소별 이용정보(17년 상반기) 데이터 가공

Bike_Month = pd . read_csv ( ‘../raw data/서울특별시 공공자전거 대여소별 이용정보(월간)_2017_1_12.csv’ , engine = ‘python’ ) Bike_Month . head ()

‘대여일자’ ‘대여소번호’ ‘대여소’ ‘대여건수’ ‘반납건수’ 0 ‘201701’ ‘108’ ‘ 서교동 사거리’ 246 198 1 ‘201701’ ‘503’ ‘ 더샵스타시티 C동 앞’ 246 224 2 ‘201701’ ‘504’ ‘ 신자초교입구교차로’ 232 261 3 ‘201701’ ‘505’ ‘ 자양사거리 광진아크로텔 앞’ 302 313 4 ‘201701’ ‘506’ ‘ 금호 어울림 아파트 앞’ 72 77

상반기의 데이터만 필요하기때문에 17년도 상반기의 데이터만 Bike_Month에 복사한다.

Bike_Month = Bike_Month [ Bike_Month [ “‘대여일자'” ] < "'201707'" ]. copy () #상반기의테이터만 저장 Bike_Month . tail () '대여일자' '대여소번호' '대여소' '대여건수' '반납건수' 3067 '201706' '415' ' DMC역 9번출구 앞' 1929 1607 3068 '201706' '416' ' 상암월드컵파크 1단지 교차로' 980 510 3069 '201706' '500' ' 어린이대공원역 3번출구 앞' 1858 1673 3070 '201706' '501' ' 광진구의회 앞' 2354 2407 3071 '201706' '502' ' 뚝섬유원지역 1번출구 앞' 4242 4840 ‘대여소’ 열과 ‘대여일자’열은 분석에 필요없는 요소가 있기 때문에 삭제한다. del Bike_Month [ "'대여일자'" ] # '대여일자'열을 삭제 del Bike_Month [ "'대여소'" ] # '대여소'열을 삭제 Bike_Month . head () '대여소번호' '대여건수' '반납건수' 0 '108' 246 198 1 '503' 246 224 2 '504' 232 261 3 '505' 302 313 4 '506' 72 77 데이터가 월별로 나와 있는데 월별데이터를 원하는 것이 아니라 상반기 통합데이터를 원하고 있다. 띠라서 ‘대여소번호’를 기준으로 통합하여 ‘대여건수’, ‘반납건수’의 합계를 나타낸다. grouped = Bike_Month [[ "'대여건수'" , "'반납건수'" ]]. groupby ( Bike_Month [ "'대여소번호'" ]) Bike_Month_cumsum = grouped . sum () # '대여소번호'를 기준으로 그룹화하여 합산을 Bike_Month_cumsum에 대입한다. Bike_Month_rent = Bike_Month . drop_duplicates ([ "'대여소번호'" ])[[ "'대여소번호'" ]] Bike_Month_rent = Bike_Month_rent . sort_values ( by = "'대여소번호'" ) # Bike_Month_rent에 '대여소번호'를 기준으로 정렬한다. Bike_Month_cumsum = Bike_Month_cumsum . reset_index ( drop = 'True' ) Bike_Month_rent = Bike_Month_rent . reset_index ( drop = 'True' ) #index를 재설정 한다. Bike_Month = pd . concat ([ Bike_Month_rent , Bike_Month_cumsum ], axis = 1 ) # Bike_Month_rent와 Bike_Month_cumsum을 합친다. Bike_Month . head () '대여소번호' '대여건수' '반납건수' 0 '1001' 1410 1314 1 '1002' 589 755 2 '1003' 679 764 3 '1004' 833 1119 4 '1006' 831 792 Bike_Month . tail () '대여소번호' '대여건수' '반납건수' 694 '933' 2377 2742 695 '상암센터 정비실' 40 70 696 '위트콤' 158 153 697 '위트콤공장' 34 29 698 '중랑센터' 70 65 ‘데이터번호’열에 번호가 아닌 필요없는 데이터가 있어서 없애준다 Bike_Month . drop ([ 695 ], inplace = True ) Bike_Month . drop ([ 696 ], inplace = True ) Bike_Month . drop ([ 697 ], inplace = True ) Bike_Month . drop ([ 698 ], inplace = True ) # 행을 삭제함 Bike_Month . tail () '대여소번호' '대여건수' '반납건수' 690 '928' 642 523 691 '930' 723 791 692 '931' 3202 4155 693 '932' 2249 2293 694 '933' 2377 2742 열의 이름을 알아보기 쉽게 바꾸고 ‘회수율’이라는 열을 추가한다. 회수율은 대여건수와 반납건수를 비교하기 위한 열이다. 회수율 = ‘(반납건수 -대여건수) / 100’ 회수율이 클수록 반납되는 자전거가 더 많아 자전거가 쌓여있고, 회수율이 작을수록 대여되는 자전거가 더 많아 자전거가 부족할 확률이 높다. ‘서울시 공공자전거 대여소’ 데이터의 ‘대여소번호’값과 형태를 같게 하여 두 데이터를 병합하기 쉽게 한다. Bike_Month . rename ( columns = { Bike_Month . columns [ 0 ] : '대여소번호' , Bike_Month . columns [ 1 ] : '17년_대여건수' , Bike_Month . columns [ 2 ] : '17년_반납건수' }, inplace = True ) # 열의 이름을 바꾼다. Bike_Month [ '17년_회수율' ] = ( Bike_Month [ '17년_반납건수' ] - Bike_Month [ '17년_대여건수' ]) / 100 # '회수율'열을 추가한다. Bike_Month [ '대여소번호' ] = Bike_Month [ '대여소번호' ]. apply ( lambda x : int ( str ( x ). rstrip ( "'" ). lstrip ( "'" ))) # 번호 양쪽의 ''를 없애고 Bike_Month = Bike_Month . sort_values ( by = "대여소번호" , ascending = True ) # '대여소번호'를 기준으로 오름차순 정렬한다. Bike_Month = Bike_Month . reset_index ( drop = 'True' ) # index를 재설정한다. Bike_Month . head () 대여소번호 17년_대여건수 17년_반납건수 17년_회수율 0 101 1865 2128 2.63 1 102 7492 6758 -7.34 2 103 5494 5399 -0.95 3 104 6147 4876 -12.71 4 105 3920 3176 -7.44 서울특별시 공공자전거 대여소별 이용정보(18년 상반기) 데이터 가공 위의 ‘서울특별시 공공자전거 대여소별 이용정보(17년 상반기) 데이터 가공’ 과정과 같기 때문에 추가 설명은 생략한다.. (18년데이터에는 ‘데이터번호’열에 번호가 아닌 필요없는 데이터가 없어서 필요없는 행을 삭제하는 과정은 실시하지 않았다.) Bike_Month_18 = pd . read_csv ( '../raw data/서울특별시 공공자전거 대여소별 이용정보(월간)_2018_1_6.csv' , engine = 'python' ) del Bike_Month_18 [ "'대여일자'" ] del Bike_Month_18 [ "'대여소'" ] grouped = Bike_Month_18 [[ "'대여건수'" , "'반납건수'" ]]. groupby ( Bike_Month_18 [ "'대여소번호'" ]) Bike_Month_18_cumsum = grouped . sum () Bike_Month_18_rent = Bike_Month_18 . drop_duplicates ([ "'대여소번호'" ])[[ "'대여소번호'" ]] Bike_Month_18_rent = Bike_Month_18_rent . sort_values ( by = "'대여소번호'" ) Bike_Month_18_cumsum = Bike_Month_18_cumsum . reset_index ( drop = 'True' ) Bike_Month_18_rent = Bike_Month_18_rent . reset_index ( drop = 'True' ) Bike_Month_18 = pd . concat ([ Bike_Month_18_rent , Bike_Month_18_cumsum ], axis = 1 ) Bike_Month_18 . rename ( columns = { Bike_Month_18 . columns [ 0 ] : '대여소번호' , Bike_Month_18 . columns [ 1 ] : '18년_대여건수' , Bike_Month_18 . columns [ 2 ] : '18년_반납건수' }, inplace = True ) Bike_Month_18 [ '18년_회수율' ] = ( Bike_Month_18 [ '18년_반납건수' ] - Bike_Month_18 [ '18년_대여건수' ]) / 100 Bike_Month_18 [ '대여소번호' ] = Bike_Month_18 [ '대여소번호' ]. apply ( lambda x : int ( str ( x ). rstrip ( "'" ). lstrip ( "'" ))) Bike_Month_18 = Bike_Month_18 . sort_values ( by = "대여소번호" , ascending = True ) Bike_Month_18 = Bike_Month_18 . reset_index ( drop = 'True' ) Bike_Month_18 . head () 대여소번호 18년_대여건수 18년_반납건수 18년_회수율 0 101 2263 2247 -0.16 1 102 8735 8364 -3.71 2 103 6111 5748 -3.63 3 104 5835 5333 -5.02 4 105 3692 3047 -6.45 대여소 정보와 년도별 이용정보 데이터 통합 대여소 정보와 년도별 이용정보 데이터를 통합하고 csv형태로 저장한다. 통합하는 이유는 최종보고서에서 시각화를 통해 도출해낼 정보에 대여소 위치 정보와 여러 수치를 비교해야 하기 때문이다. TotalData_17 = pd . merge ( Bike_Stop , Bike_Month , on = '대여소번호' ) # 두 데이터를 병합 TotalData_17 [ '17년_하루평균대여' ] = round ( TotalData_17 [ '17년_대여건수' ] / 181 , 2 ) # 하루평균대여 열을 추가함 TotalData_17 . rename ( columns = { TotalData_17 . columns [ 2 ] : '17_대여소명' }, inplace = True ) TD_17 = TotalData_17 . copy () TD_17 . to_csv ( '../processing data/17년 서울시 공공자전거 대여소및 이용현황.csv' , mode = 'w' ) #가공한 데이터를 csv형태로 저장함 TotalData_17 . head () 구분 대여소번호 17_대여소명 대여소 주소 거치대수 위도 경도 17년_대여건수 17년_반납건수 17년_회수율 17년_하루평균대여 0 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 5 37.549561 126.905754 1865 2128 2.63 10.30 1 마포구 102 망원역 1번출구 앞 서울특별시 마포구 월드컵로 72 20 37.556000 126.910454 7492 6758 -7.34 41.39 2 마포구 103 망원역 2번출구 앞 서울특별시 마포구 월드컵로 79 14 37.554951 126.910835 5494 5399 -0.95 30.35 3 마포구 104 합정역 1번출구 앞 서울특별시 마포구 양화로 59 13 37.550629 126.914986 6147 4876 -12.71 33.96 4 마포구 105 합정역 5번출구 앞 서울특별시 마포구 양화로 48 5 37.550007 126.914825 3920 3176 -7.44 21.66 TotalData_18 = pd . merge ( Bike_Stop , Bike_Month_18 , on = '대여소번호' ) TotalData_18 [ '18년_하루평균대여' ] = round ( TotalData_18 [ '18년_대여건수' ] / 181 , 2 ) TotalData_18 . rename ( columns = { TotalData_18 . columns [ 2 ] : '18_대여소명' }, inplace = True ) TD_18 = TotalData_18 . copy () TD_18 . to_csv ( '../processing data/18년 서울시 공공자전거 대여소및 이용현황.csv' , mode = 'w' ) TotalData_18 . head () 구분 대여소번호 18_대여소명 대여소 주소 거치대수 위도 경도 18년_대여건수 18년_반납건수 18년_회수율 18년_하루평균대여 0 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 5 37.549561 126.905754 2263 2247 -0.16 12.50 1 마포구 102 망원역 1번출구 앞 서울특별시 마포구 월드컵로 72 20 37.556000 126.910454 8735 8364 -3.71 48.26 2 마포구 103 망원역 2번출구 앞 서울특별시 마포구 월드컵로 79 14 37.554951 126.910835 6111 5748 -3.63 33.76 3 마포구 104 합정역 1번출구 앞 서울특별시 마포구 양화로 59 13 37.550629 126.914986 5835 5333 -5.02 32.24 4 마포구 105 합정역 5번출구 앞 서울특별시 마포구 양화로 48 5 37.550007 126.914825 3692 3047 -6.45 20.40 2. 시간대별 대여소 이용건수 데이터 가공 시간별 대여소 이용건수 데이터 가공 Bike_Time1 = pd . read_excel ( '../raw data/서울특별시 공공자전거 시간대별 대여정보_201801_02.xlsx' ) Bike_Time1 . head () 대여일자 대여시간 대여소번호 대여소명 대여구분코드 성별 연령대코드 이용건수 운동량 탄소량 이동거리 이동시간 0 2018-01-01 0 300 정동사거리 정기권 F ~10대 1 37.32 0.34 1450 23 1 2018-01-01 0 505 자양사거리 광진아크로텔 앞 정기권 F 20대 1 54.83 0.49 2130 15 2 2018-01-01 0 1531 미아사거리 1번 출구 정기권 F 20대 1 78.34 0.73 3140 17 3 2018-01-01 0 516 광진메디칼 앞 정기권 F 20대 1 29.95 0.29 1240 5 4 2018-01-01 0 3508 화양사거리 정기권 F 20대 1 46.09 0.45 1940 43 Bike_Time2 = pd . read_excel ( '../raw data/서울특별시 공공자전거 시간대별 대여정보_201803_04.xlsx' ) Bike_Time3 = pd . read_excel ( '../raw data/서울특별시 공공자전거 시간대별 대여정보_201805.xlsx' ) Bike_Time4 = pd . read_excel ( '../raw data/서울특별시 공공자전거 시간대별 대여정보_201806.xlsx' ) 상반기의 데이터만 필요하기 때문에 데이터에서 6월까지의 데이터만 가져온다. 데이터셋을 합쳐 상반기데이터를 완성한다. Bike_Time = pd . concat ([ Bike_Time1 , Bike_Time2 , Bike_Time3 , Bike_Time4 ], ignore_index = True ) Bike_Time . tail () 대여일자 대여시간 대여소번호 대여소명 대여구분코드 성별 연령대코드 이용건수 운동량 탄소량 이동거리 이동시간 2810630 2018-06-30 23 1210 롯데월드타워(잠실역2번출구 쪽) 단체권 F 40대 2 135.83 1.59 6860 90 2810631 2018-06-30 23 747 목동3단지 상가 단체권 M 20대 2 225.06 1.78 7680 34 2810632 2018-06-30 23 3509 세종사이버대학교 단체권 M 20대 2 706.57 6.36 27450 216 2810633 2018-06-30 23 1122 황금내근린공원 단체권 M 20대 2 515.21 3.87 16680 97 2810634 2018-06-30 23 170 가재울 뉴타운 주유소 옆 단체권 M 40대 2 329.21 2.97 12790 95 필요없는 데이터를 삭제하고 열의 이름을 바꿔 데이터를 통합하기 편하게 한다. del Bike_Time [ "대여일자" ] # '대여일자'열을 삭제 del Bike_Time [ "대여소명" ] # '대여소'열을 삭제 del Bike_Time [ "성별" ] del Bike_Time [ "연령대코드" ] del Bike_Time [ "운동량" ] del Bike_Time [ "탄소량" ] del Bike_Time [ "이동거리" ] del Bike_Time [ "이동시간" ] del Bike_Time [ "대여구분코드" ] Bike_Time . rename ( columns = { Bike_Time . columns [ 0 ] : '대여시간' , Bike_Time . columns [ 1 ] : '대여소번호' , Bike_Time . columns [ 2 ] : '이용건수' }, inplace = True ) # 열의 이름을 바꾼다. Bike_Time . tail () 대여시간 대여소번호 이용건수 2810630 23 1210 2 2810631 23 747 2 2810632 23 3509 2 2810633 23 1122 2 2810634 23 170 2 월별로 나눌 필요가 없기때문에 (대여소변호,대여시간)을 key로 이용건수를 합친다. grouped = Bike_Time [[ "이용건수" ]]. groupby ([ Bike_Time [ '대여소번호' ], Bike_Time [ '대여시간' ]]) Bike_Time_cumsum = grouped . sum () Bike_Time_rent = Bike_Time . drop_duplicates ([ "대여소번호" , '대여시간' ])[[ '대여소번호' , '대여시간' ]] Bike_Time_rent = Bike_Time_rent . sort_values ( by = [ "대여소번호" , '대여시간' ]) Bike_Time_cumsum = Bike_Time_cumsum . reset_index ( drop = 'True' ) Bike_Time_rent = Bike_Time_rent . reset_index ( drop = 'True' ) Bike_Time = pd . concat ([ Bike_Time_rent , Bike_Time_cumsum ], axis = 1 ) Bike_Time . head () 대여소번호 대여시간 이용건수 0 3 0 1 1 3 8 2 2 3 9 9 3 3 10 11 4 3 11 17 Bike_Time . tail () 대여소번호 대여시간 이용건수 30342 9999 19 96 30343 9999 20 70 30344 9999 21 48 30345 9999 22 49 30346 9999 23 33 위와 같은 필요없는 대여소번호를 지워준다. Bike_Time = Bike_Time [ Bike_Time [ "대여소번호" ] < 9999 ]. copy () Bike_Time = Bike_Time [ Bike_Time [ "대여소번호" ] > 100 ]. copy () Bike_Time . head ()

대여소번호 대여시간 이용건수 29 101 0 69 30 101 1 53 31 101 2 46 32 101 3 27 33 101 4 14

데이터의 통합을 위해 자료형을 바꿔준다.

Bike_Time [ ‘이용건수’ ] = Bike_Time [ ‘이용건수’ ]. apply ( lambda x : int ( x )) Bike_Time . head ()

대여소번호 대여시간 이용건수 29 101 0 69 30 101 1 53 31 101 2 46 32 101 3 27 33 101 4 14

Bike_Stop = pd . read_csv ( ‘../raw data/서울시_공공자전거_대여소_정보.csv’ , engine = ‘python’ ) del Bike_Stop [ “거치대수” ] Bike_Stop . head ()

구분 대여소번호 대여소명 대여소 주소 위도 경도 0 강남구 2301 현대고등학교 건너편 서울특별시 강남구 압구정로 134 37.524071 127.021790 1 강남구 2302 교보타워 버스정류장(신논현역 3번출구 후면) 서울특별시 강남구 봉은사로 지하 102 37.505581 127.024277 2 강남구 2303 논현역 7번출구 서울특별시 강남구 학동로 지하 102 37.511517 127.021477 3 강남구 2304 신영 ROYAL PALACE 앞 서울특별시 강남구 언주로 626 37.512527 127.035835 4 강남구 2305 MCM 본사 직영점 앞 서울특별시 강남구 언주로 734 37.520641 127.034508

Bike_Stop = Bike_Stop . sort_values ( by = “대여소번호” , ascending = True ) # 대여소번호를 기준으로 오름차순 정렬 Bike_Stop = Bike_Stop . reset_index ( drop = ‘True’ ) # index를 다시 설정 Bike_Stop . head ()

구분 대여소번호 대여소명 대여소 주소 위도 경도 0 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 37.549561 126.905754 1 마포구 102 망원역 1번출구 앞 서울특별시 마포구 월드컵로 72 37.556000 126.910454 2 마포구 103 망원역 2번출구 앞 서울특별시 마포구 월드컵로 79 37.554951 126.910835 3 마포구 104 합정역 1번출구 앞 서울특별시 마포구 양화로 59 37.550629 126.914986 4 마포구 105 합정역 5번출구 앞 서울특별시 마포구 양화로 48 37.550007 126.914825

가공한 두 데이터를 병합하고 병합한 데이터를 csv형태로 저장한다.

TotalData_time = pd . merge ( Bike_Stop , Bike_Time , on = ‘대여소번호’ ) # 두 데이터를 병합 TD_time = TotalData_time . copy () TD_time . to_csv ( ‘../processing data/18년 서울시 공공자전거 시간별 이용.csv’ , mode = ‘w’ ) TotalData_time . head ()

구분 대여소번호 대여소명 대여소 주소 위도 경도 대여시간 이용건수 0 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 37.549561 126.905754 0 69 1 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 37.549561 126.905754 1 53 2 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 37.549561 126.905754 2 46 3 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 37.549561 126.905754 3 27 4 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 37.549561 126.905754 4 14

시간대 구간별 이용건수 비교 데이터 가공

시간대를 5가지 구간[ 새벽(00시~07시), 출근(07시~10시), 낮(10시~17시), 퇴근(17시~20시), 밤(20시~24시) ]으로 나누고 비교하기 편하도록 시간당이용건수를 출력한다.

TotalData_dawn = TotalData_time [ TotalData_time [ “대여시간” ] < 7 ]. copy () del TotalData_dawn [ "대여시간" ] grouped = TotalData_dawn [[ "이용건수" ]]. groupby ([ TotalData_dawn [ '대여소번호' ]]) TotalData_dawn_cumsum = round ( grouped . sum () / 7 , 2 ) # 시간당 이용건수를 TotalData_dawn_cumsum에 저장한다. TotalData_dawn_rent = TotalData_dawn . drop_duplicates ([ "대여소번호" ])[[ '대여소번호' ]] TotalData_dawn_rent = TotalData_dawn_rent . sort_values ( by = [ "대여소번호" ]) # TotalData_dawn_rent에 '대여소번호'를 기준으로 정렬한다. TotalData_dawn_cumsum = TotalData_dawn_cumsum . reset_index ( drop = 'True' ) TotalData_dawn_rent = TotalData_dawn_rent . reset_index ( drop = 'True' ) #index를 재설정 한다. TotalData_dawn = pd . concat ([ TotalData_dawn_rent , TotalData_dawn_cumsum ], axis = 1 ) TotalData_dawn . rename ( columns = { TotalData_dawn . columns [ 1 ] : '시간당이용건수(새벽)' }, inplace = True ) TotalData_dawn . head () 대여소번호 시간당이용건수(새벽) 0 101 42.14 1 102 160.00 2 103 126.43 3 104 64.57 4 105 65.57 TotalData_work = TotalData_time [ TotalData_time [ "대여시간" ] < 10 ]. copy () TotalData_work = TotalData_work [ 6 < TotalData_work [ "대여시간" ]]. copy () del TotalData_work [ "대여시간" ] grouped = TotalData_work [[ "이용건수" ]]. groupby ([ TotalData_work [ '대여소번호' ]]) TotalData_work_cumsum = round ( grouped . sum () / 3 , 2 ) TotalData_work_rent = TotalData_work . drop_duplicates ([ "대여소번호" ])[[ '대여소번호' ]] TotalData_work_rent = TotalData_work_rent . sort_values ( by = [ "대여소번호" ]) TotalData_work_cumsum = TotalData_work_cumsum . reset_index ( drop = 'True' ) TotalData_work_rent = TotalData_work_rent . reset_index ( drop = 'True' ) TotalData_work = pd . concat ([ TotalData_work_rent , TotalData_work_cumsum ], axis = 1 ) TotalData_work . rename ( columns = { TotalData_work . columns [ 1 ] : '시간당이용건수(출근)' }, inplace = True ) TotalData_work . head () 대여소번호 시간당이용건수(출근) 0 101 169.67 1 102 352.33 2 103 188.67 3 104 69.33 4 105 122.33 TotalData_day = TotalData_time [ TotalData_time [ "대여시간" ] < 17 ]. copy () TotalData_day = TotalData_day [ 9 < TotalData_day [ "대여시간" ]]. copy () del TotalData_day [ "대여시간" ] grouped = TotalData_day [[ "이용건수" ]]. groupby ([ TotalData_day [ '대여소번호' ]]) TotalData_day_cumsum = round ( grouped . sum () / 7 , 2 ) TotalData_day_rent = TotalData_day . drop_duplicates ([ "대여소번호" ])[[ '대여소번호' ]] TotalData_day_rent = TotalData_day_rent . sort_values ( by = [ "대여소번호" ]) TotalData_day_cumsum = TotalData_day_cumsum . reset_index ( drop = 'True' ) TotalData_day_rent = TotalData_day_rent . reset_index ( drop = 'True' ) TotalData_day = pd . concat ([ TotalData_day_rent , TotalData_day_cumsum ], axis = 1 ) TotalData_day . rename ( columns = { TotalData_day . columns [ 1 ] : '시간당이용건수(낮)' }, inplace = True ) TotalData_day . head () 대여소번호 시간당이용건수(낮) 0 101 77.14 1 102 352.14 2 103 268.86 3 104 275.43 4 105 146.29 TotalData_home = TotalData_time [ TotalData_time [ "대여시간" ] < 20 ]. copy () TotalData_home = TotalData_home [ 16 < TotalData_home [ "대여시간" ]]. copy () del TotalData_home [ "대여시간" ] grouped = TotalData_home [[ "이용건수" ]]. groupby ([ TotalData_home [ '대여소번호' ]]) TotalData_home_cumsum = round ( grouped . sum () / 3 , 2 ) TotalData_home_rent = TotalData_home . drop_duplicates ([ "대여소번호" ])[[ '대여소번호' ]] TotalData_home_rent = TotalData_home_rent . sort_values ( by = [ "대여소번호" ]) TotalData_home_cumsum = TotalData_home_cumsum . reset_index ( drop = 'True' ) TotalData_home_rent = TotalData_home_rent . reset_index ( drop = 'True' ) TotalData_home = pd . concat ([ TotalData_home_rent , TotalData_home_cumsum ], axis = 1 ) TotalData_home . rename ( columns = { TotalData_home . columns [ 1 ] : '시간당이용건수(퇴근)' }, inplace = True ) TotalData_home . head () 대여소번호 시간당이용건수(퇴근) 0 101 154.33 1 102 631.33 2 103 391.33 3 104 574.67 4 105 280.67 TotalData_night = TotalData_time [ 19 < TotalData_time [ "대여시간" ]]. copy () del TotalData_night [ "대여시간" ] grouped = TotalData_night [[ "이용건수" ]]. groupby ([ TotalData_night [ '대여소번호' ]]) TotalData_night_cumsum = round ( grouped . sum () / 4 , 2 ) TotalData_night_rent = TotalData_night . drop_duplicates ([ "대여소번호" ])[[ '대여소번호' ]] TotalData_night_rent = TotalData_night_rent . sort_values ( by = [ "대여소번호" ]) TotalData_night_cumsum = TotalData_night_cumsum . reset_index ( drop = 'True' ) TotalData_night_rent = TotalData_night_rent . reset_index ( drop = 'True' ) TotalData_night = pd . concat ([ TotalData_night_rent , TotalData_night_cumsum ], axis = 1 ) TotalData_night . rename ( columns = { TotalData_night . columns [ 1 ] : '시간당이용건수(밤)' }, inplace = True ) TotalData_night . head () 대여소번호 시간당이용건수(밤) 0 101 90.25 1 102 472.50 2 103 330.50 3 104 323.50 4 105 198.00 나누어 놓은 5가지 구간과 대여소 정보 데이터들을 하나의 데이터로 병합하고 csv형태로 저장한다. TotalData = pd . merge ( Bike_Stop , TotalData_dawn , on = '대여소번호' ) # 두 데이터를 병합 TotalData = pd . merge ( TotalData , TotalData_work , on = '대여소번호' ) # 두 데이터를 병합 TotalData = pd . merge ( TotalData , TotalData_day , on = '대여소번호' ) # 두 데이터를 병합 TotalData = pd . merge ( TotalData , TotalData_home , on = '대여소번호' ) # 두 데이터를 병합 TotalData = pd . merge ( TotalData , TotalData_night , on = '대여소번호' ) # 두 데이터를 병합 TD_pertime = TotalData . copy () TD_pertime . to_csv ( '../processing data/18년 서울시 공공자전거 시간대별 이용비교.csv' , mode = 'w' ) TotalData . head () 구분 대여소번호 대여소명 대여소 주소 위도 경도 시간당이용건수(새벽) 시간당이용건수(출근) 시간당이용건수(낮) 시간당이용건수(퇴근) 시간당이용건수(밤) 0 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 37.549561 126.905754 42.14 169.67 77.14 154.33 90.25 1 마포구 102 망원역 1번출구 앞 서울특별시 마포구 월드컵로 72 37.556000 126.910454 160.00 352.33 352.14 631.33 472.50 2 마포구 103 망원역 2번출구 앞 서울특별시 마포구 월드컵로 79 37.554951 126.910835 126.43 188.67 268.86 391.33 330.50 3 마포구 104 합정역 1번출구 앞 서울특별시 마포구 양화로 59 37.550629 126.914986 64.57 69.33 275.43 574.67 323.50 4 마포구 105 합정역 5번출구 앞 서울특별시 마포구 양화로 48 37.550007 126.914825 65.57 122.33 146.29 280.67 198.00 (5) 분석 결과 도출 1. 서울시 공공자전거 사업 17년, 18년 비교 데이터 분석 import matplotlib.pyplot as plt import matplotlib.image as mpimg % matplotlib inline import seaborn as sns import platform path = "c:/Windows/Fonts/malgun.ttf" from matplotlib import font_manager , rc font_name = font_manager . FontProperties ( fname = path ). get_name () rc ( 'font' , family = font_name ) import folium img = mpimg . imread ( '../raw data/서울지도.png' ) plt . imshow ( img )

위의 서울시지도를 배경으로 하고 경도와 위도를 각각 x축 y축으로 놓아 산점도를 표시할 것이다. 그림상의 픽셀과 위도 경도의 위치를 맞추기 위하여 특수한 공식으로 위도와 경도값을 바꾼다.

TotalData_sample_17 = TD_17 . copy () TotalData_sample_17 [ ‘위도’ ] = (( max ( TotalData_sample_17 [ ‘위도’ ]) – TotalData_sample_17 [ ‘위도’ ]) / ( max ( TotalData_sample_17 [ ‘위도’ ]) – min ( TotalData_sample_17 [ ‘위도’ ]))) * 670 + 57 TotalData_sample_17 [ ‘경도’ ] = (( TotalData_sample_17 [ ‘경도’ ] – min ( TotalData_sample_17 [ ‘경도’ ])) / ( max ( TotalData_sample_17 [ ‘경도’ ]) – min ( TotalData_sample_17 [ ‘경도’ ]))) * 815 + 90 TotalData_sample_17 . head ()

구분 대여소번호 17_대여소명 대여소 주소 거치대수 위도 경도 17년_대여건수 17년_반납건수 17년_회수율 17년_하루평균대여 0 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 5 438.145101 322.665758 1865 2128 2.63 10.30 1 마포구 102 망원역 1번출구 앞 서울특별시 마포구 월드컵로 72 20 420.635035 332.870873 7492 6758 -7.34 41.39 2 마포구 103 망원역 2번출구 앞 서울특별시 마포구 월드컵로 79 14 423.487661 333.698139 5494 5399 -0.95 30.35 3 마포구 104 합정역 1번출구 앞 서울특별시 마포구 양화로 59 13 435.240807 342.711209 6147 4876 -12.71 33.96 4 마포구 105 합정역 5번출구 앞 서울특별시 마포구 양화로 48 5 436.932259 342.361630 3920 3176 -7.44 21.66

TotalData_sample_18 = TD_18 . copy () TotalData_sample_18 [ ‘위도’ ] = (( max ( TotalData_sample_18 [ ‘위도’ ]) – TotalData_sample_18 [ ‘위도’ ]) / ( max ( TotalData_sample_18 [ ‘위도’ ]) – min ( TotalData_sample_18 [ ‘위도’ ]))) * 670 + 57 TotalData_sample_18 [ ‘경도’ ] = (( TotalData_sample_18 [ ‘경도’ ] – min ( TotalData_sample_18 [ ‘경도’ ])) / ( max ( TotalData_sample_18 [ ‘경도’ ]) – min ( TotalData_sample_18 [ ‘경도’ ]))) * 815 + 90 TotalData_sample_18 . head ()

구분 대여소번호 18_대여소명 대여소 주소 거치대수 위도 경도 18년_대여건수 18년_반납건수 18년_회수율 18년_하루평균대여 0 마포구 101 (구)합정동 주민센터 서울특별시 마포구 동교로8길 58 5 438.145101 320.417756 2263 2247 -0.16 12.50 1 마포구 102 망원역 1번출구 앞 서울특별시 마포구 월드컵로 72 20 420.635035 330.524270 8735 8364 -3.71 48.26 2 마포구 103 망원역 2번출구 앞 서울특별시 마포구 월드컵로 79 14 423.487661 331.343542 6111 5748 -3.63 33.76 3 마포구 104 합정역 1번출구 앞 서울특별시 마포구 양화로 59 13 435.240807 340.269529 5835 5333 -5.02 32.24 4 마포구 105 합정역 5번출구 앞 서울특별시 마포구 양화로 48 5 436.932259 339.923327 3692 3047 -6.45 20.40

이용건수와 대여소 수의 증가률 비교

print ( ‘대여소 수’ ) print ( ‘2017년 : {}개’ . format ( len ( list ( TotalData_17 . index )))) #대여소 수 print ( ‘2018년 : {}개’ . format ( len ( list ( TotalData_18 . index ))), ‘

‘ ) print ( ‘대여소 수 증가률 : {}%’ . format ( round (( len ( list ( TotalData_18 . index )) / len ( list ( TotalData_17 . index )) * 100 ), 2 ))) print ( ‘-‘ * 30 , ‘

‘ ) print ( ‘이용건수’ ) print ( ‘2017년 : {}건’ . format ( sum ( map ( int , list ( TotalData_17 [ ’17년_대여건수’ ]))))) #이용건수 print ( ‘2018년 : {}건’ . format ( sum ( map ( int , list ( TotalData_18 [ ’18년_대여건수’ ])))), ‘

‘ ) print ( ‘하루 평균 이용건수’ ) print ( ‘2017년 : {}건’ . format ( round ( sum ( map ( int , list ( TotalData_17 [ ’17년_대여건수’ ]))) / 181 , 2 ))) #하루 평균 이용건수 print ( ‘2018년 : {}건’ . format ( round ( sum ( map ( int , list ( TotalData_18 [ ’18년_대여건수’ ]))) / 181 , 2 )), ‘

‘ ) print ( ‘이용건수 증가률 : {}%’ . format ( round (( sum ( map ( int , list ( TotalData_18 [ ’18년_대여건수’ ]))) / sum ( map ( int , list ( TotalData_17 [ ’17년_대여건수’ ]))) * 100 ), 2 )))

대여소 수 2017년 : 683개 2018년 : 1162개 대여소 수 증가률 : 170.13% —————————— 이용건수 2017년 : 1584740건 2018년 : 3369049건 하루 평균 이용건수 2017년 : 8755.47건 2018년 : 18613.53건 이용건수 증가률 : 212.59%

위의 변환된 좌표값으로 지도에 대여소의 위치를 표시한다.

# 17년도 대여소 위치 t = TotalData_sample_17 [ ‘위도’ ] y = TotalData_sample_17 [ ‘경도’ ] plt . figure ( figsize = ( 19 , 12 )) plt . scatter ( y , t , s = 150 ) plt . title ( ‘자전거 대여소(2017)’ ) plt . imshow ( img ) # 18년도 대여소 위치 t = TotalData_sample_18 [ ‘위도’ ] y = TotalData_sample_18 [ ‘경도’ ] plt . figure ( figsize = ( 19 , 12 )) plt . scatter ( y , t , s = 150 ) plt . title ( ‘자전거 대여소(2018)’ ) plt . imshow ( img ) plt . show ()

그림만봐도 알 수 있듯이 지난 1년간 자전거 대여소의 수는 큰폭으로 늘었다. 실제로 자전거 대여소의 수는 전년대비 약 170.13% 증가하였다. 그림에서 보면 알 수 있듯이 2017년에 마포구, 서대문구, 중구, 동대문구, 용산구, 성동구등 중앙에 밀집되어 분포 되어있었다. 하지만 2018년에는 상대적으로 적었던 강북, 강남지역 까지 고르게 퍼진것을 알 수 있다. 서울시에서 자전거 대여소의 수를 늘려 시민들이 따릉이를 수월하게 이용할 수 있도록 하였다는 것을 알 수 있다. 하지만 이용건수는 전년대비 약 212.59% 증가하였다. 대여소의 수보다 더 큰 폭으로 증가한 것이다. 그렇기 때문에 이러한 서울시의 노력에도 불구하고 자전거 부족현상을 해결하기는 역부족이었을 것이다.

년도별 최대, 최소 대여건수 대여소 비교

년도별 대여건수 상위 5개 대여소

TotalData_17 = TotalData_17 . sort_values ( by = “17년_대여건수” , ascending = False ) bmax_stop_17 = TotalData_17 . iloc [ 0 : 10 ,[ 2 , 7 ]]. reset_index ( drop = ‘True’ ) TotalData_18 = TotalData_18 . sort_values ( by = “18년_대여건수” , ascending = False ) bmax_stop_18 = TotalData_18 . iloc [ 0 : 10 ,[ 2 , 7 ]]. reset_index ( drop = ‘True’ ) Total_bmax = pd . concat ([ bmax_stop_17 , bmax_stop_18 ], axis = 1 ) Total_bmax . head ()

17_대여소명 17년_대여건수 18_대여소명 18년_대여건수 0 여의나루역 1번출구 앞 22845 여의나루역 1번출구 앞 29125 1 뚝섬유원지역 1번출구 앞 16420 뚝섬유원지역 1번출구 앞 22874 2 홍대입구역 2번출구 앞 16305 홍대입구역 2번출구 앞 20476 3 마포구민체육센터 앞 10120 롯데월드타워(잠실역2번출구 쪽) 17365 4 합정역 7번출구 앞 9710 고속터미널역 8-1번 8-2번 출구 사이 15143

년도별 대여건수 하위 5개 대여소

TotalData_17 = TotalData_17 . sort_values ( by = “17년_대여건수” , ascending = True ) bmin_stop_17 = TotalData_17 . iloc [ 0 : 10 ,[ 2 , 7 ]]. reset_index ( drop = ‘True’ ) TotalData_18 = TotalData_18 . sort_values ( by = “18년_대여건수” , ascending = True ) bmin_stop_18 = TotalData_18 . iloc [ 0 : 10 ,[ 2 , 7 ]]. reset_index ( drop = ‘True’ ) Total_bmin = pd . concat ([ bmin_stop_17 , bmin_stop_18 ], axis = 1 ) Total_bmin . head ()

17_대여소명 17년_대여건수 18_대여소명 18년_대여건수 0 신대방삼거리역 3번출구쪽 0 탑성마을입구 71 1 마천CU우방점 앞 0 안골마을입구 71 2 에이스하이엔드타워8차 앞 0 능안마을입구 84 3 거여역 8번출구 뒤 0 강일동 에너지 마루 107 4 사육신공원앞 0 역삼동 sk뷰 501동앞 130

키워드에 대한 정보 따릉 이 데이터

다음은 Bing에서 따릉 이 데이터 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [데이콘] 따릉이 데이터를 활용한 데이터 분석 (전처리)

  • 데이터사이언스
  • 머신러닝
  • 경진대회
  • 핀테크
  • 인공지능
  • AI
  • Data Science
  • machine learning
  • 기계학습
  • 데이콘
  • dacon
  • 스타트업
  • kaggle
  • 캐글
  • 마이크로소프트
  • 데이터분석가
  • 데이터
  • 딥러닝
  • 파이썬
  • MS
  • 시각화
  • Visualization
  • 빅테크
  • 핀테크위크
  • fintechweek
  • bigtech
  • 강화학습
  • 빅데이터
  • 공모전
  • 따릉이
[데이콘] #따릉이 #데이터를 #활용한 #데이터 #분석 #(전처리)


YouTube에서 따릉 이 데이터 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [데이콘] 따릉이 데이터를 활용한 데이터 분석 (전처리) | 따릉 이 데이터, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment