Numpy _ 데이터추출 2

김지윤·2023년 4월 14일
0

Numpy

목록 보기
5/11

🛻 '전국렌터카업체정보표준데이터'

‣ 출처 : 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
profile
데이터 분석 / 데이터 사이언티스트 / AI 딥러닝

0개의 댓글