-->

Analizando datos de TV

Proyecto de la carrera de Ciencia de Datos - DataCamp

Presentado por: Daniel Carmona

Tabla de contenido

  1. TV, programas de medio tiempo y el gran juego
  2. Tomando nota de los problemas del conjunto de datos
  3. Distribución de puntos combinados
  4. Distribución de diferencia de puntos
  5. ¿Las grandes diferencias de puntos se traducen en espectadores perdidos?
  6. ¿La audiencia y la industria publicitaria a lo largo del tiempo?
  7. Los espectáculos de medio tiempo no siempre fueron tan buenos
  8. ¿Quién tiene más apariciones en programas de medio tiempo?
  9. ¿Quién interpretó más canciones en un espectáculo de medio tiempo?

1. TV, programas de medio tiempo y el gran juego


Te guste o no el fútbol, ​​el Super Bowl es un espectáculo. Hay algo para todos en tu fiesta del Super Bowl. Drama en forma de reventones, reapariciones y controversia para el fanático de los deportes. Están los anuncios ridículamente caros, algunos divertidos, otros desgarradores, estimulantes y extraños. Los espectáculos de medio tiempo con los músicos más importantes del mundo, a veces montados en gigantes tigres mecánicos o saltando desde el techo del estadio. Es un espectáculo, cariño. Y en este cuaderno, descubriremos cómo algunos de los elementos de este programa interactúan entre sí. Después de explorar y limpiar un poco nuestros datos, responderemos preguntas como:

  • ¿Cuáles son los resultados más extremos del juego?
  • ¿Cómo afecta el juego a la audiencia televisiva?
  • ¿Cómo han evolucionado la audiencia, las calificaciones de televisión y el costo de los anuncios a lo largo del tiempo?
  • ¿Quiénes son los músicos más prolíficos en términos de actuaciones en espectáculos de medio tiempo?
import pandas as pd super_bowls = pd.read_csv('datasets/super_bowls.csv') tv = pd.read_csv('datasets/tv.csv') halftime_musicians = pd.read_csv('datasets/halftime_musicians.csv') display(super_bowls.head(2)) display(tv.head(2)) display(halftime_musicians.head(3))

super_bowls.head(2)

# date super_bowl venue city state attendance team_winner winning_pts qb_winner_1 qb_winner_2 coach_winner team_loser losing_pts qb_loser_1 qb_loser_2 coach_loser combined_pts difference_pts
0 2018-02-04 52 U.S. Bank Stadium Minneapolis Minnesota 67612 Philadelphia Eagles 41 Nick Foles NaN Doug Pederson New England Patriots 33 Tom Brady NaN Bill Belichick 74 8
1 2017-02-05 51 NRG Stadium Houston Texas 70807 New England Patriots 34 Tom Brady NaN Bill Belichick Atlanta Falcons 28 Matt Ryan NaN Dan Quinn 62 6

tv.head(2)

# super_bowl network avg_us_viewers total_us_viewers rating_household share_household rating_18_49 share_18_49 ad_cost
0 52 NBC 103390000 NaN 43.1 68 33.4 78.0 5000000
1 51 Fox 111319000 172000000.0 45.3 73 37.1 79.0 5000000

halftime_musicians.head(3)

# super_bowl musician num_songs
0 52 Justin Timberlake 11.0
1 52 University of Minnesota Marching Band 1.0
2 51 Lady Gaga 7.0

2. Tomando nota de los problemas del conjunto de datos


Para los datos del juego del Super Bowl, podemos ver que el conjunto de datos parece completo, excepto por los valores faltantes en las columnas del mariscal de campo de respaldo (qb_winner_2 y qb_loser_2), lo cual tiene sentido dado que la mayoría de los QB iniciales en el Super Bowl (qb_winner_1 y qb_loser_1) juegan todo el juego.

De la inspección visual de la televisión y los datos de los músicos del medio tiempo, solo se muestra un valor faltante, pero tengo la corazonada de que hay más. El Super Bowl se remonta a 1967, y las columnas más granulares (por ejemplo, la cantidad de canciones para los músicos del medio tiempo) probablemente no se rastrearon de manera confiable a lo largo del tiempo. Wikipedia es genial pero no perfecta.

Una inspección de la salida .info () para tv y halftime_musicians nos muestra que hay varias columnas con valores nulos.

tv.info() print('\n') halftime_musicians.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53 entries, 0 to 52
Data columns (total 9 columns):
super_bowl          53 non-null int64
network             53 non-null object
avg_us_viewers      53 non-null int64
total_us_viewers    15 non-null float64
rating_household    53 non-null float64
share_household     53 non-null int64
rating_18_49        15 non-null float64
share_18_49         6 non-null float64
ad_cost             53 non-null int64
dtypes: float64(4), int64(4), object(1)
memory usage: 3.8+ KB
                    
                    
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 134 entries, 0 to 133
Data columns (total 3 columns):
super_bowl    134 non-null int64
musician      134 non-null object
num_songs     88 non-null float64
dtypes: float64(1), int64(1), object(1)
memory usage: 3.2+ KB

3. Distribución de puntos combinados


Para los datos de TV, las siguientes columnas tienen valores perdidos y muchos de ellos:

  • total_us_viewers(cantidad de espectadores de EE. UU. que vieron al menos una parte de la transmisión)
  • rating_18_49(porcentaje promedio de adultos de EE. UU. de 18 a 49 años que viven en un hogar con un televisor que estaban viendo toda la transmisión)
  • share_18_49(porcentaje promedio de adultos de EE. UU. de 18 a 49 años que viven en un hogar con un televisor en uso y que estaban viendo toda la transmisión)

Para los datos de músicos del medio tiempo, faltan números de canciones interpretadas (num_songs) para aproximadamente un tercio de las actuaciones.

Hay muchas razones potenciales para estos valores perdidos. ¿Se rastreó alguna vez los datos? ¿Se perdió en la historia? ¿Vale la pena el esfuerzo de investigación para hacer que todos estos datos? Quizás. Ver todos los espectáculos de medio tiempo del Super Bowl para obtener el recuento de canciones sería muy divertido. ¡Pero no tenemos tiempo para hacer ese tipo de cosas ahora! Tomemos nota de dónde el conjunto de datos no es perfecto y comencemos a descubrir algunas ideas.

Comencemos mirando los puntos combinados para cada Super Bowl visualizando la distribución. Señalemos también los Super Bowls con las puntuaciones más altas y más bajas.

from matplotlib import pyplot as plt %matplotlib inline plt.style.use('seaborn') plt.hist(super_bowls['combined_pts']) plt.xlabel('Combined Points') plt.ylabel('Number of Super Bowls') plt.show() display(super_bowls[super_bowls['combined_pts'] > 70]) display(super_bowls[super_bowls['combined_pts'] 25])

4. Distribución de diferencia de puntos


La mayoría de las puntuaciones combinadas rondan los 40-50 puntos, y los extremos se encuentran aproximadamente a la misma distancia en direcciones opuestas. Subiendo a los puntajes combinados más altos en 74 y 75, encontramos dos juegos con actuaciones dominantes de mariscales de campo. Uno incluso sucedió recientemente en el Super Bowl LII de 2018, donde los Patriots de Tom Brady perdieron ante los perdedores de Nick Foles, Eagles 41-33, para una puntuación combinada de 74.

Bajando a los puntajes combinados más bajos, tenemos el Super Bowl III y VII, que contó con defensas duras que dominaron. También tenemos el Super Bowl IX en Nueva Orleans en 1975, cuya puntuación de 16-6 se puede atribuir a las inclemencias del tiempo. El campo estaba resbaladizo por la lluvia durante la noche, y hacía un frío de 46 ° F (8 ° C), lo que dificultaba que los Steelers y Vikings hicieran mucho a la ofensiva. Este fue el segundo Super Bowl más frío de la historia y el último que se jugó en un clima inclemente durante más de 30 años. La NFL se dio cuenta de que a la gente le gustan los puntos, supongo.

ACTUALIZACIÓN: En el Super Bowl LIII en 2019, los Patriots y los Rams rompieron el récord del Super Bowl con la puntuación más baja con una puntuación combinada de 16 puntos (13-3 para los Patriots).

Echemos un vistazo a la diferencia de puntos ahora.

plt.hist(super_bowls.difference_pts) plt.xlabel('Point Difference') plt.ylabel('Number of Super Bowls') plt.show() display(super_bowls[super_bowls['difference_pts'] >= 35])

5. ¿Las grandes diferencias de puntos se traducen en espectadores perdidos?


La gran mayoría de los Super Bowls son juegos cerrados. Tiene sentido. Es probable que ambos equipos se lo merezcan si han llegado tan lejos. El juego más reñido fue cuando los Buffalo Bills perdieron ante los New York Giants por 1 punto en 1991, que fue mejor recordado por el intento de gol de campo fallido de Scott Norwood en el último segundo que se fue desviado a la derecha, dando inicio a cuatro derrotas seguidas en el Super Bowl . Pobre Scott. La mayor discrepancia de puntos fue de 45 puntos (!) Donde el miembro del Salón de la Fama Joe Montana llevó a los 49ers de San Francisco a la victoria en 1990, un año antes del juego más cerrado de la historia.

Recuerdo ver a los Seahawks aplastar a los Broncos por 35 puntos (43-8) en 2014, lo que en mi opinión fue una experiencia aburrida. El juego nunca estuvo realmente cerrado. Estoy bastante seguro de que cambiamos de canal al final del tercer trimestre. Combinemos los datos de nuestro juego y la televisión para ver si se trata de un fenómeno universal. ¿Las grandes diferencias de puntos se traducen en espectadores perdidos? Podemos graficar la participación de los hogares (porcentaje promedio de hogares de EE. UU. Con un televisor en uso que estuvieron viendo toda la transmisión) versus la diferencia de puntos para averiguarlo.

games_tv = pd.merge(tv[tv['super_bowl'] > 1], super_bowls, on='super_bowl') import seaborn as sns sns.regplot(x=games_tv['difference_pts'], y=games_tv['share_household'], data=games_tv)

6. ¿La audiencia y la industria publicitaria a lo largo del tiempo?


La línea de regresión con pendiente descendente y el intervalo de confianza del 95% para esa regresión sugieren que abandonar el juego si es un reventón es común. Aunque coincide con nuestra intuición, debemos tomarlo con un grano de sal porque la relación lineal en los datos es débil debido a nuestro pequeño tamaño de muestra de 52 juegos.

Sin embargo, independientemente del puntaje, apuesto a que la mayoría de la gente se mantiene firme en el espectáculo del medio tiempo, lo cual es una buena noticia para las cadenas de televisión y los anunciantes. Un anuncio de 30 segundos cuesta ahora unos 5 millones de dólares, pero ¿siempre ha sido así? ¿Y cómo ha evolucionado el número de espectadores y las calificaciones de los hogares junto con el costo de los anuncios? Podemos averiguarlo usando gráficos de líneas que comparten un eje x del "Super Bowl".

plt.subplot(3, 1, 1) plt.plot(games_tv['super_bowl'],games_tv['avg_us_viewers'], color='#648FFF') plt.title('Average Number of US Viewers') plt.subplot(3, 1, 2) plt.plot(games_tv['super_bowl'], games_tv['rating_household'], color='#DC267F') plt.title('Household Rating') plt.subplot(3, 1, 3) plt.plot(games_tv['super_bowl'],games_tv['ad_cost'],color='#FFB000') plt.title('Ad Cost') plt.xlabel('SUPER BOWL') plt.tight_layout()

7. Los espectáculos de medio tiempo no siempre fueron tan buenos


Podemos ver que los espectadores aumentaron antes que los costos publicitarios. ¿Quizás las redes no eran muy conocedoras de los datos y tardaban en reaccionar? Tiene sentido ya que DataCamp no existía en ese entonces.

Otra hipótesis: ¿quizás los espectáculos de entretiempo no eran tan buenos en los primeros años? El espectáculo moderno del Super Bowl tiene mucho que ver con el prestigio cultural de los grandes actos del medio tiempo. Bajé por un agujero de conejo de YouTube y resulta que los viejos no estaban a la altura de los estándares actuales. Algunos infractores:

  • Super Bowl XXVI en 1992: un rap de Frosty The Snowman interpretado por niños.
  • Super Bowl XXIII en 1989: un imitador de Elvis que hizo trucos de magia y ni siquiera cantó una canción de Elvis.
  • Super Bowl XXI en 1987: ponis bailarines de claqué. (Está bien, eso es bastante impresionante en realidad).

Resulta que la actuación de Michael Jackson en el Super Bowl XXVII, uno de los eventos más vistos en la historia de la televisión estadounidense, fue cuando la NFL se dio cuenta del valor del tiempo de transmisión del Super Bowl y decidió que necesitaban firmar actos de renombre a partir de ese momento. Los espectáculos de medio tiempo antes de MJ no fueron tan impresionantes, lo que podemos ver al filtrar nuestros datos de halftime_musician.

halftime_musicians[halftime_musicians['super_bowl'] <= 27]
# super_bowl musician num_songs
1 27 Michael Jackson 5.0
2 26 Gloria Estefan 2.0
3 26 University of Minnesota Marching Band NaN
4 25 New Kids on the Block 2.0
5 24 Pete Fountain 1.0
6 24 Doug Kershaw 1.0
7 24 Irma Thomas 1.0
8 24 Pride of Nicholls Marching Band NaN
9 24 The Human Jukebox NaN
10 24 Pride of Acadiana NaN
... ... ... ...

8. ¿Quién tiene más apariciones en programas de medio tiempo?


Muchas bandas de música. El clarinetista de jazz estadounidense Pete Fountain. Miss Texas 1973 tocando un violín. Nada en contra de esos artistas, simplemente no son Beyoncé. Para ser justos, nadie lo es.

Veamos a todos los músicos que han hecho más de un espectáculo de medio tiempo, incluido el recuento de su actuación.

halftime_appearances = halftime_musicians.groupby('musician').count()['super_bowl'].reset_index() halftime_appearances = halftime_appearances.sort_values('super_bowl', ascending=False) halftime_appearances
# musician super_bowl
28 Grambling State University Tiger Marching Band 6
104 Up with People 4
1 Al Hirt 4
83 The Human Jukebox 3
76 Spirit of Troy 2
... ... ...
37 Katy Perry 1
35 Judy Mallett 1
34 Jessica Simpson 1
33 Janet Jackson 1
110 will.i.am 1

9. ¿Quién interpretó más canciones en un espectáculo de medio tiempo?


La mundialmente famosa Tiger Marching Band de la Universidad Estatal de Grambling se lleva la corona con seis apariciones. Beyoncé, Justin Timberlake, Nelly y Bruno Mars son los únicos músicos posteriores al año 2000 con múltiples apariciones (dos cada uno).

De nuestras inspecciones anteriores, la columna num_songs tiene muchos valores faltantes:

  • Muchas de las bandas de música no tienen entradas num_songs.
  • Para las bandas que no marchan, los datos faltantes comienzan a ocurrir en el Super Bowl XX.

Filtremos las bandas de música filtrando a los músicos con la palabra "Marching"" en ellos y la palabra "Spirit" (una convención de nombres común para las bandas de música es "Espíritu de [algo]"). Luego filtraremos por Super Bowls después del Super Bowl XX para abordar el problema de los datos faltantes, luego veamos quién tiene la mayor cantidad de canciones.

# Filtre la mayoría de las bandas de música no_bands = halftime_musicians[halftime_musicians.musician.str.contains('Marching')] no_bands = no_bands[~no_bands.musician.str.contains('Spirit')] # Traze un histograma de la cantidad de canciones por interpretación most_songs = int(max(no_bands['num_songs'].values)) plt.hist(no_bands.num_songs.dropna(), bins=most_songs) plt.xlabel('Number of Songs Per Halftime Show Performance') plt.ylabel('Number of Musicians') plt.show() # Ordene a los músicos que no pertenecen a la banda por número de canciones por aparición no_bands = no_bands.sort_values('num_songs', ascending=False) display(no_bands.head(15))
# super_bowl musician num_songs
0 52 Justin Timberlake 11.0
70 30 Diana Ross 10.0
10 49 Katy Perry 8.0
2 51 Lady Gaga 7.0
90 23 Elvis Presto 7.0
33 41 Prince 7.0
16 47 Beyoncé 7.0
14 48 Bruno Mars 6.0
3 50 Coldplay 6.0
25 45 The Black Eyed Peas 6.0
20 46 Madonna 5.0
30 44 The Who 5.0
80 27 Michael Jackson 5.0
64 32 The Temptations 4.0
36 39 Paul McCartney 4.0

Otros proyectos

Proyecto de limpieza de datos

Ataque de tibutones.

2 Feb. 2022

Proyecto Final de Módulo Data Analysis | Bedu

Análisis de ventas de videojuegos con Python

18 Sep. 2018

Proyecto Final Intersemestral | UNAM

Análisis estadístico sobre Coronavirus (COVID-19) en México

18 Sep. 2018