Las aplicaciones web siguen siendo herramientas útiles para que los científicos de datos presenten sus proyectos de ciencia de datos a los usuarios. Dado que es posible que no tengamos habilidades de desarrollo web, podemos usar bibliotecas de Python de código abierto como Streamlit para desarrollar fácilmente aplicaciones web en poco tiempo.
Streamlit es una biblioteca de Python de código abierto para crear y compartir aplicaciones web para proyectos de ciencia de datos y aprendizaje automático. La biblioteca puede ayudarlo a crear e implementar su solución de ciencia de datos en unos minutos con unas pocas líneas de código.
Streamlit puede integrarse a la perfección con otras bibliotecas populares de python utilizadas en la ciencia de datos, como NumPy, Pandas, Matplotlib, Scikit-learn y muchas más.
Nota: Streamlit usa React como marco de interfaz para representar los datos en la pantalla.
Streamlit requiere la versión python >= 3.7 en su máquina.
Para instalar streamlit, debe ejecutar el siguiente comando en la terminal.
pip install streamlit
También puede verificar la versión instalada en su máquina con el siguiente comando.
streamlit --version
streamlit, versión 1.1.0
Después de instalar streamlit con éxito, puede probar la biblioteca ejecutando el siguiente comando en la terminal.
streamlit hello
La aplicación Hello de Streamlit aparecerá en una nueva pestaña en su navegador web.
Esto muestra que todo está funcionando bien, podemos continuar y crear nuestra primera aplicación web usando Streamlit.
En esta parte, implementaremos el modelo NLP entrenado que predice el sentimiento de la crítica de una película (positiva o negativa). Puede acceder al código fuente y al conjunto de datos aquí .
La aplicación web de ciencia de datos mostrará un campo de texto para agregar la reseña de la película y un botón simple para enviar la reseña y hacer predicciones.
Importar paquetes importantes
El primer paso es crear un archivo de python llamado app.py y luego importar los paquetes de python necesarios tanto para streamlit como para el modelo NLP entrenado.
# import packages import streamlit as st import os import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer # text preprocessing modules from string import punctuation # text preprocessing modules from nltk.tokenize import word_tokenize import nltk from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer import re # regular expression import joblib import warnings warnings.filterwarnings( "ignore" ) # seeding np.random.seed( 123 ) # load stop words stop_words = stopwords.words( "english" )
Función para limpiar la revisión
Las reseñas pueden tener palabras y caracteres innecesarios que no necesitamos a la hora de hacer predicciones.
Limpiaremos la revisión eliminando palabras vacías, números y puntuación. Luego, convertiremos cada palabra a su forma base usando el proceso de lematización en el paquete NLTK.
La función text_cleaning() se encargará de todos los pasos necesarios para limpiar nuestra revisión antes de hacer una predicción.
# function to clean the text @st.cache def text_cleaning (text, remove_stop_words=True, lemmatize_words=True) : # Clean the text, with the option to remove stop_words and to lemmatize word # Clean the text text = re.sub( r"[^A-Za-z0-9]" , " " , text) text = re.sub( r"\'s" , " " , text) text = re.sub( r"http\S+" , " link " , text) text = re.sub( r"\b\d+(?:\.\d+)?\s+" , "" , text) # remove numbers # Remove punctuation from text text = "" .join([c for c in text if c not in punctuation]) # Optionally, remove stop words if remove_stop_words: text = text.split() text = [w for w in text if not w in stop_words] text = " " .join(text) # Optionally, shorten words to their stems if lemmatize_words: text = text.split() lemmatizer = WordNetLemmatizer() lemmatized_words = [lemmatizer.lemmatize(word) for word in text] text = " " .join(lemmatized_words) # Return a list of words return text
Función para hacer predicción
La función de python llamada make_prediction() realizará las siguientes tareas.
# functon to make prediction @st.cache def make_prediction (review) : # clearn the data clean_review = text_cleaning(review) # load the model and make prediction model = joblib.load( "sentiment_model_pipeline.pkl" ) # make prection result = model.predict([clean_review]) # check probabilities probas = model.predict_proba([clean_review]) probability = "{:.2f}" .format(float(probas[:, result])) return result, probability
Nota: si el modelo de PNL entrenado predice 1, significa Positivo y si predice 0, significa Negativo.
Crear título y descripción de la aplicación
Puede crear el título de su aplicación web y su descripción utilizando el método title() y write() de streamlit.
# Set the app title st.title( "Sentiment Analyisis App" ) st.write( "A simple machine laerning app to predict the sentiment of a movie's review" )
Para mostrar la aplicación web, debe ejecutar el siguiente comando en su terminal.
streamlit run app.py
Luego verá que la aplicación web aparece automáticamente en su navegador web o puede usar la URL local creada http://localhost:8501.
Crear un formulario para recibir la reseña de una película
El siguiente paso es crear un formulario simple usando streamlit. El formulario mostrará un campo de texto para agregar su revisión y, debajo del campo de texto, mostrará un botón simple para enviar la revisión agregada y luego hacer una predicción.
# Declare a form to receive a movie's review form = st.form(key= "my_form" ) review = form.text_input(label= "Enter the text of your movie review" ) submit = form.form_submit_button(label= "Make Prediction" )
Ahora, puede ver el formulario en la aplicación web.
Hacer predicciones y mostrar resultados
Nuestro último fragmento de código es para hacer predicciones y mostrar resultados cada vez que un usuario agrega una reseña de una película y hace clic en el botón "hacer predicción" en la sección del formulario.
Después de hacer clic en el botón, la aplicación web ejecutará la función make_prediction() y mostrará el resultado en la aplicación web en el navegador.
if submit: # make prediction from the input text result, probability = make_prediction(review) # Display results of the NLP task st.header( "Results" ) if int(result) == 1 : st.write( "This is a positive review with a probabiliy of " , probability) else : st.write( "This is a negative review with a probabiliy of " , probability)
Con unas pocas líneas de código, hemos creado una aplicación web de ciencia de datos simple que puede recibir una reseña de una película y predecir si es una reseña positiva o negativa.
Para probar la aplicación web, complete el campo de texto agregando una reseña de la película de su elección. Agregué la siguiente reseña de la película sobre la película Justice League de Zack Snyder estrenada en 2021.
"Me encantó la película desde el principio hasta el final. Tal como dijo Ray Fisher, esperaba que la película no terminara. La escena de la mendicidad fue alucinante, me gustó mucho esa escena. A diferencia de 'La Liga de la Justicia', la película mostrar que cada héroe es mejor en lo suyo, hacer que amemos a cada personaje. Gracias, Zack y todo el equipo".
Luego haga clic en el botón de hacer predicción y vea el resultado.
Como puede ver en la aplicación web que hemos creado, el modelo de PNL entrenado predice que la revisión añadida es positiva con una probabilidad de 0,64.
Le recomiendo que agregue otra reseña de la película en la aplicación web de ciencia de datos que hemos creado y la vuelva a probar.
Hay muchas características y componentes de Streamlit que puede usar para desarrollar una aplicación web de ciencia de datos de la manera que desee. Lo que ha aprendido aquí son algunos de los elementos comunes de streamlit.
Para obtener más información, puede visitar sus hermosas páginas de documentación diseñadas aquí.
Si aprendiste algo nuevo o disfrutaste leyendo este artículo, compártelo para que otros puedan verlo. Hasta entonces, ¡nos vemos en el próximo artículo!.
También puedes encontrarme en Twitter @Davis_McDavid y puedes leer más artículos como este aquí .
¿Quieres estar al día con lo último en ciencia de datos? ¡ Suscríbase a nuestro boletín en el pie de página a continuación!