용량이 꽤 큰 데이터를 빠르게 읽고 처리하기 위해서 필요한 방법들이 있다. 무식하게 ASCII 파일로 기록해서 일일히 읽어 쓰는건 피하자. 나중에 필요한 구간에 대해서만 잘라 쓸 때에도 가장 원시적인 방법으로 데이터를 다 훑어야 한다.


그래서 DBMS를 사용하거나 HDF5 같은 특수화된 데이터 저장방법을 통해 데이터를 빠르고 편리하게 가공하길 추천한다.


그래서 HDF5 file을 만들었는데... Pandas에서 HDF5 포맷으로 dataframe을 저장할 때 중요한 옵션이 있었다.

참조할 링크: http://pandas.pydata.org/pandas-docs/dev/io.html#fixed-format


dataframe을 HDF5 파일로 저장할 때 format을 지정해줄 수 있다. 여기서 fixed format으로 지정해줄 경우, writing 속도는 빠르지만 dataframe을 추후에 수정할 수 없다. 근데 이게 문제가 아니라... querying도 안되고 일부 column만 불러오더라도 전체 table이 메모리로 올라오게 되어 메모리 부족 현상이 일어나기 십상이다. 


format을 table format으로 지정해주어 문제가 없다면 다행이다. 하지만 fixed format으로 지정된 HDF5 파일을 이미 만들었다면 어떻게 해야 할까? 다음과 같이 일부 table이나 column단위로 데이터를 쪼개 numpy의 binary 파일로 저장하는 방법을 써보자.


* 저장

1. 뽑아낸 series나 dataframe을 numpy array로 변환한다. (a = np.array(table))

2. numpy의 save() 를 이용하여 1에서 변환한 array를 저장한다.


* 불러오기

1. numpy의 load()를 이용해 이전에 만들어진 data.npy를 불러온다. ( a = numpy.load("data.npy") ) 

2. 위에서 리턴된 객체는 0-dim array여서 item()함수를 이용해 element를 뽑아온다. ( b = a.item() )

3. 얻어진 객체의 type을 확인하고 사용한다. 


만약 series나 dataframe을 그대로 numpy의 array에 저장했다면, 불러왔을 때에도 그대로 series 혹은 dataframe의 구조를 가진다. 

'Study > Computer' 카테고리의 다른 글

command line에서 파일 검색하기 in Linux  (0) 2014.07.22
Gephi에서 node에 여러 색 주기  (0) 2014.07.09
numpy array 잘라쓰기  (0) 2014.06.17
Python으로 n-gram 만들기  (0) 2014.05.22
Matplotlib 추천 Q&A 링크들  (0) 2014.05.21

+ Recent posts