Study/Data Analysis

[python] 공공자전거 데이터 분석(2) - histogram

bisi 2020. 4. 26. 12:01

서울 열린 데이터 광장에서 제공하는 공공자전거 대여 이력 정보 데이터를 활용하여 기본적인 데이터 탐색을 진행해보았다.

데이터 출처 : 서울 열린 데이터 광장 > 서울특별시 공공자전거 대여이력 정보 

 

http://data.seoul.go.kr/dataList/OA-15182/F/1/datasetView.do

 

열린데이터 광장 댓글 입력

열린데이터 광장 데이터셋 댓글 입력

data.seoul.go.kr

 


histogram

 

bike_visualization_test_2 (1)
In [1]:
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

# 노트북 안에 그래프를 그리기 위해
%matplotlib inline

# 그래프에서 격자로 숫자 범위가 눈에 잘 띄도록 ggplot 스타일을 사용
plt.style.use('ggplot')

# 그래프에서 마이너스 폰트 깨지는 문제에 대한 대처
mpl.rcParams['axes.unicode_minus'] = False

!apt -qq -y install fonts-nanum
# 한글 깨짐 문제 해결  
import matplotlib.font_manager as fm
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
plt.rc('font', family='NanumBarunGothic')
mpl.font_manager._rebuild()
/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
  import pandas.util.testing as tm
fonts-nanum is already the newest version (20170925-1).
0 upgraded, 0 newly installed, 0 to remove and 25 not upgraded.
In [2]:
# colab 에서 google drive 접근
from google.colab import drive
drive.mount('/content/gdrive')
Drive already mounted at /content/gdrive; to attempt to forcibly remount, call drive.mount("/content/gdrive", force_remount=True).
In [0]:
bike = pd.read_csv('/content/gdrive/My Drive/data/bicycle-hourtime-201905-test.csv', parse_dates=["대여일자"] ,encoding='cp949')
In [4]:
bike.describe
Out[4]:
<bound method NDFrame.describe of             대여일자 요일  요일_New  주중주말구분  대여시간  ...  이용건수     운동량   탄소량   이동거리  사용시간
0     2019-05-01  수       3       0     0  ...     1   37.37  0.28   1210     8
1     2019-05-01  수       3       0     0  ...     1   21.88   0.2    850     9
2     2019-05-01  수       3       0     3  ...     1   34.69  0.28   1200     5
3     2019-05-01  수       3       0     6  ...     1    27.1  0.27   1180     7
4     2019-05-01  수       3       0     8  ...     1   21.78  0.23   1000     6
...          ... ..     ...     ...   ...  ...   ...     ...   ...    ...   ...
69242 2019-05-31  금       5       0    19  ...     1   11.06  0.13    570     3
69243 2019-05-31  금       5       0    23  ...     1  184.06  1.54   6640    45
69244 2019-05-31  금       5       0    20  ...     1  183.28  1.41   6090    35
69245 2019-05-31  금       5       0    23  ...     1  167.11  1.96   8440    46
69246 2019-05-31  금       5       0    23  ...     1  237.18  2.53  10890    55

[69247 rows x 21 columns]>
In [0]:
bike["년"] = bike["대여일자"].dt.year
bike["월"] = bike["대여일자"].dt.month
bike["일"] = bike["대여일자"].dt.day
In [6]:
bike.shape
Out[6]:
(69247, 24)

histogram

In [7]:
fig, axes = plt.subplots(nrows=2,ncols=2)
fig.set_size_inches(12, 10)
sns.boxplot(data=bike,y="이용건수",orient="v",ax=axes[0][0])
sns.boxplot(data=bike,y="이용건수",x="주중주말구분",orient="v",ax=axes[0][1])
sns.boxplot(data=bike,y="이용건수",x="대여시간",orient="v",ax=axes[1][0])
sns.boxplot(data=bike,y="이용건수",x="대여구분코드_new",orient="v",ax=axes[1][1])

axes[0][0].set(ylabel='이용건수',title="이용건수")
axes[0][1].set(xlabel='요일', ylabel='Count',title="주중주말구분 대여량")
axes[1][0].set(xlabel='대여시간', ylabel='Count',title="시간별 대여량")
axes[1][1].set(xlabel='대여구분코드_new', ylabel='Count',title="대여구분코드에 따른 대여량")
Out[7]:
[Text(0, 0.5, 'Count'),
 Text(0.5, 0, '대여구분코드_new'),
 Text(0.5, 1.0, '대여구분코드에 따른 대여량')]
In [8]:
bike["요일"].value_counts()
Out[8]:
금    12111
수    12016
목    11740
화     9771
토     9305
월     7596
일     6708
Name: 요일, dtype: int64

대여시간별 그래프

In [9]:
fig,(ax1,ax2,ax3,ax4,ax5, ax6, ax7)= plt.subplots(nrows=7)
fig.set_size_inches(18,40)

sns.pointplot(data=bike, x="대여시간", y="이용건수", ax=ax1)

sns.pointplot(data=bike, x="대여시간", y="이용건수", hue="성별_New", ax=ax2)

sns.pointplot(data=bike, x="대여시간", y="이용건수", hue="요일_New", ax=ax3)

sns.pointplot(data=bike, x="대여시간", y="이용건수", hue="연령대코드_New", ax=ax4)

sns.pointplot(data=bike, x="대여시간", y="이용건수", hue="대여구분코드_new", ax=ax5)

sns.pointplot(data=bike, x="대여시간", y="이용건수", hue="주중주말구분", ax=ax6)

sns.pointplot(data=bike, x="대여시간", y="이용건수", hue="지구", ax=ax7)
Out[9]:
<matplotlib.axes._subplots.AxesSubplot at 0x7ff61eeae2e8>

 


관련 글 모아보기

[DataSicence/Data Analysis] - [python] 공공자전거 데이터 분석(1) - 데이터 형태 그래프 출력

[DataSicence/Data Analysis] - [python] 공공자전거 데이터 분석(2) - histogram

[DataSicence/Data Analysis] - [python] 공공자전거 데이터 분석(3) - 상관관계 분석

[DataSicence/Data Analysis] - [python] 공공자전거 데이터 분석(4) - pivot data 생성