728x90
이전 내용은 아래 글에서 확인 하실 수 있습니다.
[Data Analysis/공공 데이터] - [공공 데이터] 따릉이 데이터 분석 1 (데이터 확인 / 질문하기)
[Data Analysis/공공 데이터] - [공공 데이터] 따릉이 데이터 분석 2 (데이터 전처리)
4. EDA & Visualization
4-1 이동거리 / 평균 사용시간이 높은 대여소는?
# 평균 이동거리가 큰 순서대로 대여소명 확인
bike_3_moving = bike_3.groupby("대여소명_new")["이동거리"].mean().reset_index().sort_values(by = "이동거리", ascending = False)
bike_3_moving.head()
# 평균 이동거리가 큰 대여소 top20 시각화
bike_3_moving_top20 = bike_3_moving.head(20).sort_values(by = "이동거리", ascending = True)
fig = px.bar(bike_3_moving_top20, y = "대여소명_new", x = "이동거리",
orientation = "h",
color = "이동거리"
)
fig.update_layout(
title = dict(
text = "<b>평균 이동거리가 큰 대여소 top20</b>",
font_size = 20
),
yaxis = dict(
title = "대여소명"
)
)
fig.show()
# 평균 사용시간이 많은 순서대로 대여소명 확인
bike_3_time = bike_3.groupby("대여소명_new")["사용시간"].mean().reset_index().sort_values(by = "사용시간", ascending = False)
bike_3_time.head()
# 평균 사용시간이 많은 대여소 top20 시각화
bike_3_time_top20 = bike_3_time.head(20).sort_values(by = "사용시간", ascending = True)
fig = px.bar(bike_3_time_top20, x = "사용시간", y = "대여소명_new", orientation = "h", color = "사용시간")
fig.update_layout(
title = dict(
text = "<b>평균 사용시간이 많은 대여소 Top20</b>",
font_size = 20
),
yaxis = dict(
title = "대여소명"
),
template = "plotly_white"
)
fig.show()
4-2 운동량과 이동거리의 상관관계?
# 운동량과 이동거리의 상관관계 시각화
f, ax = plt.subplots(1, 1, figsize = (18, 8))
sns.scatterplot(data = bike_3, x = "이동거리", y = "운동량")
ax.set_xlim(-10000, 150000) # x 축 범위 조정
ax.set_title("운동량과 이동거리 상관관계", size = 20)
plt.show()
- 이동거리가 많을수록 운동량도 많다는 것을 알 수 있습니다.
# 성별 / 연령대별 이동거리와 운동량의 상관관계 시각화 (runtime = 16 sec)
import time # runtime 시간 측정
start = time.time() # 시작 시간
f, ax = plt.subplots(1, 2, figsize = (18, 8))
sns.scatterplot(data = bike_3, x = "이동거리", y = "운동량", hue = "성별", ax = ax[0])
ax[0].set_xlim(-10000, 150000) # x 축 범위 조정
ax[0].set_title("운동량과 이동거리 상관관계(성별)", size = 20)
sns.scatterplot(data = bike_3, x = "이동거리", y = "운동량", hue = "연령대코드", ax = ax[1])
ax[1].set_xlim(-10000, 150000) # x 축 범위 조정
ax[1].set_title("운동량과 이동거리 상관관계(연령대)", size = 20)
plt.show()
end = time.time() # 종료 시간
print("runtime:", end - start) # runtime 출력
- 남성이 여성보다 이동거리가 많을수록 운동량이 많으며, 주로 20대가 이동거리 대비 운동량이 많습니다.
4-3 따릉이를 가장 많이 이용하는 성별은?
# 따릉이를 가장 많이 이용하는 성별 확인
bike_3["성별"].value_counts()
# 따릉이를 가장 많이 이용하는 성별 시각화
bike_3_sex = bike_3["성별"].value_counts().reset_index()
bike_3_sex.columns = ["성별", "이용 수"]
fig = px.bar(bike_3_sex, x = "성별", y = "이용 수", color = "성별")
fig.update_layout(
title = dict(
text = "<b>성별에 따른 따릉이 이용 수</b>",
font_size = 20
),
showlegend = False
)
fig.show()
- 남성이 여성보다 따릉이를 더 많이 이용하고 있습니다.
4-3-1 일별 / 성별에 따른 따릉이 사용시간 확인
# bike_3 데이터의 대여일자 컬럼을 연/월/일로 구분
bike_3["대여일자_연"] = bike_3["대여일자"].dt.year
bike_3["대여일자_월"] = bike_3["대여일자"].dt.month
bike_3["대여일자_일"] = bike_3["대여일자"].dt.day
bike_3.head()
# 일별 / 성별 사용시간 확인
bike_3_hour = pd.pivot_table(data = bike_3,
index = "대여일자_일",
columns = "성별",
values = "사용시간",
aggfunc = "sum")
bike_3_hour.head()
# 일별 / 성별 사용시간 시각화
layout = dict(
title = dict(
text = "<b>일별 / 성별에 따른 따릉이 사용시간</b>",
font_size = 20
),
xaxis = dict(
title = "대여일",
dtick = 1
),
yaxis = dict(
title = "사용시간"
),
template = "plotly_white"
)
bike_3_hour.iplot(kind = "line", layout = layout)
4-4 따릉이를 가장 많이 이용하는 연령대는?
# 따릉이를 가장 많이 이용하는 연령대 확인
bike_3["연령대코드"].value_counts()
# 따릉이를 가장 많이 이용하는 연령대 시각화
bike_3_age = bike_3["연령대코드"].value_counts().reset_index()
bike_3_age.columns = ["연령대", "이용 수"]
fig = px.bar(bike_3_age, x = "연령대", y = "이용 수", color = "연령대")
fig.update_layout(
title = dict(
text = "<b>연령대에 따른 따릉이 이용 수</b>",
font_size = 20
),
showlegend = False
)
fig.show()
- 20대가 가장 따릉이를 많이 사용하고 30대 > 40대 순으로 따릉이를 많이 사용하고 있습니다.
4-4-1 일별 / 연령대별에 따른 따릉이 사용시간 확인
# 일별 / 연령대별 사용시간 확인
bike_3_age_hour = pd.pivot_table(data = bike_3,
index = "대여일자_일",
columns = "연령대코드",
values = "사용시간",
aggfunc = "sum")
bike_3_age_hour.head()
# 일별 / 연령대별 사용시간 시각화
layout = dict(
title = dict(
text = "<b>일별 / 연령대에 따른 따릉이 사용시간</b>",
font_size = 20
),
xaxis = dict(
title = "대여일",
dtick = 1
),
yaxis = dict(
title = "사용시간"
),
#template = "plotly_white"
)
bike_3_age_hour.iplot(kind = "line", layout = layout)
4-5 서울시 구별로 거치대 개수와 대여건수는?
# lcd 거치대와 qr 거치대 수 합하기
bike_1["총거치대수"] = bike_1["거치대수lcd"] + bike_1["거치대수qr"]
print(bike_1.shape)
bike_1.head()
# 자치구별 거치대 수 확인
bike_1_region = bike_1.groupby("자치구")["총거치대수"].sum().reset_index()
bike_1_region = bike_1_region.set_index("자치구")
bike_1_region.sort_values(by = "총거치대수", ascending = False).head()
# folium 으로 서울 지도위에 거치대 수 분포 확인
import json
import folium
geo_path = "data/skorea_municipalities_geo_simple.json" # json 파일 위치
geo_str = json.load(open(geo_path, encoding = "utf-8"))
bike_1_map = folium.Map(location = [37.5502, 126.982], zoom_start = 11, tiles = "Stamen Toner")
# location = 서울 위치
# tiles = "OpenStreetMap", "Stamen Terrain"
bike_1_map.choropleth(
geo_data = geo_str,
data = bike_1_region["총거치대수"],
columns = ["자치구", "총거치대수"],
fill_color = "YlGnBu",
key_on = "feature.properties.name",
legend_name = "자치구별 따릉이 총 거치대 수"
)
bike_1_map
# 대여소번호를 수치형 데이터로 변경
bike_1["대여소번호"] = pd.to_numeric(bike_1["대여소번호"])
bike_2["대여소번호"] = pd.to_numeric(bike_2["대여소번호"])
bike_1.info()
# 대여소명에 자치구 붙이기
bike_merge = pd.merge(bike_1, bike_2, left_on = "대여소번호", right_on = "대여소번호")
bike_merge.head()
# 필요한 컬럼만 사용
bike_merge_1 = bike_merge[["대여소번호", "대여소명_x", "자치구", "총거치대수", "대여일자/월", "대여건수"]]
bike_merge_1.head()
# 202001 데이터만 사용
bike_merge_1 = bike_merge_1[bike_merge_1["대여일자/월"] == 202101]
bike_merge_1.head()
# 자치구별 대여건수 확인
bike_merge_1 = bike_merge_1.groupby("자치구")["대여건수"].sum().reset_index()
bike_merge_1 = bike_merge_1.set_index("자치구")
bike_merge_1.sort_values(by = "대여건수", ascending = False).head()
# 지도에 자치구별 대여건수 나타내기
bike_merge_1_map = folium.Map(location = [37.5502, 126.982], zoom_start = 11, tiles = "OpenStreetMap")
# location = 서울 위치
# tiles = "OpenStreetMap", "Stamen Terrain"
bike_merge_1_map.choropleth(
geo_data = geo_str,
data = bike_merge_1["대여건수"],
columns = ["자치구", "대여건수"],
fill_color = "PuRd",
key_on = "feature.properties.name",
legend_name = "자치구별 따릉이 대여건수"
)
bike_merge_1_map
5. Review
1. 이동거리 / 평균 사용시간이 높은 대여소는?
- 이동거리가 가장 많은 대여소는 석수역1번출구 앞(SK주유소) 대여소이다.
- 평균 사용시간이 높은 대여소는 IBK기업은행 석수역 지점 앞 대여소이다.
2. 운동량과 이동거리의 상관관계?
- 이동거리가 많을수록 운동량도 많아지며, 주로 남성이 여성보다 같은 이동거리에서 운동량이 더 많은 경향을
나타낸다.
- 주로 20대가 동일한 이동거리에서 다른 나이대보다 운동량이 더 많은 경향을 나타낸다.
3. 따릉이를 가장 많이 이용하는 성별은?
- 남성이 여성보다 따릉이를 더 많이 이용한다.
4. 따릉이를 가장 많이 이용하는 연령대는?
- 20대 > 30대 > 40대 > 50대 > 10대 > 60대 > 70대 순으로 따릉이를 많이 이용한다.
5. 서울시 구별로 거치대 개수와 대여건수는?
- 거치대수와 대여건수 모두 강서구가 가장 많다.
728x90
'Data Analysis > 공공 데이터' 카테고리의 다른 글
[공공 데이터] 따릉이 데이터 분석 2 (데이터 전처리) (0) | 2021.10.14 |
---|---|
[공공 데이터] 따릉이 데이터 분석 1 (데이터 확인 / 질문하기) (0) | 2021.10.14 |