1. Pandas_준비 > 1-1. Pandas란?
Pandas란?
Introduction to Data Science 커리큘럼의 목적은 데이터 '수집, '조작', '시각화'입니다. '1. Pandas_준비' ~ '4. Matplotlib'(1~2주)에는 이미 만들어진 데이터를 조작하고, 효과적으로 시각화 하는 방법에 대해 배울 예정입니다.
이번(1주차)에는 데이터 분석 모듈 Pandas, 수치 데이터 처리 모듈 Numpy, 시각화 모듈 matplitlib에 대해 배웁니다. 앞으로 가장 많이 사용하게 되실 모듈이니 꼼꼼히 공부하시고, 스스로 사용해보시며 친해지시기 바랍니다.
Pandas란에서 ipynb 파일을 확인하실 수 있습니다. 현재 화면이 편하신 분은 그대로 학습하셔도 무방합니다.
💡 Pandas란?
모든 데이터, 정보가 줄글로 씌여 있다고 생각해 봅시다. 예컨대
- 사과 100개, 귤 200개, 양초 50개가 있습니다.
이정도의 데이터는 한 눈으로 봐도 이해가 될 수 있습니다. 하지만 1960년대부터 2022년까지 매일, 모든 지역의, 모든 과일의 시세를 직관적으로 파악하기는 힘듭니다. 그래서 사람들은 대부분 행row과 열column으로 된 표table 형태의 2차원 데이터를 사용합니다. Excel이나 Numbers를 떠올리셨다면 정답입니다. Pandas는 이러한 2차원 데이터를 가공하고 처리하기 위해 만들어졌습니다.
그렇다면 왜 Excel을 사용하지 않냐는 물음이 생길 수 있습니다. 우리가 다루는 데이터들은 하나하나 확인하기 어려울만큼 거대합니다. 컬럼이 한 화면에 들어오기 어려운 경우도 많고, 애초에 데이터가 많아서 Excel이 실행되지 않기도 합니다. 그래서 판다스는 보다 개념적인 명령을 통해 큰 데이터의 추출, 조작을 도와줍니다.
Excel을 쓸 줄 아는 사람들은 많지만, Excel의 모든 기능을 사용할 줄 아는 전문가는 많지 않습니다. Pansdas도 마찬가지 입니다. 많이 사용되는 기능 위주로 작성했으니 더 필요한 부분은 구글에게 물어가며 이후 프로젝트를 진행해 봅시다.
💡 Pandas의 자료 구조
- Series: 1차원 배열의 자료구조. 하나의 열(column컬럼)으로 이루어짐. 인덱스와 함께 구성됨.
- DataFrame: 2차원 배열의 자료구조. 여러 열로 이루어짐.
Series와 DataFrame의 가장 큰 차이는 Series는 칼럼이 하나, DataFrame은 칼럼이 여러 개!
📖 행.. 열..?
보통 가로, 세로 순서로 말하죠? 행과 열도 가로(행row), 세로(열column) 순서입니다.
하지만 엄밀하게 말해서 "행렬"Matrix과 같은 의미는 아닙니다. 연산 규칙이 달라지거든요. 일단 DataFrame이 행렬Matrix보다 더 직관적이라고만 알고 계셔도 충분합니다.
📖 배열(array)
같은 타입의 변수들로 이루어진 유한 집합.
# 파이썬 3.8버전 추가하기(숙지할 필요 없음)
import sys
sys.path.append("/usr/local/lib/python3.8/site-packages")
# pandas 모듈 import
# pandas 모듈을 가져와!
# as: 코드에서는 pd라고 축약해서 쓸거야!
import pandas as pd
# Series
obj = pd.Series([4,7,-5,3]) # 왼쪽의 인덱스와 결합됨. 오른쪽이 시리즈의 값.
obj
# 결과
# 0 4
# 1 7
# 2 -5
# 3 3
# dtype: int64
obj.index
# 숫자 범위로 된 인덱스. 0부터 4까지 1씩 증가.
# RangeIndex(start=0, stop=4, step=1)
# 인덱스 지정하기
obj2 = pd.Series([4,7,-5,3], index=['d','b','a','c'])
obj2 # 항상 어떤 데이터가 들어있는지 확인해보는 것 잊지말기!
# d 4
# b 7
# a -5
# c 3
# dtype: int64
# 인덱스가 'd'인 값 정수 6으로 바꾸기
obj2['d'] = 6
obj2
# d 6
# b 7
# a -5
# c 3
# dtype: int64
# 딕셔너리에서 Series 만들기
sdata = {'Ohio': 35000, 'Texas':71000,
'Oregon':16000, 'Utah':5000}
obj3 = pd.Series(sdata)
obj3
# Ohio 35000
# Texas 71000
# Oregon 16000
# Utah 5000
# dtype: int64
# 리스트로 인덱스 설정하기
state = ['California','Ohio','Oregon','Texas']
obj4 = pd.Series(sdata, index=state)
obj4
# California NaN
# Ohio 35000.0
# Oregon 16000.0
# Texas 71000.0
# dtype: float64
📖 NaN: Not a Number
값이 없다는 의미입니다!
문제: Series나 DataFrame을 열었는데 공백으로 표시된다면 그 데이터는 NaN일까?
정답: NO! NaN은 NaN이라고 분명하게 표시됩니다. 확인해 봐야 알겠지만, ''이나 ' ' 같은 모양으로 된 "데이터가 들어가 있" 을 가능성이 높아요. 물론 0도 0이라고 분명하게 표시해 줍니다. (0도 문자열 0일 수도 있겠죠?)
💡 DataFrame
- 구성: 인덱스index, 열column, 데이터
- 여러 행, 여러 열로 이루어진 2차원 데이터 구조체
- DataFrame == 여러 개의 Series
- Series는 DataFrame의 열column이 될 수 있음
# 딕셔너리를 이용해 DataFrame 생성하기
data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]}
df = pd.DataFrame(data)
df
state | year | pop | |
---|---|---|---|
0 | Ohio | 2000 | 1.5 |
1 | Ohio | 2001 | 1.7 |
2 | Ohio | 2002 | 3.6 |
3 | Nevada | 2001 | 2.4 |
4 | Nevada | 2002 | 2.9 |
# 칼럼을 원하는 순서대로 보기
df2 = pd.DataFrame(data, columns=['year','state','pop'])
df2
year | state | pop | debt | |
---|---|---|---|---|
one | 2000 | Ohio | 1.5 | NaN |
two | 2001 | Ohio | 1.7 NaN | |
three | 2002 | Ohio | 3.6 NaN | |
four | 2001 | Nevada | 2.4 NaN | |
five | 2002 | Nevada | 2.9 NaN |