h5py 사용법 HDF5 예제


h5py 사용법 HDF5 예제
h5py 패키지는 Python에서 HDF5 바이너리 데이터 포맷을 사용하기 위한 인터페이스 패키지입니다. H5F5 포맷은 많은 양의 데이터를 카테고리 또는 속성별로 데이터를 나눠서 저장 할 수 있을 뿐만 아니라 numpy를 이용하여 데이터에 접근하여 사용할 수 있습니다.

이 글에서 사용된 전체 예제 소스코드는 아래의 명령어로 다운 받으실 수 있습니다.

$ git clone https://hiseon.me/reps/python-h5py-example.git
h5py 사용법

h5py 설치

conda 와 pip 명령어를 이용하여 h5py 패키지를 설치하는 방법입니다.

conda 명령어

아나콘다의 conda 를 사용할 경우 아래의 명령어를 이용하여 h5py 패키지를 설치 할 수 있습니다. 아나콘다가 설치되지 않았을 경우, 먼저 아래의 글을 이용하여 아나콘다를 설치 한 뒤에 다음 명령어를 실행해 주시기 바랍니다.

Anaconda 사용법 (conda 명령어)

$ conda install h5py

pip 명령어

conda 명령어와 비슷하게 pip 를 이용하여 h5py를 설치 하실 수도 있습니다.

 $ pip install h5py

HDF5 구성

HDF5 파일은 object 형태의 데이터셋 또는 다른 그룹들을 포함하는 그룹으로 구성됩니다. 그리고 object 의 메타 데이터를 저장할 수 있는 attrs 으로 구성됩니다.

간단히 비유를 하여 설명하면 그룹은 디렉터리로 비유할 수 있고, 데이터셋은 numpy 배열로 생각하시면 됩니다.

h5py 사용법
(출처 : support.hdfgroup.org)

h5py 사용법

hy5py 패키지를 이용하여, hdf5 파일을 작성하고 참조하는 방법에 대해서 설명드리도록 하겠습니다. 먼저 아래의 코드를 이용하여 File 객체를 생성합니다.

import h5py
import numpy as np

f = h5py.File('test.hdf5', 'w')

생성된 HDF5 파일을 단순히 참조만 할 경우 File 객체를 생성할 때에 ‘w’ 옵션 대신에 ‘r’ 옵션을 사용하면 됩니다.

그룹 생성

먼저 아래의 코드를 이용하여 데이터가 저장될 그룹 group을 생성해 보도록 하겠습니다. 그룹을 생성하기 위해서는 create_group 함수를 사용합니다. 생성된 그룹에 추가로 하위 그룹을 생성할 수도 있습니다.

g = f.create_group("group")
sub = g.create_group("sub")

print (f.keys())
print (g.keys())
[u'group']
[u'sub']

그룹 속성 추가

생성된 그룹에 아래와 같이 속성을 추가할 수 있습니다.

sub.attrs['desc'] = "hello, world"
print (sub.attrs['desc'])
hello, world

데이터셋 추가

생성된 그룹에 데이터셋을 추가하기 위해서는 create_dataset 이라는 함수를 사용하거나, 직접 데이터를 지정하면서 데이터셋을 저장할 수 있습니다.

그리고 데이터셋에서 데이터를 참조하는 방법은 아래와 같습니다.

a = sub.create_dataset("a", data = np.arange(20))
b = sub['b'] = np.arange(10)

print (sub.keys())

for k in sub.keys():
    dataset = sub[k]
    print (dataset)
    print (dataset.dtype)
    print (dataset[()])
[u'a', u'b']
<HDF5 dataset "a": shape (20,), type "<i8">
int64
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
<HDF5 dataset "b": shape (10,), type "<i8">
int64
[0 1 2 3 4 5 6 7 8 9]

데이터셋 참조

File 객체에서 바로 구분자를 사용하에 데이터셋 또는 그룹에 접근할 수 있습니다.

b = f[u'/group/sub/b']
print (b)
<HDF5 dataset "b": shape (10,), type "<i8">

이외의 추가적인 h5py 패키지 사용방법에 대해서는 아래의 페이지를 참고해 주시기 바랍니다.

http://docs.h5py.org/en/stable/quick.html

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)