본문 바로가기
SSAFY

[관통PJT] 2주차 : 데이터 사이언스 기초(numpy, pandas)

by 주니코니 2024. 7. 26.

240726 파이썬반

 

1. 데이터 사이언스 기초

1) 데이터 사이언스란 무엇일까

다양한 데이터로부터 새로운 지식과 정보를 추출하기 위해 과학적 방법론, 프로세스, 알고리즘, 시스템을 동원하는 융합 분야

 

2) 데이터 수집

- 웹 스크래핑 : 웹 페이지에서 데이터를 추출하는 기술

- 웹 크롤링 : 웹 페이지에서 자동으로 탐색하고 데이터를 수집하는 기술

- API : 공개된 API 통해 데이터 수집

 

3) csv 파일

- 몇가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일

- 저장, 전송 및 처리 속도가 빠름

 

4)데이터 처리 및 데이터 분석

- numpy : 수학 계산용 패키지. pandas와 matplotlib 사용 위한 패키지

-- 다차원 배열(행렬), numpy 행렬 연산은 데이터가 많을수록 파이썬 반복문에 비해 훨씬 빠름, 다차원 행렬 자료 구조 제공(개발시 편함)

- pandas : 원하는 데이터만 추출, 데이터 분석에 활용 패키지

-matplotlib : 그래프 그려주는 패키지


2. numpy

#np.array() # 기존 배열을 numpy array로 변형

arr = [1, 2, 3, 4, 5]
np_arr = np.array(arr)
print(np_arr)

#타입확인 <class 'numpy.ndarray'> 
print(type(np_arr)) # 파이썬에서 쓰는 리스트보다 효율적인 넘파이 배열
# 기본 배열생성

np.arange() #함수사용
arr = np.arange(15)
print(arr)
#[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

 

*numpy 특징 : 

# Numpy 2차원 배열 생성
- `np.arange()` 함수로 배열 생성 후! `reshape()` 를 통해 2차원 배열로 변형함
- reshape 의 x, y 축 곱이 배열의 개수와 맞지 않으면 에러가 발생함

# reshape(x축 개수, y축 개수)
arr = np.arange(15).reshape(3, 5)
print(arr) 
#[[ 0  1  2  3  4]
# [ 5  6  7  8  9]
# [10 11 12 13 14]]
 
arr = np.arange(20).reshape(3, 5)
print(arr)
# ValueError: cannot reshape array of size 20 into shape (3,5)
#Indexing & Slicing
- 파이썬 기본 slice 와 비슷하지만, 다차원 배열에서의 사용이 조금 더 편리함
# 기본 indexing과 동일하나, ndarrary에서 차이점은 [행,축]으로 접근 가능하다

arr = np.arange(25).reshape(5, 5)
print(arr)
#[[ 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]]
 
 print(arr[1][2]) # 7
 print(arr[1, 2]) # 7

 

*numpy 한계 :

- 유연성(데이터에 레이블을 붙이거나, 누락된 데이터로 작업)이 부족함

- 그룹화 등 구조화가 부족함

= > Pandas : 고성능 데이터 구조 만들 수 있음

=> numpy 기반으로 만들어진 패키지로 시리즈(1차원 배열)과 데이터프레임(2차원 배열)이라는 효율적인 자료구조 제공


3. pandas

1) csv 파일 읽는법

csv 파일을 읽는 방법 2가지 존재

1. Python 기본 file open 함수 사용 -> numpy 로 변형
2. numpy 의 file read 함수 사용
#특정 데이터 조회

- `iloc()` 함수 사용
    - `row 번호` 로 조회 가능
- `loc()` 함수 사용
    - `index명` 으로 조회 가능
    
 #주의
 #현재는 `index명`이 `Default(row 번호)`로 설정되어 있으므로 두 함수가 동일한 방식으로 사용된다.
1.결측치 제거 
#결측치 : 무한값(`np.inf`) 나 띄워쓰기`' '`의 경우 결측값으로 판단하지 않는다.
isna & notna #na : not a number #__isnull() vs isna()__ 동일한 함수 # DB 에 저장된 결측치는 `null` 이라고 표시되는데, 이에 익숙한 사람들을 위해 `isna()` 의 별칭으로 `isnull()` 을 만듦
#결측지 처리 방법 두가지
dropna (버리기)
fillna (채우기)


2. 그룹화하기
groupby
#예제
df.groupby('직업').mean(numeric_only=True) #직업별 나이 평균 
df.groupby(['직업', '성별']).mean(numeric_only=True).reset_index()
#`직업 별 평균 나이` 에서 `성별을 추가적으로 구분하여 출력` 하는 예시 코드

3. 고유값 개수 확인하기
unique & nunique
#unique : 고유값 종류 모두 출력 
#df['직업'].unique() #array(['교수', '군인', nan, '리포터', '모델',...]
#nunique : 고유값 개수 반환 #df['직업'].nunique() #24


4. 정렬
sort_values() #함수
# 기본 오름차순
#예제 
#직업별 오름차순, 나이별 내림차순
df.sort_values(by=['직업', '나이'], ascending=[True, False])
#모든 컬럼을 보기 위해서는 `by` 옵션을 활용한다.