Numpy _ 데이터 추출1

김지윤·2023년 4월 14일
0

Numpy

목록 보기
4/11
post-thumbnail

🛻 '전국평생학습강좌표준데이터'

‣ 출처 : data.go.kr
전국평생학습강좌표준데이터

  • 교육방법 구분별 count
  • 직업능력개발훈련비지원강좌여부 == 'Y'
  • 홈페이지 주소가 없는 것 count

⌨️ 데이터 준비

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

pd_data = pd.read_csv('전국평생학습강좌표준데이터.csv',encoding='cp949',header=None)
np_data = pd_data.to_numpy()
print(np_data[:3])
for i,e in enumerate(np_data[0,:]) :
       print(i, 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 제공기관명

.
.

⌨️ 교육방법 구분별 Count

교육방법구분의 index는 8 이다.

np_data[ : ,8]

# Out
# array(['교육방법구분', '혼합', '혼합', ..., '오프라인', '오프라인', '오프라인'], dtype=object)t)

set 집합 사용

  • 순서가 없는(unordered), 고유한 값(unique elements) 을 가진 객체
  • 순서가 없기 때문에 인덱싱이 불가능
sub_data = np_data[1:,8]
print(sub_data)

# Out
# ['혼합' '혼합' '혼합' ... '오프라인' '오프라인' '오프라인']

set1 = set(sub_data)
print(set1)
# {'오프라인+온라인', '혼합', '오프라인+모바일+우편통신', '오프라인', '오프라인+방문교육', '온라인', '온라인+모바일', '방문교육', '온라인+오프라인'}
for i in set1 :
    filter1 = sub_data == i
    print(i,len(sub_data[filter1]))
    
# Out
# 온라인+모바일 2
# 온라인 4450
# 오프라인 20491
# 오프라인+방문교육 43
# 혼합 1044
# 오프라인+모바일+우편통신 1
# 방문교육 339
# 오프라인+온라인 96
# 온라인+오프라인 69

np.uniqe 사용
: python numpy 라이브러리 내에서 배열 내의 distinct 원소들만 모은 결과를 반환

  • return_index : 각 요소들이 처음으로 등장한 index번호 반환
  • return_inverse : 각 요소들을 0,1,2,3 ... 으로 취급했을 때, 원래 값들이 매칭되는 번호 반환
  • return_counts : 각 요소들이 등장하는 횟수 반환
np.unique(sub_data, return_counts=True)

# (array(['방문교육', '오프라인', '오프라인+모바일+우편통신', '오프라인+방문교육', '오프라인+온라인', '온라인',
#        '온라인+모바일', '온라인+오프라인', '혼합'], dtype=object),
# array([  339, 20491,     1,    43,    96,  4450,     2,    69,  1044],  dtype=int64))
      

a 변수에 교육방법의 고유한 값들을, b 변수에 고유한 값들의 count를 넣어준 후
zip을 이용하여 dictionary 형태로 묶어준다.

a = np.unique(sub_data, return_counts=True)[0]
b = np.unique(sub_data, return_counts=True)[1]

dict(zip(a,b))
# Out
# {'방문교육': 345,
# '오프라인': 21616,
# '오프라인+모바일+우편통신': 1,
# '오프라인+방문교육': 43,
# '오프라인+온라인': 97,
# '온라인': 3852,
# '온라인+모바일': 2,
# '온라인+오프라인': 64,
# '혼합': 1090}

.
.

⌨️ 직업능력개발훈련비지원강좌여부 == 'Y'

직업능력개발훈련비지원강좌여부의 index는 21 이다.

sub_data = pd_data[ : ,21]
print(sub_data)

# ['직업능력개발훈련비지원강좌여부' 'N' 'N' ... 'N' 'N' 'N']

‖ set 집합 사용

sub_data = np_data[1:,21]
print(sub_data)

# ['N' 'N' 'N' ... 'N' 'N' 'N']

set2 = set(sub_data)
print(set2)

# {' ', 'Y', 'N'}
for i in set2 :
	filter2 = sub_data == i
   	print(i, len(sub_data[filter2]))

# Out    
#   3981
# Y 155
# N 22974

‖ np.unique 사용

val, cnt = np.unique(np_data[1:,21],return_counts=True)
print(val, cnt)

# [' ' 'N' 'Y'] [ 3981 22974   155]

.
.

⌨️ 홈페이지 주소가 없는 것 Count

홈페이지 주소의 index는 20 이다.

sub_data = np_data[ :,20]
# print(sub_data)

sub_data = sub_data.astype('str')

‖ astype( ) : type 변경
데이터의 유형을 바꾸고 싶을때, astype(원하는 유형) 을 넣어주면 된다.

filter = sub_data == ' '
print(len(sub_data[filter]))      # 0

홈페이지 주소가 없는 것은 0 개다.

profile
데이터 분석 / 데이터 사이언티스트 / AI 딥러닝

0개의 댓글