====== Jupyter notebooks ======
===== Basic =====
Current examples: [[https://github.com/ipython/ipython/tree/a8165da9102a62203c824f8cb59988e188fc6032/examples|Github -> iPython -> iPython -> examples]]
Ctrl+ENTER en una celda la ejecuta y se queda en dicha celda. Con Shift + ENTER la ejecuta y pasa a la siguiente.
Puedes cambiar el tipo en Cell -> Cell Type. Por ejemplo código, markdown, texto...
''!ls'' to launch a shell command. It's possible to do ''a = !ls''. You can access to a python variable with ''$''. Something like ''touch $file_path''
No hace falta usar la función ''print''.
Puedes descargar con formatos tales como python, latex, pdf...
==== Mostrar gráficos ====
Si vas a usar matplotlib has de añadir la línea ''%matplotlib inline'' para que los gráficos se añadan al notebook.
===== Usar pandas =====
''df = pd.read_csv('file.csv', header=2)'' lee el fichero file.csv esquivando las dos primeras líneas. Más parámetros a la hora de leer:
* ''indx_col=(0, 2, 3)'', indica que las columnas 0, 2 y 3 son índices.
* ''parse_dates=[3]'' indica que la columna 3 es fecha.
''df.head()'' cogerá la cabecera.
''db['2000']'' cogerá la columna 2000.
''df.plot()'' mostrará los datos en un gráfico.
''le = df.groupby(level=0).first().transpose()'' agrupa por la primera columna y muestra la matriz girada.
''le.columns'' mostrará los nombres de columnas.
Coger solo unas columnas:
le[['1990', '2000', '2010']]
Para agrupar una columna por intervalos de, por ejemplo días, y luego contarlos usaríamos: ''data['columns'].resample('D').count()''. Con 'h' seria para horas.
==== Panda data structures ====
* Series: 1D = numpy.ndarray = similar to a dictionary (indice + valor)
* DataFrame: 2D = numpy.ndarray = similar to a Excel spreadsheet (columns have different array)
* Multiindex series o dataframe: higher dimensional data
Crear una serie:
a = pd.Series({'a': 33, 'b': 334})
Crear un dataframe:
# a = previous example 'a' variable
b = pd.Dataframe(pd.dataframe({'age': a, 'test': {'a': 55, 'b': 53})
To select rows:
b.loc('b')
b.loc(['a', 'b'])
Select by column:
df.loc(:, ['b'])
''iloc'' is another way to select with indexes. Also slicing: ''df.iloc[2:5]'' que es lo mismo que ''df(2:5)''
También se puede escoger booleanos: ''df > 500'' devolverá una lista de cabecera y true\false. Puede hacerse una consulta algo así: ''daily_crimes(daily_crimes > 500).count()'' que devuelve solo el número que es mayor que 500. Otra forma: ''daily(daily_crimes(daily_crimes > 500 & daily_crimes < 600).count()''
''count'' and ''sum'' are other userful functions.
''crimes = cirmes.set_index(['primary'], append=True)'' añade la columna primary al indice. Es decir añade un level al indice.
==== Reshaping ====
* pivot_table (to select just the rows and columns you want)
* stack / unstack (to add more levels to a multiindex)
* groupby (like sql group by)
* resample (for time intervals)
Añadir una columna (occourences) con valores de 1: ''crimes['occourences'] = np.ones(len(crimes))''. Ahora podrías crear un índice quitándote los repetidos con: ''crimes.occourences.groupby(level=(0, 1)).sum()''
''fillna(0)'' method llena los valores que son NaN con 0.
Consultar: ''crimes_by_type.loc[:, ['THEFT', 'HOMICIDE']]['2016']''. Mostrará los crímenes theft y homicidio en 2016. Para quitar ruido (porque estarán puestos por hora) los ponemos por día: ''crimes_by_type.loc[:, ['THEFT', 'HOMICIDE']]['2016'].ersample('D').sum().plot()''
===== ipywidgets =====
https://ipywidgets.readthedocs.io
[[https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20List.html|List of widges]]
Are for creating dynamic notebooks.
from ipywidgets import interact
@interact(crime_type = crimetype.columns)
def plot_cart(crime_type):
crime_by_type.loc[:, crime_type]...
===== Jupyter Notebooks ─ Special cases =====
==== ... And Google Spreadsheets ====
* {{:wiki2:jupyter:google_spreadsheet.zip|}}
* https://socraticowl.com/post/integrate-google-sheets-and-jupyter-notebooks/