{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Applying XND on your data analysis workflow\n", "\n", "This document show some ways to apply **XND** on a data analysis workflow.\n", "\n", "Basically, a data analysis workflow has 5 main task groups:\n", "\n", "- domain acknolodge\n", "- data storage\n", "- data cleaning\n", "- data processing\n", "- data visualization\n", "\n", "This document focus on the last 3 task groups: data cleaning, processing and visualization.\n", "\n", "Some examples will be discussed using **xnd** with **gumath** integrated with other libraries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup\n", "\n", "First we need to import some libraries" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from importnb import Notebook\n", "from IPython.display import display\n", "import random \n", "from xnd import xnd" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "xnd_gumath = Notebook.load('utils/math_utils.ipynb', main=True).xnd_gumath" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Process" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data processing tasks aim to work on raw/cleaning data and get information from that. *Digital Signal Processing*, *Machine Learning*, *Math*, *Statistics*, *Scientific Computing*, etc are some possible approaches that someone want to work with data. This document shows some operations with: *Math*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Math operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "XND math operations could be done using *gumath*. The follow examples use a class that combine *xnd* and *gumath* libraries (@ [xnd_gumath](utils/math_utils.ipynb)). **libgumath** is an C library that supports a general dispatch mechanism for **xnd** containers as well as a composable, generalized function concept." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Binary operations:**" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "xnd([5, 7, 9], type='3 * int64')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# using arrays from a dictionary\n", "v = xnd_gumath({'x': [1, 2, 3], 'y': [4, 5, 6]})\n", "# add\n", "v['x'] + v['y']" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "xnd([-3, -3, -3], type='3 * int64')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# assign from dictionary\n", "x = v['x']\n", "y = v['y']\n", "# subtract\n", "x - y" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "xnd([4, 10, 18], type='3 * int64')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# multiplication\n", "x * y" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "xnd(5, type='int32')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# division\n", "xnd_gumath(10, type='int32') / 2" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "xnd(2, type='int32')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# or\n", "20 / xnd_gumath(10, type='int32')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(xnd(0.8414709848078965, type='float64'),\n", " xnd(0.5403023058681398, type='float64'))" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = xnd_gumath(1.0)\n", "x.sin(), x.cos()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Processing using SciPy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*SciPy* (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering ([www.scipy.org](https://www.scipy.org/)). \n", "\n", "This section shows examples using some methods from **SciPy** library." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "import scipy" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(ndt(\"100 * float64\"), ndt(\"100 * float64\"))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = xnd([random.uniform(0, 100) for x in range(100)])\n", "y = xnd([random.uniform(0, 100) for x in range(100)])\n", "\n", "x.type, y.type" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "230931.5421682946" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scipy.dot(x, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Statstics functions** " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "SciPy could be used to process some statistical functions on **xnd** arrays:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean of x = 51.10352114212457\n" ] } ], "source": [ "print('Mean of x =', scipy.mean(x))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Median of y = 42.117034694883316\n" ] } ], "source": [ "print('Median of y =', scipy.median(y))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Standard Deviation of x = 27.69640514378039\n" ] } ], "source": [ "print('Standard Deviation of x =', scipy.std(x))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variance of y = 869.348316652364\n" ] } ], "source": [ "print('Variance of y =', scipy.var(y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Signal Processing functions**" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "from scipy.signal import savgol_filter" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_samples = 700\n", "\n", "raw_data = xnd_gumath([v/100.0 for v in range(n_samples)]).sin()\n", "raw_data += xnd_gumath([random.uniform(0, 1) for x in range(n_samples)]) \n", "\n", "plt.plot(raw_data)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/mnt/sda1/storage/miniconda/envs/xnd-notebooks/lib/python3.6/site-packages/scipy/signal/_arraytools.py:45: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n", " b = a[a_slice]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "filtered_data = savgol_filter(raw_data, window_length=n_samples//3, polyorder=2)\n", "\n", "plt.plot(filtered_data)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Processing using scikit-learn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**scikit-learn** is a Python module for machine learning built on top of SciPy ([github.com/scikit-learn/scikit-learn](https://github.com/scikit-learn/scikit-learn)).\n", "\n", "The follow example shows PCA working with **xnd** array." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/mnt/sda1/storage/miniconda/envs/xnd-notebooks/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", " return f(*args, **kwds)\n", "/mnt/sda1/storage/miniconda/envs/xnd-notebooks/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", " return f(*args, **kwds)\n" ] } ], "source": [ "# http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html\n", "from sklearn.decomposition import PCA" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "explained_variance_ratio: [0.99244289 0.00755711]\n", "singular_values: [6.30061232 0.54980396]\n" ] } ], "source": [ "X = xnd([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])\n", "\n", "pca = PCA(n_components=2)\n", "pca.fit(X)\n", "\n", "print('explained_variance_ratio:', pca.explained_variance_ratio_) \n", "print('singular_values:', pca.singular_values_) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Visualization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Communication is a very important task on a data analysis workflow. \n", "\n", "This section shows **XND** working with **matplotlib**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting with matplotlib" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "import matplotlib as mpl\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "x = xnd_gumath([v/100.0 for v in range(1000)])" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x.sin())\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "application/json": { "Software versions": [ { "module": "Python", "version": "3.6.6 64bit [GCC 4.8.2 20140120 (Red Hat 4.8.2-15)]" }, { "module": "IPython", "version": "6.5.0" }, { "module": "OS", "version": "Linux 4.15.0 29 generic x86_64 with debian buster sid" }, { "module": "matplotlib", "version": "2.2.3" }, { "module": "xnd", "version": "0.2.0.dev3" }, { "module": "gumath", "version": "0.2.0.dev3" }, { "module": "scipy", "version": "1.1.0" } ] }, "text/html": [ "
SoftwareVersion
Python3.6.6 64bit [GCC 4.8.2 20140120 (Red Hat 4.8.2-15)]
IPython6.5.0
OSLinux 4.15.0 29 generic x86_64 with debian buster sid
matplotlib2.2.3
xnd0.2.0.dev3
gumath0.2.0.dev3
scipy1.1.0
Fri Aug 17 16:46:05 2018 -04
" ], "text/latex": [ "\\begin{tabular}{|l|l|}\\hline\n", "{\\bf Software} & {\\bf Version} \\\\ \\hline\\hline\n", "Python & 3.6.6 64bit [GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] \\\\ \\hline\n", "IPython & 6.5.0 \\\\ \\hline\n", "OS & Linux 4.15.0 29 generic x86\\_64 with debian buster sid \\\\ \\hline\n", "matplotlib & 2.2.3 \\\\ \\hline\n", "xnd & 0.2.0.dev3 \\\\ \\hline\n", "gumath & 0.2.0.dev3 \\\\ \\hline\n", "scipy & 1.1.0 \\\\ \\hline\n", "\\hline \\multicolumn{2}{|l|}{Fri Aug 17 16:46:05 2018 -04} \\\\ \\hline\n", "\\end{tabular}\n" ], "text/plain": [ "Software versions\n", "Python 3.6.6 64bit [GCC 4.8.2 20140120 (Red Hat 4.8.2-15)]\n", "IPython 6.5.0\n", "OS Linux 4.15.0 29 generic x86_64 with debian buster sid\n", "matplotlib 2.2.3\n", "xnd 0.2.0.dev3\n", "gumath 0.2.0.dev3\n", "scipy 1.1.0\n", "Fri Aug 17 16:46:05 2018 -04" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Install version_information if not installed\n", "#!pip install version_information\n", "%load_ext version_information\n", "%version_information matplotlib, xnd, gumath, scipy" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }