‣ 출처 : data.go.kr
전국렌터카업체정보표준데이터
import numpy as np
import pandas as pd
pd_data=pd.read_csv('전국렌터카업체정보표준데이터.csv',encoding='cp949',header=None)
np_data=pd_data.to_numpy()
for e in enumerate(np_data[0]) :
print(e)
# (0, '업체명')
(1, '사업장구분')
(2, '소재지도로명주소')
(3, '소재지지번주소')
(4, '위도')
(5, '경도')
(6, '차고지도로명주소')
(7, '차고지지번주소')
(8, '보유차고지수용능력')
(9, '자동차총보유대수')
(10, '승용차보유대수')
(11, '승합차보유대수')
(12, '전기승용자동차보유대수')
(13, '전기승합자동차보유대수')
(14, '경차요금')
(15, '소형차요금')
(16, '중형차요금')
(17, '대형차요금')
(18, '승합차요금')
(19, '레저용차요금')
(20, '수입차요금')
(21, '평일운영시작시각')
(22, '평일운영종료시각')
(23, '주말운영시작시각')
(24, '주말운영종료시각')
(25, '공휴일운영시작시각')
(26, '공휴일운영종료시각')
(27, '휴무일')
(28, '홈페이지주소')
(29, '대표자명')
(30, '전화번호')
(31, '데이터기준일자')
(32, '제공기관코드')
(33, '제공기관명')
.
.
'업체명'의 고유한 값을 count 하면 된다.
'업체명'의 index는 0 이다.
name = np_data[1: ,0]
set1 = set(name)
len(set1) # 4499
'업체명'을 name에 담은 후, name을 set하여 고유한 값을 얻는다.
이후 데이터의 길이 len을 측정하여 전체 렌터카 업체수를 count 할 수 있다.
.
.
또는 np.unique를 통해 name의 고유값을 반환한 뒤, len 함수를 통해 전체 렌터카 업체수를
count 할 수 있다.
name = np_data[1:, 0]
print(len(np.unique(name)))
.
.
'소재지'는 '소재지도로명주소' 에서 앞부분을 떼어내오도록 하겠다. '소재지도로명주소'의 index 는 2 이다.
ad = pd_data[1:,2]
print(ad[:5])
# result
# ['서울특별시 노원구 동일로250길 69(상계동)' '서울특별시 노원구 동일로 178길 10 201호(공릉동)'
'강원도 강릉시 하슬라로 18(홍제동)' '강원도 강릉시 하슬라로 18(홍제동)' '강원도 강릉시 경강로2224번길 5 (포남동)']
‖ split( )
문자열을 주어진 구분자로 잘라서 list로 만들어 줌.
: 문자열. split( '구분자' , 분할횟수 )
위의 split 함수를 이용하여, ad 에 들어있는 소재지도로명주소에서 '-시' 를 잘라오도록 하자.
' -시' 는 첫번째에 있으므로 split 한 것의 index 0번을 가져오면 된다.
» 혹시나 ad에 문자열이 아닌 형태가 들어가 있을 수 있으니, ad를 문자열로 바꿔주고 시작한다.
ad = ad.astype('str')
list = [ ]
for i in ad :
list.append(i.split( )[0])
print(list)
# result
# ['서울특별시', '서울특별시', '강원도', '강원도', '강원도']
split 가 잘 되서 list에 들어간 것 같다.
np. unique( ) 함수를 사용해서, 소재지의 고유값과 개수를 확인해보자.
np.unique(list, return_counts = True)
# result
# (array(['nan', '강원도', '경기도', '경남남도', '경상남도', '경상북도', '공주시', '광주광역시',
'대구광역시', '대전광역시', '부산광역시', '서울특별기', '서울특별시', '서울특별시강남구', '세종특별자치시',
'울산', '울산광역시', '인천광역시', '전라남도', '전라북도', '제주특별자치도', '충청남도', '충청북도'],
dtype='<U8'),
array([ 461, 282, 1074, 14, 311, 466, 1, 165, 149, 256, 192,
1, 811, 1, 28, 6, 101, 238, 247, 170, 242, 267,
200], dtype=int64))
소재지명과 count를 dictionary로 zip하자.
ad_name = np.unique(list, return_counts = True)[0]
counts = np.unique(list, return_counts = True)[1]
print(dict(zip(ad_name, counts)))
# result
# {'nan': 461,
'강원도': 282,
'경기도': 1074,
'경남남도': 14,
'경상남도': 311,
'경상북도': 466,
'공주시': 1,
'광주광역시': 165,
'대구광역시': 149,
'대전광역시': 256,
'부산광역시': 192,
'서울특별기': 1,
'서울특별시': 811,
'서울특별시강남구': 1,
'세종특별자치시': 28,
'울산': 6,
'울산광역시': 101,
'인천광역시': 238,
'전라남도': 247,
'전라북도': 170,
'제주특별자치도': 242,
'충청남도': 267,
'충청북도': 200}
.
.
'자동차 총 보유대수'의 index는 9 이다.
» np.sum( ) 이 가능하도록, 데이터의 타입은 int64로 바꿔주겠다.
sub_data = pd_data[1:, 9].astype(np.int64)
sub_data # result = array([60, 66, 83, ..., 66, 69, 50], dtype=int64)
print(np.sum(sub_data))
# result
# 1577451