๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Data Engineering ์žฌ๋ฐŒ๋”ฐ/Ocean Meteorological Data

ํ•ด์–‘๊ธฐ์ƒ์„ ์œ„ํ•œ NetCDF ๋‹ค๋ฃจ๊ธฐ (2)

by ์ž„๋ฆฌ๋‘ฅ์ ˆ 2025. 2. 20.
๋ฐ˜์‘ํ˜•
๋”๋ณด๊ธฐ

๊ธฐ๋ณธ์ ์ธ python ๊ฐœ๋…์„ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ์ „์ œ ํ•˜,
๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋“ค ์œ„์ฃผ๋กœ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ธ€์ž„์„ ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


์ฐจ์› ๋ฐ์ดํ„ฐ์˜ ๊ฐœ๋… 

3์ฐจ์›๋ฐ์ดํ„ฐ - 4์ฐจ์› ์„ ์‚ฌ์šฉํ•˜๋Š” ๋А๋‚Œ์“ฐ

NetCDF (Network Common Data Form) ๋ฐ์ดํ„ฐ๊ฐ€ ๋ญ์—์šฉ?

ํ•ด์–‘๊ณผ ๋Œ€๊ธฐ ๊ณผํ•™์—์„œ ๋„๋ฆฌ ์“ฐ์ธ๋‹ค.

  • ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ
  • ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„์— ๋”ฐ๋ฅธ ๋Œ€๊ธฐ, ํ•ด์–‘, ๋ฐ์ดํ„ฐ๋“ค

๋ฐฐ์—ด ๋˜๋Š” ํ–‰๋ ฌ๋กœ ๊ตฌ์„ฑ๋œ ๊ณผํ•™์ •๋ณด ํ˜•์‹

ํ•ด์–‘ ์ˆ˜์น˜ ๋ชจ๋ธ ๊ฒฐ๊ณผ๋Š” ๊ณต๊ฐ„์ •๋ณด(3์ฐจ์›)์˜ ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๊ฐ’์ด ์ž…๋ ฅ, ๊ฐ’ ๋˜ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จ. (x,y์— ๋”ฐ๋ฅธ h๊ฐ’. ๋ฉด๋ฐ์ดํ„ฐ)

๋˜ํ•œ ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ํŒŒ๊ณ , ํŒŒํ–ฅ, ํŒŒ์ฃผ๊ธฐ ๋“ฑ ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ ํฌํ•จ.

๊ด€์ธก์ •๋ณด ์ผ ๋•Œ๋Š” ๊ด€์ธก์†Œ๋ช…, ํ‘œ์ค€์‹œ, ์ˆ˜์ธต, ์žฅ๋น„๋ช… ๋“ฑ๊ณผ ๋ชจ๋ธ์ผ ๋•Œ๋Š” ์‹œ๊ฐ„, ๊ณต๊ฐ„ ํ‘œ์ค€, ๊ฐ’ ๋‹จ์œ„, fill_value ๋“ฑ๋“ฑ ํฌํ•จ๋˜์–ด์•ผ ํ•  ์ •๋ณด๋“ค์ด ๋งŽ์Œ.

 

์˜ˆ๋กœ ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„ (x, y, t) + ๊ทธ ๊ฐ’์— ๋”ฐ๋ฅธ z ๊นŒ์ง€๋ฉด 4์ฐจ์› ๋ฐ์ดํ„ฐ๊ฐ€ ๋จ.

์ด๋Ÿฐ ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋‹ค์ˆ˜์˜ ์  (๊ณต๊ฐ„, ๋ช…)์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ธฐ์— NetCDF ํ˜•์‹์„ ํ™œ์šฉํ•˜๊ณ  ์žˆ์Œ.

(๋Œ€์ถฉ ๊ณต๊ฐ„, ์‹œ๊ฐ„, ๋ชจ๋“  ์ •๋ณด ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ๋ผ๋Š” ๋œป)

NetCDF file structure ํŒŒ์•…ํ•˜๊ธฐ ์‹ค์ „

  • Dimension (์ฐจ์› : ์œ„๋„, ๊ฒฝ๋„, ์‹œ๊ฐ„์˜ ํฌ๊ธฐ, ๊ฐฏ์ˆ˜ ๋“ฑ)
    ์ผ๋ฐ˜์ ์œผ๋กœ (Z,Y,X)
  • Variables (์‹ค์ œ ๋ณ€์ˆ˜๋“ค์˜ ๊ฐ’)
  • attributes (ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€์ •๋ณด) ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Œ.
  • Global Attribute

ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” → linux - ncdump, matlap - ncinfo

์ฐธ์กฐ : https://adyork.github.io/python-oceanography-lesson/17-Intro-NetCDF/index.html

NCํŒŒ์ผ ) Ncdump๋กœ ํŒŒ์•…ํ•˜๊ธฐ

ncdump -h {file}

dimension, variables
ํ•˜๊ณ  attributes

python library ) Xarray๋กœ ๊ฐœ์ˆ˜, ์šฉ๋Ÿ‰ ํŒŒ์•…ํ•˜๊ธฐ

"""
File for know the NCfile's digit info with Xarray
"""

import xarray as xr

# file path
file_path = 'data/IBTrACS/IBTrACS.WP.v04r01.nc'

try:
    ds = xr.open_dataset(file_path)
    print(ds)               #print all of dataset info
    print(ds.variables)     #print variable of dataset
    print(ds.attrs)         #print attribute of dataset
except FileNotFoundError:
    print(f"Error: File not found at path: {file_path}")
except Exception as e:
    print(f"An error occurred: {e}")

dimensions, variables, attribute๊ฐ€ ๋Œ€๊ฐ• ๋ญ”์ง€ ๊ฐœ์ˆ˜ ๋ช‡๊ฐœ์ธ์ง€ ์šฉ๋Ÿ‰ ๋“ฑ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚˜์˜ค๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

python library ) iris๋ผ๋Š” ๊ฒƒ๋„ ์žˆ๋‹ค๊ณ ? 

#pip install scitools-iris

import iris


# NC ํŒŒ์ผ ๊ฒฝ๋กœ
file_path = 'data/20190329_1_gen_data.nc'

# Iris๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ๋ธŒ(Cube) ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ
try:
    cubes = iris.load(file_path)
    print(cubes)  # ํ๋ธŒ ๋ฆฌ์ŠคํŠธ ์ •๋ณด ์ถœ๋ ฅ
except OSError as e:
    print(f"Error: Could not open or read file: {file_path}. {e}")
except Exception as e:
    print(f"An unexpected error occurred: {e}")

๋ฆฌ์ŠคํŠธ๋กœ ์ •๋ง ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ํ๋ธŒ๋กœ ๋‚˜์˜ค๋Š” ํ˜•ํƒœ?

 

 

์‹œ๊ฐํ™” ํˆด : ncview

  • ncview
  • IDL NetCDF
  • Panoply
  • NcBrowse 

๊ฐ™์€ ํˆด๋“ค์ด ์žˆ๋‹ค๊ณ ํ•˜๋Š”๋ฐ ์šฐ์„  ncview๋กœ ์ข€๋” ์ž‘์€ nc ํŒŒ์ผ์„ ๋ณด๋ฉด

์ด ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ. meansealevelpressure๋งŒ ์žˆ๋‹ค
์ด๋Ÿฐ์‹์œผ๋กœ variable์„ ์„ ํƒํ•ด์„œ ๋ณด๊ณ ์‹ถ์€๋ถ€๋ถ„ ๋Œ€์ถฉ ์ฐ๊ณ  ์ฒดํฌ์ •๋„๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๋“ฏ ํ•˜๋‹ค

 

์šฐ๋ฆฌ๋‚˜๋ผ์ชฝ ํƒœํ’ ๊ฐ€์šด๋ฐ(๋นจ๊ฐ•) -> ์ดˆ๋ก(ํ•˜์–‘) -> ๋นจ๊ฐ•(ํŒŒ๋ž‘)

Lon 170, 176, 186 ์ˆœ์œผ๋กœ ์ฐ์–ด ๋ณด๋‹ˆ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค *์ด๋ ‡๊ฒŒ ํ™•์ธ๋งŒ ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค 

๋˜ํ•œ ๋‹ค์–‘ํ•œ ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•ด์„œ ๋ฐ”๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ์žฅ์ ์ด๋‹ค 

-> ์–ด๋–ค ํšจ๊ณผ๊ฐ€ ์ž˜๋ณด์ผ์ง€ ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ๋„ ์ข‹์„ ๋“ฏ 

 

VSCode Extension : NetCDF Explorer

์ค‘๊ตญ.. ์ด๊ธดํ•˜์ง€๋งŒ ์ผ๋‹จ ๊น”์•„๋ณด์ž ๋„์›€๋  ๊ฒƒ ๊ฐ™๋‹ค

Show NetCDF info๋ฅผ ๋ˆŒ๋Ÿฌ๋ณด์ž

 

๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ๋‚˜๋งˆ info๊ฐ€ ๋‚˜์™€ ํŽธํ•˜๊ธดํ•˜๋‹ค (BUT..)

 

 


์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ์ฐธ๊ณ  ๋ฐ NetCDF ์ฐธ๊ณ ์ž๋ฃŒ ! (ํ•œ ๋ฒˆ์€ ์ฝ์–ด๋ณด๋ฉด ์ข‹๊ฒ ๋‹ค)

๋ฐ˜์‘ํ˜•

์ตœ๊ทผ๋Œ“๊ธ€

์ตœ๊ทผ๊ธ€

skin by ยฉ 2024 ttutta