서울특별시 공공자전거 대여소 정보(19.12.9).xlsx
0.31MB
- 대여소 정보 읽기
- 대여소 정보 확인
- NA 값이 몇개인지 확인 ==> NA 값이 들어있는 데이터 삭제
- 타입 변환 (대여소ID ==> int32, 기준시작일자 ==> 날짜타입)
>- 기준시작일에 '개통'이라는 단어를 포함하고 있는 경우 '개통' 단어 삭제
- 대여소_구의 목록, 개수 출력
- 대여소_구별 거치대 수
- 구별 거치대수의 합계, 평균, 최대, 최소 출력하고 거치대가 많은 순으로 합계별 내림차순으로 10개 출력
▶ 대여소 정보 읽기
import pandas as pd
import numpy as np
df = pd.read_excel('서울특별시 공공자전거 대여소 정보(19.12.9).xlsx', engine='openpyxl')
df.head()
▶ NA 값이 몇 개인지 확인
- NA값이 들어있는 데이터 삭제
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1541 entries, 0 to 1540
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 대여소_구 1541 non-null object
1 대여소ID 1540 non-null float64
2 대여소명 1541 non-null object
3 대여소주소 1540 non-null object
4 위도 1540 non-null float64
5 경도 1540 non-null float64
6 기준시작일자 1540 non-null object
7 거치대수 1541 non-null int64
dtypes: float64(3), int64(1), object(4)
memory usage: 96.4+ KB
df.isna().sum()
대여소_구 0
대여소ID 1
대여소명 0
대여소주소 1
위도 1
경도 1
기준시작일자 1
거치대수 0
dtype: int64
df[df['대여소ID'].isna()]
df = df.dropna()
df.tail()
▶ 타입 변환
- 대여소ID ==> int32
- 기준시작일자 ==> 날짜타입
# 타입 조회
df.dtypes
대여소_구 object
대여소ID float64
대여소명 object
대여소주소 object
위도 float64
경도 float64
기준시작일자 object
거치대수 int64
dtype: object
# 대여소ID 타입 변환
df['대여소ID'] = df['대여소ID'].astype(np.int32)
# 기준시작일자에 '개통'이 포함된 데이터의 개수
df['기준시작일자'].str.contains('개통').sum() # 5개
# 기준시작일자에 2가지 타입이 존재하기 때문에 str을 사용할 수 없음 (문자열이 아닌 데이터는 결측치 처리)
df['기준시작일자'].str.replace('개통','')
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
...
1535 2019.08.16
1536 2019.09.26
1537 NaN
1538 2019.11.20
1539 2019.11.20
Name: 기준시작일자, Length: 1540, dtype: object
df['기준시작일자'].replace('개통','',regex=True, inplace=True)
df['기준시작일자'] = pd.to_datetime(df['기준시작일자'])
# 변경 후 타입 조회
df.dtypes
대여소_구 object
대여소ID int32
대여소명 object
대여소주소 object
위도 float64
경도 float64
기준시작일자 datetime64[ns]
거치대수 int64
dtype: object
▶ 대여소_구의 목록, 개수 출력
# 대여수_구의 목록
df['대여소_구'].unique()
array(['마포구', '서대문구', '영등포구', '중구', '종로구', '광진구', '성동구', '동대문구', '양천구',
'용산구', '은평구', '강동구', '강서구', '송파구', '성북구', '중랑구', '강북구', '노원구',
'도봉구', '금천구', '구로구', '동작구', '관악구', '서초구', '강남구'], dtype=object)
# 총 대여수_구의 수
len(df['대여소_구'].unique()) # 25개
▶ 대여소_구별 거치대 수
df.groupby('대여소_구')['거치대수'].sum().sort_values(ascending=False)
대여소_구
송파구 1298
영등포구 1250
서초구 1227
강남구 1218
마포구 1075
강서구 1002
노원구 879
광진구 841
구로구 788
종로구 784
성동구 780
강동구 763
성북구 726
은평구 716
양천구 677
서대문구 667
동대문구 659
관악구 640
중랑구 616
금천구 560
용산구 538
동작구 501
중구 493
강북구 451
도봉구 396
Name: 거치대수, dtype: int64
▶ 구별 거치대수의 합계, 평균, 최대, 최소 출력하고 거치대가 많은 순으로 합계별 내림차순으로 10개 출력
df.groupby('대여소_구')['거치대수'].agg(['sum','mean','max','min']).sort_values('sum', ascending=False).head(10).round(2)
'데이터 분석 > 판다스' 카테고리의 다른 글
[Numpy & Pandas 과목평가] (0) | 2023.11.16 |
---|---|
[Pandas] 서울시 공공자전거 대여 정보 분석 2 (0) | 2023.11.14 |
[Pandas] 품목별 수출입실적 분석 (0) | 2023.11.14 |
[Pandas] 국가별 알콜 섭취량 데이터 분석 (0) | 2023.11.13 |
[Pandas] 시애틀 강수량 데이터 분석 (0) | 2023.11.13 |