Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
other:python:jyp_steps [2017/07/20 11:51] – Added links to seaborn and colorbrewer jypeter | other:python:jyp_steps [2018/07/10 11:02] – [json files] Moved json to a new "Data file formats" section, and dded LiPD and BagIt jypeter |
---|
==== cdms2 ==== | ==== cdms2 ==== |
| |
Summary: cdms2 can read/write netCDF files (and read //grads// dat+ctl files) and provides a higher level interface than netCDF4. Unfortunately, cdms2 is only available in the [[other:python:starting#uv-cdat|UV-CDAT distribution]], and distributions where somebody has installed some version of //cdat-lite//. When you can use cdms2, you also have access to //cdtime//, that is very useful for handling time axis data. | Summary: cdms2 can read/write netCDF files (and read //grads// dat+ctl files) and provides a higher level interface than netCDF4. cdms2 is available in the [[other:python:starting#uv-cdat|UV-CDAT distribution]], and can theoretically be installed independently of UV-CDAT (e.g. it will be installed when you install [[https://cmor.llnl.gov/mydoc_cmor3_conda/|CMOR in conda)]]. When you can use cdms2, you also have access to //cdtime//, that is very useful for handling time axis data. |
| |
How to get started: | How to get started: |
- the tutorial is in French (soooorry!) | - the tutorial is in French (soooorry!) |
- you have to replace //cdms// with **cdms2**, and //MV// with **MV2** (sooorry about that, the tutorial was written when CDAT was based on //Numeric// instead of //numpy// to handle array data) | - you have to replace //cdms// with **cdms2**, and //MV// with **MV2** (sooorry about that, the tutorial was written when CDAT was based on //Numeric// instead of //numpy// to handle array data) |
- read the [[http://uv-cdat.llnl.gov/documentation/cdms/cdms.html|official cdms documentation]] | - read the [[http://cdms.readthedocs.io/en/docstanya/index.html|official cdms documentation]] (link may change) |
- ask questions and get answers on the [[http://uvcdat.askbot.com/questions/|UV-CDAT askbot]] | |
| |
| |
==== netCDF4 ==== | ==== netCDF4 ==== |
| |
Summary: netCDF4 can read/write netCDF files and is available in most python distributions | Summary: //netCDF4 can read/write netCDF files and is available in most python distributions// |
| |
Where: [[http://unidata.github.io/netcdf4-python/]] | Where: [[http://unidata.github.io/netcdf4-python/]] |
| |
| ===== CDAT-related resources ===== |
| |
| Some links, in case they can't be found easily on the [[https://uv-cdat.llnl.gov|UV-CDAT]] web site... |
| |
| * [[https://uv-cdat.llnl.gov/tutorials.html|Tutorials in ipython notebooks]] |
| * [[http://cdat-vcs.readthedocs.io/en/latest/|VCS: Visualization Control System]] |
| * [[https://github.com/CDAT/vcs/issues/238|Colormaps in vcs examples]] |
| * [[https://github.com/CDAT/cdat-site/blob/master/eztemplate.md|EzTemplate Documentation]] |
| |
===== Matplotlib ===== | ===== Matplotlib ===== |
- sometimes the results of the python/matplolib commands are displayed directly, sometimes not. It depends if you are in [[http://matplotlib.org/faq/usage_faq.html#what-is-interactive-mode|interactive or non-interactive]] mode | - sometimes the results of the python/matplolib commands are displayed directly, sometimes not. It depends if you are in [[http://matplotlib.org/faq/usage_faq.html#what-is-interactive-mode|interactive or non-interactive]] mode |
- the documentation may mention [[http://matplotlib.org/faq/usage_faq.html#what-is-a-backend|backends]]. What?? Basically, you use python commands to create a plot, and the backend is the //thing// that will render your plot on the screen or in a file (png, pdf, etc...) | - the documentation may mention [[http://matplotlib.org/faq/usage_faq.html#what-is-a-backend|backends]]. What?? Basically, you use python commands to create a plot, and the backend is the //thing// that will render your plot on the screen or in a file (png, pdf, etc...) |
| - if you don't see a part of what you have plotted, maybe it's hidden behind other elements! Use the [[https://matplotlib.org/examples/pylab_examples/zorder_demo.html|zorder parameter]] to explicitly specify the plotting order/layers |
- Read the [[http://www.labri.fr/perso/nrougier/teaching/matplotlib/|Matplotlib tutorial by Nicolas Rougier]] | - Read the [[http://www.labri.fr/perso/nrougier/teaching/matplotlib/|Matplotlib tutorial by Nicolas Rougier]] |
- Download the [[http://matplotlib.org/contents.html|pdf version of the manual]]. **Do not print** the 2800+ pages of the manual! Read the beginner's guide (Chapter //FIVE// of //Part II//) and have a super quick look at the table of contents of the whole document. | - Download the [[http://matplotlib.org/contents.html|pdf version of the manual]]. **Do not print** the 2800+ pages of the manual! Read the beginner's guide (Chapter //FIVE// of //Part II//) and have a super quick look at the table of contents of the whole document. |
===== Graphics related resources ===== | ===== Graphics related resources ===== |
| |
| * [[http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1003833|Ten Simple Rules for Better Figures]] |
* [[http://seaborn.pydata.org/|Seaborn]] is a library for making attractive and informative statistical graphics in Python, built on top of matplotlib | * [[http://seaborn.pydata.org/|Seaborn]] is a library for making attractive and informative statistical graphics in Python, built on top of matplotlib |
* [[http://colorbrewer2.org|ColorBrewer 2.0]] is a tool that can help you understand, and experiment with //sequential//, //diverging// and //qualitative// colormaps | * See also: [[https://www.datacamp.com/community/tutorials/seaborn-python-tutorial| |
| Python Seaborn Tutorial For Beginners]] |
| * Working with colors |
| * [[https://matplotlib.org/users/colormaps.html|Choosing colormaps]] |
| * [[https://matplotlib.org/cmocean/|Beautiful colormaps for oceanography: cmocean]] |
| * [[http://colorbrewer2.org|ColorBrewer 2.0]] is a tool that can help you understand, and experiment with //sequential//, //diverging// and //qualitative// colormaps |
| |
| |
===== Basemap ===== | ===== Basemap ===== |
| |
<note warning>It seems that basemap is going to be slowly phased out, in favor of [[#cartopy]]\\ More information in this [[https://github.com/matplotlib/basemap/issues/267|basemap github issue]] | <note warning>Basemap is going to be slowly phased out, in favor of [[#cartopy]]\\ More information in this: |
| * [[https://github.com/SciTools/cartopy/issues/920|cartopy github issue]] |
| * [[https://github.com/matplotlib/basemap/issues/267|basemap github issue]] |
</note> | </note> |
| |
Summary: Basemap is an extension of Matplotlib that you can use for plotting maps, using different projections | Summary: //Basemap is an extension of Matplotlib that you can use for plotting maps, using different projections// |
| |
Where: [[http://matplotlib.org/basemap/|Basemap web site]] | Where: [[http://matplotlib.org/basemap/|Basemap web site]] |
- look at the [[http://matplotlib.org/basemap/api/basemap_api.html#module-mpl_toolkits.basemap|detailed official documentation]] | - look at the [[http://matplotlib.org/basemap/api/basemap_api.html#module-mpl_toolkits.basemap|detailed official documentation]] |
| |
===== Cartopy ===== | ===== Cartopy + Iris ===== |
| |
Summary: //Cartopy makes use of the powerful PROJ.4, numpy and shapely libraries and has a simple and intuitive drawing interface to matplotlib for creating publication quality maps// | Summary: //Cartopy is a Python package for advanced map generation with a simple matplotlib interface// and //Iris is a Python package for analysing and visualising meteorological and oceanographic data sets// |
| |
Where: [[http://scitools.org.uk/cartopy/docs/latest/|Cartopy web site]] | Where: [[http://scitools.org.uk/cartopy/docs/latest/|Cartopy]] and [[http://scitools.org.uk/iris/index.html|Iris]] web sites |
| |
| Examples: |
| * [[http://scitools.org.uk/cartopy/docs/latest/gallery.html|Gallery on the Cartopy web site]] |
| * [[http://scitools.org.uk/iris/docs/latest/gallery.html|Gallery on the Iris web site]] |
| * [[http://scitools.org.uk/iris/docs/latest/examples/index.html|Examples on the Iris web site]] |
| |
Help on //stack overflow//: [[https://stackoverflow.com/questions/tagged/cartopy|cartopy help]] | Help on //stack overflow//: [[https://stackoverflow.com/questions/tagged/cartopy|cartopy help]] |
| |
| ===== 3D resources ===== |
| |
| * [[https://ipyvolume.readthedocs.io/en/latest/|Ipyvolume]] |
| * [[https://zulko.wordpress.com/2012/09/29/animate-your-3d-plots-with-pythons-matplotlib/|Animate your 3D plots with Python’s Matplotlib]] |
| * [[https://stackoverflow.com/questions/26796997/how-to-get-vertical-z-axis-in-3d-surface-plot-of-matplotlib|How to get vertical Z axis in 3D surface plot of Matplotlib?]] |
| |
| ===== Data file formats ===== |
| |
| We list here some resources about non-NetCDF data formats that can be useful |
| |
| ==== json files ==== |
| |
| More and more applications use //json files// as configuration files or as a mean to use text files to exchange data (through serialization/deserialization ). |
| |
| //json// files look basically like a **list of (nested) python dictionaries** that would have been dumped to a text file |
| |
| * [[https://docs.python.org/2/library/json.html|json module]] documentation |
| * [[https://realpython.com/python-json/|Working With JSON Data in Python]] tutorial |
| * example script: ''/home/users/jypeter/CDAT/Progs/Devel/beaugendre/nc2json.py'' |
| * A compact (not easy to read...) //json// file can be pretty-printed with\\ ''cat file.json | python -m json.tool | less'' |
| |
| ==== LiPD files ==== |
| |
| Resources for //Linked PaleoData//: |
| * [[http://linked.earth/projects/lipd/|LiPD]] |
| * [[https://doi.org/10.5194/cp-12-1093-2016|Technical note: The Linked Paleo Data framework – |
| a common tongue for paleoclimatology]] @ GMD |
| * [[https://github.com/nickmckay/LiPD-utilities|LiPD-utilities]] @ github |
| |
| ==== BagIt files ==== |
| |
| //BagIt//, a set of hierarchical file layout conventions for storage and transfer of arbitrary digital content. |
| |
| * [[https://tools.ietf.org/html/draft-kunze-bagit-16|The BagIt File Packaging Format]] |
| * [[https://github.com/LibraryOfCongress/bagger|Bagger]] (BagIt GUI) |
| * [[https://github.com/LibraryOfCongress/bagit-python|bagit-python]] |
===== Pandas ===== | ===== Pandas ===== |
| |
| |
Depending on the distribution, the editor and the programming environment you use, you may have access to a graphical version of the debugger. UV-CDAT users can use ''pydebug my_script.py'' | Depending on the distribution, the editor and the programming environment you use, you may have access to a graphical version of the debugger. UV-CDAT users can use ''pydebug my_script.py'' |
| |
| ===== Using a Python IDE ===== |
| |
| **IDE** = //Integrated Development Environment// |
| |
| There are lots of ways to use Python and develop scripts, from using a lightweight approach (your favorite text editor with builtin python syntax highlighting, e.g. **emacs** and ''python -i myscript.py'') to a full-fledged IDE. You'll find below some IDE related links |
| |
| * [[https://www.datacamp.com/community/tutorials/data-science-python-ide|Top 5 Python IDEs For Data Science]] |
| * [[http://noeticforce.com/best-python-ide-for-programmers-windows-and-mac|Python IDE: The10 Best IDEs for Python Programmers]] |
| * [[https://wiki.python.org/moin/IntegratedDevelopmentEnvironments]] |
| |
| ==== Spyder ==== |
| |
| * [[https://github.com/spyder-ide/spyder|Home page]] |
| * [[http://pythonhosted.org/spyder/|Documentation]] |
| |
| |
===== Improving the performance of your code ===== | ===== Improving the performance of your code ===== |