▶ 2024 문화디지털 혁신 및 문화데이터 활용 공모전 요강
https://www.culture.go.kr/digicon/pages/contest_1
2024 문화디지털혁신 및 문화데이터 활용 공모전
2024 문화디지털혁신 및 문화데이터 활용 공모전입니다.
www.culture.go.kr
▶ EDA 및 전처리 코드_주피터 노트북
1. 데이터셋
서울시 공공자전거 대여이력 정보 (2023.08~2023.12)
https://data.seoul.go.kr/dataList/OA-15182/F/1/datasetView.do
열린데이터광장 메인
데이터분류,데이터검색,데이터활용
data.seoul.go.kr
자전거번호 | 대여일시 | 대여 대여소번호 | 대여 대여소명 | 대여거치대 | 반납일시 | 반납대여소번호 | 반납대여소명 | 반납거치대 | 이용시간(분) | 이용거리(M) | 생년 | 성별 | 이용자종류 | 대여대여소ID | 반납대여소ID | 자전거구분 |
서울시 공공자전거 이용정보(월별) (2022.05~2023.12)
https://data.seoul.go.kr/dataList/OA-15248/F/1/datasetView.do
열린데이터광장 메인
데이터분류,데이터검색,데이터활용
data.seoul.go.kr
대여년월 | 대여소번호 | 대여소명 | 대여구분코드 | 성별 | 연령대코드 | 이용건수 | 운동량 | 탄소량 | 이용거리(M) | 이용시간(분) |
서울시 따릉이 마스터 정보
https://www.data.go.kr/data/15099365/fileData.do
서울특별시_따릉이대여소 마스터 정보_20220112
서울특별시 따릉이대여소 마스터 정보입니다.<br/>서울특별시 따릉이대여소에 대한 대여소 ID, 역 주소, 좌표 정보를 확인할 수 있습니다.<br/><br/>부서 : 교통정보과 (02-2133-4958)
www.data.go.kr
대여소_ID | 주소1 | 주소2 | 위도 | 경도 |
2. 분석 방향
(분석flow 참고)
3. EDA 초안
3-1) 서울시 공공자전거 대여이력정보 (23.12) 자료 분석
▶ 외국인 / 내국인 분류 후 분석
외국인 | 내국인 | 비고 | |
TOP10 대여-반납대여소명 | ![]() |
![]() |
(외국인) * 대여장소와 반납장소가 같은 경우가 많음 (내국인) * 대여장소와 반납 장소가 불일치 |
대여대여소명 = 반납대여소명 | ![]() |
![]() |
(외국인) * 대여장소 = 반납장소 * 주로 관광지라고 불리는 곳의 대여소를 많이 찾음 ex) 뚝섬, 여의나루, 서울숲, 명동, 동역사 등 (내국인) * 대여장소와 = 반납장소가 같은 경우는 주로 여가시간(친구만남, 데이트 등)을 보내기 좋은 장소 * 특히 한강 둔치가 많음 |
이용시간 별 이용거리 | ![]() |
![]() |
(외국인) * 대체로 짧은 시간 안에 짧은 거리 이동할 때 사용 (내국인) * 이용시간도, 이용거리도 다양 * 외국인에 비해 폭넓게 이용 |
대여일자 별 대여건수 | ![]() |
![]() |
* 대여일자 별 대여건수는 날씨 등 외부요인의 작용이 클 것 같아서 주의깊게 보지 않아도 될 듯 |
대여시간 별 대여건수 | ![]() |
![]() |
(외국인) * 주로 점심 먹은 이후 오후시간대에 이용 (내국인) * 주로 오전 8~9시, 오후 6~7시에 이용하는 것으로 보아 출,퇴근용으로 보임 (통학용) |
대여 요일 별 대여건수 | ![]() |
![]() |
(외국인) * 금토일이 많음 _주말이 많음 (내국인) * 화, 금이 많음 _평일이 많음 |
성별 비율 | ![]() |
*내국인 남녀 비율 : 남 > 여 2배 차이 |
|
연령대 별 이용시간 |
![]() |
20-30-40대 * 80대 이상 다시 전처리 필요 |
|
연령대 별 이용거리 |
![]() |
||
연령대 별 대여일자 별 대여건수 |
![]() |
(연령대) 20, 30대 이용이 많음 40, 50대 순 |
|
연령대 별 대여시간 별 대여건수 |
![]() |
(이용시간대) 출-퇴근 시간 늦은 오전~오후시간 (연령대) 30대 > 20대 > 40대 |
|
연령대 별 대여요일 별 대여건수 |
![]() |
(이용 요일) 화 > 금 (연령대) 20대 > 30대 |
3-2) 서울시 공공자전거 대여이력정보 (23.08~12) 자료 전처리 후 합치기
▶ 전처리 함수 및 데이터
(1) 내국인(비회원)
# 0. 라이브러리 임포트
import datetime as dt
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.pyplot as ticker
import seaborn as sns
#지수표현식 없애기
pd.options.display.float_format = '{:.5f}'.format
#되돌리기
#pd.reset_option('display.float_format')
# 한글 깨짐 해결
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
# 연령대 전처리 함수
def age_gen(row):
if row['생년'] >= 2005:
return '10대'
elif 1995 <= row['생년'] < 2005:
return '20대'
elif 1985 <= row['생년'] < 1995:
return '30대'
elif 1975 <= row['생년'] < 1985:
return '40대'
elif 1965 <= row['생년'] < 1975:
return '50대'
elif 1955 <= row['생년'] < 1965:
return '60대'
elif 1945 <= row['생년'] < 1955:
return '70대'
else:
return '기타'
# df 전처리 함수
def pre_drop_func(file_path):
## 1. 데이터 로드
df = pd.read_csv(file_path, encoding='cp949')
## 2. 필요없는 컬럼 drop
# 대여거치대, 반납거치대 없애기
df = df.drop(columns=['자전거번호', '대여거치대', '반납거치대'], axis=1)
## 3. 필요없는 행 drop (\N 값이 있는 행 제거)
df.replace('\\N', np.nan, inplace=True)
df.dropna(inplace=True)
## 4. 수치형 데이터 전처리
# 반납대여소번호 int32 형식으로 바꾸기
df['반납대여소번호'] = df['반납대여소번호'].astype('int32')
# 생년 데이터 int32 형식으로 바꾸기
df['생년'] = df['생년'].astype('int32')
# 생년이 2011년 이후이거나 1939년 이전인 경우 제거
df = df[(df['생년'] < 2011) & (df['생년'] > 1939)]
# 이용시간이 0이거나 이용거리가 0인 행 제거
df = df[(df['이용시간(분)'] != 0) & (df['이용거리(M)'] != 0)]
## 5. 범주형 데이터 전처리
# 성별 전처리
df['성별'] = df['성별'].replace({'f': 'F', 'm': 'M'})
## 6. 날짜 데이터 전처리
# 날짜 데이터 datetime 형식으로 바꾸기
df['대여일시'] = pd.to_datetime(df['대여일시'])
df['반납일시'] = pd.to_datetime(df['반납일시'])
# 대여일시, 반납일시 >> 대여/반납날짜 컬럼, 대여/반납시간 컬럼 생성
# 대여날짜, 반납날짜 컬럼 만들기
df = df.assign(대여날짜 = df['대여일시'].dt.date)
df = df.assign(반납날짜 = df['반납일시'].dt.date)
# 대여시간, 반납시간 컬럼 만들기
df = df.assign(대여시간 = df['대여일시'].dt.hour)
df = df.assign(반납시간 = df['반납일시'].dt.hour)
# 대여날짜, 반납날짜 datetime 형식으로 바꾸기
df['대여날짜'] = pd.to_datetime(df['대여날짜'])
df['반납날짜'] = pd.to_datetime(df['반납날짜'])
# 대여일자, 대여요일
df = df.assign(대여일자 = df['대여날짜'].dt.day)
df = df.assign(대여요일 = df['대여날짜'].dt.day_name())
# 연령대 컬럼 만들기
df['연령대'] = df.apply(age_gen, axis=1)
return pd.DataFrame(df)
(2) 외국인 (성별, 생년이 nan임 >> drop하지 말고, 이용자종류 = 외국인 데이터 추출하기)
# 0. 라이브러리 임포트
import datetime as dt
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.pyplot as ticker
import seaborn as sns
# 한글 깨짐 해결
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
# df 전처리 함수
def pre_out_func(file_path):
## 1. 데이터 로드
df = pd.read_csv(file_path, encoding='cp949')
df = df[df['이용자종류']=='외국인']
## 2. 필요없는 컬럼 drop
# 대여거치대, 반납거치대 없애기
df = df.drop(columns=['자전거번호', '대여거치대', '반납거치대', '자전거구분', '성별', '생년'], axis=1)
## 3. 필요없는 행 drop (\N 값이 있는 행 제거)
df.replace('\\N', np.nan, inplace=True)
df = df.dropna(subset=['반납대여소번호'])
## 4. 수치형 데이터 전처리
# 반납대여소번호 int32 형식으로 바꾸기
df['반납대여소번호'] = df['반납대여소번호'].astype('int32')
# 이용시간이 0이거나 이용거리가 0인 행 제거
df = df[(df['이용시간(분)'] != 0) & (df['이용거리(M)'] != 0)]
## 5. 날짜 데이터 전처리
# 날짜 데이터 datetime 형식으로 바꾸기
df['대여일시'] = pd.to_datetime(df['대여일시'])
df['반납일시'] = pd.to_datetime(df['반납일시'])
# 대여일시, 반납일시 >> 대여/반납날짜 컬럼, 대여/반납시간 컬럼 생성
# 대여날짜, 반납날짜 컬럼 만들기
df = df.assign(대여날짜 = df['대여일시'].dt.date)
df = df.assign(반납날짜 = df['반납일시'].dt.date)
# 대여시간, 반납시간 컬럼 만들기
df = df.assign(대여시간 = df['대여일시'].dt.hour)
df = df.assign(반납시간 = df['반납일시'].dt.hour)
# 대여날짜, 반납날짜 datetime 형식으로 바꾸기
df['대여날짜'] = pd.to_datetime(df['대여날짜'])
df['반납날짜'] = pd.to_datetime(df['반납날짜'])
# 대여일자, 대여요일
df = df.assign(대여일자 = df['대여날짜'].dt.day)
df = df.assign(대여요일 = df['대여날짜'].dt.day_name())
# 대여월
df = df.assign(대여월 = df['대여날짜'].dt.month)
# 필요없는 컬럼 다시 버리기
df = df.drop(columns=['대여일시', '반납일시'], axis=1)
return pd.DataFrame(df)
3-3) 서울시 공공자전거 대여이력정보 (23.08~12) 자료 분석
▶ 외국인 / 내국인 분류 후 분석
외국인 | 내국인 | 비고 | |
TOP10 대여-반납대여소명 | ![]() |
![]() |
(외국인) * 대여장소와 반납장소가 같은 경우가 많음 _주로 관광지 (내국인) * 대여장소와 반납 장소가 불일치 _주로 생활권 |
대여대여소명 = 반납대여소명 | ![]() |
![]() |
(외국인) * 대여장소 = 반납장소 * 주로 관광지라고 불리는 곳의 대여소를 많이 찾음 ex) 뚝섬, 여의나루, 서울숲, 명동, 동역사 등 (내국인) * 대여장소와 = 반납장소가 같은 경우는 주로 여가시간(친구만남, 데이트 등)을 보내기 좋은 장소 * 특히 한강 둔치가 많음 |
이용시간 별 이용거리 | ![]() |
![]() |
(외국인) * 이용시간과 이용거리가 비교적 비례관계 _자전거를 타고 돌아다니며 둘러보는 느낌 (내국인) * 비교적 짧은 거리 이동에 많이 쓰임 _생활 속에서 이용하는 느낌 |
대여월 별 대여건수 |
![]() |
![]() |
(10월) 날씨가 좋은 가을에 수요가 높음 (그 외) 여름(8~9)이나 겨울(11~12)은 줄어듦 |
대여일자 별 대여건수 | ![]() ![]() |
![]() ![]() |
* 대여일자 별 대여건수는 날씨 등 외부요인의 작용이 클 것 같아서 주의깊게 보지 않아도 될 듯 (외국인) * 관광하기 좋은 계절에 특히 수요가 높음 (내국인) * 외국인에 비해 월마다 수요의 변동성이 크지 않음 |
대여시간 별 대여건수 | ![]() |
![]() |
(외국인) * 주로 점심 먹은 이후 오후시간대에 이용 (내국인) * 주로 오전 8~9시, 오후 6~7시에 이용하는 것으로 보아 출,퇴근용으로 보임 (통학용) * 저녁시간 여가생활 |
대여요일 별 대여건수 | ![]() |
![]() |
(외국인) * 금토일이 많음 _주말이 많음 (내국인) * 화, 금이 많음 _평일이 많음 |
성별 비율 | ![]() |
*내국인 남녀 비율 : 남 > 여 2배 차이 |
|
연령대 별 이용시간 |
![]() |
(따릉이 주 이용고객) 20-30-40대 |
|
연령대 별 이용거리 |
![]() |
(따릉이 주 이용고객) 20-30-40대 |
|
연령대 별 대여월 별 대여건수 |
![]() ![]() |
20-30대 > 40-50대 | |
연령대 별 대여일자 별 대여건수 |
![]() |
(연령대) 20, 30대 이용이 많음 40, 50대 순 |
|
연령대 별 대여시간 별 대여건수 |
![]() |
(이용시간대) 출-퇴근 시간 늦은 오전~오후시간 (연령대) 30대 > 20대 > 40대 |
|
연령대 별 대여요일 별 대여건수 |
![]() ![]() |
(이용 요일) 화 > 금 (연령대) 20대 > 30대 |
▶ 이어지는 다음 게시글 보기
2024.07.13 - [분류 전체보기] - 공모전 | 서울시 공공자전거 군집분석 모델링(k-means)
공모전 | 서울시 공공자전거 군집분석 모델링(k-means)
군집분석 코드_주피터 노트북4. k-means 군집분석 모델링4-1) 모델링 전 전처리▶ 내국인 데이터 샘플링내국인 데이터가 너무 커서 샘플링 진행 → 전체 데이터의 50% 추출 (절반)성별, 연령대, 대여
nasena.tistory.com
2024.07.14 - [분류 전체보기] - 공모전 | 서울시 공공자전거 관광지 및 문화시설 추천
공모전 | 서울시 공공자전거 관광지 및 문화시설 추천
(팀원1 코드_주피터 노트북) (팀원2 코드_주피터 노트북)5. 관광지 및 문화시설 추천5-1) 각 군집 별 지도 시각화▶ 외국인의 경우, k=2 데이터 사용군집 0 : 본격적으로 따릉이로 여행하려는 외국인
nasena.tistory.com
'공모전 > 서울시 따릉이 관광 활성화' 카테고리의 다른 글
공모전 | 서울시 공공자전거 관광지 및 문화시설 추천_지도시각화 (0) | 2024.07.14 |
---|---|
공모전 | 서울시 공공자전거 군집분석 모델링(k-means) (1) | 2024.07.14 |
댓글