# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---
# # Anaconda y _notebooks_
# ## Anaconda
# Anaconda es una distribución de Python autocontenida y aislada del resto del sistema operativo especialmente pensada para el análisis de datos y la computación científica. Incluye, además de Python, una serie de paquetes y herramientas utilizadas en análisis de datos como:
#
# * El gestor de paquetes `conda`
# * Jupyter _notebooks_
# * El IDE Spyder
# * Una selección de paquetes muy usados en ciencia de datos y aplicaciones científicas como `pandas`, `scikit-learn`, `scipy`, `numpy`, `matplotlib`,...
#
# Más información sobre Anaconda [aquí](https://docs.anaconda.com/anaconda/).
# ## _Notebooks_
# Los _notebooks_ son documentos interactivos que combinan texto y código. Los usos principales son:
#
# * IDE: son una plataforma de desarrollo de código
# * Documentación de código
# * Presentación y diseminación de resultados
#
# Los _notebooks_ incorporan a Python los principios de la [_programación literaria_](https://en.wikipedia.org/wiki/Literate_programming) y [investigación reproducible](http://t-redactyl.io/blog/2016/10/a-crash-course-in-reproducible-research-in-python.html).
#
# Un _notebook_ es esencialmente una secuencia de bloques o celdas, que pueden ser de dos tipos: texto y código. En el menú superior hay un botón (con el símbolo de un teclado) que indica las combinaciones de teclas con las que se pueden crear, eliminar, editar, ejecutar, etc. los bloques.
#
# Los _notebooks_ se abren en el navegador. Nuestros _notebooks_ apuntan a un servidor que corre en local, pero es posible abrir _notebooks_ que corren en servidores remotos.
# ### Bloques de texto
# Los bloques de texto permiten crear títulos de distinto nivel; enumeraciones; texto corrido; marcas tipográficas como _cursivas_, **negritas** o `de código`, etc. Además de eso, se pueden escribir bloques de código como
#
# ```
# for (i %in% 1:10)
#     print("R rocks!)
# ```
#
# Para saber más opciones de la sintaxis, mira [esta guía de `markdown`](https://www.markdownguide.org/basic-syntax/)
# ### Bloques de código
# Los bloques de código contienen... código. Al ejecutarlo, se muestra el resultado de la última instrucción.
#
# El encargado de ejecutar el código es un _kernel_. Usaremos un _kernel_ de Python, pero es posible asociar a un _notebook_ _kernels_ en otros lenguajes de programación (p.e., Julia o R).
# Un ejemplo de celda con código
a = 4
b = 3
a + b
# Cuando devolvemos una tabla en una celda, se visualiza con formato:
# +
from sklearn import datasets
import pandas as pd
import numpy as np
iris_data = datasets.load_iris()
iris = pd.DataFrame(iris_data.data,columns=iris_data.feature_names)
iris['species'] = pd.Series(iris_data.target_names[iris_data.target])
iris.head()
# -
# También podemos incluir gráficos devolviéndolos en celdas de código
# +
# Con esta instrucción, indicamos que queremos ver incrustados los gráficos dentro del notebook
# %matplotlib inline
# -
iris.plot.scatter(x='petal length (cm)',
                  y='petal width (cm)')