'데이터 분석을 위한 Python 응용 문법' (Numpy, Pandas)
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에 대해 알아보았습니다.
데이터를 다룰 때 이 두 가지 모듈을 사용하면
데이터를 조회하고 가공하는 데 수월할 것입니다.