Ikhtisar singkat 1 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... Quick overview Contents • Create a DataArray • Indexing • Attributes • Computation • GroupBy • Plotting • pandas • Datasets • Read & write netCDF files Here are some quick examples of what you can do with xarray.DataArray objects. Everything is explained in much more detail in the rest of the documentation. To begin, import numpy, pandas and xarray using their customary abbreviations: In [1]: import numpy as np In [2]: import pandas as pd In [3]: import xarray as xr Create a DataArray You can make a DataArray from scratch by supplying data in the form of a numpy array or list, with optional dimensions and coordinates: In [4]: data = xr.DataArray(np.random.randn(2, 3), dims=("x", "y"), coords={ 20/02/24, 21.15 Ikhtisar singkat 2 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... In [5]: data Out[5]: <xarray.DataArray (x: 2, y: 3)> Size: 48B array([[ 0.4691123 , -0.28286334, -1.5090585 ], [-1.13563237, 1.21211203, -0.17321465]]) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y In this case, we have generated a 2D array, assigned the names x and y to the two dimensions respectively and associated two coordinate labels ‘10’ and ‘20’ with the two locations along the x dimension. If you supply a pandas Series or DataFrame , metadata is copied directly: In [6]: xr.DataArray(pd.Series(range(3), index=list("abc"), name="foo")) Out[6]: <xarray.DataArray 'foo' (dim_0: 3)> Size: 24B array([0, 1, 2]) Coordinates: * dim_0 (dim_0) object 24B 'a' 'b' 'c' Here are the key properties for a DataArray : # like in pandas, values is a numpy array that you can modify in-place In [7]: data.values Out[7]: array([[ 0.4691123 , -0.28286334, -1.5090585 ], [-1.13563237, 1.21211203, -0.17321465]]) In [8]: data.dims Out[8]: ('x', 'y') In [9]: data.coords Out[9]: Coordinates: * x (x) int64 16B 10 20 # you can use this dictionary to store arbitrary metadata In [10]: data.attrs Out[10]: {} Indexing 20/02/24, 21.15 Ikhtisar singkat 3 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... Xarray supports four kinds of indexing. Since we have assigned coordinate labels to the x dimension we can use label-based indexing along that dimension just like pandas. The four examples below all yield the same result (the value at x=10) but at varying levels of convenience and intuitiveness. # positional and by integer label, like numpy In [11]: data[0, :] Out[11]: <xarray.DataArray (y: 3)> Size: 24B array([ 0.4691123 , -0.28286334, -1.5090585 ]) Coordinates: x int64 8B 10 Dimensions without coordinates: y # loc or "location": positional and coordinate label, like pandas In [12]: data.loc[10] Out[12]: <xarray.DataArray (y: 3)> Size: 24B array([ 0.4691123 , -0.28286334, -1.5090585 ]) Coordinates: x int64 8B 10 Dimensions without coordinates: y # isel or "integer select": by dimension name and integer label In [13]: data.isel(x=0) Out[13]: <xarray.DataArray (y: 3)> Size: 24B array([ 0.4691123 , -0.28286334, -1.5090585 ]) Coordinates: x int64 8B 10 Dimensions without coordinates: y # sel or "select": by dimension name and coordinate label In [14]: data.sel(x=10) Out[14]: <xarray.DataArray (y: 3)> Size: 24B array([ 0.4691123 , -0.28286334, -1.5090585 ]) Coordinates: x int64 8B 10 Dimensions without coordinates: y Tidak seperti pengindeksan posisi, pengindeksan berbasis label membebaskan kita dari keharusan mengetahui bagaimana susunan array kita. Yang perlu kita ketahui hanyalah nama dimensi dan label yang ingin kita indeks data.sel(x=10) works regardless of whether x is the first or second dimension of the array and regardless of whether 10 adalah elemen pertama atau kedua dari x . Kami telah memberi tahu xarray bahwa x adalah dimensi pertama saat kami membuatnya data : xarray melacak ini jadi kita tidak 20/02/24, 21.15 Ikhtisar singkat 4 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... perlu melakukannya. Untuk selengkapnya, lihat Mengindeks dan memilih data . Atribut Saat Anda menyiapkan DataArray, sering kali merupakan ide bagus untuk menyetel atribut metadata. Pilihan yang berguna adalah mengatur data.attrs['long_name'] Dan data.attrs['units'] karena xarray akan menggunakan ini, jika ada, untuk memberi label otomatis pada plot Anda. Nama-nama khusus ini dipilih berdasarkan Konvensi Metadata Iklim dan Prakiraan NetCDF (CF) . attrs hanyalah kamus Python, jadi Anda dapat menetapkan apa pun yang Anda inginkan. In [15]: data.attrs["long_name"] = "random velocity" In [16]: data.attrs["units"] = "metres/sec" In [17]: data.attrs["description"] = "A random variable created as an example." In [18]: data.attrs["random_attribute"] = 123 In [19]: data.attrs Out[19]: {'long_name': 'random velocity', 'units': 'metres/sec', 'description': 'A random variable created as an example.', 'random_attribute': 123} # you can add metadata to coordinates too In [20]: data.x.attrs["units"] = "x units" Perhitungan Array data bekerja sangat mirip dengan numpy ndarrays: In [21]: data + 10 Out[21]: <xarray.DataArray (x: 2, y: 3)> Size: 48B array([[10.4691123 , 9.71713666, 8.4909415 ], [ 8.86436763, 11.21211203, 9.82678535]]) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y 20/02/24, 21.15 Ikhtisar singkat 5 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... In [22]: np.sin(data) Out[22]: <xarray.DataArray (x: 2, y: 3)> Size: 48B array([[ 0.45209466, -0.27910634, -0.99809483], [-0.90680094, 0.9363595 , -0.17234978]]) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y Attributes: long_name: random velocity units: metres/sec description: A random variable created as an example. random_attribute: 123 # transpose In [23]: data.T Out[23]: <xarray.DataArray (y: 3, x: 2)> Size: 48B array([[ 0.4691123 , -1.13563237], [-0.28286334, 1.21211203], [-1.5090585 , -0.17321465]]) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y Attributes: long_name: random velocity units: metres/sec description: A random variable created as an example. random_attribute: 123 In [24]: data.sum() Out[24]: <xarray.DataArray ()> Size: 8B array(-1.41954454) Namun, operasi agregasi dapat menggunakan nama dimensi, bukan sumbu nomor: In [25]: data.mean(dim="x") Out[25]: <xarray.DataArray (y: 3)> Size: 24B array([-0.33326004, 0.46462434, -0.84113658]) Dimensions without coordinates: y Arithmetic operations broadcast based on dimension name. This means you don’t need to insert dummy dimensions for alignment: In [26]: a = xr.DataArray(np.random.randn(3), [data.coords["y"]]) In [27]: b = xr.DataArray(np.random.randn(4), dims="z") 20/02/24, 21.15 Ikhtisar singkat 6 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... In [28]: a Out[28]: <xarray.DataArray (y: 3)> Size: 24B array([ 0.11920871, -1.04423597, -0.86184896]) Coordinates: * y (y) int64 24B 0 1 2 In [29]: b Out[29]: <xarray.DataArray (z: 4)> Size: 32B array([-2.10456922, -0.49492927, 1.07180381, Dimensions without coordinates: z 0.72155516]) In [30]: a + b Out[30]: <xarray.DataArray (y: 3, z: 4)> Size: 96B array([[-1.98536051, -0.37572056, 1.19101252, 0.84076387], [-3.14880519, -1.53916524, 0.02756784, -0.3226808 ], Mode layar penuh [-2.96641818, -1.35677824, 0.20995484, -0.1402938 ]]) Coordinates: * y (y) int64 24B 0 1 2 Dimensions without coordinates: z Ini juga berarti bahwa dalam banyak kasus Anda tidak perlu khawatir tentang urutannya ukuran: In [31]: data - data.T Out[31]: <xarray.DataArray (x: 2, y: 3)> Size: 48B array([[0., 0., 0.], [0., 0., 0.]]) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y Operasi juga diselaraskan berdasarkan label indeks: In [32]: data[:-1] - data[:1] Out[32]: <xarray.DataArray (x: 1, y: 3)> Size: 24B array([[0., 0., 0.]]) Coordinates: * x (x) int64 8B 10 Dimensions without coordinates: y Untuk lebih lanjut, lihat Komputasi . 20/02/24, 21.15 Ikhtisar singkat 7 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... Kelompokkan Berdasarkan Xarray mendukung operasi yang dikelompokkan menggunakan API yang sangat mirip dengan panda (lihat GroupBy: Data Grup dan Bin ): In [33]: labels = xr.DataArray(["E", "F", "E"], [data.coords["y"]], name="labels" In [34]: labels Out[34]: <xarray.DataArray 'labels' (y: 3)> Size: 12B array(['E', 'F', 'E'], dtype='<U1') Coordinates: * y (y) int64 24B 0 1 2 In [35]: data.groupby(labels).mean("y") Out[35]: <xarray.DataArray (x: 2, labels: 2)> Size: 32B array([[-0.5199731 , -0.28286334], [-0.65442351, 1.21211203]]) Coordinates: * x (x) int64 16B 10 20 * labels (labels) object 16B 'E' 'F' Attributes: long_name: random velocity units: metres/sec description: A random variable created as an example. random_attribute: 123 In [36]: data.groupby(labels).map(lambda x: x - x.min()) Out[36]: <xarray.DataArray (x: 2, y: 3)> Size: 48B array([[1.9781708 , 0. , 0. ], [0.37342613, 1.49497537, 1.33584385]]) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y Merencanakan Memvisualisasikan kumpulan data Anda cepat dan nyaman: In [37]: data.plot() Out[37]: <matplotlib.collections.QuadMesh at 0x7f7c9093afe0> 20/02/24, 21.15 Ikhtisar singkat 8 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... Perhatikan pelabelan otomatis dengan nama dan satuan. Upaya kami dalam menambahkan atribut metadata telah membuahkan hasil! Banyak aspek dari gambar-gambar ini yang dapat disesuaikan: lihat Plotting . panda Objek Xarray dapat dengan mudah dikonversi ke dan dari objek pandas menggunakan to_series() , to_dataframe() Dan to_xarray() metode: In [38]: series = data.to_series() In [39]: series Out[39]: x y 10 0 0.469112 1 -0.282863 2 -1.509059 20 0 -1.135632 1 1.212112 2 -0.173215 dtype: float64 20/02/24, 21.15 Ikhtisar singkat 9 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... # convert back In [40]: series.to_xarray() Out[40]: <xarray.DataArray (x: 2, y: 3)> Size: 48B array([[ 0.4691123 , -0.28286334, -1.5090585 ], [-1.13563237, 1.21211203, -0.17321465]]) Coordinates: * x (x) int64 16B 10 20 * y (y) int64 24B 0 1 2 Kumpulan data xarray.Dataset adalah wadah selaras seperti dict DataArray objek. Anda dapat menganggapnya sebagai generalisasi multidimensi dari pandas.DataFrame : In [41]: ds = xr.Dataset(dict(foo=data, bar=("x", [1, 2]), baz=np.pi)) In [42]: ds Out[42]: <xarray.Dataset> Size: 88B Dimensions: (x: 2, y: 3) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y Data variables: foo (x, y) float64 48B 0.4691 -0.2829 -1.509 -1.136 1.212 -0.1732 bar (x) int64 16B 1 2 baz float64 8B 3.142 Ini membuat kumpulan data dengan tiga nama DataArray foo , bar Dan baz . Gunakan kamus atau pengindeksan titik untuk menariknya keluar Dataset variabel sebagai DataArray objek tetapi perhatikan bahwa tugas hanya berfungsi dengan pengindeksan kamus: In [43]: ds["foo"] Out[43]: <xarray.DataArray 'foo' (x: 2, y: 3)> Size: 48B array([[ 0.4691123 , -0.28286334, -1.5090585 ], [-1.13563237, 1.21211203, -0.17321465]]) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y Attributes: long_name: random velocity 20/02/24, 21.15 Ikhtisar singkat 10 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... units: description: random_attribute: metres/sec A random variable created as an example. 123 In [44]: ds.foo Out[44]: <xarray.DataArray 'foo' (x: 2, y: 3)> Size: 48B array([[ 0.4691123 , -0.28286334, -1.5090585 ], [-1.13563237, 1.21211203, -0.17321465]]) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y Attributes: long_name: random velocity units: metres/sec description: A random variable created as an example. random_attribute: 123 Saat membuat ds , kami menentukan itu foo identik dengan data dibuat sebelumnya, bar adalah satu dimensi dengan satu dimensi x dan nilai terkait '1' dan '2', dan baz adalah skalar yang tidak terkait dengan dimensi apa pun di dalamnya ds . Variabel dalam dataset bisa berbeda-beda dtype dan bahkan dimensi yang berbeda, tetapi semua dimensi diasumsikan mengacu pada titik-titik dalam sistem koordinat bersama yang sama, yaitu jika dua variabel mempunyai dimensi x , dimensi tersebut harus identik di kedua variabel. Misalnya saat membuat ds xarray secara otomatis menyelaraskan bar dengan DataArray foo , yaitu, mereka berbagi sistem koordinat yang sama sehingga ds.bar['x'] == ds.foo['x'] == ds['x'] . Akibatnya, yang berikut ini berfungsi tanpa menentukan koordinat secara eksplisit x saat membuat ds['bar'] : In [45]: ds.bar.sel(x=10) Out[45]: <xarray.DataArray 'bar' ()> Size: 8B array(1) Coordinates: x int64 8B 10 Anda dapat melakukan hampir semua hal yang dapat Anda lakukan DataArray objek dengan Dataset objek (termasuk pengindeksan dan aritmatika) jika Anda lebih suka bekerja dengan beberapa variabel sekaligus. Membaca & menulis file netCDF 20/02/24, 21.15 Ikhtisar singkat 11 of 11 https://docs.xarray.dev/en/stable/getting-started-guide/quick... NetCDF adalah format file yang direkomendasikan untuk objek xarray. Pengguna dari geosains akan mengakui bahwa Dataset data model terlihat sangat mirip dengan file netCDF (yang sebenarnya menginspirasinya). Anda dapat langsung membaca dan menulis objek xarray ke disk menggunakan to_netcdf() , open_dataset() Dan open_dataarray() : In [46]: ds.to_netcdf("example.nc") In [47]: reopened = xr.open_dataset("example.nc") In [48]: reopened Out[48]: <xarray.Dataset> Size: 88B Dimensions: (x: 2, y: 3) Coordinates: * x (x) int64 16B 10 20 Dimensions without coordinates: y Data variables: foo (x, y) float64 48B ... bar (x) int64 16B ... baz float64 8B ... It is common for datasets to be distributed across multiple files (commonly one file per timestep). Xarray supports this use-case by providing the open_mfdataset() and the save_mfdataset() methods. For more, see Reading and writing files. Previous Installation Next Frequently Asked Questions 20/02/24, 21.15