1. NumPy
NumPy란 파이썬에서 가장 기본적인 과학적 계산을 위한 패키지로 행렬 처리 및 계산에 용이하다.
import numpy as np
보통 NumPy 라이브러리를 사용할 때는 이 문법을 사용한다.
NumPy의 용도를 말하기 전에, 우선 일반적인 파이썬의 List와 튜플의 타입 속성에 대해 알 필요가 있다. 일반적인 list는 가로, 즉 행 단위로 접근 가능하지만, 열 단위로는 접근이 불가능하다. 그리고 튜플은 애초에 수정이 불가능하다. 하지만, type을 NumPyarray로 바꿔주면 열 간의 계산도 가능하게 된다.
price = [
[100, 80, 70,90],
[120, 110, 100, 110]
]
print(price[0])
이런 식으로 코딩하게 되면, 이는 리스트 타입이기 때문에 [100, 80, 70, 90]이 출력될 것이다. 그리고 price[0][0]을 출력하게 되면, 100이라는 값을 출력 받을 수 있게 되지만, 위에서 말한 것과 같이 여러개의 열 간의 계산을 하기 힘들어진다.
하지만 NumPy 슬라이싱을 통해 np.arr2[:, 0]을 출력하게 되면 행의 모든 것과 열은 0번째(첫번째)의 값을 출력 받을 수 있다.
ndarray란 다차원 행렬구조를 말하는 것으로 두 가지 이상의 리스트 형식을 빌려 행렬 구조를 만들어 행렬 표나 벡터 계산을 편리하게 해주는 것이다. 이는 주로 np.array()를 통해 만들어진다.
2. Pandas와 Series
Pandas란 NumPy와 같이 패기지이지만 NymPy는 보통 수치를 다루지만, Pandas는 주로 파이썬 데이터를 처리하고 분석하는 패키지이다. Pandas에는 Series와 다음 포스팅에서 다룰 데이터프레임(DataFrame), 그리고 패널 등의 데이터 구조를 가진다.
from pandas import Series
Series()
import pandas as pd
pd.Series()
위 코드들은 모두 series를 임포트하기 위한 방식으로 Series는 보통 1차원 데이터를 위한 자료구조이다.
from pandas import Series
arr = [0, 1, 2, 3]
s = Series(arr)
print(s)
이는 arr이라는 리스트를 생성하고 Series()를 통해 Series 클래스로 만들었다.
Series 클래스는 보통 행번호와 인덱스를 사용하여 데이터를 관리한다. 여기서 행번호는 수정 불가능하지만, 인덱스 값은 수정이 가능하기에 보통 날짜나 가격 등으로 표현이 가능하다.
from pandas import Series
price = [1000, 2000, 3000]
index = ["사탕", "초콜릿", "과자"]
s = Series(price)
print(s)
이 값을 출력하면
0 사탕 1000
1 초콜릿 2000
2 과자 3000
dtype: int64
이 값으로 출력된다. 옆에 있는 값이 행번호이고, index라는 변수를 통해 인덱스를 사탕, 초콜릿, 과자로 만들었다.
Series를 인덱싱(특정 데이터를 뽑는 것)할 수 있는 방법은 총 세가지이다. 첫 번째 방법은 iloc[]을 사용하는 것이다.
from pandas import Series
price = [1000, 2000, 3000]
index = ["사탕", "초콜릿", "과자"]
s = Series(price)
print(iloc[0])
이를 출력하면, 1000이라는 값이 나온다. 이는 행번호가 0인 값의 데이터(인덱스X)인 1000을 출력하는 것이다
두 번째 방법은 loc[]를 사용하는 것이다.
from pandas import Series
price = [1000, 2000, 3000]
index = ["사탕", "초콜릿", "과자"]
s = Series(price)
print(loc["사탕"])
이 또한 출력값은 1000이 나온다. 하지만 iloc과 loc의 차이점은 iloc은 []안에 행 번호를 사용하지만, loc[] 안에는 인덱스 값이 들어간다.
세 번째 방법은
from pandas import Series
price = [1000, 2000, 3000]
index = ["사탕", "초콜릿", "과자"]
s = Series(price, idex)
print(s["사탕"])
이 또한 출력값은 1000이다.
Series 슬라이싱(특정 구간의 데이터만 뽑아내는 것)을 하는 방법으론 두 가지가 있다.
from pandas import Series
price = [1000, 2000, 3000]
index = ["사탕", "초콜릿", "과자"]
s = Series(price, idex)
print(s.iloc[0:1])
위 코드의 출력값은
사탕 1000
초콜릿 2000
이다. iloc[]안에는 슬라이싱 하고 싶은 곳의 처음과 마지막 행 번호를 쓰고 그 가운데에 :를 쓰면 된다.
두 번째 방법은 loc를 쓰는 방법이다. 인덱싱할 때와 같이 loc 안에는 슬라이싱하고 싶은 처음과 마지막 인덱스를 쓰고, 가운데에 :를 쓰면 된다.
그리고 변수를 하나 더 생성하여 특정 행번호가 적힌 리스트를 생성하면 굳이 연속되지 않아도 특정 데이터를 뽑아 쓸 수 있다.
from pandas import Series
price = [1000, 2000, 3000]
index = ["사탕", "초콜릿", "과자"]
s = Series(price, idex)
s.loc["젤리"] = 1500
s1 = s.drop("과자")
이런 코드의 출력 값은 젤리와 1500의 인덱스가 추가되고, 과자와 인덱스 값 3000이 삭제가 된 채로 출력이 된다. 여기서 drop 함수를 쓸 때 주의해야 할 점은 전에 있던 리스트가 사라지지 않은 채로 남아있다는 것이다.
from pandas import Series
s = Series([100, 200, 300])
print(s+10)
이 코드의 출력값은 100, 200, 300에 10씩 더해진 채로 나온다.
from pandas import Series
s = Series(data = [100, 200, 300])
cond = s >=200
print(cond)
이 코드의 출력값은 200과 300은 True, 100에는 False인데, 이처럼 class가 series인 것에 비교연산을 통해 정할 수도 있고, 다른 리스트끼리 각 데이터가 수가 같은 때에는 +,-와 같은 사칙연산도 가능하다.