A repaid Statistical Analysis tool for Climate or Meteorology data.
Project description
SACPY -- A Python Package for Statistical Analysis of Climate
Sacpy, a repaid Statistical Analysis tool for Climate or Meteorology data.
Author : Zilu Meng
e-mail : mzll1202@163.com
github : https://github.com/ZiluM/sacpy
gitee : https://gitee.com/zilum/sacpy
pipy : https://pypi.org/project/sacpy/
examples or document : https://github.com/ZiluM/sacpy/tree/master/examples or https://gitee.com/zilum/sacpy/tree/master/examples
version : 0.0.9
Why choose Sacpy?
Quick!
For example, Sacpy is more than 60 times faster than the traditional regression analysis with Python (see speed test).
Turn to climate data customization!
Compatible with commonly used meteorological calculation libraries such as numpy and xarray.
Install
You can use pip to install.
pip install sacpy
Or you can visit https://gitee.com/zilum/sacpy/tree/master/dist to download .whl file, then
pip install .whl_file
Speed
As a comparison, we use the corr function in the xarray library, corrcoef function in numpy library, cdist in scipy, apply_func in xarray and for-loop. The time required to calculate the correlation coefficient between SSTA and nino3.4 for 50 times is shown in the figure below.
It can be seen that we are four times faster than scipy cdist, five times faster than xarray.corr, 60 times faster than forloop, 110 times faster than xr.apply_func and 200 times faster than numpy.corrcoef.
Moreover, xarray and numpy can not return the p value. We can simply check the pvalue attribute of sacpy to get the p value.
All in all, if we want to get p-value and correlation or slope, we only to choose Sacpy is 60 times faster than before.
Example
example1
Calculate the correlation between SST and nino3.4 index
import numpy as np
import scapy as scp
import matplotlib.pyplot as plt
# load sst
sst = scp.load_sst()['sst']
# get ssta (method=1, Remove linear trend;method=0, Minus multi-year average)
ssta = scp.get_anom(sst,method=1)
# calculate Nino3.4
Nino34 = ssta.loc[:,-5:5,190:240].mean(axis=(1,2))
# regression
linreg = scp.LinReg(np.array(Nino34),np.array(ssta))
# plot
plt.contourf(linreg.corr)
# Significance test
plt.contourf(linreg.p_value,levels=[0, 0.05, 1],zorder=1,
hatches=['..', None],colors="None",)
# save
plt.savefig("./nino34.png")
Result(For a detailed drawing process, see example):
example2
multiple linear regression on Nino3.4 IOD Index and ssta pattern
import numpy as np
import scapy as scp
import matplotlib.pyplot as plt
# load sst
sst = scp.load_sst()['sst']
# get ssta (method=1, Remove linear trend;method=0, Minus multi-year average)
ssta = scp.get_anom(sst,method=1)
# calculate Nino3.4
Nino34 = ssta.loc[:,-5:5,190:240].mean(axis=(1,2))
# calculate IODIdex
IODW = ssta.loc[:,-10:10,50:70].mean(axis=(1,2))
IODE = ssta.loc[:,-10:0,90:110].mean(axis=(1,2))
IODI = +IODW - IODE
# get x
X = np.vstack([np.array(Nino34),np.array(IODI)]).T
# multiple linear regression
MLR = scp.MultLinReg(X,np.array(ssta))
# plot IOD's effect
plt.contourf(MLR.slope[1])
# Significance test
plt.contourf(MLR.pv_i[1],levels=[0, 0.1, 1],zorder=1,
hatches=['..', None],colors="None",)
plt.savefig("../pic/MLR.png")
Result(For a detailed drawing process, see example):
Acknowledgements
Thank Prof. Feng Zhu (NUIST,https://github.com/fzhu2e) for his guidance of this project
Change Log
version 0.0.1
Nothing!
version 0.0.5
First official edition
version 0.0.6
Updated the speed test and changed small errors
version 0.0.7
Add examples and change README.md
version 0.0.9
Add mult_corr,partial_corr in LinReg.py and spec_moth_dat, spec_moth_yrmean in XrTools.
Change examples.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.