본문 바로가기
텐서플로우

데이터구조 : Numpy 와 Pandas

by 다빈치스탁 2020. 9. 15.
728x90
반응형

머신러닝을 다루다 보면 가장 골치아픈게 데이터의 가공과 처리이다. 그렇기 때문에 우선 가장 많이 쓰이는 numpy 와 판다스의 사용법을 간략하게 짚고 넘어가보자.

 

우선 파이썬은 리스트와 튜플, 그리고 셋 정도로 구분해볼 수 있는데 그 중 사용빈도가 높은 것은 리스트와 튜플정도이다. 자 그렇다면 둘의 차이는 뭘까? 그렇다. 아래의 코드를 보자. [] 와 ()가 차이난다. 그 다음은? 리스트는 데이터를 추가하거나 삭제하는데 있어서 자유롭고 튜플은 그렇지 못하다. 왜? 귀찮게 뭐하러 이렇게 만들어놨을까? 그냥 리스트만 만들면 되지! 라고 생각할지도 모르겠지만 C++에서도 변수를 선언할 때 동적배열과 정적배열은 메모리 점유율이 다르다. double, int 등 타입을 선언할 때도 메모리 점유율이 다르다. 즉 자유롭게 변형이 가능한 변수일 수록 메모리를 좀 더 많이 차지한다. 

 

고도화된 머신러닝을 신경망을 fit 할 때 컴퓨터 메모리 점유율이 100%에 육박하는 신세계를 경험할 날들이 머지 않았다. 그래서 굳이 데이터의 추가나 삭제가 필요없을 때에는 리스트보다는 튜플을 써서 해야만 한다. 물론 난 돈이 엄청 많으니까 그냥 램(RAM)을 2테라(아마도 win10이 지원하는 최대메모리일거다)까지 채울꺼야! <- 부럽다. 그렇지만 현실은 녹록치 않다. 알아둬서 손해볼 건 없다. 

 

리스트는 행 데이터인데 이것을 행렬형태로 변경하고 할 때 사용하는 방법이 numpy 의 array 이고 배열의 형태로 바꾸어 주는 것은 pandas의 데이터프레임이다. 케이스 바이 케이스로 적용되는 경우는 다양한 신경망들을 다루면서 살펴보기로 하고 아래의 코드(주석포함)를 이용해서 데이터의 인덱싱, 추가, 삭제 하는 방법에 대해 간략히 짚어보고 넘어가자.

 

리스트와 튜플 그리고 numpy 행렬

py_list = [1,2,3]
py_tuple = (1,2,3)
py_set = {1,2,3}

print(py_list[1])
print(py_tuple[1])

#인덱싱이 불가능함.
#print(py_set[1])

py_list.append(4)
print(py_list)

py_list.remove(1)
print(py_list)

#데이터의 추가/삭제가 안 된다.
#그러나 점유하는 메모리가 적다.
#py_tuple.append(4)
#py_tuple.remove(4)
print(py_tuple)

#list는 하나의 열이지만 이걸 행렬로 만들어 줄때 numpy를 이용
import numpy as np
py_matrix = np.array(py_list)
py_matrix = np.array([py_list,py_list,py_list])
print(py_matrix)
print(py_matrix.shape)

#행 기준으로 합산(열은 1)
print(py_matrix.sum(axis=0))
print(py_matrix.sum(axis=1))

#행렬의 덧셈
print(np.add(py_matrix,py_matrix))
#행렬의 곱(내적)
#print(np.dot(py_matrix,py_matrix))

 

판다스를 이용한 데이터프레임

import pandas as pd

data = pd.read_csv("./multi.csv", encoding='CP949')
print(data)
print(data.head())
print(data.shape)

# pandas는 자동으로 df로 인식
# numpy 등 다른 데이터는 아래의 명령어로 배열 변경
df = pd.DataFrame(data)
print(df)
print(df.head())
print(df.shape)
# 행번호
print(df.index)
# 컬럼이름
print(df.columns)
# 값만 
print(df.values)


# 데이터프레임의 인덱싱
# 행 : , 열 : 
print(df.iloc[:2,1:])

# 컬럼삭제
df = df.drop('코스피지수',axis=1)
print(df.shape)

# 데이터프레임을 엑셀로 저장하는 기능
df.to_excel("./multi_pandas.xlsx")

# 네이버의 일자별 증권시세를 데이터프레임으로 저장
url = "https://finance.naver.com/item/sise_day.nhn?code=035420"
df = pd.read_html(url)
print(df)

 

 

728x90
반응형

'텐서플로우' 카테고리의 다른 글

기계학습의 종류 - 오차기반  (0) 2021.01.13
기계학습의 종류 - 확률기반  (0) 2021.01.10
기계학습의 종류 - 유사도 기반  (0) 2020.12.22
기계학습의 종류 - 정보 기반  (0) 2020.12.13
텐서플로우란?  (0) 2020.08.28

댓글