Uploaded by Khoirun Nissa

temp7357617081422858987

advertisement
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
Download