You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-[Profiling and Benchmarking](#profiling-and-benchmarking)
43
44
-[Speed](#speed)
45
+
-[Statistics](#statistics)
44
46
-[Testing](#testing)
45
47
-[Visualisation](#visualisation)
46
48
-[Workflow](#workflow)
@@ -55,6 +57,7 @@ ways.
55
57
*Libraries for manipulation of symbolic algebra, analytic integration etc.*
56
58
57
59
*[SymPy]() -
60
+
*[sage]()
58
61
59
62
60
63
## Animations
@@ -71,9 +74,10 @@ ways.
71
74
72
75
*[PEP8]() -
73
76
*[flake8]() -
74
-
*[black]() -
77
+
*[pycodestyle]() -
75
78
*[structure](https://docs.python-guide.org/writing/structure/) - The officially recommended way to structure any python project.
76
79
80
+
77
81
## Data Storage
78
82
79
83
*[netcdf4]() -
@@ -83,7 +87,7 @@ ways.
83
87
84
88
## Dates and Times
85
89
86
-
*[]() -
90
+
*[dateutil](https://dateutil.readthedocs.io/en/stable/) - Provides powerful extensions to the standard datetime module available in Python.
87
91
88
92
89
93
## Debugging
@@ -93,25 +97,34 @@ ways.
93
97
94
98
## Development Environments
95
99
96
-
*[PyCharm]() -
97
-
*[JupyterLab](https://jupyterlab.readthedocs.io/en/stable/) - (follow-on from SPyder)
100
+
*Programs to write code into. The main choice is between a software-engineering style IDE, and one intended specifically for scientific users.*
101
+
102
+
*[JupyterLab](https://jupyterlab.readthedocs.io/en/stable/) - An IDE which incorporates Jupyter notebooks.
103
+
*[PyCharm](https://www.jetbrains.com/pycharm/) - Very powerful IDE for python. Use if you want the full powers a software engineer would expect.
104
+
Has a professional version, which is free for students.
105
+
*[spyder](https://www.spyder-ide.org/) - MatLab-like development environment for scientific python users.
98
106
99
107
100
108
## Documentation
101
109
102
110
*[sphinx]() -
103
-
*[nbconvert]() -
111
+
*[nbconvert](https://nbconvert.readthedocs.io/en/latest/) - Convert jupyter notebooks to other formats such as PDF, LaTeX, HTML.
104
112
105
113
106
114
## Domain-specific
107
115
116
+
*Libraries of tools tools developed for python users in various fields of science.*
117
+
108
118
*[astropy]() -
109
-
*[plasmapy]() -
110
-
*[psychopy]() -
119
+
*[Biopython](https://biopython.org/) - Tools for biological computation.
111
120
*[cartopy]() -
112
-
*[geoviews]() -
113
-
*[pyrocko]() -
114
-
*[SpectroscoPyx]() -
121
+
*[geoviews](http://geoviews.org/) - makes it easy to explore and visualize geographical, meteorological, and oceanographic datasets, such as those used in weather, climate, and remote sensing research.
122
+
*[MetPy](https://unidata.github.io/MetPy/latest/) - MetPy is a collection of tools in Python for reading, visualizing and performing calculations with weather data.
123
+
*[PlasmaPy]() -
124
+
*[psychopy]() -
125
+
*[pyrocko](https://pyrocko.org/) - A seismology toolkit for python.
126
+
*[SpectroscoPyx](https://github.com/PlasmaPy/SpectroscoPyx) - A community developed python package for spectroscopy.
127
+
*[TomoPy](https://tomopy.readthedocs.io/en/latest/) - Package for tomographic data processing and image reconstruction.
115
128
116
129
117
130
## Forecasting
@@ -138,7 +151,7 @@ ways.
138
151
## Job scheduling
139
152
140
153
*[experi]() -
141
-
*[papermill]() -
154
+
*[papermill](https://papermill.readthedocs.io/en/latest/) - A tool for parameterizing, executing, and analyzing multiple Jupyter Notebooks.
142
155
143
156
144
157
## Labelled data
@@ -147,9 +160,17 @@ ways.
147
160
*[xarray]() -
148
161
149
162
163
+
## Mathematical library functions
164
+
165
+
*[scipy](https://docs.scipy.org/doc/scipy/reference/) - The standard resource for all kinds of mathematical functions.
166
+
*[xrft](https://xrft.readthedocs.io/en/latest/) - Discrete Fourier transform operations for xarray data structures.
167
+
168
+
150
169
## Numerical data
151
170
152
-
*[numpy]() -
171
+
*[numpy](http://www.numpy.org/) - The fundamental package for numerhon.
172
+
So ubiquitous that it might as well be part of python's standard library at this point.
173
+
Ultimately just a contiguous-in-memory C array, wrapped very nicely with python.
153
174
154
175
155
176
## Optimisation problems
@@ -159,6 +180,8 @@ ways.
159
180
160
181
## Package Management
161
182
183
+
*Keep track of module dependencies, python versions, and virtual environments.*
184
+
162
185
*[conda](https://conda.io/docs/index.html) - A package manager specifically intended for use by the scientific python community.
163
186
Developed by the authors of numpy to manage both python packages and the underlying C/Fortran libraries which make them fast.
164
187
Also obviates the need for system virtual environments.
@@ -169,6 +192,8 @@ Also obviates the need for system virtual environments.
169
192
170
193
## Parallelization
171
194
195
+
*Use all the cores of your machine, and scale up to clusters!*
196
+
172
197
*[dask](https://dask.org/) - Tools for splitting up computations and executing them across many processors in parallel.
173
198
[dask.array](http://docs.dask.org/en/latest/array.html) in particular provides a numpy-like interface to a chunked-in-memory array.
174
199
Dask is especially useful for analysing datasets which are larger than your RAM.
* [anatomy of matplotlib](https://github.com/matplotlib/AnatomyOfMatplotlib) - Tutorial on how matplotlib is structured.
197
223
* [scientific-matplotlib]() -
198
224
* [seaborn]() -
199
225
* [xarray.plot]() -
200
-
* [colorcet]() -
226
+
* [colorcet](http://colorcet.pyviz.org/) - A set of useful [perceptually uniform](https://arxiv.org/abs/1509.03700) colormaps for plotting scientific data
201
227
202
228
203
229
## Presentations and sharing work
204
230
205
231
* [RISE]() -
206
-
* [Binder]() -
232
+
* [Binder](https://mybinder.org/) - Online Jupyter Notebook hosting for GitHub repositories.
233
+
Allows users to run Jupyter notebooks from GitHub repositories in the cloud, without Python installed locally.
*Python inevitably sacrifices some speed to gain increased clarity.
246
+
Scientific programs usually have one or two functions which do 90% of the work, and there are various ways to dramatically speed these up.
247
+
Use in conjunction with parallelization through dask if you want as much speed as possible.*
248
+
249
+
* [cython](https://cython.org/) - A compiler which allows you to write snippets of C code into your python for massive speed increases.
250
+
* [F2PY](https://docs.scipy.org/doc/numpy/f2py/) - For calling fast, compiled Fortran subroutines from Python (part of SciPy)
251
+
* [numba](https://numba.pydata.org/) -*Automatic* generation of fast compiled C code from Python functions.
252
+
* [bottleneck](https://kwgoodman.github.io/bottleneck-doc/) - A collection of fast numpy array functions written in C.
253
+
* [Theano](http://www.deeplearning.net/software/theano/) - Allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently.
254
+
255
+
256
+
## Statistics
257
+
258
+
* [statsmodels](http://www.statsmodels.org/stable/index.html) - Provides classes and functions for the estimation of many different statistical models, as well asfor conducting statistical tests, and statistical data exploration.
221
259
222
260
223
261
## Testing
224
262
263
+
*Check that your code actually does what you think it will do!*
264
+
225
265
* [pytest](https://docs.pytest.org/en/latest/) - The standard unit testing framework for python.
226
266
Essential -if you're not unit-testing your calculations then you are merely hoping that they are actually doing what you think they are.
227
267
`pytest` does a lot of magic behind the scenes to make it as simple as possible to use, with no boilerplate.
@@ -241,6 +281,7 @@ Basically magic, compatible with pytest, and the algorithms used in the implemen
241
281
* [cartopy]()
242
282
* [bokeh]() -
243
283
* [plotly]() -
284
+
* [holoviews]() -
244
285
245
286
246
287
## Workflow
@@ -251,12 +292,12 @@ Basically magic, compatible with pytest, and the algorithms used in the implemen
251
292
* [papermill]() -
252
293
253
294
254
-
#Beginners Recommendations
295
+
#Beginner Recommendations
255
296
256
297
* First, install python through anaconda, which will also give you the packages you're about to use.
257
-
* Write your code in either `pycharm` (if you want a goodIDE)or`jupyterlab` (if you're used to MatLabs' environment).
298
+
* Write your code in either `pycharm` (if you want a professionalIDE), `spyder`or`jupyterlab` (if you're used to MatLabs' environment).
258
299
* Become familiar with`numpy`, the fundamental numeric objectin python, and`matplotlib`, the standard way to plot.
259
-
* Next, wrap your data into a clearer form with either `Pandas`or`xarray` (`xarray`if your data has more than one dimension).
260
-
*As soon as you start writing your own analysis functions, test they are correct with`pytest`.
261
-
*Examine your data on the fly with`ipython`, and record your work in a `jupyter notebook`.
262
-
*Check if someone has already solved your problem for youinone of python's domain-specific scientific software packages.
300
+
* Next, wrap your data into clearer, higher-level objects with either `Pandas`or`xarray` (use `xarray`if your data has more than one dimension).
301
+
*Before writing new analysis functions, check if someone has already solved your problem for you in`scipy` , orin one of python's domain-specific scientific software packages.
302
+
*As soon as you start writing your own analysis functions, test they're correct with unit tests written with `pytest`.
303
+
*Analyse your data interactively with`ipython`, and record your workina `jupyter notebook`.
0 commit comments