Estudiando para tratar de ser mejor en la carrera de ciencia de datos me tope con el libro de “Data Science handbook” que toma todo el crédito por este pequeño post y que recomiendo leer a continuacion comparto un tema bastante util para aquellos que utilizamos jupyter notebooks.
Las llamadas magias o comandos magicos en IPython / Jupyter notebooks son shortcuts que nos permite realizar acciones sobre nuestro sistema operativo mayormente e interactuar con nuestro shell o notebook, existen dos tipos de magias, y estas se invocan usando el carácter “%”, los magic commands se dividen en dos tipos:
Ejemplo 1
%run: ejecuta un script o un notebook desde nuestro entorno de trabajo actual.
Paso 1: En tu directorio actual crear el archivo myscript.py y copia el contenido el primer bloque de código.
# file: myscript.py archiguardado en nuestro mismo directoriodefsquare(x):"""square a number"""return x ** 2for N in range(1, 4):
print(N, "squared is", square(N))
En la misma ruta abre Ipython en la terminal o un Jupyter notebook y en la primer celda copia lo siguiente y ejecuta el siguiente comando
# Input
%run myscript.py
# Output
1 squared is 1
2 squared is 4
3 squared is 9
Observa que ejecutamos el script que creamos al inicio, esto es bastante útil ya que podemos aumentar la mantenibilidad de nuestro código al separar bloques de código que realicen alguna función determinada.
Ejemplo 2
%timeit: permite saber el Timing Code Execution de nuestro script o snippet (o fragmento de codigo)
# Creacion de una lista usando un list comprenhension
%timeit L = [n ** 2for n in range(1000)]
# el output resultate es:1000 loops, best of 3: 325 μs per loop
Ejemplo 3
%% cell magics retomando el ejemplo anterior usando un for loop
%%timeit
...: L = []
...: for n in range(1000):
...: L.append(n ** 2)
...:
1000 loops, best of 3: 373 μs per loop
Cuantos magic commands existen? Excelente pregunta! Ve al interprete y ejecuta %magic
para obtener la lista completa o %lsmagic
para obtener el listado de comandos soportados junto con su documentación (interesante no?). Como te habrás dado cuenta dentro de los magic commands identificamos comandos de la terminal unix/cmd `%cat, %cp, %env, %ls, %man, %mkdir, %more, %mv, %pwd, %rm, and %rmdir`` algo interesante es que estos comandos también pueden ser utilizados sin el operador %, estos reciben el nombre de automagics y puedes combinarlos junto con python para extender la utilidad de la terminal.
Por ejemplo para cambiar de directorio a otra ruta usamos el magic command %cd
%cd ..
/home/rb/rojects/
Pero tambien podemos hacer lo mismo sin “%” al ser un automagic command
cd ..
/home/rb/projects
Existen dos herramientas muy buenas para este tema, la primera es %xmode
que nos permite extender la forma en que el traceback de python nos entrega la información de los errores.
Controlling Exceptions: %xmode
Posee tres modos
Estos tres comandos se agregan como primer argumento a %xmode dependiendo loe extenso que sea nuestro requerimiento, este comando además lo podemos combinar con PDB de la siguiente manera.
%xmode Plain
%pdb on
deffunc1(a, b):return a / b
deffunc2(x):
a = x
b = x - 1return func1(a, b)
func2(1)
Exception reporting mode: Plain
Automatic pdb calling has been turned ON
Traceback (most recent call last):
File "<ipython-input-2-7cb498ea7ed1>", line 1, in <module>
func2(1)
File "<ipython-input-1-da236cd1aa14>", line 5, in func1
return a / b
ZeroDivisionError: division by zero
> <ipython-input-1-da236cd1aa14>(5)func1()
3
4 def func1(a, b):
----> 5 return a / b
6
7 def func2(x):
ipdb>
En el proceso de desarrollo de código siempre existirán esos “trade-offs” entre simplicidad y rendimiento, aunque es recomendable que nuestro código tenga una funcionalidad de 100% antes de pensar siquiera en optimizar algún proceso o función del mismo, si, y solo si nuestro código funciona comencemos el proceso de optimización revisando algunas cosas para poder encontrar los cuellos de botella.
Aquí algunos de los comandos:
%time
Mide el tiempo de ejecicion de una sentencia%timeit
Mide repetidamente el tiempo ejecución de una sola sentencia para mayor precisión%prun
Corre el código con el profiler%lprun
Corre el código línea por línea con el profiler%memit
Mide el uso de memoria de una sola sentencia%mprun
Corre el codigo linea por linea usando el memory profilerAunque para las ultimas 4 magic commands debes instalar (conda o pip) las extensiones line_profiler
y memory_profiler
para el detalle particular de cada comando es importante revisar la documentacion de IPython, no si eres nuevo en python tenlo en mente revisalo y continua aprendiendo si eres mas avanzado espero compartas algun ejemplo en los comentarios con una aplicacion sencilla y como utilizaste el profiler.
Este es el primer articulo de varios en forma de tutorial que espero escribir en las siguientes semanas derivado de lo aprendido en las clases de la Escuela de Ciencia de Datos de Platzi y que en su momento me quede con cara de what?, que espero les ayude a complementar lo que vamos aprendiendo y sea un de mucha utilidad para aquellos que no somos tan experimentados o tan versados en las herramientas del data science.
Si les agrado el post, dejen su like (ya me siento como youtuber barato) y diganme que en que tema de la carrera de ciencia de datos han tenido dificultades, juntos hacemos platzi, y juntos seremos científicos de datos o ingenieros en ML
Compañero una duda, por que algunos comandos de consola se ejecutan con ! ? como por ejemplo Touch y como podria consultar todos los que se ejecutan con !??
El libro que mencionas solo esta disponible en ingles?
Excelente post
me temo que si, pero si tienes dudas contactame por @rusbelbermudez en twitter
Muy interesante tu aporte, gracias
Me gustó bastante este aporte. No sabía de la funcionalidad de estos magic commands!
Que buen aporte, muchas gracias.
Existe alguna diferencia con el ! que he visto algunas personas usan en !wget?
hola rusbel,
Muy buen artículo, felicitaciones.
Tengo 2 inquietudes a ver como me orientas
tardaba mucho tiempo luego de varios intentos lo realizo (presionando ctrl + enter), pero me quedaron expuestas todas mis carpetas personales google.drive, como puedo reversarlo?
disculpa la demora, al hacer eso del punto dos si basicamente estas cargando todo tu root de google drive, pero tranquilo solo tu puedes verlo aun cuando lo compartas gracias al access token que se require para autenticarte te recomiendo agregarle a tu ruta de aprendizaje docker y backend
Gracias por tus valiosos aportes 🤓
Muy buen aporte y muy útil!!!
Hay muchas cosas de aquí que no sabía y de ahora en adelante voy a aplicar
Saludos!