# Essential libraries

**numpy**

NumPy (<http://numpy.org>) is a library for the Python programming language, adding support for large, multi-dimensional arrays and matrices, along with a large collection of high-level mathematical functions to operate on these arrays. Beyond the fast array-processing capabilities that NumPy adds to Python, it is often used to pass data between algorithms and libraries. It is more efficient for storing and manipulating data than other Python data structures. See also

[documentation](https://docs.scipy.org/doc/numpy)

[cheat sheet](https://s3.amazonaws.com/dq-blog-files/numpy-cheat-sheet.pdf)

[tutorial](https://nbviewer.jupyter.org/github/ageron/handson-ml/blob/master/tools_numpy.ipynb)

#### pandas

Pandas (<http://pandas.pydata.org>) is an open-source library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language. Pandas blends the high-performance array computing ideas of NumPy with the flexible data manipulation capabilities of spreadsheets and relational databases. It provides indexing functionality making it easy to reshape, slice, perform aggregations, and select subsets. It has flexible handling of missing data. It is a nice tool to organize, clean, and analyze the data.&#x20;

[documentation](http://pandas.pydata.org/pandas-docs/stable/)

[cheat sheet](https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf)

[tutorial](https://nbviewer.jupyter.org/github/ageron/handson-ml/blob/master/tools_pandas.ipynb)

#### matplotlib

matplotlib (<http://matplotlib.org>) is a popular library for producing plots and other two-dimensional data visualisations. It is designed for creating plots suitable for publications. In this course,  we will use bokeh

#### bokeh

Bokeh is an interactive visualization library for web browsers. It provides high-performance interactivity over large or streaming datasets.

[documentation](https://docs.bokeh.org/en/latest/)

[cheat sheet](https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Python_Bokeh_Cheat_Sheet.pdf)

tutorial

#### scipy

scipy (<http://scipy.org>) is a collection of packages addressing a number of different domains in computer sciences. It can be used for numerical integration routines and differential equation solvers, linear algebra, root-finding algorithms, signal processing, matrix calculations, special distributions, and various statistical tests.

#### scikit-learn

scikit-learn (<http://scikit-learn.org>) is a great machine learning toolkit for Python. It can handle things like preprocessing, classification, regression, clustering, dimensional reduction, and model selection. scikit will not be part of this programming model.

#### statsmodels

statsmodels (<http://statsmodels.org>) is a statistical analysis package. Compared to scikit-learn statsmodels contains more classical statistics like regression, ANOVA, time series, nonparametic models, and some visualisation. It is more focussed on statistical inference providing p-values compared to scikit-learn that is more focused on prediction.
