'Python 기반 데이터 분석'

'데이터 분석을 위한 Python 응용 문법' (Numpy, Pandas)

데이터잡스 2022. 7. 25. 14:01

1. Numpy란? 

  • Numerical Python
  • 다차원 배열의 연산 기능을 모아 놓은 꾸러미
  • 수치 연산을 위한 다양한 기능 제공 
  • 임포트 방법 : import numpy as np

▷ Numpy의 배열 연산 특징

- 적은 메모리 : 데이터를 연속된 메모리 블록에 저장

- 빠른 처리 : 내부 연산이 C언어로 작성되어 메모리를 직접 조작

 

배열의 생성

코드 설명
np.array([1, 2, 3]) 초기화 할 값을 지정하여 배열 생성
np.zeros() 값을 0으로 초기화하여 배열 생성
np.ones()  값을 1으로 초기화하여 배열 생성
np.arange() 수의 순차적인 증감을 이용한 배열 생성
np.rand() 랜덤한 숫자로 배열 생성

▷ 배열 생성 및 선택 예시 - arange( ), .reshape( )

import numpy as np

# 배열 생성
test_1 = np.arange(16)
test_1
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

# 배열 선택 (기본 인덱스)
test_1[5]
5
test_1[3:5]
array([3,4])

# 배열 변환
test_1.reshape(4, 4) # 4행 4열로 배열
test_1
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
       
# 다차원 배열
test_1[1]
array([4, 5, 6, 7]) 

test_1[1][1]
5

 

▷ 배열 변형 및 저장

# 배열 변형
test_2 = np.arange(10).reshape(2,5)
test_2
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
       
# 행열 전환 - 변수.T = 변수.tranpose( )
test_2.T
array([[0, 5],
       [1, 6],
       [2, 7],
       [3, 8],
       [4, 9]])
       
test_2.transpose( )
array([[0, 5],
       [1, 6],
       [2, 7],
       [3, 8],
       [4, 9]])
       
# Numpy 저장
test_3 = np.arange(10).reshape(2,5)
test_3
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
       
np.save('array', test_3)
load_test_3 = np.load('array.npy')
load_test_3
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

 

 

2. Pandas란?

▶ Pandas는 쉽고 직관적인 관계형 또는 분류된 데이터로 작업 할 수 있도록 설계된 

    빠르고 유연하며 표현이 풍부한 데이터 구조를 제공하는 Python 패키지이다.

 

 

Pandas 데이터 구조 

 차원 이름  설명 
 1차원 Series   균일한 유형의 배열로 표시된 1차원 데이터
 2차원 DataFrame   잠재적으로 이질적으로 유형이 지정된 열이있는 
크기가 가변적인 테이블 형식의 2차원 데이터

 

Pandas 데이터 구조를 생각하는 가장 좋은 방법은 더 낮은 차원의 데이터를 위한 유연한 컨테이너이다.

 

예를 들어, DataFrame은 Series의 컨테이너이고 Series는 스칼라의 컨테이너이다.

 

사전적으로 이러한 컨테이너에서 개체를 삽입하고 제거하는 편집 기술을 원한다.

 

또한 시계열 및 교차 단면 데이터 세트의 일반적인 방향을 고려한 공통 API 함수에 대해 적절한 기본 동작을 원한다. 

 

ndarray를 사용하여 2차원 및 3차원 데이터를 저장할 때 함수를 작성할 때 데이터 집합의 방향을 고려해야하는 부담이 있다.

 

Pandas에서 축은 데이터에 더 많은 의미론적 의미를 부여한다. 

 

그러므로 Pandas의 목표는 다운 스트림 기능에서 데이터 변환을 코딩하는 데 필요한 정신적 노력의 양을 줄이는 것이다. 

 

예를 들어 표 형식의 데이터 (DataFrame)를 사용하면 축 0과 축 1 대신 행과 열을 생각하는 것이 의미적으로 도움이된다. 따라서 DataFrame의 열을 반복하면 더 읽기 쉬운 코드가 된다.

 

▶ Pandas 생성 및 탐색 예시

import pandas as pd

# Pandas 생성
data = {'학번':range(2000,2010),
    '성적': [85, 95, 75, 70, 100, 100, 95, 85, 80, 85]}
test_1 = pd.DataFrame(data)
test_1
	학번	성적
0	2000	85
1	2001	95
2	2002	75
3	2003	70
4	2004	100
5	2005	100
6	2006	95
7	2007	85
8	2008	80
9	2009	85

# csv 파일로 DataFrame 만들기 - 가지고 있는 csv파일을 괄호안에 넣으면 된다. (경로 주의!)
data = pd.read_csv('csv 파일.csv')

# Pandas 탐색
data.head( ) - 데이터 프레임의 처음 다섯 개(디폴트값) 로우를 출력 
data.tail( ) - 데이터 프레임의 뒤쪽 아이템을 확인
data.shape( ) - low와 column 형태 확인
data.describe( ) - 데이터 프레임의 평균, 표준편차, 사분위수 등 주요 통계 지표 확인
data.info( ) - 데이터 프레임에 몇 개의 컬럼이 있는지, 각 컬럼에 포함된 데이터들의 타입은 무엇인지
               확인
data['컬럼명'].unique( ) - 컬럼이 가지고 있는 데이터의 종류 확인
data['컬럼명'].value_counts() - 컬럼의 각 데이터가 몇 개씩 포함되어 있는지 확인

# Pandas 정렬
data.sort_values( by = ['컬럼명'] ) - 컬럼을 기준으로 데이터를 정렬

# Pandas 선택 - iloc[], loc[] (인덱스로 값을 선택)
data.iloc[1]
해당 인덱스 추출
data.loc[1]
해당 인덱스 추출

# Pandas 삭제
data.drop(n) - n번째 로우를 삭제

 

오늘은 Numpy와 Pandas에 대해 알아보았습니다.

데이터를 다룰 때 이 두 가지 모듈을 사용하면

데이터를 조회하고 가공하는 데 수월할 것입니다.