Python 스토리지 읽기 HDF5 파일 코드 분석

HDF5 소개
HDF(Hierarchical Data Format)는 대용량의 과학 데이터를 저장하고 처리하기 위해 설계된 파일 형식과 해당 라이브러리 파일을 가리킨다.HDF는 미국 국가 슈퍼컴퓨팅 응용 센터인 NCSA가 최초로 개발하여 현재 비영리 조직인 HDF팀의 유지 보수 아래 계속 발전하고 있다.현재 유행하는 버전은 HDF5입니다.HDF5는 광범위한 데이터 유형, 유연성, 공통성, 플랫폼 간 확장성, 효율적인 I/O 성능, 거의 무제한(최대 EB)의 단일 파일 스토리지 지원 등 다양한 과학적 데이터 저장 및 작업에 적합한 다양한 기능을 갖추고 있습니다.https://support.hdfgroup.org/HDF5/.
HDF5 패브릭
HDF5 파일은 일반적으로.h5 또는.hdf5는 접두사 이름으로 미리 보기 파일의 내용을 열 수 있는 전문적인 소프트웨어가 필요합니다.HDF5 파일 구조에는 2개의 primary objects: Groups와 Datasets가 있습니다.
Groups는 폴더와 유사합니다. 모든 HDF5 파일은 루트 디렉터리 (root) 그룹'/'입니다. 디렉터리의 용기로 볼 수 있습니다. 그 중에서 하나 이상의 데이터 집합과 다른 그룹을 포함할 수 있습니다.
Datasets는 NumPy의 수조array와 유사하여 수조의 데이터 집합으로 삼을 수 있습니다.
모든 데이터set은 두 부분으로 나눌 수 있습니다. 원시 데이터 데이터values와 메타데이터metadata(a set of data that describes andgives information about other 데이터=>raw 데이터).

+-- Dataset
|  +-- (Raw) Data Values (eg: a 4 x 5 x 6 matrix)
|  +-- Metadata
|  |  +-- Dataspace (eg: Rank = 3, Dimensions = {4, 5, 6})
|  |  +-- Datatype (eg: Integer)
|  |  +-- Properties (eg: Chuncked, Compressed)
|  |  +-- Attributes (eg: attr1 = 32.4, attr2 = "hello", ...)
|
위의 구조에서 볼 수 있듯이
  • Dataspace는 원시 데이터의 등급(Rank)과 차원(dimension)을 제시한다
  • Datatype는 데이터 형식을 제공합니다
  • Properties는 이 데이터세트의 블록 저장 및 압축 상황을 설명합니다
  • Chunked: Better access time for subsets; extendible
  • Chunked & Compressed: Improves storage efficiency, transmission speed
  • 이 dataset에 대한 Attributes의 다른 사용자 정의 속성
  • 전체 HDF5 파일의 구조는 다음과 같습니다.
    
    +-- /
    |  +-- group_1
    |  |  +-- dataset_1_1
    |  |  |  +-- attribute_1_1_1
    |  |  |  +-- attribute_1_1_2
    |  |  |  +-- ...
    |  |  |
    |  |  +-- dataset_1_2
    |  |  |  +-- attribute_1_2_1
    |  |  |  +-- attribute_1_2_2
    |  |  |  +-- ...
    |  |  |
    |  |  +-- ...
    |  |
    |  +-- group_2
    |  |  +-- dataset_2_1
    |  |  |  +-- attribute_2_1_1
    |  |  |  +-- attribute_2_1_2
    |  |  |  +-- ...
    |  |  |
    |  |  +-- dataset_2_2
    |  |  |  +-- attribute_2_2_1
    |  |  |  +-- attribute_2_2_2
    |  |  |  +-- ...
    |  |  |
    |  |  +-- ...
    |  |
    |  +-- ...
    |
    HDF5 파일은 "/"라는 그룹에서 시작되며, 모든 데이터셋과 다른 그룹은 이 그룹에 포함되어 있으며, HDF5 파일을 조작할 때, 그룹을 명시적으로 지정하지 않은 데이터셋은 기본적으로 "/"아래의 데이터셋을 가리키며, 상대 파일 경로와 유사한 그룹 이름은 "/"에 대한 것입니다.
    설치
    pip install h5py
    Python 읽기 및 쓰기 HDF5 파일
    
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    #
    # Created by WW on Jan. 26, 2020
    # All rights reserved.
    #
    
    import h5py
    import numpy as np
    
    def main():
      #===========================================================================
      # Create a HDF5 file.
      f = h5py.File("h5py_example.hdf5", "w")  # mode = {'w', 'r', 'a'}
    
      # Create two groups under root '/'.
      g1 = f.create_group("bar1")
      g2 = f.create_group("bar2")
    
      # Create a dataset under root '/'.
      d = f.create_dataset("dset", data=np.arange(16).reshape([4, 4]))
    
      # Add two attributes to dataset 'dset'
      d.attrs["myAttr1"] = [100, 200]
      d.attrs["myAttr2"] = "Hello, world!"
    
      # Create a group and a dataset under group "bar1".
      c1 = g1.create_group("car1")
      d1 = g1.create_dataset("dset1", data=np.arange(10))
    
      # Create a group and a dataset under group "bar2".
      c2 = g2.create_group("car2")
      d2 = g2.create_dataset("dset2", data=np.arange(10))
    
      # Save and exit the file.
      f.close()
    
      ''' h5py_example.hdf5 file structure
      +-- '/'
      |  +--  group "bar1"
      |  |  +-- group "car1"
      |  |  |  +-- None
      |  |  |  
      |  |  +-- dataset "dset1"
      |  |
      |  +-- group "bar2"
      |  |  +-- group "car2"
      |  |  |  +-- None
      |  |  |
      |  |  +-- dataset "dset2"
      |  |  
      |  +-- dataset "dset"
      |  |  +-- attribute "myAttr1"
      |  |  +-- attribute "myAttr2"
      |  |  
      |  
      '''
    
      #===========================================================================
      # Read HDF5 file.
      f = h5py.File("h5py_example.hdf5", "r")  # mode = {'w', 'r', 'a'}
    
      # Print the keys of groups and datasets under '/'.
      print(f.filename, ":")
      print([key for key in f.keys()], "
    ") #=================================================== # Read dataset 'dset' under '/'. d = f["dset"] # Print the data of 'dset'. print(d.name, ":") print(d[:]) # Print the attributes of dataset 'dset'. for key in d.attrs.keys(): print(key, ":", d.attrs[key]) print() #=================================================== # Read group 'bar1'. g = f["bar1"] # Print the keys of groups and datasets under group 'bar1'. print([key for key in g.keys()]) # Three methods to print the data of 'dset1'. print(f["/bar1/dset1"][:]) # 1. absolute path print(f["bar1"]["dset1"][:]) # 2. relative path: file[][] print(g['dset1'][:]) # 3. relative path: group[] # Delete a database. # Notice: the mode should be 'a' when you read a file. ''' del g["dset1"] ''' # Save and exit the file f.close() if __name__ == "__main__": main()
    관련 코드 예
    h5py 파일 만들기
    import h5py
    f=h5py.File("myh5py.hdf5","w")
    dataset 만들기
    
    import h5py
    f=h5py.File("myh5py.hdf5","w")
    #deset1 name,(20,) shape,i 
    d1=f.create_dataset("dset1", (20,), 'i')
    for key in f.keys():
      print(key)
      print(f[key].name)
      print(f[key].shape)
      print(f[key].value)
    출력:
    dset1
    /dset1
    (20,)
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    값을 매기다
    
    import h5py
    import numpy as np
    f=h5py.File("myh5py.hdf5","w")
    
    d1=f.create_dataset("dset1",(20,),'i')
    # 
    d1[...]=np.arange(20)
    # 
    f["dset2"]=np.arange(15)
    
    for key in f.keys():
      print(f[key].name)
      print(f[key].value)
    출력:
    /dset1
    [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
    /dset2
    [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
    그룹 만들기
    
    import h5py
    import numpy as np
    f=h5py.File("myh5py.hdf5","w")
    
    # bar 
    g1=f.create_group("bar")
    
    # bar name dset1,dset2 。
    g1["dset1"]=np.arange(10)
    g1["dset2"]=np.arange(12).reshape((3,4))
    
    for key in g1.keys():
      print(g1[key].name)
      print(g1[key].value)
    출력:
    /bar/dset1
    [0 1 2 3 4 5 6 7 8 9]
    /bar/dset2
    [[ 0 1 2 3]
    [ 4 5 6 7]
    [ 8 9 10 11]]
    어떤 키의 데이터를 삭제합니다
    #어떤 키를 삭제하고remove를 호출합니다
    f.remove("bar")
    마지막으로 pandsa에서 HDF5 형식 파일 읽기
    
    import pandas as pd
    import numpy as np
    
    #  mode r 
    hdf5 = pd.HDFStore("hello.h5", mode="r")
    #  
    """
    hdfs = pd.read_hdf("hello.h5", key="xxx")
    """
    이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

    좋은 웹페이지 즐겨찾기