Copyright HébergementWebs.com - License GPL

Cómo utilizar la ciencia de datos para encontrar el mejor asiento de cine parte i

Noticias   2021-02-03 20:36:39

Como utilizar la ciencia de datos para encontrar el mejor asiento en el teatro (Parte I) Algunos asientos mas populares en los horarios de visualizacion mas populares, queriamos saber mas sobre las tendencias cinematograficas en Singapur , por lo que creamos PopcornData : un sitio web para obtener una vision general de las tendencias cinematograficasSingapur pregunta mediante la recopilacion de datos, la busqueda de informacion interesante y su visualizacion. ¿Alguna vez ha sentido la abrumadora decepcion al encontrar que su favorito ¿Se ha reservado un asiento en el teatro? ¿Que tan popular es su asiento favorito? ¡En el sitio web, puede ver como la gente vio diferentes peliculas, en diferentes lugares, teatros y horarios! Algunos aspectos unicos incluyen las tarjetasermiques para mostrar los asientos mas populares y animaciones para mostrar el orden en que se compraron los asientos . Este articulo de 2 partes explica como obtuvimos los datos para el sitio web y nuestro analisis de datos. Extraccion de datos Para implementar nuestra idea, el primer paso y quizas el mas crucial fue recopilar los datos . Decidimos rayar el sitio web de Shaw Theatres , una de las cadenas de peliculas mas importantes de Singapur. Comenzando con el conocimiento basico de Python scraping, primero intentamos usar la biblioteca de solicitudes de Python para obtener el HTML del sitio y BeautifulSoup biblioteca para analizarlo, pero rapidamente nos dimos cuenta de que los datos que necesitabamoscare no estaban presentes en el HTML que solicitamos. De hecho, el sitio web era dinamico: . Cuando solicitamos el HTML directamente, la parte dinamica del sitio web no se procesa, por lo que faltan datos. Para resolver este problema, usamos Selenium , una herramienta de automatizacion del navegador web que puede mostrar el sitio web primero con contenido dinamico antes de obtener el HTML. Problemas con Selenium Ejecute el controlador de selenio y resuelva problemas menores con el. gran curva de aprendizaje. Despues de innumerables investigaciones sobre StackOverflow y "renunciar " varias veces, logramos iterar (juego de palabras) y hacerlo funcionar. Los principales problemas que enfrentamos fueron: Desplacese a una parte especifica de la pantalla para hacer clic en un boton para que los datos se puedan encontrar en el HTML Descubra como ejecutar Selenium sin cabeza en la nube. Despues de implementarlo en Heroku, algunos datos no se recuperaron cuando en realidad estaban funcionando bien en la maquina local. Despues de una lluvia de ideas, descubrimos que algunas paginas cargadas por Selenium estaban por defecto en la version movil de la pagina. Lo arreglamos mencionando explicitamente el tamano de la pantalla. Con Selenium y BeautifulSoup, finalmente pudimos obtener los datos de todas las sesiones de peliculas disponibles para un dia en particular. Ejemplo de datos de sesion de pelicula: { " teatro : "Nex , "hall : " nex Hall 5 , " pelicula : "Jumanji: el siguiente nivel , " fecha : "18 de enero de 2020 , " hora : "1:00 pm + , " session_code : "P00000000000000000200104 } ¡Estabamos a mitad de camino! Ahora necesitabamos recopilar los datos del asedio para cada espacio de pelicula para ver que asientos estaban ocupados y cuando se compraron. Despues de navegar por la pestana Red del sitio web en las herramientas de visualizacionEn desarrollo, descubrimos que los datos del asiento se solicitaban a la API de Shaw. Los datos se pueden obtener solicitando la URL https://www.shaw.sg/api/SeatingStatuses?recordcode= donde el codigo de sesion era el codigo unico para cada sesion de pelicula que ya habiamos rayado anteriormente. Los datos que obtuvimos estaban en formato JSON y los analizamos y reorganizamos los asientos en orden ascendente segun el tiempo de compra del asiento para obtener una matriz de objetos "JSON donde cada objeto contenia informacion sobre cada asiento en la sala de cine, incluido numero de asiento, hora de compra de asiento y estado de asiento. Ejemplo de datos de asiento: [{ " seat_status : "AV, "last_update_time : " 2020-01-20 14: 34: 53.704117 , "seat_buy_time : " 1900-01-01T00: 00: 00 , "seat_number : " I15 , "seat_sold_by : " }, ..., { "seat_status : " SO , "last_update_time : " 2020-01-20 14: 34: 53.705116 , "seat_buy_time : " 2020-01-18T13: 12: 34.193 , "seat_number : " F6 , "seat_sold_by : }] seat_number : identificador unico de un asiento en un room seat_status : indica la disponibilidad de un asiento ( SO -asiento ocupado, AV haga clic aqui . Los datos brutos completos recopilados se pueden descargar aqui: Raw Movie Data.zip Es hora de ensuciarse las manos Ahora era el momento de ensuciarnos las manos limpiando los datos y extrayendo la informacion relevante. Usando pandas, analizamos el JSON, lo limpiamos y creamos un DataFrame con los datos para mejorar la legibilidad y la fifiltrado facilmente. Dado que los datos del asedio ocuparon mucha memoria, no pudimos incluir todo en el DataFrame. En su lugar, agregamos los datos de los asientos usando Python para obtener lo siguiente: 1. Numero total de asientos : Total numero de asientos disponibles para la proyeccion de una pelicula 2. Asientos vendidos : numero de asientos vendidos para una proyeccion de peliculas en el cine 3. Orden de compra de asientos : tabla bidimensional que muestra el orden en que se compraron los asientos [[ "A_10 " , "A_11 " ], [ "A_12 " ], [ "B_4 ", "B_7 " , "B_6 " , "B_5 " ], [ "C_8 " , "C_10 " , "C_9 " ], [ "B_1 " , "B_2 " ], [ "C_6 " , "C_7 " ], [ "C_5 " , "C_4 " ], [ "B_8 " , "B_10 " , "B_9 " ], [ "D_8 " ], [ "A_15 " , "A_14 " , "A_13 "]] Cada elemento de la matriz representa los asientos comprados al mismo tiempo y el orden de los elementos representa el orden en que se compraron los asientos. 4. Distribucion de asientos : diccionario que indica el numero de asientos comprados juntos (en grupos de 1, 2, 3 o mas) { "Grupos de 1 ": 8 , " Grupos de 2 " : 30 , "Grupos de 3 " : 9 , "Grupos de 4 " : 3 , "Grupos de 5 " : 1 } 5. Frecuencia de asientos : diccionario que muestra el numero de veces que se ha comprado cada asiento de una habitacion durante el mes { "E_7 " : 4 , "E_6 " : 5 , "E_4 " : 11 , "E_5 ": 9 , " E_2 ": 2 , "E_1 " : 2 , "E_3 " : 7 , "D_7 " : 15 , "D_6 " : 17 , "C_1 " : 33 , "D_2 " : 15 , "D_1 " : 14 , "B_H2 " : 0 , "B_H1 " : 0 , "D_4 " : 45 , "D_5 " : 36 , "D_3 " : 32 , "C_3 " : 95 , "C_4 " : 94 , "A_2 ": 70 , " A_1 ": 70 , "B_2 " : 50 , "B_1 " : 47 , "C_2 " : 37 , "C_6 " : 53 , " C_5 ": 61 , " B_4 ": 35 , "B_3 " : 40 } 6. Tasa de compra : Dos diccionarios, el primer diccionario indica el tiempo que falta antes de la proyeccion de una pelicula (en dias) con el correspondiente numero acumulado de entradas compradas en el segundo diccionario { " 1917 ": [ 4.1084606481481485 ..., 2.566423611111111 , 2.245578703703704 , 2.0319560185185184 , 1.9269907407407407 , 1.8979513888888888 ....], ...} { " 1917 " : [ 1 , 3 , 8 , 10 , 11 , ...], ...} Los datos limpios se pueden ver aqui: Datos de pelicula limpia ¡Finalmente, hemos terminado! (con el 20% del trabajo) Con nuestros datos raspados y limpiado, ahora podriamos pasar a la parte divertida: analizar los datos para encontrar patrones entre la basura de palomitas de maiz. En la parte II, analizamos los datos, visualicemos, luego crear un sitio web para nuestros resultados. Para obtener mas informacion sobre nuestro analisis de los datos y los patrones interesantes que encontramos, consulte Parte II de este articulo. El codigo del raspador se puede encontrar en este github repo . Don " No olvide visitar nuestro sitio web en http://popcorn-data.herokuapp.com ! Este articulo fue escrito por Noel Mathew Isaac y Vanshiqa Agrawal Publicado anteriormente en https: //medium.com/@noelmathewisaac/popcorn-data-analysing-cinema-seating-patterns-part " -1-a0b2a5c2c19a