Montaña 3D

Crea una montaña 3D con herramientas de visualización de datos de Python

shivesh01@shivesh01
Edit this page!

¡Las montañas son divertidas! Échale un vistazo a esta montaña en Google Maps:

Monte San Bruno

La razón por la que te estoy mostrando esto, ¡es porque tú vas a crear tu propia montaña con Python!🐍🚀

Impresionado g.i.f

Demo final y código

Empezando

Para este taller, estaremos usando Repl.it, un editor de código online, gratuito, para escribir nuestro código. Para comenzar, clic aquí para visitar el proyecto base. Una vez que cargue, cliquea el botón "Fork repl" (Bifurcar Repl) para comenzar a programar.

Una vez que tu proyecto haya cargado, deberías notar un archivo en blanco llamado main.py, y un archivo llamado mountain.csv, el cual contiene algunos datos. Si ves estos dos archivos, ¡estás listo para continuar con el siguiente paso!


Para este taller vamos a utilizar 3 librerías de Python: pandas, numpy, matplotlib, y mpl_toolkits.

Comienza por importar estas librerías en la parte superior del archivo main.py:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
  • La librería pandas nos permite importar y trabajar conjuntos de datos. La vamos a usar para gestionar los datos almacenados en nuestro archivo mountain.csv.
  • La librería numpy es una librería que permite realizar fácilmente cálculos científicos. La vamos a utilizar para gestionar arrays (o matrices) en este taller.
  • La librería matplotlib es una librería para la visualización de datos empleando histogramas, gráficos de dispersión y gráficos de barra, etc. La utilizaremos para crear nuestra montaña 3D.
  • La librería mpl_toolkits es una colección de funciones que complementan a la librería matplotlib. Esta nos permitirá graficar en un plano 3D, en vez de un plano 2D.

Una vez que hayas importado estas librerías, agrega una línea en blanco, luego escribe:

DataFrame = pd.read_csv('mountain.csv')

Aquí, estamos creando una variable llamada DataFrame, la cual usa la librería pandas para leer el archivo mountain.csv.

Debajo de esa línea, agrega:

DataFrame = DataFrame.unstack()

La función unstack() desapila la fila a las columnas. Aquí hay un diagrama que muestra cómo funciona:

Imagen desapilar

Debajo de eso, escribe:

DataFrame = DataFrame.reset_index()

Cuando concatenas, ordenas, unes o haces algunos reordenamientos a los datos DataFrame, el índice se baraja o se desordena. Para restablecer el índice de los datos DataFrame, utilizamos reset_index() para reordenar los índices.

Restablecer índice

Debajo de eso, escribe:

DataFrame.columns = ['X', 'Y', 'Z']

Tus datos DataFrame contiene 3 columnas sin etiquetas, entonces tenemos que asignarles etiquetas a esas columnas. DataFrame.columns = ['X', 'Y', 'Z'] le asigna a la primera columna la etiqueta X, a la segunda columna la etiqueta Y, y a la tercera columna la etiqueta Z. En nuestra gráfica 3D, esto corresponderá a la latitud, longitud y altitud.

Hecho divertido: Tenemos exactamente 552 coordenadas.

Debajo de eso, escribe:

DataFrame['X'] = pd.Categorical(DataFrame['X'])

Categorical es un tipo de datos de pandas el cual es usado para ahorrar espacio de memoria y acelerar el cálculo. Se puede convertir los datos utilizando la sintaxis pd.Categorical() con el parámetro DataFrame['X'].

Luego, escribe:

DataFrame['X'] = DataFrame['X'].cat.codes

Usando cat.codes, obtenemos números enteros únicos para cada valor de X en una matriz o arreglo. En pocas palabras, esta línea de código toma los datos de DataFrame['X'] y les asigna a cada uno un número entero, sin importar si los datos tienen algún valor o no.

Supongamos que tus datos contienen una columna llamada "Pájaros" con 100 filas, que solo tienen dos tipos de valores; loro y búho. Aunque únicamente tenemos dos tipos de valores en esta columna, tenemos 100 filas llenas de estos valores, por lo que el ordenador tratará cada valor como único, sin importar que esté repetido. Para ahorrar memoria, especificamos el conjunto de datos similares como una categoría, para que el computador no utilice mucha memoria cada vez que se encuentre con el dato repetido. En lugar de hacer eso, el computador solo asignará una referencia al dato. Si esto te suena a una algarabía, no te preocupes... Todo lo que necesitas saber es que estamos haciendo algunas cosas elegantes para ahorrar memoria en el ordenador.

Debajo de esta línea, escribe:

fig = plt.figure(figsize=(6, 8))

Aquí estamos utilizando plt.figure() para crear una ventana de figura y asignarla a una variable llamada fig.

Luego, escribe:

ax = fig.gca(projection='3d')

fig.gca() con el argumento projection=3d devuelve las coordenadas tridimensionales asociadas con la ventana de figura. Esto es guardado en una variable llamada ax.

Luego, escribe:

ax.plot_trisurf(DataFrame['X'], DataFrame['Y'], DataFrame['Z'], cmap=plt.cm.jet, linewidth=0.2)

Esto crea una gráfica tridimensional.

  • cmap define el mapa de colores de la gráfica. Estamos usando el mapa de color jet. Aprende más acerca de los diferentes mapas de colores aquí..
  • linewidth=0.2 hace las curvas más suaves.

Lista de mapas de colores

Luego, escribe:

plt.title("Mount San Bruno")
plt.xlabel("x axis")
plt.ylabel("y axis")
  • plt.title agrega un título a la gráfica.
  • plot.xlabel y plot.ylabel agrega etiquetas a las coordenadas X e Y de la gráfica.

¡Ahora vamos a visualizar la gráfica!

plt.show()

plt.show Abre una ventana interactiva que muestra tu gráfica.

Clic aquí para mostrar el código final
import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

DataFrame = pd.read_csv('mountain.csv')

DataFrame = DataFrame.unstack()

DataFrame = DataFrame.reset_index()

DataFrame.columns = ['X', 'Y', 'Z']

DataFrame['X'] = pd.Categorical(DataFrame['X'])

DataFrame['X'] = DataFrame['X'].cat.codes

fig = plt.figure()

ax = fig.gca(projection='3d')

ax.plot_trisurf(DataFrame['X'], DataFrame['Y'], DataFrame['Z'], cmap=plt.cm.jet, linewidth=0.2)

plt.title("Mount San Bruno")
plt.xlabel("x axis")
plt.ylabel("y axis")


plt.show()

Demo

¡Felicitaciones! ¡Has completado el taller! ¿Bastante sencillo, cierto?

Hackear

Felicitaciones g.i.f

Ahora que has explorado cómo hacer una montaña 3D básica, las posibilidades son infinitas. Los verdaderos científicos de datos usan Python, junto con las herramientas que usaste en este taller, para hacer visualizaciones de datos complejas. Aquí hay algunos ejemplos que se me ocurrieron y que puedes probar, ¡pero trata de encontrar algunas cosas interesantes que puedas hacer además de estas!

  • Ejemplo 1, usando datos de Kaggle para crear un volcán en 3D.
  • Ejemplo 2, utilizando un arreglo o matriz y una función coseno para hacer una gráfica de superficie.
  • Ejemplo 3, utilizando bucles, una lista y una función seno para hacer una gráfica de isolínea.

¡Feliz hackeo!

We'd love to see what you've made!

Share a link to your project (through Replit, GitHub etc.)