Al iniciar un proyecto de ciencia de datos, generalmente necesitamos configurarlo para garantizar las dependencias requeridas, mantener la salida estable y preparar funciones comunes.
Un ejemplo de configuración de proyecto (de Handson-ML2)
Este artículo presentará algunas de las configuraciones de proyecto más útiles en JuypterNotebook.
1. Asegúrese de que la versión de Python
Compruebe la versión del intérprete de Python en JupyterNotebook:
sistema de importación
sys.version'3.7.6 (predeterminado, 8 de enero de 2020, 13:42:34) \n[Clang 4.0.1 (tags/RELEASE_401/final)]'
Para asegurarse de que el proyecto se ejecuta con la versión mínima requerida del intérprete de Python, agregue el siguiente código a la configuración del proyecto:
# Se requiere Python ≥3.7
sistema de importación
afirmar sys.version_info >= (3, 7)
Python debe tener la versión 3.7 o superior; de lo contrario, se generará un AssertionError.
2. Asegúrese de que la versión del paquete
Verifique las versiones de paquetes instalados, como TensorFlow.
importar tensorflow como tf
tf.__versión__'2.0.0'
Asegúrate de que el proyecto esté ejecutado por TensorFlow2.0 y superior; de lo contrario, se generará un AssertionError.
# Se requiere TensorFlow ≥2.0
importar tensorflow como tf
afirmar tf.__version__ >= "2.0"
3. Evita dibujar imágenes borrosas
Los gráficos predeterminados en JuypterNotebook se ven borrosos. Por ejemplo, un mapa de calor simple para encontrar valores faltantes. (https://towardsdatascience.com/using-pandas-pipe-function-to-improve-code-readability-96d66abfaf8)
importar seaborn como sns
importar matplotlib.pyplot como plt
%matplotlib inline# Formato de figura predeterminado png
sns.heatmap(df.isnull(),
yticklabels=Falso,
cbar=Falso,
cmap='viridis')
Las imágenes predeterminadas se ven borrosas
Como se puede ver en la figura anterior, el texto está borroso, los valores que faltan en la columna Cabina están demasiado llenos y los valores que faltan en la columna Embarcado no se pueden reconocer.
Para resolver este problema, use %config InlineBackend.figure_format='retina' o %configInlineBackend.figure_format = 'svg' después de %matplotlib inline, a saber:
% matplotlib en línea
%config InlineBackend.figure_format = 'retina' # o 'svg'sns.heatmap(df.isnull(),
yticklabels=Falso,
cbar=Falso,
cmap='viridis')
El formato de imagen está configurado en retina o svg
En comparación con la imagen anterior, la imagen de arriba es más clara y los valores que faltan en la columna Embarcados también se pueden identificar con éxito.
4. Mantenga la salida estable en diferentes ejecuciones
Los números aleatorios se usan en muchos lugares en proyectos de ciencia de datos. Por ejemplo:
train_test_split() de Scikit-Learn
np.random.rand() para inicializar pesos
Si la semilla aleatoria no se reinicia, aparecerá un número diferente para cada llamada:
>>> np.aleatorio.rand(4)
matriz ([0.83209492, 0.10917076, 0.15798519, 0.99356723])
>>> np.aleatorio.rand(4)
matriz ([0.46183001, 0.7523687, 0.96599624, 0.32349079])
np.random.seed(0) hace que los números aleatorios sean predecibles:
>>> np.random.seed(0)
>>> np.aleatorio.rand(4)
matriz ([0,5488135, 0,71518937, 0,60276338, 0,54488318])
>>> np.random.seed(0)
>>> np.aleatorio.rand(4)
matriz ([0,5488135, 0,71518937, 0,60276338, 0,54488318])
Si reinicia la semilla aleatoria (cada vez), terminará con el mismo conjunto de datos cada vez. Por lo tanto, el proyecto puede mantener la salida estable de una ejecución a otra.
5. Salida de unidades múltiples
De forma predeterminada, JupyterNotebook no puede generar varios resultados en la misma celda. Para generar múltiples resultados, el shell se puede reconfigurar usando IPython.
de IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactividad = "todos"
6. Guarde la imagen en un archivo
Matplotlib puede guardar cifras con el método savefig(), pero se generará un error si la ruta dada no existe.
plt.savefig('./figures/my_plot.png')FileNotFoundError: [Errno 2] Nosuch archivo o directorio: './figures/my_plot.png'
La mejor práctica es colocar todas las imágenes en un solo lugar, como la carpeta de figuras del espacio de trabajo. Puede crear manualmente una carpeta de figuras utilizando la GUI del sistema operativo (interfaz del sistema operativo) o ejecutando el comando lógico en Jupyter Notebook, pero es mejor crear una pequeña función para hacer esto.
Esto es especialmente útil cuando se requieren algunas configuraciones de gráficos personalizadas o subcarpetas adicionales para agrupar gráficos. Aquí está la función para guardar una imagen en un archivo:
importarnos
% matplotlib en línea
import matplotlib.pyplot as plt# Dónde guardar las figuras
PROYECTO_ROOT_DIR = "."
SUB_FOLDER = "sub_carpeta" #una subcarpeta
IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, "images", SUB_FOLDER)defsave_fig(name, images_path=IMAGES_PATH, tight_layout=True,extension="png", resolution=300):
si no es os.path.isdir(images_path):
os.makedirs(images_path)
ruta = os.ruta.unirse(ruta_imágenes, nombre+ "." + extensión)
print("Guardando cifra:",nombre)
si diseño_apretado:
plt.tight_layout()
plt.savefig(ruta, formato=extensión,dpi=resolución)
Ahora llame a save_fig('figure_name'), se creará un directorio de imágenes/subcarpetas en el espacio de trabajo y la imagen se guardará en el directorio con el nombre "figure_name.png". Además, se proporcionan los tres ajustes más utilizados:
· tight_layout puede ajustar automáticamente el relleno del submapa
La extensión puede guardar imágenes en varios formatos.
· resolución puede establecer la resolución de la imagen
7. Descarga los datos (y extráelos)
Trabajar con datos web es un lugar común para los científicos de datos. Es posible usar un navegador para descargar los datos y ejecutar el comando para descomprimir el archivo, pero sería mejor crear una pequeña función para hacerlo. Esto es especialmente importante cuando los datos deben cambiar periódicamente.
Escriba un pequeño script para que se ejecute cuando se obtengan los datos más recientes (también puede configurar un trabajo programado que se ejecute automáticamente de forma regular). Automatizar el proceso de raspado también es útil si el conjunto de datos debe instalarse en varias máquinas.
Aquí está la función para descargar y descomprimir los datos:
importarnos
importar archivo tar
importar archivo zip
importar urllib
# Dónde guardar los datos
PROYECTO_ROOT_DIR = "."
SUB_FOLDER = "nombre_del_grupo"
LOCAL_PATH = os.path.join(PROJECT_ROOT_DIR, "datasets", SUB_FOLDER)defdownload(file_url, local_path = LOCAL_PATH):
si no es os.path.isdir(local_path):
os.makedirs(ruta_local)
# Descargar archivo
imprimir(">>>descargando")
nombre de archivo = os.path.basename(archivo_url)
file_local_path =os.path.join(local_path, nombre de archivo)
urllib.request.urlretrieve(file_url,file_local_path)
# descomprimir/descomprimir archivo
if filename.endswith("tgz") o filename.endswith("tar.gz"):
print(">>>archivo de descompresión:", nombre de archivo)
tar =tarfile.open(file_local_path, "r:gz")
tar.extractall(ruta = ruta_local)
tar.cerrar()
elifffilename.termina con("tar"):
print(">>> archivo de desempaquetado:", nombre de archivo)
tar =tarfile.open(file_local_path, "r:")
tar.extractall(ruta = ruta_local)
tar.cerrar()
elifffilename.endwith("zip"):
print(">>>archivo de descompresión:", nombre de archivo)
zip_file = zipfile.ZipFile(file_local_path)
zip_file.extractall(ruta =ruta_local)
archivo_zip.close()
imprimir("Terminado")
Ahora, llamar a download("http://a_valid_url/housing.tgz") creará un directorio datasets/group_name en el espacio de trabajo, descargará housing.tgz y extraerá housing.csv de este directorio. Esta pequeña función también se puede usar para CSV y archivos de texto.