Está en la página 1de 101

Machine Translated by Google

27 Caso de Estudio: Soluciones InfoMedia 877

4 soluciones blancas

Gershwin se acercó a Julien Blanc, fundador de la consultora de análisis de datos Blanc Solutions,
para comprender cómo utilizar las nuevas técnicas de big data. Consultores como Blanc podían
evaluar rápidamente grandes volúmenes de datos, profundizar en un problema y sugerir una
solución y un enfoque de datos adecuados. Blanc recomendó que InfoMedia use técnicas de
simulación junto con datos históricos para predecir el alcance.
“Si su cliente está planeando una nueva campaña, el rendimiento de campañas anteriores no
será el mejor indicador del éxito futuro. Usar su conocimiento del mercado para simular Reach es
una solución mejor y más económica”, dijo Blanc.
Julien pensó que lo mejor era desarrollar las ideas basándose en los datos de los dos canales
de cable. Zhang pudo obtener números de audiencia para estos canales de un agregador externo.
Para ejecutar simulaciones sólidas, Blanc buscó un período anterior que se pareciera a la semana
durante la cual InfoMedia planeaba ejecutar su campaña. El agregador pudo proporcionar datos
minuto a minuto con respecto a la audiencia para cualquier grupo demográfico determinado para
los dos canales.
Zhang también pudo aprovechar el historial que tenía con su cliente para proporcionarle a Blanc
datos anteriores sobre precios y alcance de las campañas de la empresa.
Rooster Biscuits había realizado una campaña anterior dirigida a los mismos datos demográficos,
con parámetros ligeramente diferentes. Esta campaña anterior proporcionaría a Blanc el contexto
adecuado y lo ayudaría a tomar una decisión sobre la asignación de sus espacios.
Blanc descubrió que Sports 500 Network, que era el más popular de los dos canales, tendía a
cobrar más por los espacios en comparación con Animation Channel.
Además, las primas que Zhang tendría que pagar por los horarios de máxima audiencia y los fines
de semana eran más altas para Sports 500 Network.3 Había realizado una campaña anterior con
150 espacios, 100 en Sports 500 Network y 50 en Animation Channel. Al menos el 20% de las
franjas horarias tenían que ser durante el horario de máxima audiencia y el 30% durante el fin de semana.
Esta campaña podría ser un buen sujeto de prueba para el experimento.
Blanc sabía que tenía tres tareas importantes que realizar.
Tarea 1: configurar un modelo de simulación para estimar la curva Reach-GRP.
¿Cómo podría Blanc simular el alcance? Incluso si tuviera datos de audiencia que le indicaran
cuántas personas habían estado viendo un canal en un momento dado, estimar cuántas de esas
personas habían visto un anuncio incluso antes de mostrar el anuncio parecía un problema
complicado. Fue aquí donde la nueva investigación resultó prometedora. Por ejemplo, los
investigadores de Google identificaron un método mediante el cual se podía inferir la relación entre
el alcance y el GRP a partir de un solo punto de datos, ya que la forma general de la curva era
"conocida" (Goerg 2014). Blanc pudo expandir este método para tener en cuenta la cantidad mucho
mayor de datos que esperaba obtener de sus simulaciones para comprender la relación entre el
alcance y la cantidad de anuncios mostrados. Sintió que al especializarse en una campaña
específica se podía usar una forma funcional como una función polinomial, en otras palabras,
simplemente podía ajustar una curva polinomial a través de varios

3Consulte el Apéndice 1 para obtener más información.


Machine Translated by Google

878 D.Agrawal et al.

(r, g) puntos de datos, donde r es el alcance y g es el número de puntos que se muestran.


Basándose en su experiencia, Zhang sugirió comenzar con ajustes cuadráticos y cúbicos.
Blanc planeó usar los datos de audiencia proporcionados por el agregador de terceros para
simular el alcance y así obtener los puntos de datos. Zhang le había dicho que InfoMedia tenía la
intención de transmitir entre 10 y 250 anuncios en el período de 7 días (1 semana) de la campaña.
Los datos fueron recopilados por una encuesta de hogares que vieron los dos canales, realizada
durante una semana lo más similar posible a la semana objetivo. En la encuesta, a los espectadores
se les hizo una serie de preguntas demográficas. Blanc podría obtener los datos sobre qué canal
vieron y durante cuánto tiempo, de las propias compañías de cable. Estas dos fuentes, combinadas,
proporcionarían a Blanc la mayor parte de los datos necesarios.

Los organismos de radiodifusión dividieron el tiempo de aire en sus canales en espacios de 6


minutos, es decir, Blanc tenía 1680 espacios potenciales en la semana para transmitir el anuncio:
10 por h * 24 h * 7 días a la semana. La simulación implicaría lanzar los anuncios al azar en estos
1680 espacios y calcular el GRP y el alcance. Así, Blanc elegiría el número de anuncios a emitir.
Luego, Blanc simularía mostrar anuncios para cada número de espacios y usaría los datos de
audiencia para comprender cuántas personas estaban viendo el espacio elegido por la simulación.
También podría estimar si un espectador miró al menos una vez, al menos tres veces, etc. Hacer
esto repetidamente daría un conjunto de puntos de datos de "alcance versus puntos mostrados".
Luego, ajustaría una curva a través de estos puntos para obtener la relación.

Sin embargo, había un elemento clave que agregar a su conjunto de datos. Los datos de
audiencia que tenía eran solo una muestra de la población total. Era necesario agregar un peso
único a cada espectador en su conjunto, una medida de la proporción de espectadores en la
población que eran similares al espectador seleccionado, para convertir los números de muestra
en el número de población. Por ejemplo, si un espectador en el 18-34 P había visto al menos tres
veces y si el peso de este espectador era 2345, entonces estimaría que 2345 espectadores habían
visto al menos tres veces en la población. Agregar estos números espectador por espectador daría
una estimación del GRP y el alcance. Blanc podría así determinar el alcance de cualquier
combinación de espacios seleccionados por la simulación multiplicando cada espectador que vio
el anuncio por el peso de ese espectador. Además, al rastrear la cantidad de visitas del mismo
consumidor, multiplicar por el peso y sumar entre los espectadores, pudo calcular no solo el
alcance 1, sino también el alcance 3 y el alcance 5.

Usando múltiples simulaciones,4 podría obtener un conjunto sólido de datos que podría usar
para derivar la curva de alcance. Luego puede ajustar una curva polinomial como se explicó
anteriormente. El equipo de ciencia de datos construyó un simulador que produce el alcance dada
la cantidad de anuncios que se mostrarán y las restricciones sobre cuándo se mostrarán. El
archivo de ayuda, la interfaz y los resultados de muestra se muestran en el Apéndice 3.
Tarea 2: Desarrollar la estimación.

4Blanc recibió ayuda de un experto en simulación de su equipo de ciencia de datos que le proporcionó el
código "Infomedia_simulation.R" (consulte el Apéndice 3) para ejecutar la simulación y calcular el alcance de
cada simulación dadas las restricciones.
Machine Translated by Google

27 Caso de Estudio: Soluciones InfoMedia 879

Blanc decidió dividir el conjunto de datos por hora y día de la semana y usar esa
información para mejorar la predicción. Para hacer esto, tiene varios enfoques: divide cada
día en cubos de 3 horas, divide el horario normal y el de máxima audiencia a diario, o
simplemente divide el horario normal/de máxima audiencia entre semana y fin de semana.
El intervalo de tiempo que comienza a las 2 a. m. garantizaría que el efecto del intervalo de
“hora de máxima audiencia” de 8 p. m. a 11 p. m. pudiera entenderse por separado. Además,
también descompuso cada día en su propio cubo, para comprender mejor la diferencia en la
audiencia entre los días de semana y los fines de semana. Consulte el Apéndice 3 para ver
ejemplos de estos métodos de recopilación de datos y cómo se reflejan en el resultado
producido por el simulador. Revisó los términos del contrato y las notas legales para
comprender si hay algún período de "no presentarse"/"bloqueo" y no encontró tal restricción para la campañ
El período de "no show" o "blackout" básicamente restringe que la emisora muestre
comerciales cuando el cliente pone las condiciones de no transmitir su anuncio durante un
período de tiempo particular, asumiendo que no habrá clientes objetivo o si existen
restricciones reglamentarias de no mostrar comerciales específicos en una zona horaria
particular. Además, en el futuro, se pueden realizar refinamientos en la estimación utilizando
la variación entre los datos demográficos de los espectadores, como la edad y el sexo, y
otras variables, como el tiempo promedio dedicado por segmento.
Tarea 3: Gasto óptimo.
Una vez que Zhang tuvo la información a mano y ganó confianza en el modelo, la
decisión que tenía que tomar fue clara. La propia encuesta de Blanc le había informado que
la superposición entre los espectadores de los dos canales parecía insignificante. Por lo
tanto, Zhang tuvo que determinar un patrón de gasto óptimo para la campaña de Rooster.
¿Cuántos anuncios publicaría en cada canal? ¿A qué horas y en qué días apuntaría a
cuántos? Con fines de demostración, Blanc pensó que podría usar la campaña anterior
cuyos datos se muestran en el Apéndice 1 para demostrar cómo podría funcionar el nuevo
método.
Sabía que tenía una tarea difícil por delante al explicar qué variables eran importantes
para predecir el alcance. ¿Podría convencer a sus clientes sobre los hallazgos? Pensó que
había dos formas de hacer esto: (a) explicar el modelo con mucho cuidado al cliente y (b)
mostrar cómo se puede utilizar para aumentar el alcance sin aumentar el presupuesto.

Material complementario electrónico

Todos los conjuntos de datos, códigos y otros materiales a los que se hace referencia en esta sección están
disponibles en www.allaboutanalytics.net.

• Datos 27.1: infomedia_ch1.csv •


Datos 27.2: infomedia_ch2.csv •
Código 27.1: Infomedia_simulation.R
Machine Translated by Google

880 D.Agrawal et al.

Ejercicios: Ayuda a Blanc con sus tres tareas

Ex. 27.1 Revise la descripción del simulador en el Apéndice 3 y el pseudocódigo provisto en


el Apéndice 4. Genere datos usando el simulador para ambos canales. Reporte el ajuste del
modelo como una función del número total de puntos así como las otras variables explicativas.
Visualice la curva de alcance para Alcance-1, -3, -5, para ambos canales.
Ex. 27.2 Usando la información/restricciones de la campaña y el modelo obtenido en Ex. 27.1,
demuestran que una mejor asignación entre canales, días de semana/fines de semana y hora
del día puede generar un mayor alcance. (El presupuesto máximo asignado es de $300 000
para 1 semana). Muestre las asignaciones óptimas para cada canal por separado, así como
juntos, para Reach-3. Calcule el gasto total para cada asignación, en función de los detalles
de precios proporcionados. Use Reach-3 para su recomendación final.
Ex. 27.3 El anunciante se da cuenta de que entre las 2 am y las 5 am hay muy pocos
espectadores de su cliente objetivo que ven la televisión y por lo tanto agrega la ventana de
apagón de 3 h todos los días. ¿Cambiaría esto su análisis?
Ex. 27.4 Debido a la creciente demanda y los espacios de transmisión limitados, la emisora
está considerando ofrecer precios dinámicos. La emisora puede redefinir el concepto de
horario de máxima audiencia y cambiar significativamente su estrategia de marketing de
medios. Sugiera una nueva estrategia si la emisora cambia a precios dinámicos.
Ex. 27.5 ¿Cómo se puede usar este enfoque cuando más y más espectadores se cambian a
Internet?
Ex. 27.6 ¿Qué pasaría si el anunciante exige no emitir el comercial junto a otros comerciales
similares? ¿Qué otras restricciones prácticas cree que impone un anunciante a un cronograma?

Ex. 27.7 ¿Qué pasaría si la emisora repite el anuncio dentro del mismo espacio/pausa
comercial (conocido como "pod" en la industria publicitaria de televisión). Discuta cómo puede
afectar la audiencia del segmento objetivo y si necesita cambiar su estrategia.
Machine Translated by Google

27 Caso de Estudio: Soluciones InfoMedia 881

Apéndice 1: Campaña Gallo Galleta 6.412.965—Campaña


PRB y Costo

Tasa básica Canal de animación Red Deportes 500

Día laborable $ 1500 (X) $ 1200 (Y)

Notas: La tarifa base corresponde al precio de lunes a viernes fuera del horario de máxima audiencia para un spot de 30 segundos. de gallo
la campaña tiene un anuncio de exactamente 30 s

Múltiplos de precios (categorizados por tiempo de los puntos)

Canal de animación Día laborable Fin de semana

horario no estelar 1X 1.25X

hora estelar 1.4X 1.75X

Notas: Los múltiplos de precio se aplican a la tarifa base para calcular la tarifa específica para un momento diferente
o día de la semana

Red Deportes 500 Día laborable Fin de semana

horario no estelar 1 año 1,2 años

hora estelar 1,25 años 1,5 años

Notas: Los múltiplos de precio cambian según el canal

Informe de campaña anterior

Animación Día laborable Día laborable Fin de semana Fin de semana

canal no principal principal no principal principal Total

Lugares 58 17 22 3 100

Costos ($) 87.000 35.700 41.250 7875 $ 171,825


Alcance-3 929.155 1.527.138 330.370 97,027 2,883,690

Deportes 500 Día laborable Día laborable Fin de semana Fin de semana

la red no principal principal no principal principal Total

Lugares 34 9 6 1 50

Costos ($) 40.800 13.500 8640 1800 $ 64,740


Alcance-3 1.210.067 580.777 212,973 53,054 2,056,871

Notas: estos fueron los valores reales logrados para la campaña dada. Los datos reales se notifican 2 semanas después
ventilación
Machine Translated by Google

882 D.Agrawal et al.

Apéndice 2: Descripción de datos

Hay dos conjuntos de datos "infomedia_ch1.csv" e "infomedia_ch2.csv" para el canal Animation y la red
Sports 500, respectivamente. Cada conjunto de datos contiene diez
variables Estas variables se refieren en gran medida cuando los espectadores comienzan y dejan de ver el
canal, la hora y la fecha de la transmisión y los datos demográficos relacionados con el
espectadores (Cuadros 27.1 y 27.2).

Tabla 27.1 Descripción de datos del conjunto de datos de entrada

Nombre de la variable Descripción


hora Día de la emisión (1-lunes, 2-martes,…., 7-domingo)
del día Hora en que comienza el anuncio
comienzo
Hora en que el cliente empezó a ver el canal
final Hora en que el cliente dejó de ver el canal
caricias ID único de la conexión
pid Identificación única de los miembros de la familia

años Edad del espectador


sexo Sexo del espectador

canal de Ponderación del tipo de cliente similar


población_wgt Identificador de canal (1—Animación, 2—Red Sports 500)

Nota: Las variables adtime, start y end están en formato de hora y llevan valores entre 0 y 2359

Tabla 27.2 Observaciones de muestra del conjunto de datos de entrada (cinco filas superiores de infomedia_ch1.csv)

Día Ad_time Inicio Fin Cust_id P_id Edad Sexo Population_wgt Canal
2 1342 1308 1355 70,953 1308 1 59 M 3427 1
2 1348 1355 70,953 1 59 M 3427 1
1 2100 2100 2109 79,828 1 23 F 5361 1
1 2106 2100 2109 79,828 2120 1 23 F 5361 1
1 2124 2124 79,828 1 23 F 5361 1
Machine Translated by Google

27 Caso de Estudio: Soluciones InfoMedia 883

Apéndice 3: Descripción del simulador

Archivo de ayuda

Consulte el código "Infomedia_simulations.R" para ejecutar la simulación para cada canal por separado. La
función de simulación le pedirá la siguiente información:

Ingrese la ruta completa de la carpeta de la fuente de datos:

< Copie y pegue el nombre de la ruta tal como está. Asegúrese de pegar en la consola R, no en el editor.>

Ingrese el nombre del conjunto de datos (incluido .csv):

< Los conjuntos de datos infomedia_ch1.csv e infomedia_ch2.csv corresponden a los canales 1 y 2


respectivamente. Se necesita una simulación separada para cada canal para obtener resultados rápidamente.
Introduzca el nombre del archivo de origen (infomedia_ch1 (o 2).csv) incluida la extensión del archivo (.csv).
Tenga en cuenta que R distingue entre mayúsculas y minúsculas: escriba el nombre del archivo correctamente.>

Introduzca el número mínimo de ranuras (normalmente 5):

<el número de ranuras para comenzar la simulación>

Introduzca el número máximo de ranuras (normalmente 250):


< el número de ranuras para finalizar la simulación>

Introduzca el número incremental de ranuras (normalmente 5):

< tamaño de paso, es decir, mínimo, mínimo + tamaño de paso, mínimo + 2* tamaño de paso, ...
será simulado>

Ingrese el número de simulación a ejecutar para cada lugar (normalmente 100):

< la cantidad de replicaciones: demasiadas ralentizarán el sistema>

Porcentaje mínimo de franjas horarias en prime time [0-100]:

< debe ser un número entero, normalmente entre 20 y 30 >

Máximo porcentaje de franjas horarias en prime time [0-100]:

< debe ser un número entero, normalmente entre 20 y 30 >

Porcentaje mínimo de franjas horarias los fines de semana [0-100]:

< debe ser un número entero, normalmente entre 20 y 30 >

Máximo porcentaje de franjas horarias los fines de semana [0-100]:

< Debe ser un número entero, normalmente entre 20 y 30 >

Una vez que ingrese todas las entradas correctamente, la función de simulación ejecutará la simulación
para el canal solicitado dadas las restricciones y compartirá las dos salidas.
Machine Translated by Google

884 D.Agrawal et al.

archivos: (a) archivo de datos que consistirá en el alcance dado el número de espacios en horario no preferencial
de lunes a viernes, preferencial de día laborable, no preferencial de fin de semana y horario preferencial de fin de
semana y (b) archivo png que muestra la curva de alcance contra el número total de manchas
Los archivos de salida (archivos csv y png) se guardarán en el directorio actual como se muestra en el código
de salida.

Captura de pantalla de muestra (Fig. 27.1)

> simulación()
Ingrese la ruta completa de la carpeta de la fuente de datos: D:\MyData\InfoMedia_Solutions

El directorio de trabajo actual es:


D:/Mis datos/InfoMedia_Solutions

Ingrese el nombre del conjunto de datos (incluido .csv): infomedia_ch1.csv

**************************************************** ****************

Nota: Ingrese todos los valores a continuación solo como números enteros positivos.
**************************************************** ****************

Introduzca el número mínimo de espacios (normalmente 5) :5


Introduzca el número máximo de ranuras (normalmente 250): 250
Introduzca el número incremental de ranuras (normalmente 5): 5
Ingrese el número de simulación a ejecutar para cada lugar (normalmente 100): 100
Porcentaje mínimo de franjas horarias en prime time [0-100]: 20
Máximo porcentaje de slots en prime time [0-100]: 30
Porcentaje mínimo de franjas horarias los fines de semana [0-100]: 20
Máximo porcentaje de franjas horarias los fines de semana [0-100]: 30

Ejecución de 100 simulaciones para 5 a 250 puntos con incremento de 5 puntos.


Las restricciones son las siguientes:
franjas porcentuales durante el horario de máxima audiencia: 20 a 30 por ciento. :
tragamonedas porcentuales el fin de semana 20 a 30 por ciento.

**************************************************** ***************************

La simulación se completa con éxito.

Puede consultar los archivos a continuación (csv e imagen) en el directorio de trabajo actual.

Directorio de trabajo actual:


{ D:/MisDatos/InfoMedia_Solutions }

Nombre del archivo de datos: <simulation_ch1.csv>


Nombre del archivo de gráficos de simulación: <Reach_curve_ch1.png>

Utilice estos datos para ajustar la curva y para un análisis posterior.


**************************************************** ***************************

>

Fig. 27.1 Interfaz de la función de simulación en R


Machine Translated by Google

27 Caso de Estudio: Soluciones InfoMedia 885

Salida de muestra (Fig. 27.2)

La función de simulación desarrollada por el equipo de ciencia de datos produce el conjunto de datos
“simulation_ch1.csv” y “simulation_ch2.csv” para cada canal. La muestra
la salida se muestra en la Tabla 27.3.

Fig. 27.2 Alcance (R-1,-3,-5) frente a puntos para los canales 1 y 2 (salida de muestra de la función de simulación)

Tabla 27.3 Salida de muestra producida por el simulador


R1 R3 R5 Wkday_NonPrime WkDay_Prime WkEnd_NonPrime WkEnd_Prime
1 596,520 10,660 0 3 2 1 0 1
1,089,675 4438 0 3 3 1 1 0
295,026 0 4 341,508 0 05 3 0 1 1
245,348 0 04 0 0 1
03 0 1 1
.. .. .. .. .. .. .. ..

Notas: R1, R3 y R5 son Alcance-1, -3 y -5. El resto de las columnas corresponden a cuantos
Las franjas horarias se mostraban en los días laborables no preferenciales, los días laborales preferenciales, los fines de semana no preferenciales y los fines de semana preferenciales.

tiempo
Machine Translated by Google

886 D.Agrawal et al.

Apéndice 4 (Pseudo Código)

1. En primer lugar, identificamos las restricciones que aplicaríamos, como los puntos de máxima audiencia frente a los que no

son de máxima audiencia, los días de semana frente a los fines de semana, la zona bloqueada y la cantidad de espacios
en cada canal.

2. Cree un marco de datos con lugares y días únicos disponibles.


3. Ejercicio de simulación (Tarea 1): puede usar la función de simulación provista con el estuche o
desarrollar su función personalizada siguiendo los pasos a continuación (3a–3c):

(a) En cada ejecución, tome una muestra aleatoria según las restricciones del paso 1, utilizando la
función sample() . Muestra (vector del que tenemos que elegir, nº de elementos a elegir).

(b) Combine este marco de datos con el conjunto de datos real dependiendo de la hora y el día usando
la función merge() . Básicamente, el paso 3a generará varias muestras (para simular las
ejecuciones) y ayudará a identificar a los espectadores en el siguiente paso. (c) Ahora recopile
los datos a nivel de cliente cuántas veces un cliente en particular
visto el anuncio. Usando la función de conteo en la biblioteca plyr .

4. Ajuste de la curva (Tarea-2)

(a) Ahora podemos calcular el alcance total del anuncio en función del recuento de espectadores
distintos que vieron el anuncio repetidamente, es decir, al menos una vez (R1), al menos tres
veces (R3), al menos cinco veces (R5), donde el alcance total es la suma de la columna de
ponderación de la población que representa la ponderación de tipos similares de clientes. Grafique
el alcance total y el número de puntos (por ejemplo, variando el total de puntos entre 5 y 250 en
pasos de 5 o 10).
(b) Ajustamos la curva para estimar el alcance total promedio para un tamaño de ranura dado.
Necesitará una curva para R-1, R-3, R-5, etc.

Alcance = f (ranuras) + e

5. Estimación de error (Tarea-2)

(a) Recopile los datos sobre la distribución de franjas horarias: cómo se han distribuido las franjas
horarias entre las diferentes restricciones, como día de la semana, período de tiempo, horario de
máxima audiencia, no de máxima audiencia y fin de semana y entre semana. (b) Podemos ver si
datos adicionales pueden explicar el error en el ajuste anterior.

ÿ = f (parte del día, datos demográficos, otras variables explicativas)

(c) Reúna los modelos anteriores para estimar mejor el alcance total.

Alcance=f (ranuras, franja horaria, datos demográficos, otras variables explicativas) +ÿ


Machine Translated by Google

27 Caso de Estudio: Soluciones InfoMedia 887

6. Optimización (Tarea 3): Ahora, optimizamos el alcance total usando optimización no lineal.
tcnicas de mizacin (consulte el Cap. 11 Mejoramiento):

(a) Función objetivo: Maximizar el alcance apropiado (b) Restricciones

• Número de plazas de fin de semana del total de plazas (normal de fin de semana + plazas de fin de semana)
principal)
• Número de espacios en horario de máxima audiencia sobre el total de espacios (principal entre semana + fin de semana)

principal)
• Presupuesto disponible para el anuncio (total, por canal)

Referencia

Goerg, M. (2014). Estimación de curvas de alcance a partir de un punto de datos. Google Inc. Consultado el 23 de junio de
2018, de https://ai.google/research/pubs/pub43218.
Machine Translated by Google

capitulo 28
Introducción a R

Peeyush Taori y Hemanth Kumar Dasararaju

1. Introducción

A medida que la adopción de la ciencia de datos aumenta más en la industria, la demanda de


científicos de datos ha aumentado a un ritmo asombroso. Los científicos de datos son una raza
rara de "unicornios" que deben ser omniscientes y, según la cultura popular, un científico de
datos es alguien que sabe más estadísticas que un programador y más programación que un
estadístico. Una de las herramientas más importantes en el conjunto de herramientas de un
científico de datos es el conocimiento de un lenguaje de programación de propósito general que
le permite realizar tareas de limpieza de datos, manipulación de datos y análisis estadístico con
facilidad. Dichos requisitos exigen lenguajes de programación que sean lo suficientemente
fáciles de aprender y, sin embargo, lo suficientemente potentes para realizar tareas de
codificación complejas. Dos de estos lenguajes de programación de facto para la ciencia de
datos utilizados en la industria y la academia son Python y R.
En este capítulo, nos enfocamos en uno de los lenguajes de programación más populares
para la ciencia de datos: R (consulte el Capítulo 29 ). para Python). Aunque nuestro objetivo no
es cubrir de manera exhaustiva todos los temas de R, nuestro objetivo es proporcionar material
suficiente para proporcionar una introducción básica a R para que pueda comenzar a trabajar
con él en sus tareas diarias de programación. Se puede obtener un conocimiento detallado de R
a través de una excelente colección de libros y recursos en línea. Aunque la experiencia previa
en programación es útil, este capítulo no requiere ningún conocimiento previo de programación.

P. Taori )
(London Business School, Londres, Reino Unido
Correo electrónico: taori.peeyush@gmail.com

Escuela de
Negocios de la India HK Dasararaju, Hyderabad, Telangana, India

© Springer Nature Switzerland AG 2019 B. 889


Pochiraju, S. Seshadri (eds.), Essentials of Business Analytics, International Series
in Operations Research & Management Science 264, https://doi.org/
10.1007/978-3-319-68837 -4_28
Machine Translated by Google

890 P. Taori y HK Dasararaju

1.1 ¿Qué es R?

R es un lenguaje de programación de alto nivel y de propósito general que se anunció por primera
vez en 1992 con una versión de desarrollo lanzada en 1995. R es esencialmente una implementación
de otro lenguaje de programación llamado S y fue desarrollado por Ross Ihaka y Robert Gentleman
(y por lo tanto el nombre R después de la inicial de ambos creadores de la lengua). Si bien R está
construido como un lenguaje de programación de propósito general, su uso principal es en el campo
de las estadísticas y la ciencia de datos, donde R disfruta de una gran audiencia y un fuerte apoyo
de las comunidades científicas.
R es un lenguaje de código abierto que permite que cualquier persona contribuya al entorno R
creando paquetes y poniéndolos a disposición de otros usuarios. R tiene una comunidad científica
bastante grande y se usa en una variedad de entornos, como investigación financiera, desarrollo de
algoritmos, precios de opciones y derivados, modelos financieros y sistemas comerciales. R está
escrito principalmente en C, Fortran y R mismo, y uno puede ver que muchos de los paquetes R
están escritos en uno de estos lenguajes de programación. Esto también significa que existe una
buena interoperabilidad entre R y estos lenguajes de programación.

1.2 ¿Por qué R para ciencia de datos?

Como se indicó al comienzo de este capítulo, R es uno de los lenguajes de facto en lo que respecta
a la ciencia de datos. Hay varias razones por las que R es un lenguaje tan popular entre los científicos
de datos. Algunas de esas razones se enumeran a continuación:

• R es un lenguaje de programación de propósito general de alto nivel que se puede utilizar para
diversas tareas de programación, como web scraping, recopilación de datos, limpieza y
manipulación de datos, y desarrollo de sitios web y para fines de análisis estadístico y aprendizaje
automático.
• R es un lenguaje diseñado principalmente para personas que no son programadores y, por lo tanto,
es fácil de aprender e implementar. • R es un lenguaje de programación de código abierto. Esto
implica que una gran comunidad
de los desarrolladores contribuye continuamente al ecosistema R.
• R es fácilmente ampliable y cuenta con la contribución activa de miles de desarrolladores de todo
el mundo. Esto implica que la mayoría de las tareas de programación pueden manejarse
simplemente llamando funciones en uno de estos paquetes que los desarrolladores han
contribuido. Esto reduce la necesidad de escribir cientos de líneas de código y hace que el
desarrollo sea más fácil y rápido.
• R es un lenguaje interpretado que es independiente de la plataforma. En comparación con algunos
de los otros lenguajes de programación, no tiene que preocuparse por el hardware subyacente
en el que se ejecutará el código. La independencia de la plataforma esencialmente garantiza que
su código se ejecutará de la misma manera en cualquier plataforma/hardware compatible con R.
Machine Translated by Google

28 Introducción a R 891

1.3 Límites de R

Si bien R es un excelente lenguaje de programación destinado a tareas de computación científica y de


propósito general, R tiene su propio conjunto de limitaciones. Una de esas limitaciones es que R tiene
una curva de aprendizaje relativamente más pronunciada que otros lenguajes de programación como Python.
Si bien esto significa un mayor esfuerzo para aprender el idioma, una vez que lo domina, el desarrollo se
vuelve muy rápido en R. Otra limitación importante de R es su ineficiencia en el manejo de grandes
conjuntos de datos. Para conjuntos de datos que tienen unos cientos de MB de tamaño, R puede
funcionar sin problemas, pero tan pronto como el tamaño de los conjuntos de datos aumenta, o el cálculo
requiere la creación de conjuntos de datos intermedios que pueden ocupar una gran cantidad de
memoria, el rendimiento de R comienza a degradarse muy rápido. Si bien la gestión de la memoria y el
trabajo con grandes conjuntos de datos son, de hecho, una limitación de R, esto se puede superar
mediante el uso de ofertas comerciales de R. Además, para muchas de las necesidades de la ciencia de
datos, puede que no sea necesario trabajar con grandes conjuntos de datos.

Plan de 2 capítulos

En esta sección, describimos el lenguaje de programación R y usamos las características y los paquetes
presentes en el lenguaje para fines relacionados con la ciencia de datos. Específicamente, aprenderemos
las construcciones del lenguaje, la programación en R, cómo usar estas construcciones básicas para
realizar tareas de limpieza, procesamiento y manipulación de datos, y usaremos paquetes desarrollados
por la comunidad científica para realizar análisis de datos. Además de trabajar con datos estructurados
(numéricos), también aprenderemos cómo trabajar con datos no estructurados (textuales), ya que R
tiene muchas funciones para manejar ambos dominios de manera eficiente.

Comenzaremos con una discusión sobre las construcciones básicas del lenguaje, como operadores,
tipos de datos, declaraciones condicionales y funciones, y luego discutiremos paquetes específicos que
son relevantes para el análisis de datos y el propósito de investigación.
En cada sección, discutiremos un tema, fragmentos de código y ejercicios relacionados con las sesiones.

2.1 Instalación

Hay varias formas en las que puede trabajar con R. Además del entorno básico de R (que proporciona
el kernel de R y un editor basado en GUI para escribir y ejecutar sentencias de código), la mayoría de
las personas prefieren trabajar con un entorno de desarrollo integrado. (IDE) para R. Uno de estos
entornos gratuitos y populares es RStudio. En esta subsección, demostraremos cómo puede instalar R y
RStudio.
Machine Translated by Google

892 P. Taori y HK Dasararaju

Cuando trabaja en un entorno de equipo o si su proyecto crece en tamaño, a menudo se


recomienda utilizar un IDE. Trabajar con un IDE simplifica enormemente la tarea de desarrollar,
probar, implementar y administrar su proyecto en un solo lugar. Puede optar por utilizar cualquier IDE
que se adapte a sus necesidades específicas.

2.2 R Instalación

R se puede instalar en máquinas basadas en Windows, Mac OS X y Linux. Para instalar R, vaya al
siguiente sitio web: http://cran.r-project.org/ Una vez en el sitio web, seleccione la instalación de R
específica para su sistema. La mayoría de las instalaciones de R vienen con un instalador basado
en GUI que facilita la instalación. Siga las instrucciones en pantalla para instalar R en su sistema
operativo.

Una vez que haya instalado R, se creará un icono de R en el escritorio de su


computadora. Simplemente haga doble clic en el icono para iniciar el entorno R.

Estudio 2.3R

RStudio es un IDE gratuito y de código abierto para el lenguaje de programación R. Puede instalar
RStudio visitando el siguiente sitio web: www.rstudio.com Una vez en la web, descarga la instalación
específica de RStudio para tu sistema operativo. RStudio está disponible para sistemas basados
en Windows, Mac OSX y Linux. RStudio requiere que haya instalado R primero, por lo que primero
deberá instalar R antes de instalar RStudio. La mayoría de las instalaciones de RStudio vienen con
un instalador basado en GUI que facilita la instalación. Siga las instrucciones en pantalla para instalar
RStudio en su sistema operativo.

Una vez que haya instalado RStudio, se creará un icono de RStudio en el escritorio de su
computadora. Simplemente haga doble clic en el icono para iniciar el entorno RStudio.
Hay cuatro componentes principales en la distribución de RStudio:

1. Un editor de texto en la esquina superior izquierda. Aquí es donde puede escribir su código R y
ejecutarlo usando el botón Ejecutar.
2. Consola R integrada en la esquina inferior izquierda. Puede ver el resultado de la ejecución del
código en este panel y también puede escribir comandos R individuales aquí.
3. Entorno R en la esquina superior derecha. Este panel le permite echar un vistazo rápido a los
conjuntos de datos y variables existentes en su entorno de trabajo de R.
4. Panel Misceláneo en la esquina inferior derecha. Este panel tiene múltiples pestañas y proporciona
una variedad de funcionalidades. Dos de las pestañas más importantes de este panel son Gráficos
y Paquetes. Los gráficos le permiten ver los gráficos de la ejecución del código. En la pestaña de
paquetes, puede ver e instalar paquetes R simplemente escribiendo el nombre del paquete (Fig.
28.1).
Machine Translated by Google

28 Introducción a R 893

Figura 28.1 Interfaz de RStudio

2.4 Paquetes R y CRAN

Además del núcleo R, la mayoría de las veces necesitará paquetes en R para realizar su
trabajo. Los paquetes son uno de los componentes más importantes del ecosistema R.
Estaría usando paquetes continuamente a lo largo del curso y en su vida profesional. Lo
bueno de los paquetes R es que puede encontrar la mayoría de ellos en un solo repositorio:
el repositorio CRAN. En RStudio, haga clic en la pestaña Paquetes y luego haga clic en
Instalar. Se abrirá una nueva ventana donde puede comenzar a escribir el nombre del
paquete R que desea instalar. Si el paquete existe en el repositorio de CRAN, encontrará
el nombre correspondiente. Después de eso, simplemente haga clic en Instalar para instalar
el paquete R y sus dependencias también. Esta es una de las formas más fáciles de
instalar y administrar paquetes en su distribución R.
Alternativamente, también puede instalar un paquete desde el símbolo del sistema
usando el comando install.packages . Por ejemplo, si escribe el siguiente comando,
instalará el paquete "e1071" en R:
> instalar.paquetes(”e1071“)

Una cosa no tan buena acerca de los paquetes R es que no hay un solo lugar donde
obtendrá una lista de todos los paquetes en R y lo que hacen. En tales casos, leer la
documentación en línea de los paquetes R es la mejor manera. Puede buscar paquetes
específicos y su documentación en el sitio web de CRAN. Afortunadamente, solo necesitará
un puñado de paquetes para realizar la mayor parte de su trabajo diario.
Para ver el contenido del paquete, escriba:
> biblioteca (ayuda = e1071)
Machine Translated by Google

894 P. Taori y HK Dasararaju

Esto le dará una descripción sobre el paquete, así como todos los disponibles
conjuntos de datos y funciones dentro de ese paquete. Por ejemplo, el comando anterior
producir la siguiente salida:
Información sobre el paquete 'e1071'

Descripción:

Paquete: e1071
Versión: 1.6-8
Título: Funciones misceláneas del Departamento de
Estadística, Teoría de la probabilidad
Grupo (anteriormente: E1071), TU Wien
Importaciones: gráficos, grDevices, clase, estadísticas, métodos,
útiles
sugiere: clúster, mlbench, nnet, randomForest, rpart,
SparseM, xtable, matriz,
MASA
Autores@R: c(persona(dado = ”David“, familia = ”Meyer“,
rol = c(”aut“, ”cre“),
correo electrónico = ”David.Meyer@R-project.org“),
persona(dado = ”Evgenia”,
familia = ”Dimitriadou“, rol = c(”aut“,
”cph“)), persona (dado =
”Kurt“, familia = ”Hornik“, rol = ”aut“),
persona(dado = ”Andreas“,
familia = ”Weingessel“, rol = ”aut“), persona
(dado = ”Friedrich“,
familia = ”Leisch“, rol = ”aut“), persona
(dado = ”Chih-Chung“, familia
= ”Cambiar“, rol = c(”ctb“,”cph“), comentario =
”código libsvm C++“),
persona(dado = ”Chih-Chen“, familia = ”Lin“,
rol = c(”ctb“,”cph“),
comentario = ”código libsvm C++“))
Descripción: Funciones para el análisis de clases latentes, abreviado
transformada de fourier del tiempo,
agrupamiento difuso, máquinas de vectores de soporte,
cálculo de la ruta más corta,
agrupamiento en bolsas, clasificador bayesiano ingenuo,
...
Licencia: GPL-2
LazyLoad: sí
Compilación de necesidades: sí
Empaquetado: 2017-02-01 16:13:21 UTC; Meyer
Autor: David Meyer [autor, cre], Evgenia Dimitriadou
[autor, cph], Kurt Hornik
[aut], Andreas Weingessel [aut], Friedrich
Leisch [autor], Chih-Chung
Chang [ctb, cph] (código libsvm C++),
Chih-Chen Lin [ctb, cph] (libsvm
código C++)
Mantenedor: David Meyer <David.Meyer@R-project.org>
Repositorio: CRAN
Machine Translated by Google

28 Introducción a R 895

Fecha/Publicación: 2017-02-02 12:37:10


Construido: R 3.4.4; x86_64-w64-mingw32; 2018-06-15
19:27:40 UTC; ventanas

Índice:

todas las rutas más cortas Encuentre las rutas más cortas entre todos los nodos en un
Gráfico dirigido
bclust Agrupación en bolsas
bincombinations Combinaciones Binarias
bootstrap.lca Muestras de Bootstrap de resultados de LCA
boxplot.bclust acuerdo Diagrama de caja de perfiles de clúster
de clase Clasificación de comparación de coeficientes
Convenio
cmsignifica Agrupación de medias C difusas
patrón de conteo Contar patrones binarios
cshell ddiscreto Agrupación difusa de C-Shell
Distribución discreta
elemento obsoleto e1071 Funciones obsoletas en el paquete e1071
Extraer elementos de una matriz
índicefclust Índices de clústeres difusos
(Validez/Desempeño
Medidas)
hamming.distancia Distancias de Hamming de vectores
hamming.ventana Calcula los coeficientes de un Hamming
Ventana.
hanning.ventana Calcula los coeficientes de Hanning
Ventana.
hsv_paleta Paleta de colores secuencial basada en HSV
colores
ica Análisis de componentes independientes
imputar Reemplazar valores faltantes
interpolar curtosis Interpolar valores de matriz
curtosis
lca Análisis de clase latente (LCA)
clases de coincidencia Encuentra clases similares en dos vías
Contingencia
MatchControls Buscar grupo de control coincidente
momento Momento estadístico
permutaciones Clasificador bayesiano ingenuo
naiveBayes plot.stft Todas las permutaciones de enteros 1:n
plot.svm plot.tune Trazar transformadas de Fourier de tiempo corto
predict.svm Trazar objetos SVM
Objeto de ajuste de trazado
Método de predicción para el vector de soporte
Máquinas
probplot Gráfica de probabilidad
rbridge Simulación del Puente Browniano
read.matrix.csr Leer/escribir datos dispersos
rectángulo.ventana Calcula los coeficientes de un rectángulo
Ventana.
asimetría Simulación del Proceso Wiener
sigmoidea La Función Logística y Derivados
de Rwiener Oblicuidad
Machine Translated by Google

896 P. Taori y HK Dasararaju

Stft Calcula el Fourier de tiempo corto


Transformación de un vector
svm Máquinas de vectores de soporte
melodía Ajuste de parámetros de funciones usando Grid
Búsqueda
sintonizar.control Parámetros de control para la función Tune
tune.wrapper Conveniencia de las funciones de envoltorio de afinación
escribir.svm Escribir objeto SVM en archivo

Hay más información disponible en las siguientes viñetas en el directorio 'C:/Users/10787/Documents/R/win-library/


3.4/e1071/doc':

svmdoc: Support Vector Machines --- la interfaz para libsvm en el paquete e1071 (fuente, pdf) svminternals: svm()
internals (fuente, pdf)

2.5 Encontrar ayuda en R

La forma más sencilla de obtener ayuda en R es hacer clic en el botón Ayuda de la barra de herramientas.
Alternativamente, si conoce el nombre de la función con la que necesita ayuda, simplemente escriba un
signo de interrogación "?" en el símbolo del sistema seguido del nombre de la función. Por ejemplo, los
siguientes comandos le darán una descripción de la función solve.

> ayuda(resolver) > ?


resolver > ?leer.tabla

A veces no puede recordar el nombre exacto de la función, pero sabe el tema sobre el que necesita
ayuda (p. ej., entrada de datos en este caso). Use la función help.search (sin un signo de interrogación)
con su consulta entre comillas dobles como esta:

> ayuda.buscar(”entrada de datos“)

Otras funciones útiles son "buscar" y "a propósito". La función "buscar" le dice en qué paquete está
algo:
> encontrar(”lowess“)

Por otro lado, "a propósito" devuelve un vector de caracteres que proporciona los nombres de todos
objetos en la lista de búsqueda que coinciden con su consulta (potencialmente parcial):

> a propósito(”lm“)

3 El lenguaje de programación R

A la fecha (16 de junio de 2018), la última versión de R disponible es la versión 3.5. Sin embargo, en este
capítulo, demostramos todos los ejemplos de código R utilizando la versión 3.2, ya que es una de las
versiones más utilizadas. Si bien no hay diferencias drásticas en las dos versiones, puede haber algunas
diferencias menores que deben tenerse en cuenta al desarrollar el código.
Machine Translated by Google

28 Introducción a R 897

3.1 Programación en R

Antes de comenzar con la codificación en R, siempre es una buena idea configurar su directorio de
trabajo en R. El directorio de trabajo en R puede ser cualquier directorio normal en su sistema de
archivos, y es en este directorio donde se almacenarán todos los conjuntos de datos producidos. ser
salvado. De forma predeterminada, R establece el directorio de trabajo como el directorio donde está
instalado R. Puede obtener el directorio de trabajo actual escribiendo el siguiente comando:

> getwd()

Producirá una salida similar a la siguiente:

[1] ”/Usuarios/rdirectorio“

Para cambiar el directorio de trabajo, use el comando setwd() con el nombre del directorio como
argumento:

> setwd('/Usuarios/otroRDirectorio')

Este comando hará que el nuevo directorio sea su directorio de trabajo.


Hay dos formas de escribir código en R: script e interactivo. El modo script es con el que la
mayoría de los programadores estarían familiarizados, es decir, todo el código R se escribe en un
archivo de texto y el archivo luego se ejecuta en un intérprete R. Todos los archivos de código R
deben tener una extensión <dot>R. Esto le indica al intérprete que el archivo contiene un código R.
En el modo interactivo, en lugar de escribir todos los códigos juntos en un archivo, los fragmentos de
código individuales se escriben en un shell de línea de comandos y se ejecutan.
El beneficio del modo interactivo es que brinda retroalimentación inmediata para cada declaración y
hace que el desarrollo del programa sea más eficiente. Una práctica típica es escribir primero
fragmentos de código en el modo interactivo para probar la funcionalidad y luego agrupar todas las
piezas de código en un archivo <dot>R (modo script). RStudio proporciona acceso a ambos modos.
La ventana superior del editor de texto es donde puede escribir código en modo script y ejecutar todo
o parte de él. Para ejecutar un archivo, simplemente haga clic en el botón <Ejecutar> en la barra de
menú y R ejecutará el código contenido en el archivo.
La ventana inferior del editor de texto actúa como un shell interactivo de R. En el modo interactivo,
lo que escribe se ejecuta inmediatamente. Por ejemplo, escribir 1 + 1 responderá con 2.

3.2 Formalidades de sintaxis

Comencemos ahora con la comprensión de la sintaxis de R. Lo primero que se debe tener en cuenta
sobre R es que es un lenguaje que distingue entre mayúsculas y minúsculas. Por lo tanto, variable1 y
VARIABLE1 son dos construcciones diferentes en R. Si bien vimos en los otros lenguajes, como
Python, que la sangría es uno de los mayores cambios con los que los usuarios tienen que lidiar, no
existe tal requisito de sangría en R. El código simplemente fluye, y puede terminar el código con un
punto y coma o simplemente comenzar a escribir un nuevo código desde una nueva línea, y R lo
entenderá perfectamente. Profundizaremos más en estas características a medida que avancemos a
otras secciones.
Machine Translated by Google

898 P. Taori y HK Dasararaju

3.3 Cálculos

Dado que R está diseñado para ser un lenguaje de programación simple, la forma más fácil de usar R es como una
calculadora. Simplemente puede escribir comandos y operaciones en R como lo haría con una calculadora, y R
produce la salida. La idea fundamental aquí es que uno debería poder realizar la mayoría de las tareas de
procesamiento sin preocuparse por la sintaxis de un lenguaje de programación. Por ejemplo, puede simplemente
escribir los siguientes comandos en R para obtener el resultado:

> registro(50)

[1] 3.912023

> 5+3

[1] 8

Se pueden colocar varias expresiones en una sola línea, pero deben estar separadas por punto y coma.

> registro(20); 3*35; 5+2

[1] 2.995732
[1] 105
[1] 7

> piso(5.3)

[15

> techo(5.3) [1] 6

3.4 Comentarios

Se requieren comentarios en cualquier lenguaje de programación para mejorar la legibilidad por parte de los humanos.
Los comentarios son aquellas secciones de código que están destinadas a la comprensión humana y que el intérprete
de R ignora cuando se ejecuta. En R, puede especificar comentarios de una sola línea con un signo de almohadilla (#).

1. Comentario de una sola línea


Un comentario de una sola línea en R comienza con un signo de almohadilla (#). Todo después de la
El intérprete ignora el signo # hasta el final de la línea.

Código

print(”Esta es una línea de código, no una línea de comentarios“)


#print(”Esta es una línea de comentarios“)

Producción

Esta es una línea de código, no una línea de comentarios.


Machine Translated by Google

28 Introducción a R 899

Tenga en cuenta que en el fragmento de código anterior, la primera línea es el código real que se ejecuta, mientras
que la segunda línea es un comentario que el intérprete ignora. Una observación extraña en R es que no tiene soporte
para comentarios de varias líneas.
Entonces, si desea usar comentarios de varias líneas en R, debe comentar individualmente cada línea.
Afortunadamente, los IDE como RStudio ofrecen una solución para esta limitación. Por ejemplo, en Windows puede
usar CTRL + SHIFT + C para comentar varias líneas de código en RStudio.

3.5 Variables

Hay algunos tipos de datos incorporados en R para manejar diferentes tipos de datos: enteros, punto flotante, cadena,
valores booleanos, fecha y hora. Similar a Python, una característica interesante de R es que no necesita mencionar
qué tipo de datos contiene una variable; dependiendo del valor asignado, R asigna automáticamente un tipo de datos
a la variable.
Piense en una variable como un marcador de posición. Es cualquier nombre que puede contener un valor y ese
valor puede variar con el tiempo (de ahí el nombre variable). En otros términos, las variables son ubicaciones
reservadas en la memoria de su máquina para almacenar diferentes valores. Cada vez que especifica una variable,
en realidad está asignando espacio en la memoria que contendrá valores u objetos en el futuro. Estas variables siguen
existiendo hasta que se ejecuta el programa. Dependiendo del tipo de datos que tenga una variable, el intérprete
asignará la cantidad de memoria requerida para esa variable. Esto implica que la memoria de una variable puede
aumentar o disminuir dinámicamente según el tipo de datos que tenga la variable en ese momento. Usted crea una
variable especificando un nombre a la variable y luego asignando un valor a la variable usando el operador de signo
igual (=).

Código

variable1 = 100 # Variable que contiene un valor entero


distancia = 1500.0 # Variable que contiene valor de punto flotante

instituto = ”ISB“ # Variable que contiene una cadena

Producción

100
1500.0
ES B

Código

un = 0
segundo = 2

c = ”0“
imprimir(a + b)
imprimir(c)

Producción

2
"0"
Machine Translated by Google

900 P. Taori y HK Dasararaju

3.6 Convenciones de nomenclatura para una variable

Aunque una variable puede tener casi cualquier nombre, hay ciertas convenciones de nomenclatura que
deben seguirse:

• Los nombres de variables en R distinguen entre mayúsculas y minúsculas. Esto significa que Variable y variable son
dos variables diferentes.

• Un nombre de variable no puede comenzar con un número. •


El resto de la variable puede contener cualquier combinación de letras, dígitos y
caracteres de subrayado.

• Un nombre de variable no puede contener espacios en blanco.

El valor de las variables se puede inicializar de dos formas:

> x <- 5
>y=5

> imprime(x)
[1] 5

> imprimir(y)
[1] 5

[1] indica que x e y son vectores y 5 es el primer elemento del vector.


Observe el uso de <- para el operador de asignación. Las asignaciones en R se realizan convencionalmente
usando el operador <- (aunque también puede usar el operador =). Para la mayoría de los casos, no hay
diferencia entre los dos; sin embargo, en algunos de los casos especializados, puede obtener diferentes
resultados según el operador que esté utilizando. El operador de asignación oficial y correcto que se respalda
es el operador <-, y animamos a los lectores a usar el mismo para su codificación también.

3.7 Tipos de datos básicos

Además de los tipos de datos complejos, R tiene cinco tipos de datos atómicos (básicos). Son numéricos, de
caracteres, enteros, complejos y lógicos, respectivamente. Vamos a entenderlos uno por uno.

Los números se utilizan para contener valores numéricos. Hay cuatro tipos de números que se admiten
en R: enteros, enteros largos, punto flotante (decimales) y números complejos.

1. Entero: un tipo entero puede contener valores enteros como 1, 4, 1000 y ÿ52,534.
En R, los enteros tienen una longitud de bits de 32 bits. Esto significa que un tipo de datos entero puede
contener valores en el rango de ÿ2,147,483,648 a 2,147,483,647. Un número entero se almacena
internamente como una cadena de dígitos. Un número entero solo puede contener dígitos y no puede
tener ningún carácter o puntuación como $.

Código

> 120+200
Machine Translated by Google

28 Introducción a R 901

[1] 320
> 180-42
[1] 138 >
15*8 [1] 120

2. Entero largo: los enteros simples tienen un límite en el valor que pueden contener.
A veces surge la necesidad de mantener un valor que está fuera del rango de números enteros. En tal
caso, hacemos uso de tipos de datos Long Integer. Los tipos de datos enteros largos no tienen un límite
en la longitud de los datos que pueden contener. Una desventaja de estos tipos de datos es que
consumen más memoria y son lentos durante los cálculos. Use tipos de datos de enteros largos solo
cuando tenga la necesidad absoluta de hacerlo.

Código

> 2**32 [1]


4294967296

3. Números de coma flotante: los tipos de datos de coma flotante se utilizan para contener valores
decimales, como fracciones.

4. Números complejos: los tipos de datos de números complejos se utilizan para contener números
complejos. En la ciencia de datos, los números complejos rara vez se usan y, a menos que se trate de
matemáticas abstractas, no habría necesidad de usar números complejos.

3.8 Vectores

Siempre que defina una variable en R que pueda contener uno de los tipos de datos atómicos anteriores, lo
más probable es que esa variable sea un vector. Un vector en R es una variable que puede contener uno o
más valores del mismo tipo (numérico, carácter, lógico, etc.). Un vector en R es análogo a una matriz en C
o Java con la diferencia de que no tenemos que crear la matriz explícitamente y tampoco tenemos que
preocuparnos por aumentar o disminuir la longitud de la matriz. Una razón principal detrás de tener vectores
como la variable básica en R es que la mayoría de las veces, el programador o analista no estaría
trabajando con un solo valor sino con un conjunto de valores en un conjunto de datos (piense en una
columna en una hoja de cálculo). Por lo tanto, para imitar ese comportamiento, R implementa la variable
como un vector. Un vector también puede contener valores únicos (en tal caso, sería un vector de longitud
uno). Por ejemplo, todas las variables a continuación son vectores de longitud uno (ya que contienen solo
un elemento):

> un <- 4
> un
[1] 4

> cadena <- ”abc“


> calle
[1] ”abc“

> booleano <- VERDADERO


> booleano
[1] VERDADERO
Machine Translated by Google

902 P. Taori y HK Dasararaju

Si desea combinar múltiples valores para crear un vector, entonces puede usar el operador c en
R. c() significa operador de concatenación, y su trabajo es tomar elementos individuales y crear un
vector uniéndolos. Por ejemplo:

> x <-c(1, 0.5, 4)


>x
[1] 1,0 0,5 4,0

> y <- c(”a“,”b“,”c“)


>y
[1] ”a“ ”b“ ”c“

> z <- vector(”numérico“,longitud=50)


> con
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000
[34] 00000000000000000

Tenga en cuenta que en la última declaración, usamos la función vector() para crear una función.
Vector es una función incorporada en R que creará un vector de un tamaño específico (especificado
por argumento de longitud) y tipo (especificado por numérico). Si no especificamos valores
predeterminados para el vector, tomará valores predeterminados para el tipo de vector especificado
(por ejemplo, el valor predeterminado para numérico es 0).
Puede realizar una variedad de funciones en el vector. Por ejemplo: #Para
encontrar la clase de un vector, use la función de clase

> clase(y) [1]


”personaje“

> #Longitud de un vector > longitud(y)


[1] 3

Esta representación de datos en un vector le permite hacer preguntas matemáticas


fácilmente. Por ejemplo:

> media(x) [1]


1,833333 > máx(x)
[1] 4 > cuantil(x) 0 %
25 % 50 % 75 % 100
%

0,50 0,75 1,00 2,50 4,00

Los vectores son bastante flexibles en R y puede crearlos de varias maneras.


Un operador muy útil en R para vectores es el operador de secuencia (:). Un operador de secuencia
funciona como un operador de incremento que comenzará con un valor inicial, se incrementará en
pasos (el valor predeterminado es 1) y se detendrá en un valor terminal. Al hacerlo, el operador de
incremento creará un vector desde el valor inicial hasta el terminal. Por ejemplo:
Machine Translated by Google

28 Introducción a R 903

> x <- 1:50


>x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22
[23] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
43 44
[45] 45 46 47 48 49 50 >
secuencia(0,8,0.2)
[1] 0,0 0,2 0,4 0,6 0,8 1,0 1,2 1,4 1,6 1,8 2,0 2,2 2,4 2,6
2.8 3.0
[17] 3,2 3,4 3,6 3,8 4,0 4,2 4,4 4,6 4,8 5,0 5,2 5,4 5,6 5,8 6,0
6.2
[33] 6,4 6,6 6,8 7,0 7,2 7,4 7,6 7,8 8,0

Tenga en cuenta que en el comando, llamamos explícitamente a la función seq() (es similar
al operador de secuencia). La función seq() toma el valor inicial y el valor terminal como 0 y 8,
respectivamente, y crea un vector de valores incrementándolos en pasos de 0.2.

Si queremos generar un vector de valores repetitivos, podemos hacerlo fácilmente mediante


utilizando la función rep(). Por ejemplo:

> rep(4,9) [1] 4


4 4 4 4 4 4 4 4 > rep(1:7,10)

[1] 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2
345
[34] 67123456712345671234567123456
7123
[67] 4567 >
rep(1:7,cada=3) [1] 1 1 1 2
22333444555666777

En el primer caso, la función rep repitió el valor 4 nueve veces. En el segundo comando, rep
repitió la secuencia 1 a 7 diez veces. En el tercero, creamos un vector donde cada valor del 1
al 7 se repetía tres veces.

3.9 Aritmética y procesamiento de vectores

Puede realizar las operaciones aritméticas en vectores de manera similar a las operaciones
con variables. Aquí, las operaciones se realizan en cada elemento correspondiente:
> x <-c(1, 0.5, 4)
>x
[1] 1.0 0.5 4.0 > y <-
c(5,3,2)
>y
[1] 5 3 2 >
x+y [1] 6.0 3.5
6.0

¿Qué pasaría en el siguiente caso?


Machine Translated by Google

904 P. Taori y HK Dasararaju

>x
[1] 1.0 0.5 4.0 > y <-
c(5,3,2,1)
>y
[1] 5 3 2 1 > x+y
[1] 6.0 3.5 6.0 2.0

Mensaje de
advertencia: En x + y: la longitud del objeto más grande no es un múltiplo de la
longitud del objeto más corto Es de esperar que haya un error ya que los vectores no tienen
la misma longitud. Sin embargo, aunque recibimos una advertencia que decía que los vectores
no tienen la misma longitud, R realiza la operación de tal manera que cuando termina el vector
de longitud más corta, todo el proceso comienza nuevamente desde el primer elemento para el
vector corto. Esto significa que x en nuestro caso es el vector con tres elementos.
Mientras que los primeros tres elementos de x se suman a los tres elementos de y, pero para el
cuarto elemento de y, el elemento de x es el primer elemento (ya que el proceso se repite para
el vector de longitud más corta). Este es un comportamiento peculiar de R con el que hay que
tener cuidado. Si no tenemos cuidado con la longitud de los vectores al realizar operaciones
aritméticas, los resultados pueden ser erróneos y pasar desapercibidos (ya que R no produce
ningún error).
Dado que un vector puede verse como una matriz de elementos individuales, podemos
extraer elementos individuales de un vector y también acceder a subvectores de un vector. La
sintaxis para hacerlo es muy similar a la que usamos en Python, es decir, especificar el nombre
del vector seguido del índice entre corchetes. Un punto a tener en cuenta es que los índices en
R comienzan desde 1 (y no desde 0 como en Python). Por ejemplo:

> un <- c(1,3,2,4,5,2,4,2,6,4,5,3)


> un
[1] 1 3 2 4 5 2 4 2 6 4 5 3

> #Extraer elementos individuales de un vector > a[1] [1] 1

> #Acceder a múltiples valores de un vector > b <- a[c(1,4)]


>b

[1] 1 4

> d <- a[1:4] > d

[1] 1 3 2 4

Digamos que desea seleccionar un subconjunto de un vector basado en una condición.

> cualquier vector <- a>3 >


a[cualquier vector] [1] 4 5 4 6
45

> x <- 1:30


Machine Translated by Google

28 Introducción a R 905

> x[x>5] [1]


678 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
26 27
[23] 28 29 30

También puede aplicar operaciones de teoría de conjuntos (además de la aritmética habitual


operadores) sobre vectores.

> conjuntoA <- c(”a”, “b”, “c”, “d”, “e”) > conjuntoB <- c(”d”,
“e”, “f”, “g”)

> unión(conjuntoA, conjuntoB)


[1] "a" "b" "c" "d" "e" "f" "g"

> intersección(conjuntoA, conjuntoB)


[1] "d" "e"

> setdiff(setA,setB) [1] ”a“ ”b“ ”c“

3.10 Listas

Si bien los vectores en R son una forma conveniente de jugar con varios valores al mismo tiempo, a menudo
surge la necesidad de tener valores de diferentes tipos en un vector. Por ejemplo, podríamos querer tener
valores numéricos y de caracteres en la misma variable. Como no podemos hacerlo con vectores, el tipo de
datos que viene a nuestro rescate es lista. Una lista en R no es más que un tipo especial de vector que
puede contener diferentes tipos de datos. Definimos list con una función list() en R.

> x <- lista(1","c","FALSO)


>x
[[1]]
[1] 1
[[2]] [1]
”c“ [[3]]

[1] FALSO

> x[3]
[[1]]
[1] FALSO

> x[1:2] [[1]]


[1] 1 [[2]] [1]
”c“

En el caso anterior, definimos una lista x que contiene tres elementos: numérico 1,
carácter c, y un valor lógico FALSO.
Machine Translated by Google

906 P. Taori y HK Dasararaju

Luego podemos acceder a elementos individuales de una lista de la misma manera que podemos
hacerlo con los vectores. Además de contener tipos de datos básicos, una lista también puede
contener tipos de datos complejos (como listas anidadas). Por ejemplo:

> x <- lista(col1=1:3, col2 = 4)


>x
$col1
[1] 1 2 3 $col2
[1] 4

> x[1]
$col1 [1]
123

> x[[1]] [1] 1


23

> x$col[1] [1] 1


23

> x$col1[2] [1] 2

> x[[1]][2] [1] 2

En el ejemplo anterior, definimos una lista x que contiene dos elementos: col1 y col2. Col1 y col2
son listas en sí mismas: col1 contiene los números 1, 2 y 3; y col2 contiene un solo elemento 4. Puede
acceder a elementos individuales de una lista o elementos con los elementos usando corchetes y el
índice de elementos.

3.11 Matrices

Las listas y los vectores son objetos unidimensionales, es decir, un vector puede contener varios
valores y podemos pensar en él como una sola columna en una hoja de cálculo. Pero si necesitamos
tener múltiples columnas, entonces los vectores no son una forma conveniente de solucionarlo.
Para esto, R proporciona dos estructuras de datos diferentes a nuestra disposición: matrices y marcos
de datos. Primero hablaremos sobre las matrices y luego pasaremos a los marcos de datos.
Una matriz en R no es más que un objeto multidimensional donde cada dimensión es una matriz.
Hay varias formas de crear una matriz en R:

> m1 <- matriz(nrow=4, ncol=5)

> m1
[,1] [,2] [,3] [,4] [,5]
[1,] NA NA NA NA NA
[2,] NA NA NA NA NA
[3,] NA NA NA NA NA
Machine Translated by Google

28 Introducción a R 907

[4,] NA NA NA NA NA

> tenue(m1)
[1] 4 5

> m1 <- matriz(1:10,nrow=2, ncol=5)


> m1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10

> tenue(m1)
[1] 2 5

> matriz(datos=c(1, 2, 3, 4), porfila=VERDADERO, nfila=2)


[,1] [,2]
[1,] 1 2
[2,] 3 4

En el primer ejemplo, creamos una matriz de 4*5 (donde especificamos el número de


filas por nfila y número de columnas por argumento ncol , respectivamente) llamando
la función matricial. Dado que no especificamos ningún valor para ser completado para el
matriz, tenía todos los valores NA (valores predeterminados). Si queremos identificar las dimensiones
de una matriz (sus filas y columnas), entonces podemos hacer uso de la función dim().
En el segundo ejemplo, creamos una matriz de 2*5 y también especificamos los valores que
debían ser poblados en la matriz (valores de 1:10 especificados por la secuencia). los
los valores se rellenarían por columnas (es decir, la primera columna obtendrá los valores seguidos
por la segunda columna y así sucesivamente). Si quisiéramos llenar valores por fila entonces tenemos que
especifique el argumento byrow=TRUE (como hicimos en el tercer ejemplo).
Al igual que puede acceder a elementos individuales de un vector, podemos acceder a filas,
columnas y elementos individuales de una matriz usando la notación similar para vectores.
Por ejemplo:

> x<- matriz(1:10,2,5)

>x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10

> x[1,1]
[1] 1

> x[1,]
[1] 1 3 5 7 9

> x[,2]
[1] 3 4

A menudo puede suceder que tengamos algunos vectores a nuestra disposición y


desea crear una matriz combinando esos vectores. Esto se puede hacer haciendo
Machine Translated by Google

908 P. Taori y HK Dasararaju

uso de los operadores rbind y cbind . Mientras que rbind unirá las columnas por fila, cbind unirá
las columnas de otra manera. Por ejemplo:

> x<- 1:6


>x
[1] 1 2 3 4 5 6

> y <- 12:17


>y
[1] 12 13 14 15 16 17

> cbind(x,y)
xy [1,]
1 12 [2,] 2 13
[3,] 3 14 [4,] 4
15 [5,] 5 16
[6,] 6 17

> rbind(x,y) [,1] [,2]


[,3] [,4] [,5] [,6]
x123456
y 12 13 14 15 16 17

Además de la aritmética habitual, las matrices resultan útiles cuando tenemos que realizar
aritmética matricial. El uso real de las matrices ocurre en aquellas situaciones en las que los datos
son de naturaleza numérica y estamos tratando con un gran conjunto de números sobre los que
queremos realizar cálculos aritméticos de matrices. Por diseño, las matrices tienen un alcance
limitado fuera de los números, ya que no están diseñadas para ser muy útiles para nada más que
datos numéricos. Si queremos explotar la verdadera capacidad de hoja de cálculo que
experimentamos en Excel, entonces necesitamos usar marcos de datos en R.

3.12 Trama de datos

Una razón principal por la que Excel es muy útil para nosotros es que todo está dispuesto en una
estructura tabular ordenada, y esto nos permite realizar una variedad de operaciones en los datos
tabulares. Además, también podemos contener cadenas, lógicos y otros tipos de datos. Esta
capacidad no se pierde para nosotros en R y, en cambio, la proporciona el marco de datos en R.

Los datos tabulares en R se leen en un tipo de estructura de datos conocida como marco de
datos. Todas las variables en un marco de datos se almacenan como columnas separadas y esto
es diferente de la matriz en el sentido de que cada columna puede ser de un tipo diferente. Casi
siempre, cuando importa datos de una fuente de datos externa, los importa utilizando un marco de
datos. Se puede crear un marco de datos en R usando la función data.frame().
Machine Translated by Google

28 Introducción a R 909

> x <- data.frame(col1=1:20, col2 = c(V, F, F, T))


>x
col1 col2
1 1 VERDADERO

2 2 FALSO
3 3 FALSO
4 4 VERDADERO

5 5 VERDADERO

6 6 FALSO
7 7 FALSO
8 8 VERDADERO

9 9 VERDADERO

10 10 FALSO
11 11 FALSO
12 12 VERDADERO
13 13 VERDADERO
14 14 FALSO
15 15 FALSO
16 16 VERDADERO
17 17 VERDADERO
18 18 FALSO
19 19 FALSO
20 20 VERDADERO

> nfila(x)
[1] 20
> ncol(x)
[1] 2

> #Comprobar la estructura de un marco de datos


> cadena(x)
'marco de datos': 20 obs. de 2 variables:
$ col1: int 1 2 3 4 5 6 7 8 9 10 ...
$ col2: alojamiento VERDADERO FALSO FALSO VERDADERO VERDADERO FALSO...

En el primer fragmento de código, especificamos que estamos creando un marco de datos que
tiene dos columnas (col1 y col2). Para encontrar el número de filas y columnas en un
marco de datos, usamos los argumentos nrow() y ncol(), respectivamente. Para comprobar el
estructura de un marco de datos (número de observaciones, número y tipos de columnas),
hacemos uso de la función str().
De forma similar a las matrices, podemos seleccionar columnas, filas y valores individuales en un archivo de datos.

cuadro. Por ejemplo:


> x[1]
col1
1 1
2 2
3 3
4 4
5 5
6 6
Machine Translated by Google

910 P. Taori y HK Dasararaju

7 7
8 8
9 9
10 10 11 11

12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20

> x[1,1] [1] 1

> x[,2]
[1] VERDADERO FALSO FALSO VERDADERO VERDADERO FALSO FALSO VERDADERO VERDADERO FALSO
FALSO
[12] VERDADERO VERDADERO FALSO FALSO VERDADERO VERDADERO FALSO FALSO VERDADERO

> x[2:5,1] [1] 2


345

Además, también podemos hacer uso del operador $ para acceder a columnas específicas
de un marco de datos. La sintaxis es dataframe$colname.
x$col1

3.13 Operadores R

Los operadores en R realizan operaciones en dos variables/valores de datos. Según el tipo de


datos que contenga la variable, las operaciones realizadas por el mismo operador pueden
diferir. A continuación se enumeran los diferentes operadores en R:

+ (más): Sumaría dos números o variables si son números. Si las variables


son cadenas, entonces se concatenarían. Por ejemplo:

4 + 6 daría 10. "Hola" + "Hola" daría "Hola".

(menos) Se restarían dos variables.


(multiplicar) Multiplicaría dos variables si son números. Si las variables son cadenas/listas,
entonces se repetirán dicho número de veces. Por ejemplo:

3 * 6 daría 18. "ab" * 4 daría "abababab".

** (potencia) Calcula x elevado a la potencia y.


Machine Translated by Google

28 Introducción a R 911

4 ** 3 daría 64 (es decir, 4 * 4 * 4).

/ (dividir) Sería dividir x por y. %/%


(división de piso) Daría el piso en una operación de división.

7 %/% 2 daría 3.

% %(módulo) Devuelve el resto de la división

8 %% 3 da 2. ÿ25,5 %% 2,25 da 1,5.

< (menor que) Devuelve si x es menor que y. Todos los operadores de comparación devuelven True
o falso. Tenga en cuenta las mayúsculas de estos nombres.

5 < 3 da Falso y 3 < 5 da Verdadero.

> (mayor que) Devuelve si x es mayor que y

5 > 3 devuelve Verdadero. Si ambos operandos son números, primero se convierten a un tipo
común. De lo contrario, siempre devuelve False.

<= (menor o igual que) Devuelve si x es menor o igual que y

x = 3; y = 6; x <= y devuelve Verdadero.

>= (mayor o igual que) Devuelve si x es mayor o igual que y

x = 4; y = 3; x >= 3 devuelve Verdadero.

== (igual a) Compara si los objetos son iguales

x = 2; y = 2; x == y devuelve Verdadero. x
= 'cadena'; y = 'stR'; x == y devuelve Falso. x =
'cadena'; y = 'cadena'; x == y devuelve Verdadero.

!= (no igual a) Compara si los objetos no son iguales

x = 2; y = 3; x != y devuelve Verdadero.

! (Booleano NOT) Si x es Verdadero, devuelve Falso. Si x es Falso, devuelve Verdadero.

x = Verdadero; no x devuelve Falso.

&& (Y booleano) x e y devuelve Falso si x es Falso, de lo contrario devuelve la evaluación de


y.

x = Falso; y = Verdadero; xey devuelve Falso ya que x es Falso.

|| (O booleano) Si x es Verdadero, devuelve Verdadero, de lo contrario, devuelve la evaluación de y.

x = Verdadero; y = Falso; x o y devuelve Verdadero.


Machine Translated by Google

912 P. Taori y HK Dasararaju

4 declaraciones condicionales

Después de la discusión de variables y tipos de datos en R, centrémonos ahora en el segundo bloque de construcción
de cualquier lenguaje de programación, es decir, declaraciones condicionales.
Las declaraciones condicionales son ramas en un código que se ejecutan si una condición asociada con las

declaraciones condicionales es verdadera. Puede haber muchos tipos diferentes de declaraciones condicionales; sin
embargo, los más destacados son si, mientras y para. En las siguientes secciones, analizamos estas declaraciones
condicionales.

4.1 La sentencia If

Usamos un bucle if siempre que sea necesario evaluar una condición una vez. Si la condición se evalúa como
verdadera, entonces se ejecuta el bloque de código asociado con la condición if, de lo contrario, el intérprete omite el

bloque de código correspondiente. La condición, junto con el conjunto de instrucciones asociado, se denomina bucle
if o bloque if.
Además de la condición if, también podemos especificar un bloque else que se ejecuta si la condición if no tiene éxito.
Tenga en cuenta que el bloque else es completamente opcional.
Código

x <- 0 if
(x < 0)
{ print(”Número negativo“) } else if (x >
0) { print(”Número positivo“) } else
print(”Cero“)

Producción

[1] ”Cero“

4.2 El ciclo while

Mientras que un bucle if le permite evaluar la condición una vez, el bucle while le permite evaluar una condición varias
veces dependiendo de un contador o variable que realiza un seguimiento de la condición que se está evaluando. Por
lo tanto, puede ejecutar el bloque de instrucciones asociado varias veces en un bloque while.

Código

un <- 10
while (a>0)
{ imprimir(a)
a<-a-1
}
Machine Translated by Google

28 Introducción a R 913

Producción

[1] 10 [1]
9 [1] 8
[1] 7 [1]
6 [1] 5
[1] 4 [1]
3 [1] 2
[1] 1

4.3 Bucle For

En muchos sentidos, el bucle for es similar a un bucle while en el sentido de que le permite iterar el bucle varias veces
dependiendo de la condición que se esté evaluando.
Sin embargo, el ciclo for es más eficiente en el sentido de que no tenemos que contar los incrementos o decrementos
del contador de la condición que se está evaluando. En el ciclo while, el usuario tiene la responsabilidad de incrementar/
decrementar el contador; de lo contrario, el ciclo se ejecuta hasta el infinito. Sin embargo, en un bucle for, el propio
bucle se encarga del incremento/decremento.

Código

para (j en 1:5){ imprimir(j)

Producción

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

En el fragmento de código a continuación, utilizamos la función seq_along() que actúa como una secuencia de
valores no numéricos. La función iterará a través de cada uno de los valores en el vector x especificado, y el ciclo de
impresión luego imprimirá los valores.

x <- c(”a“,”c“,”d“) for (i in


seq_along(x)){ print(x[i])

} [1] ”a“ [1]


”c“ [1] ”d“

Alternativamente, podemos escribir el mismo código de la siguiente manera:

for (letra en x){ print(letra)

}
Machine Translated by Google

914 P. Taori y HK Dasararaju

[1] ”a“ [1]


”c“ [1] ”d“

4.4 Entrada y salida de archivos

La mayoría de las veces, además de usar variables y estructuras de datos integradas, estaríamos
trabajando con archivos externos para obtener datos de entrada y escribir la salida. Para este propósito,
R proporciona funciones para abrir y cerrar archivos. Hay una variedad de funciones para leer datos en
R. read.table y read.csv son las más comunes para tablas, readLines para datos de texto y load para
espacios de trabajo. De manera similar, para escribir, use write.table y write.lines.

read.table es la función más versátil y poderosa para leer datos de fuentes externas. Puede usarlo
para leer datos de cualquier tipo de archivo de texto delimitado, como tabulación, coma, etc. La sintaxis
es la siguiente:

> datos de entrada <- leer.tabla(”datosdeentrada.txt“,encabezado=VERDADERO)

En el fragmento de código anterior, leemos en un archivo inputdata.txt en un marco de datos de


entrada de datos. Al especificar el argumento header=TRUE, estamos especificando que el archivo de
entrada contiene la primera línea como encabezado.
Si bien también puede importar datos usando la función read.table, existen
funciones para archivos csv y excel:

> titanicdata <- read.csv(”train.csv“) > datafile1 <-


read.table(”train.csv“,header=TRUE,sep=”,“)

Al igual que las funciones para leer archivos en R, existen funciones para escribir marcos de datos en
R. Estos son algunos de los ejemplos más comunes que encontrará. Esta lista no es exhaustiva y hay
muchas más funciones disponibles para trabajar con diferentes tipos de archivos.

> escribir.csv(datos titánicos,”D://archivo1.csv“)

En el fragmento de código anterior, escribimos el contenido del marco de datos titanicdata para
un archivo de salida (file1.csv) en la unidad D.

5 Función

Si bien R es un gran lenguaje de programación con una serie de funciones integradas (como las de
imprimir, leer y escribir archivos), a menudo necesitará escribir su propia funcionalidad que no está
disponible en ningún otro lugar (por ejemplo, puede quiere escribir una pieza específica de lógica
relacionada con su negocio). Para tales casos, en lugar de volver a escribir el mismo código en varios
lugares del código, hacemos uso de funciones. Las funciones no son más que piezas de código
reutilizables que deben escribirse
Machine Translated by Google

28 Introducción a R 915

una vez y luego se pueden llamar usando sus nombres en otra parte del código. Cuando necesitamos crear una
función, debemos darle un nombre y el bloque de código asociado que se ejecutará cada vez que se llame a la
función. Un nombre de función sigue las mismas convenciones de nomenclatura que un nombre de variable. Cualquier

función se define usando la función de palabra clave. Esto le dice al intérprete que la siguiente pieza de código es una
función. Después de la función, escribimos los argumentos que la función esperaría entre paréntesis. A continuación,
escribiríamos el bloque de código que se ejecutaría cada vez que se llamara a la función.

En el fragmento de código a continuación, definimos una función llamada func1 que toma dos argumentos a y b.
El cuerpo de la función hace una suma de los argumentos a y b que recibe la función.

Código

func1 <- función(a,b){ a+b

} func1(5,10) #llamar a la función llamando al nombre de la función y proporcionando los


argumentos

Producción

[1] 15

Código

cuadrado.it <- función(x) {


cuadrado <- x * X
retorno(cuadrado)
}

Producción

cuadrado.it(5) [1]
25

En el fragmento de código mencionado anteriormente, creamos una función "square.it" usando la sintaxis de la
función. En este caso, la función espera un argumento y hace un cuadrado de ese argumento. La instrucción return()
pasará el valor calculado a la línea de llamada en el código (la línea o variable que llamó a la función). Tenga en
cuenta que los nombres dados en la definición de la función se denominan parámetros, mientras que los valores que
proporciona en la llamada a la función se denominan argumentos.

6 Lectura adicional

Hay muchos recursos gratuitos (libros y sitios web en línea, incluida la propia documentación de R) disponibles para
obtener más información sobre R y los paquetes utilizados en R. Como se mencionó anteriormente, dado que R es
una plataforma de código abierto, muchos desarrolladores siguen creando nuevos paquetes y agregan al repositorio
R de forma frecuente. La mejor manera de conocerlos y aprenderlos es consultar la documentación respectiva enviada
por varios autores de paquetes.
Machine Translated by Google

capitulo 29
Introducción a Python

Peeyush Taori y Hemanth Kumar Dasararaju

1. Introducción

A medida que la ciencia de datos se adopta cada vez más en la industria, la demanda de
científicos de datos también crece a un ritmo asombroso. Los científicos de datos son una raza
rara de "unicornios" que deben ser omniscientes y, según la cultura popular, un científico de
datos es alguien que sabe más estadísticas que un programador y más programación que un
estadístico. Una de las herramientas más importantes en el conjunto de herramientas de un
científico de datos es el conocimiento de un lenguaje de programación de propósito general que
le permite realizar tareas de limpieza de datos, manipulación de datos y análisis estadístico con
facilidad. Dichos requisitos exigen lenguajes de programación que sean lo suficientemente fáciles
de aprender y, sin embargo, lo suficientemente potentes para realizar tareas de codificación complejas.
Dos de estos lenguajes de programación de facto para la ciencia de datos utilizados en la
industria y la academia son Python y R.
En este capítulo, nos enfocamos en cubrir los conceptos básicos de Python como lenguaje
de programación. Nuestro objetivo es cubrir los aspectos importantes del lenguaje que son más
críticos desde la perspectiva de un científico de datos en ciernes. Se puede obtener un
conocimiento detallado de Python a través de una excelente colección de libros y recursos de
Internet. Aunque la experiencia previa en programación es útil, este capítulo no requiere ningún
conocimiento previo de programación.

P. Taori )
(London Business School, Londres, Reino Unido
Correo electrónico: taori.peeyush@gmail.com

Escuela de
Negocios de la India HK Dasararaju, Hyderabad, Telangana, India

© Springer Nature Switzerland AG 2019 B. 917


Pochiraju, S. Seshadri (eds.), Essentials of Business Analytics, International Series
in Operations Research & Management Science 264, https://doi.org/
10.1007/978-3-319-68837 -4_29
Machine Translated by Google

918 P. Taori y HK Dasararaju

1.1 ¿Qué es Python?

Python es un lenguaje de programación de propósito general y alto nivel que se introdujo por primera
vez en el mundo a fines de la década de 1980. Aunque el nombre del lenguaje parece un poco extraño
al principio, el lenguaje (o sus conceptos) no se parece en nada a un Python real y, en cambio, recibió
su nombre de la inspiración de su creador Van Guido Rossum de una serie de comedia de la BBC
llamada "Monty El circo volador de Python.
Inicialmente, Python se recibió principalmente como un lenguaje de secuencias de comandos de
propósito general, y se usó bastante ampliamente como lenguaje de elección para la programación web
y con fines de secuencias de comandos. Durante la última década, se dio cuenta de que Python podría
ser una gran herramienta para la comunidad de computación científica y, desde entonces, el lenguaje
ha experimentado un crecimiento explosivo en las aplicaciones de análisis de datos y computación científica.
Python es un lenguaje de código abierto que permite que cualquier persona contribuya al entorno
de Python creando paquetes y poniéndolos a disposición de otros usuarios. Python tiene una comunidad
científica bastante grande y se usa en una variedad de entornos, como investigación financiera,
desarrollo de algoritmos, precios de opciones y derivados, modelos financieros y sistemas comerciales.

1.2 ¿Por qué Python para la ciencia de datos?

Como se indicó al principio, Python es uno de los lenguajes de facto en lo que respecta a la ciencia de
datos. Hay varias razones por las que Python es un lenguaje tan popular entre los científicos de datos.
Algunas de esas razones se enumeran a continuación:

• Python es un lenguaje de programación de propósito general y alto nivel que se puede utilizar para
diversas tareas de programación, como web scraping, recopilación de datos, limpieza y manipulación
de datos, desarrollo de sitios web y para fines de análisis estadístico y aprendizaje automático. • A
diferencia de otros lenguajes de programación de alto nivel, Python es extremadamente fácil de
aprender e implementar, y no requiere un título en informática para convertirse en un experto en
programación Python.

• Python es un lenguaje de programación orientado a objetos. Significa que todo en Python es un objeto.
El beneficio principal de usar un lenguaje de programación orientado a objetos es que nos permite
pensar en la resolución de problemas de una manera más simple y real, y cuando el código se
vuelve demasiado engorroso, los lenguajes orientados a objetos son la mejor manera de hacerlo. •
Python es un lenguaje de programación de código abierto. Esto implica que una gran comunidad de
desarrolladores contribuye continuamente al ecosistema de Python. • Python tiene un ecosistema
excelente que se compone de miles de módulos y bibliotecas (funciones preempaquetadas) que no
requieren reinventar la rueda, y la mayoría de las tareas de programación se pueden manejar
simplemente llamando funciones en uno de estos paquetes. Esto reduce la necesidad de escribir
cientos de líneas de código y hace que el desarrollo sea más fácil y rápido.
Machine Translated by Google

29 Introducción a Python 919

• Python es un lenguaje interpretado que es independiente de la plataforma. En comparación


con algunos de los otros lenguajes de programación, no tiene que preocuparse por el
hardware subyacente en el que se ejecutará el código. La independencia de la
plataforma esencialmente garantiza que su código se ejecutará de la misma manera en
cualquier plataforma/hardware compatible con Python.

1.3 Límites de Python

Si bien Python es un excelente lenguaje de programación destinado a tareas informáticas


científicas y de propósito general, existen algunas limitaciones asociadas con Python. En
su mayor parte, estas limitaciones no preocupan a los investigadores. Aunque hay varios
paquetes estadísticos y econométricos disponibles para Python que facilitan mucho el
análisis, es posible que haya algunas funciones específicas que no estén disponibles en
Python. En tales casos, las funciones pueden escribirse fácilmente para implementar la
funcionalidad y distribuirse entre la comunidad para su uso. Alternativamente, Python se
puede integrar con otros lenguajes/plataformas de programación, como R, para compensar
cualquier funcionalidad que esté disponible en otras plataformas.

2 Instalación e interfaz del sistema

Hay varias formas de instalar el entorno de Python y los paquetes relacionados en su


máquina. Una forma es instalar Python y luego agregar los paquetes necesarios uno por
uno. Otro método (recomendado) es trabajar con un entorno de desarrollo integrado (IDE).
Trabajar con un IDE simplifica enormemente la tarea de desarrollar, probar, implementar y
administrar su proyecto en un solo lugar. Hay varios IDE de este tipo disponibles para
Python, como Anaconda y Enthought Canopy, algunos de los cuales son versiones pagas,
mientras que otros están disponibles de forma gratuita con fines académicos. Puede optar
por utilizar cualquier IDE que se adapte a sus necesidades específicas.
En esta sección en particular, vamos a demostrar la instalación y el uso de uno de esos
IDE: Enthought Canopy. Enthought Canopy es un paquete integral del lenguaje Python y
viene precargado con más de 14 000 paquetes. Canopy hace que sea muy fácil instalar/
administrar bibliotecas y también proporciona un entorno GUI ordenado para desarrollar
aplicaciones. En este capítulo, nos centraremos en la instalación de Python usando
Enthought Canopy. A continuación se encuentran las pautas sobre cómo instalar la
distribución de Enthought Canopy.
Machine Translated by Google

920 P. Taori y HK Dasararaju

Fig. 29.1 Python funcionando correctamente en Windows

2.1 Instalación del dosel pensado

Enthought proporciona una licencia académica de distribución de Enthought Canopy que es


de uso gratuito para fines de investigación académica. Deberá registrarse en el sitio web1
utilizando su ID de correo electrónico académico, después de lo cual podrá descargar e
instalar Canopy.

• Vaya a https://www.enthought.com/downloads/ (consultado el 19 de junio de 2018). •


Descargue Canopy Full Installer para el sistema operativo de su elección (Windows/Mac OS
X). • Ejecute el archivo descargado e instálelo aceptando la configuración predeterminada. •
Si está instalando Canopy en OS X, asegúrese de que Xcode esté instalado en su
computadora portátil. Puede verificar si Xcode está instalado iniciando la aplicación
Terminal (Aplicación -> Utilidades). En la Terminal, escribe gcc y presiona enter.

Para verificar si Python está instalado correctamente, abra el símbolo del sistema y escriba
"python". Si Python está instalado correctamente, debería ver un mensaje similar al que se
muestra en la Fig. 29.1.
Al momento de escribir esta sección (19 de junio de 2018), la última versión de Python
disponible es la versión 3.7. Otra versión principal de Python que se usa bastante es la
versión 2.7. En este capítulo, demostramos todos los ejemplos de codificación usando la
versión 2.7 porque la versión 3.7 de Python no es compatible con versiones anteriores. Esto
implica que varios paquetes de Python que se desarrollaron para la versión 2.7 y anteriores
podrían no funcionar muy bien con Python 3.7. Además, la 2.7 sigue siendo una de las
versiones más utilizadas. Si bien no hay diferencias drásticas en las dos versiones, hay
algunas diferencias menores que deben tenerse en cuenta al desarrollar el código.

2.2 Recorrido del dosel

Inicie el icono de Canopy desde su máquina. Hay tres componentes principales en la


distribución de Canopy (Fig. 29.2):

1. Un editor de texto y una consola IPython integrada.


2. Un administrador de paquetes basado en GUI.
3. Documentación del dosel.

1https://www.enthought.com/accounts/registrar (consultado el 19 de junio de 2018)


Machine Translated by Google

29 Introducción a Python 921

Fig. 29.2 Interfaz del dosel

Hablaremos brevemente de cada uno de ellos.

2.2.1 Editor de texto

La ventana del editor tiene tres paneles principales:

1. Panel del explorador de archivos: puede administrar sus archivos de código de Python aquí y organizar
en directorios separados.
2. Panel Editor de código: Editor para escribir código Python.
3. Panel de Python: contiene el shell de IPython y le permite ejecutar el código directamente desde el
editor de código.

2.2.2 Administrador de paquetes

El Administrador de paquetes le permite administrar paquetes existentes e instalar paquetes adicionales


según sea necesario. Hay dos paneles principales en el Administrador de paquetes (Fig. 29.3):

1. Panel de navegación: enumera todos los paquetes disponibles, los paquetes instalados y los
historial de paquetes instalados.
Machine Translated by Google

922 P. Taori y HK Dasararaju

Figura 29.3 Administrador de paquetes

2. Panel principal: este panel le brinda más detalles sobre cada paquete y le permite
gestionar los paquetes a nivel individual.

2.2.3 Explorador de documentación

El navegador de documentación contiene archivos de ayuda para el software Canopy y algunos de


los paquetes de Python más utilizados, como Numpy, SciPy y muchos más.

3 Prácticas con Python

En esta sección, describimos el lenguaje de programación Python y usamos las funciones y los
paquetes presentes en el lenguaje para fines relacionados con la ciencia de datos. Específicamente,
estaríamos aprendiendo las construcciones del lenguaje, la programación en Python, cómo usar
estas construcciones básicas para realizar tareas de limpieza, procesamiento y manipulación de
datos, y usar paquetes desarrollados por la comunidad científica para realizar análisis de datos.
Además de trabajar con datos estructurados (numéricos), también aprenderemos cómo trabajar con
datos no estructurados (textuales) porque Python tiene muchas funciones para manejar ambos
dominios de manera eficiente.
Machine Translated by Google

29 Introducción a Python 923

Discutimos las construcciones básicas del lenguaje, como operadores, tipos de datos,
declaraciones condicionales y funciones, y paquetes específicos que son relevantes para el
análisis de datos y el propósito de investigación. En cada sección, discutimos un tema, fragmentos
de código y ejercicios relacionados con las sesiones.

3.1 Modos de programación

Hay dos formas de escribir los códigos en Python: script e interactivo. El modo de secuencias de
comandos es con el que la mayoría de los programadores estarían familiarizados, es decir, todo
el código de Python se escribe en un archivo de texto y el archivo luego se ejecuta en un intérprete
de Python. Todos los archivos de código de Python deben tener una extensión ".py" . Esto le
indica al intérprete que el archivo contiene código de Python. En el modo interactivo, en lugar de
escribir todo el código en un solo archivo, los fragmentos individuales de código se escriben en un
shell de línea de comandos y se ejecutan. El beneficio del modo interactivo es que brinda
retroalimentación inmediata para cada declaración y hace que el desarrollo del programa sea más
eficiente. Una práctica típica es escribir primero fragmentos de código en modo interactivo para
probar la funcionalidad y luego agrupar todas las piezas de código en un archivo .py (modo Script).
En Thought Canopy proporciona acceso a ambos modos. La ventana superior del editor de texto
es donde puede escribir código en modo script y ejecutar todo o parte de él.
Para ejecutar un archivo, simplemente haga clic en el botón Ejecutar en la barra de menú y Python
ejecutará el código contenido en el archivo.
La ventana inferior del editor de texto actúa como el shell interactivo de Python. En el modo
interactivo, lo que escribes se ejecuta inmediatamente. Por ejemplo, escribir 1 + 1 responderá con
2.

3.2 Formalidades de sintaxis

Comencemos ahora con la comprensión de la sintaxis de Python. La comunidad de Python se


enorgullece de escribir un código que es obvio de entender incluso para un principiante; esta
forma específica se conoce como "Pythonic" por naturaleza. Si bien es cierto que Python es un
lenguaje muy simple y fácil de aprender y desarrollar, tiene algunas peculiaridades, la mayor de
las cuales es la sangría. Primero comprendamos la importancia de la sangría antes de comenzar
a abordar cualquier otra característica sintáctica del lenguaje. Tenga en cuenta que todos los
códigos a los que se hace referencia en las siguientes secciones se prueban en Python 2.7 en la
consola de Enthought Canopy.
Machine Translated by Google

924 P. Taori y HK Dasararaju

3.3 Sangría

Los espacios en blanco son importantes en Python; esto se conoce como sangría. Python utiliza espacios en blanco
para estructurar el código y marcar interrupciones lógicas en el código. Esto contrasta con otros lenguajes de
programación como R, Java y C que usan llaves para bloques de código. El nivel de sangría de cualquier bloque de
código se usa para determinar si el código es parte del flujo del programa principal o si pertenece a una rama particular
del programa. Los espacios en blanco iniciales, como el tabulador y los espacios, se utilizan para la sangría del
programa, y se considera que un grupo de declaraciones que tienen la misma sangría pertenecen al mismo bloque de
código. Si un bloque de código en particular tiene sangría, entonces debe pertenecer a una rama del programa
principal que debe ejecutarse si se cumple una determinada condición (como si, bucles for; más sobre ellos más
adelante) asociada con el bloque de código. Entendamos la sangría con la ayuda de ejemplos simples:

Código

un = 7
print('El valor de la variable es {}'.format(a))
# ¡Error! Mira el espacio al principio de la línea.
print ('Esto ahora es correcto. El valor de la variable a es {}'.format(a))

Producción

(Una vez que comentas la segunda línea)


Esto ahora es correcto. El valor de la variable a es 7

En la pieza anterior, cada línea es una declaración de Python. En la primera declaración, estamos asignando un
valor de 7 a la variable "a". En la segunda declaración, observe el espacio al principio. Esto es considerado como
sangría por el intérprete de Python. Sin embargo, dado que se supone que cualquier bloque de sangría tiene una
declaración condicional (como si y para bucle), el código aquí daría un error ya que el intérprete considerará que la
segunda declaración tiene un flujo separado de la primera declaración. La tercera declaración no tiene ninguna sangría
(está en el mismo bloque que la primera declaración) y, por lo tanto, se ejecutará correctamente.

Es importante recordar que todas las declaraciones que se espera que se ejecuten en el mismo bloque deben
tener la misma sangría. La presencia de sangrías mejora enormemente la legibilidad de los programas de Python,
pero también requiere un poco de tiempo para acostumbrarse, especialmente si proviene de lenguajes como C y Java,
donde el punto y coma (;) marca el final de las declaraciones. También debe tener cuidado con las sangrías porque si
no tiene cuidado con ellas, pueden causar errores en el programa, por decir lo menos, y si no se detectan, pueden
hacer que el programa se comporte de manera impredecible. La mayoría de los IDE, como Canopy y Anaconda ,
tienen soporte incorporado para sangrías que facilitan el desarrollo del programa.
Machine Translated by Google

29 Introducción a Python 925

3.4 Comentarios

Se requieren comentarios en cualquier lenguaje de programación para mejorar la legibilidad por parte de los humanos.
Los comentarios son aquellas secciones de código que están destinadas a la comprensión humana y que el intérprete
de Python ignora cuando se ejecuta. En Python, puede escribir comentarios de una sola línea o de varias líneas.

1. Comentario de una sola línea :


un comentario de una sola línea en Python comienza con un signo de almohadilla (#). Todo lo que sigue al
signo # es ignorado por el intérprete hasta el final de la línea.

Código

print(”Esta es una línea de código, no una línea de comentarios“)


#print(”Esta es una línea de comentarios“)

Producción

Esta es una línea de código, no una línea de comentarios.

Tenga en cuenta que en el fragmento de código anterior, la primera línea es el código real que se ejecuta, mientras
que la segunda línea es un comentario que el intérprete ignora.

2. Comentario de varias líneas :

la sintaxis de los comentarios de varias líneas es diferente de la del comentario de una sola línea.
Los comentarios de varias líneas comienzan y terminan con tres comillas simples ("'). Todo lo que está en el
medio es ignorado por el intérprete.

Código

”'
print(“El comentario de varias líneas comienza desde aquí”) print
(“Continúa el comentario de varias líneas. Esto no se imprimirá”)
“'
print(”El comentario de varias líneas terminó en la línea anterior. Esta línea con
ser impreso“)

Producción

El comentario de varias líneas terminó en la línea anterior. Esta línea se imprimirá

3.5 Estructura de objetos

Con una sólida comprensión de la sangría y los comentarios, veamos ahora los componentes básicos del lenguaje de
programación Python. Un concepto central de Python es el de objeto. Todo en Python, ya sea una variable simple,
una función o una estructura de datos personalizada, es un objeto. Esto significa que hay datos y ciertas funciones
asociadas con cada objeto. Esto hace que la programación sea muy consistente y flexible. Sin embargo, no implica
que tengamos que pensar en objetos cada vez que estemos codificando en Python.
Machine Translated by Google

926 P. Taori y HK Dasararaju

Detrás de escena, todo es un objeto, incluso si usamos objetos explícitamente o no en nuestra codificación. Dado que
recién estamos comenzando, primero nos enfocaremos en la codificación sin objetos y hablaremos sobre los objetos
más adelante, una vez que nos sintamos cómodos con la forma de programación Pythonic.

3.6 Variables

Hay algunos tipos de datos incorporados en Python para manejar diferentes tipos de datos: enteros, punto flotante,
cadena, valores booleanos, fecha y hora. Una característica interesante de Python es que no necesita mencionar qué
tipo de datos contiene una variable; dependiendo del valor asignado, Python asigna automáticamente un tipo de datos
a la variable.

Piense en una variable como un marcador de posición. Es cualquier nombre que puede contener un valor y ese
valor puede variar con el tiempo (de ahí el nombre variable). En otros términos, las variables son ubicaciones
reservadas en la memoria de su máquina para almacenar diferentes valores. Cada vez que especifica una variable,
en realidad está asignando espacio en la memoria que contendrá valores u objetos en el futuro. Estas variables siguen
existiendo mientras se ejecuta el programa. Dependiendo del tipo de datos que tenga una variable, el intérprete
asignará la cantidad de memoria requerida para esa variable. Esto implica que la memoria de una variable puede
aumentar o disminuir dinámicamente según el tipo de datos que tenga la variable en ese momento. Usted crea una
variable especificando un nombre a la variable y luego asignando un valor a la variable usando el operador de signo
igual (=).

Código

variable1 = 100 # Variable que contiene un valor entero distancia =


1500.0 # Variable que contiene un valor de punto flotante instituto = ”ISB“ # Variable que contiene una
cadena print(variable1)

imprimir(distancia)
imprimir(instituto) imprimir
instituto # declaración de impresión ha sido descontinuada
de Python3

Producción
100
1500.0
ES B
ES B

Código

a=0b
=2
c = ”0“ d =
”2“
imprime(a + b) # salida como entero # salida
imprime(c + d) como cadena
imprime(tipo(a + b))
imprime(tipo(c + d))
Machine Translated by Google

29 Introducción a Python 927

Producción

2
02
<escriba 'int'>
<escriba 'str'>

3.7 Convenciones de nomenclatura para una variable

Aunque una variable puede tener casi cualquier nombre, hay ciertas convenciones de nomenclatura
que deben seguirse:

• Una variable puede comenzar con una letra (mayúscula o minúscula) o un guión bajo
(_) personaje.
• El resto de la variable puede contener cualquier combinación de letras, dígitos y
caracteres de subrayado.
• Por ejemplo, algunos de los nombres válidos para las variables son _variable, variable1.
5Variable, >Smiley no son nombres de variable correctos. •
Los nombres de variables en Python distinguen entre mayúsculas y minúsculas. Esto significa que
Variable y variable son dos variables diferentes.

3.8 Tipos de datos básicos

Además de los tipos de datos complejos, Python tiene cinco tipos de datos atómicos (básicos). Son
Número, Cadena, Lista, Tupla y Diccionario, respectivamente. Vamos a entenderlos uno por uno.

3.8.1 Números

Los números se utilizan para contener valores numéricos. Python admite cuatro tipos de números:
enteros, enteros largos, punto flotante (decimales) y números complejos.

1. Entero: un tipo entero puede contener valores enteros como 1, 4, 1000 y -52,534.
En Python, los enteros tienen una longitud mínima de 32 bits. Esto significa que un tipo de datos
entero puede contener valores en el rango ÿ2,147,483,648 a 2,147,483,647.
Un número entero se almacena internamente como una cadena de dígitos. Un número entero solo
puede contener dígitos y no puede tener ningún carácter o puntuación como $.

Código y salida

>>> 120+200 320


Machine Translated by Google

928 P. Taori y HK Dasararaju

>>> 180-42
138
>>> 15*8
120

2. Entero largo: los enteros simples tienen un límite en el valor que pueden contener.
A veces surge la necesidad de mantener un valor que está fuera del rango de números enteros.
En tal caso, hacemos uso de tipos de datos Long Integer. Los tipos de datos enteros largos no
tienen un límite en la longitud de los datos que pueden contener. Una desventaja de estos
tipos de datos es que consumen más memoria y son lentos durante los cálculos. Use tipos de
datos de enteros largos solo cuando tenga la necesidad absoluta de hacerlo. Python distingue
el valor entero largo de un valor entero por el carácter L o l, es decir, un valor entero largo tiene
"L" o "l" al final.

Código y salida

>>> 2**32
4294967296L

3. Números de coma flotante: los tipos de datos de coma flotante se utilizan para contener valores
decimales, como fracciones.
4. Números complejos: los tipos de datos de números complejos se utilizan para contener números
complejos. En la ciencia de datos, los números complejos rara vez se usan y, a menos que se
trate de matemáticas abstractas, no habría necesidad de usar números complejos.

3.8.2 Cadenas

Una característica clave de Python que lo convierte en uno de los lenguajes de facto para el
análisis de texto y la ciencia de datos es su soporte para cadenas y procesamiento de cadenas.
Las cadenas no son más que una serie de caracteres. Las cadenas se definen como una secuencia
de caracteres entre comillas (pueden ser comillas simples o dobles). Además del procesamiento
de datos numéricos, Python tiene capacidades de procesamiento de cadenas muy sólidas. Dado
que las cadenas se representan internamente como una matriz de caracteres, implica que es muy
fácil acceder a un carácter o subconjunto de caracteres en particular dentro de una cadena. Se
puede acceder a una subcadena de una cadena haciendo uso de índices (posición de un carácter
particular en una matriz) y corchetes []. Los índices comienzan con 0 en Python. Esto significa que
se puede acceder al primer carácter de una cadena especificando el nombre de la cadena seguido
de [ seguido de 0 seguido de ] (p. ej., (stringname[0]). Si queremos unir dos cadenas, entonces
podemos hacer uso de la operador más (+). Mientras que el operador más (+) agrega números,
une cadenas y, por lo tanto, puede funcionar de manera diferente según el tipo de datos que
contienen las variables. Comprendamos las operaciones de cadena con la ayuda de algunos
ejemplos.

Código

nueva cadena = 'Hola. ¿Cómo estás?' imprimir


(nueva cadena) # Imprimirá la cadena completa print(newstring
[0]) # Imprimirá el primer carácter
Machine Translated by Google

29 Introducción a Python 929

print(nuevacadena [3:7]) # Imprimirá del 4to al 6to carácter print(nuevacadena [3:]) # Imprimirá todo desde
el 4to carácter hasta el final

print(nuevacadena * 3) # Imprimirá la cadena tres veces


print(nuevacadena + ”Estoy muy bien, ty.“) # Concatenará dos cadenas

Producción

Hola. ¿Cómo estás?


H

¿Cómo estás?
Hola. Como estas? Hola. Como estas? Hola. ¿Cómo estás?
Hola. ¿Cómo estás? Estoy muy bien, ty.

Las cadenas en Python son inmutables. A diferencia de otros conjuntos de datos, como las listas,
no puede manipular valores de cadena individuales. Para hacerlo, debe tomar subconjuntos de
cadenas y formar una nueva cadena. Una cadena se puede convertir a un tipo numérico y viceversa
(cuando corresponda). Muchas veces, los datos sin procesar, aunque numéricos, se codifican en
formato de cadena. Esta característica proporciona una forma limpia de asegurarse de que todos los
datos estén en formato numérico. Las cadenas son una secuencia de caracteres y se pueden
tokenizar. También se pueden formatear cadenas y números.

3.8.3 Fecha y Hora

Python tiene un módulo de fecha y hora incorporado para trabajar con fechas y horas. Se pueden
crear cadenas a partir de objetos de fecha y viceversa.

Código

importar fechahora
fecha1 = fechahora.fechahora(2014, 5, 16, 14, 45, 05) imprimir(fecha1.día)
imprimir(fecha1)

Producción

dieciséis

2014-05-16 14:45:05

3.8.4 Listas

Las listas en Python son una de las estructuras de datos más importantes y fundamentales. En un
nivel muy básico, List no es más que una colección ordenada de datos. Las personas con experiencia
en Java y C pueden pensar en la lista como una matriz que contiene varios elementos. La diferencia
aquí es que una lista puede contener elementos de diferentes tipos de datos. Una lista se define como
una colección de elementos entre corchetes "[ ]", y cada elemento de una lista está separado por
comas. Similar a los personajes individuales.
Machine Translated by Google

930 P. Taori y HK Dasararaju

en una cadena, si desea acceder a elementos individuales en una lista, puede hacerlo usando la misma terminología
que se usa con las cadenas, es decir, usando los índices y los corchetes.

Código

alist = ['hola', 123, 5.45, 'ISB', 85.4] otra lista = [234, 'ISB']

imprimir (lista) # Imprimirá la lista completa print(alist[0])


# Imprimirá el primer elemento print(alist[2:5])
# Imprimirá del 3er al 5to elemento en la lista print(alist[3:]) # Imprimirá desde el elemento 4 hasta el final
print(otra lista * 2) # Imprimirá la lista dos veces print(alist + anotherlist) # Concatenará las dos listas

Producción

['hola', 123, 5.45, 'ISB', 85.4] hola

[5.45, 'JIS', 85.4]


['ESB', 85.4]
[234, 'ISB', 234, 'ISB'] ['hola', 123,
5.45, 'ISB', 85.4, 234, 'ISB']

3.8.5 Tuplas

Una tupla es un tipo de datos incorporado que es un primo cercano del tipo de datos de lista. Mientras que en una lista
puede modificar elementos individuales de la lista y también puede agregar/modificar el número de elementos en la
lista, una tupla es inmutable en el sentido de que una vez definida no puede cambiar ni los elementos individuales ni
el número de elementos en una tupla Las tuplas se definen de manera similar a las listas con una sola excepción:
mientras que las listas se definen entre corchetes "[]", las tuplas se definen mediante paréntesis "()".

Debe usar tuplas siempre que haya una situación en la que necesite usar listas que nadie debería poder modificar.

Código

tupleone = ('hey', 125, 4.45, 'isb', 84.2) tupletwo = (456, 'isb')

imprimir (tupla uno) # Imprimirá toda la tupla print(tupleone[0])


# Imprimirá el primer elemento de la tupla print(tupleone[1:4])
# Imprimirá del 2 ° al 4° elemento de la tupla print(tupleone[3:]) # Imprimirá la tupla completa desde el 4°

elemento hasta el final


imprimir(tupledos * 2) # Imprimirá tupla dos veces print(tupleone
+ tupletwo) # Concatenará e imprimirá
las dos tuplas
Producción

('hola', 125, 4.45, 'isb', 84.2) 'hola'


Machine Translated by Google

29 Introducción a Python 931

(125 , 4.45, 'isb') ('isb', 84.2) (456,


'isb', 456, 'isb') ('hey', 125, 4.45,
'isb', 84.2, 456, 'isb')

Si intenta actualizar una tupla, le dará un error:

Código

tupla = ('hola', 234, 4.45, 'Alex', 81.4) lista = ['hola', 234, 4.45, 'Alex', 81.4]
tupla[2] = 1000 # Inválido (error: el objeto tupla no admite ... )

lista[2] = 1000 # Válido (cambiará de 4,45 a 1000)

Producción

['hola', 234, 1000, 'Alex', 81.4]

3.8.6 Diccionario

Quizás una de las estructuras de datos integradas más importantes en Python son los diccionarios.
Los diccionarios se pueden considerar como conjuntos de elementos en los que cada elemento es
un par clave-valor. Si conoce la clave o el valor, puede buscar rápidamente los valores/clave
correspondientes, respectivamente. No hay restricciones sobre qué clave o valores podrían ser, y
pueden asumir cualquier tipo de datos de Python. En general, como práctica de la industria,
tendemos a usar claves que contienen números o caracteres. Al igual que las claves, los valores
pueden asumir cualquier tipo de datos (ya sean tipos de datos básicos o complejos). Cuando
necesita definir un diccionario, se hace usando corchetes “{}” y cada elemento está separado por
una coma. Un punto importante a tener en cuenta es que los diccionarios están desordenados por
naturaleza, lo que significa que no puede acceder a un elemento de un diccionario usando el índice,
sino que necesita usar claves.

Código

firstdict = {} firstdict ['uno']


= ”Este es el primer valor“ firstdict [2] seconddict = {'institución':
= ”Este
'isb','pincode':500111, 'departamento': es el segundo valor“
'CBA'}

print(firstdict ['one']) print(firstdict [2] )


print(seconddict) print(seconddict.keys()) #
Imprimirá todas las claves en el diccionario

print(seconddict.values()) # Imprimirá todos los valores en el diccionario

Producción

Este es el primer valor


Este es el segundo valor
Machine Translated by Google

932 P. Taori y HK Dasararaju

{'institución': 'isb','pincode':500111, 'departamento': 'CBA'} ['departamento', 'pincode', 'institución']

['CBA', 500111, 'esb']

3.9 Conversión de tipos de datos

Muy a menudo puede surgir la necesidad de convertir una variable de un tipo de datos específico
a otro tipo de datos. Por ejemplo, es posible que desee convertir una variable int en una cadena, o
una cadena en un int, o un int en un flotante. En tales casos, utiliza operadores de conversión de
tipo que cambian el tipo de una variable. Para convertir una variable a tipo entero, use int(variable).
Para convertir una variable a un tipo de cadena, use str(variable).
Para convertir una variable en un número de coma flotante, use float(variable).

3.10 Operadores de Python

Los operadores en Python realizan operaciones en dos variables/valores de datos. Según el tipo
de datos que contenga la variable, las operaciones realizadas por el mismo operador pueden
diferir. A continuación se enumeran los diferentes operadores en Python:

+ (más): Sumaría dos números o variables si son números. Si las variables


son cadenas, entonces se concatenarían. Por ejemplo,

4 + 6 daría 10. 'Hey' + 'Hi' daría como resultado 'HeyHi'.

ÿ (menos): Se restarían dos variables. *


(multiplicar): Multiplicaría dos variables si son números. Si las variables son cadenas/listas,
entonces se repetirán dicho número de veces. Por ejemplo,

3 * 6 daría 18; '3'*4 daría como resultado '3333'; 'ab*4' daría como resultado 'abababab'.

** (potencia): Calcula x elevado a la potencia y. Por ejemplo,

4 ** 3 daría 64 (es decir, 4 * 4 * 4)

/ (dividir): Sería dividir x entre y. //


(división de piso): Daría el piso en una operación de división. Por ejemplo,

5 // 2 daría 2.

% (módulo): Devuelve el resto de la división. Por ejemplo,

8 % 3 da 2. ÿ25,5 % 2,25 da 1,5.

< (menor que): Devuelve si x es menor que y. Todos los operadores de comparación devuelven True
o falso. Tenga en cuenta las mayúsculas de estos nombres. Por ejemplo,
Machine Translated by Google

29 Introducción a Python 933

5 < 3 da Falso y 3 < 5 da Verdadero.

> (mayor que): Devuelve si x es mayor que y. Por ejemplo,

5 > 3 devuelve Verdadero. Si ambos operandos son números, primero se convierten a un tipo común.
De lo contrario, siempre devuelve False.

<= (menor o igual que): Devuelve si x es menor o igual que y. Por ejemplo,

x = 3; y = 6; x <= y devuelve Verdadero.

>= (mayor o igual que): Devuelve si x es mayor o igual que y. Para


ejemplo,

x = 4; y = 3; x >= 3 devuelve Verdadero.

== (igual a): Compara si los objetos son iguales. Por ejemplo,

x = 2; y = 2; x == y devuelve Verdadero. x =
'cadena'; y = 'stR'; x == y devuelve Falso. x = 'cadena';
y = 'cadena'; x == y devuelve Verdadero.

!= (no igual a): Compara si los objetos no son iguales. Por ejemplo,

x = 2; y = 3; ¡X! = y devuelve Verdadero.

not (booleano NOT): Si x es Verdadero, devuelve Falso. Si x es Falso, devuelve Verdadero. Para
ejemplo,

x = Verdadero; no x devuelve Falso.

y (Y booleano): x e y devuelve Falso si x es Falso, de lo contrario devuelve la evaluación de


y. Por ejemplo,

x = Falso; y = Verdadero; xey devuelve falso ya que x es falso

o (OR booleano): si x es Verdadero, devuelve Verdadero, de lo contrario, devuelve la evaluación de y. Para


ejemplo,

x = Verdadero; y = Falso; x o y devuelve Verdadero.

3.11 Declaraciones condicionales y bucles

Después de la discusión de variables y tipos de datos en Python, centrémonos ahora en el segundo bloque
de construcción de cualquier lenguaje de programación, es decir, declaraciones condicionales.
Las declaraciones condicionales son ramas en un código que se ejecutan si una condición asociada con

las declaraciones condicionales es verdadera. Puede haber muchos tipos diferentes de declaraciones
condicionales; sin embargo, los más destacados son si, mientras y para.
En las siguientes secciones, analizamos estas declaraciones condicionales.
Machine Translated by Google

934 P. Taori y HK Dasararaju

3.11.1 Declaración if

Usamos un bucle if siempre que sea necesario evaluar una condición una vez. Si la condición se evalúa como
verdadera, entonces se ejecuta el bloque de código asociado con la condición if, de lo contrario, el intérprete omite el

bloque de código correspondiente. La condición junto con el conjunto de instrucciones asociado se denomina bucle if
o bloque if.
Además de la condición if, también podemos especificar un bloque else que se ejecuta si la condición if no tiene éxito.
Tenga en cuenta que el bloque else es completamente opcional.

Código

var1 = 45
si var1 >= 43: print(”dentro
del bloque if“)
elif var1 <= 40:
imprimir ("dentro del bloque elif")
más:
print(”dentro del bloque else“)

Producción

dentro si bloque

3.11.2 Bucle mientras

Mientras que un bucle if le permite evaluar la condición una vez, el bucle while le permite evaluar una condición varias
veces dependiendo de un contador o variable que realiza un seguimiento de la condición que se está evaluando. Por
lo tanto, puede ejecutar el bloque de instrucciones asociado varias veces en un bloque while. Similar a un bucle if,
puede tener un bucle else opcional en el bloque while, consulte el ejemplo de bucle a continuación:

Código

contador = 0 while
(contador < 5): print('Contador actual:
{}'.format(contador)) contador = contador + 1

print(”¡Mientras termina el ciclo!”)

Producción

Contador actual: 0
Contador actual: 1
Contador actual: 2
Contador actual: 3
Contador actual: 4 ¡Mientras
finaliza el bucle!
Machine Translated by Google

29 Introducción a Python 935

3.11.3 Bucle for

En muchos sentidos, el bucle for es similar a un bucle while en el sentido de que le permite iterar el bucle varias veces
dependiendo de la condición que se esté evaluando.
Sin embargo, for loop es más eficiente en el sentido de que no tenemos que llevar la cuenta de incrementar o
decrementar el contador de la condición que se está evaluando.
En el ciclo while, el usuario tiene la responsabilidad de incrementar/decrementar el contador; de lo contrario, el ciclo
se ejecuta hasta el infinito. Sin embargo, en el ciclo for, el ciclo mismo se encarga del incremento/decremento.

Código

para a en rango (1,8): imprime


(a)
más:
print('Para el bucle termina')

Producción

1
2
3
4
5
6
7
Para extremos de bucle

3.11.4 Declaración de ruptura

A veces, puede surgir la situación en la que es posible que desee salir de un bucle antes de que el bucle termine de
completarse. En tales casos, hacemos uso de la sentencia break. La declaración de interrupción saldrá del bucle cada
vez que se cumpla una condición particular.

Código

for a in range(1,8): if a == 4:
break print(a)

print('Bucle completado')

Producción

1
2
3
Bucle completado
Machine Translated by Google

936 P. Taori y HK Dasararaju

3.11.5 Instrucción de continuación

Mientras que la instrucción break salta completamente fuera del bucle, la instrucción continue
salta el resto de las líneas de código en un bucle actual y pasa a la siguiente iteración.

Código

mientras que es cierto:

cadena = entrada ('Escriba su entrada:') si cadena


== 'SALIR':
descanso
si len(cadena) < 6:
imprimir 'La cadena es pequeña'
continuar
print('La entrada de cadena no es suficiente')

Producción

Escriba su entrada: 'Hola'


La cuerda es pequeña

Escriba su entrada: 'abc'


La cuerda es pequeña

Escriba su entrada: 'muy grande'


La entrada de cadena no es suficiente

Escriba su entrada: 'SALIR'

3.12 Lectura de entradas desde el teclado

Siempre que necesite que el usuario ingrese la entrada desde el teclado o necesite leer la entrada
del teclado, puede utilizar dos funciones integradas: "raw_input" y "input". Le permiten leer la línea
de texto desde la entrada de teclado estándar.

3.12.1 Función raw_input

Leerá una línea de la entrada del teclado y se la dará al programa como una cadena.

string= raw_input('Proporcione la entrada: '); print('La entrada


proporcionada es: {}'.format(cadena))

En el ejemplo mencionado anteriormente, el usuario recibiría un aviso en la pantalla con el


título "Proporcionar la entrada". La segunda línea imprimirá cualquier entrada que haya
proporcionado el usuario.

Proporcione la entrada: Bienvenido a Python


La entrada proporcionada es: Bienvenido a Python
Machine Translated by Google

29 Introducción a Python 937

3.12.2 Función de entrada

“input” es similar a raw_input() con una excepción. Mientras que "raw_input" asume que el valor
ingresado es un texto, "input" asumiría que el texto ingresado es de hecho una expresión de
Python y procederá a evaluar la expresión de Python y proporcionará la salida de la expresión.

string= input('Proporcione la entrada: '); print('La entrada


proporcionada es: {}'.format(cadena))

Por ejemplo:

Proporcione la entrada: [a*3 para a en rango (1,6,2)]


La entrada proporcionada es: [1,9,15]

3.13 Trabajar con archivos

La mayoría de las veces, además de usar variables y estructuras de datos integradas, estaríamos
trabajando con archivos externos para obtener datos de entrada y escribir la salida. Para este
propósito, Python proporciona funciones para abrir y cerrar archivos. Un concepto clave en el
manejo de archivos es el de un objeto "archivo". Entendamos esto con un poco más de detalle.

3.13.1 Función abrir()

El objeto de archivo es el controlador que realmente le permite crear un enlace al archivo que
desea leer/escribir. Para poder leer/escribir un archivo, primero necesitamos usar un objeto de
tipo archivo. Para hacerlo, hacemos uso del método open(). Cuando se ejecuta open(), dará como
resultado un objeto de archivo que luego usaríamos para leer/escribir datos para archivos externos.

Sintaxis

objeto_archivo = abrir(nombre_archivo [, modo_acceso][, almacenamiento en búfer])

Entendamos esta función con un poco más de detalle. El file_name requiere que
proporcionemos el nombre del archivo al que queremos acceder. Puede especificar un archivo
existente en el sistema de archivos o también puede especificar un nuevo nombre de archivo.
Access_mode le dice a Python en qué modo se debe abrir el archivo. Hay una serie de modos
para hacerlo; sin embargo, los más comunes son leer, escribir y agregar. En la Tabla 29.1 se
proporciona un conocimiento más detallado de cada tipo de modo . Finalmente, el modo de búfer
nos dice cómo almacenar en búfer los datos. De forma predeterminada, el valor del búfer es 0.
Esto significa que no hay almacenamiento en búfer. Si es 1, implica que habrá almacenamiento
en búfer cada vez que se acceda a un archivo.
Machine Translated by Google

938 P. Taori y HK Dasararaju

Tabla 29.1 Lista de modos de acceso

Modo Breve resumen


r Modo por defecto. Abre el archivo en modo de solo lectura con el puntero al inicio del archivo.
rb Similar a R. La única diferencia es que el archivo se lee en formato binario.
r+ Cuando se usa este modo, el archivo se puede usar tanto para leer como para escribir.
rb+ Similar a r+ excepto que la lectura y la escritura ocurrirán en formato binario.
en Solo se puede acceder al archivo para escribir. Crea un nuevo archivo si no hay ningún archivo existente con
el mismo nombre.
wb Igual que w excepto que se abre en formato binario.
w+ Similar a r+.
wb+ Similar a rb+.
a Cuando se usa este modo, los datos se agregan al archivo. En el modo w, los datos se están
sobrescrito El puntero en este modo está al final del archivo en lugar de al principio.
abdominales
Similar a a excepto que está en modo binario.
un+ Similar a w+ con funciones de adición.
ab+ Similar a wb+ con funciones de adición.

3.13.2 Función cerrar()

Una vez que hayamos abierto el archivo para fines de lectura/escritura, tendríamos que
cerrar la conexión con el archivo. Se hace usando el método close(). close() lo hará
eliminar cualquier dato no escrito en el archivo y cerrará el objeto de archivo que teníamos
abierto anteriormente usando la función open(). Una vez que se llama al método close(), no podemos
hacer más lecturas/escrituras en el archivo. Para ello, tendríamos que abrir de nuevo
el archivo usando el método open().
Sintaxis

archivo_objeto.close();

Código

# Archivo abierto
archivo1 = abrir('transacciones.txt', 'wb')
print('Nombre de archivo: {}'.format(archivo1.nombre))

# Cerrar el archivo
archivo1.cerrar()

Producción

Nombre del archivo: transacciones.txt

3.13.3 Leer y escribir archivos

Mientras que los métodos open() y close() nos permiten abrir/cerrar una conexión a un archivo,
necesitamos hacer uso de los métodos read() o write() para leer o escribir datos en un
expediente.
Machine Translated by Google

29 Introducción a Python 939

3.13.4 Función escribir()

Cuando llamamos a write(), escribirá los datos como una cadena en el archivo que abrimos anteriormente.

Sintaxis

archivo_objeto.escribir(cadena);

La cadena aquí es la información que debe escribirse en el archivo.

Código

# File Open file1


= open('sample.txt', 'wb') file1.write('Esta es mi primera
salida.\nSe ve bien!!\n');

# Cerrar archivo
archivo1.cerrar()

Cuando ejecutamos el código anterior, se creará un archivo sample.txt y la cadena


mencionado en la función write() se escribiría en el archivo. La cadena está dada por:

Esta es mi primera salida.


¡¡Se ve bien!!

3.13.5 Función leer()

Así como el método write() escribe datos en un archivo, read() leería datos de un archivo abierto.
Sintaxis

file_object.read([contador]);

Notarás que hemos pasado un argumento llamado contador aquí. Cuando hacemos esto, le dice al
intérprete que lea el número especificado de bytes. Si no se proporciona tal argumento, entonces la
lectura leerá el texto completo.

Código

# Archivo Abrir
fileopen = open('sample.txt', 'r+') string = fileopen.read(10);
print('La salida es: {}'.format(cadena))

# Cerrar archivo
fileopen.close()

Producción

La salida es: Este es mi


Machine Translated by Google

940 P. Taori y HK Dasararaju

3.14 Crear función personalizada

Si bien Python es un excelente lenguaje de programación con una serie de funciones integradas (como las de
impresión, lectura y escritura de archivos), a menudo necesitará escribir su propia funcionalidad que no está disponible
en ningún otro lugar (por ejemplo, es posible que desee para escribir una pieza específica de lógica relacionada con
su negocio). Para tales casos, en lugar de volver a escribir el mismo código en varios lugares del código, hacemos
uso de funciones.
Las funciones no son más que piezas de código reutilizables que deben escribirse una vez y luego pueden llamarse
usando sus nombres en otra parte del código. Cuando necesitamos crear una función, debemos darle un nombre y el
bloque de código asociado que se ejecutará cada vez que se llame a la función. Un nombre de función sigue las
mismas convenciones de nomenclatura que un nombre de variable. Cualquier función se define usando la palabra

clave def.
Esto le dice al intérprete que la siguiente pieza de código es una función. Después de def, escribimos los nombres de
las funciones junto con paréntesis y cualquier argumento que la función esperaría dentro del paréntesis. A continuación,
escribiríamos el bloque de código que se ejecutaría cada vez que se llamara a la función.

Código

def firstfunc(): print('¡Hola,


bienvenido a la programación Python!')
# bloque de código que se ejecuta para la función
# La función termina aquí #

firstfunc () # Función llamada por primera vez firstfunc () # Llamada de


nuevo

Producción

¡Hola, bienvenido a la programación en Python!


¡Hola, bienvenido a la programación en Python!

En el fragmento de código mencionado anteriormente, creamos una función "firstfunc" utilizando la sintaxis de la
función. En este caso, la función no espera parámetros y por eso tenemos paréntesis vacíos. Los argumentos de
función son las variables que le pasamos a la función que luego usaría la función para su procesamiento. Tenga en
cuenta que los nombres dados en la definición de la función se denominan parámetros, mientras que los valores que
proporciona en la llamada a la función se denominan argumentos.

Código

def MaxFunc(a1, a2): si a1 > a2:

imprimir ('{} es máximo'. formato (a1))


elif a1 == a2:
imprimir ('{} es igual a {}'. formato (a1, a2))
más:
imprimir ('{} es máximo'. formato (a2))

MaxFunc (8, 5) # dar directamente valores literales


x=3
Machine Translated by Google

29 Introducción a Python 941

y=1
MaxFunc (x, y) # dar variables como argumentos
MaxFunc (5, 5) # dar directamente valores literales

Producción

8 es máximo 3 es
máximo
5 es igual a 5

En el fragmento de código anterior, creamos una función "MaxFunc". MaxFunc requiere dos parámetros (valores)
a1 y a2. La función luego compararía los valores y encontraría el máximo de dos valores. En la primera llamada de
función, proporcionamos directamente los valores de 8 y 5 en la llamada de función. La segunda vez, proporcionamos
las variables en lugar de los valores para la llamada a la función.

3.14.1 Valor predeterminado de un argumento

Si desea que algunos parámetros de una función sean opcionales, use valores predeterminados en caso de que el
usuario no desee proporcionarles valores. Esto se hace con la ayuda de valores de argumento predeterminados.
Puede especificar valores de argumento predeterminados para parámetros agregando al nombre del parámetro en la
definición de la función el operador de asignación (=) seguido del valor predeterminado. Tenga en cuenta que el valor
del argumento predeterminado debe ser una constante. Más precisamente, el valor del argumento predeterminado
debe ser inmutable.

Código

def decir(mensaje, veces = 1):


imprimir(mensaje * veces)

say('Hola')
say('Mundo', 5)

Producción

Hola
MundoMundoMundoMundoMundoMundo

La función denominada "decir" se utiliza para imprimir una cadena tantas veces como se especifique. Si no
proporcionamos un valor, entonces, de manera predeterminada, la cadena se imprime solo una vez. Logramos esto
especificando un valor de argumento predeterminado de 1 para el parámetro times. En el primer uso de digamos,
proporcionamos solo la cadena e imprime la cadena una vez. En el segundo uso de say, proporcionamos tanto la
cadena como un argumento 5 que indica que queremos decir el mensaje de la cadena cinco veces.

Solo aquellos parámetros que están al final de la lista de parámetros pueden recibir valores de argumento
predeterminados, es decir, no puede tener un parámetro con un valor de argumento predeterminado que preceda a
un parámetro sin un valor de argumento predeterminado en la lista de parámetros de la función. Esto se debe a que
los valores se asignan a los parámetros por posición. Por ejemplo, def func(a, b=5) es válido, pero def func(a=5, b) no
lo es.
Machine Translated by Google

942 P. Taori y HK Dasararaju

3.14.2 Declaración de devolución

La declaración de "retorno" se usa para regresar de una función, es decir, salir de la función. Opcionalmente, también

puede devolver un valor de la función.

Código

def máximo(x, y): si x > y:


devuelve x

elif x == y: return
'Los números son iguales'
más:
volver y
imprimir (máximo (2, 3))

Producción

3.15 Módulos

Puede reutilizar código en su programa definiendo funciones una vez. Si desea reutilizar una serie de funciones en
otros programas que escribe, puede usar módulos. Existen varios métodos para escribir módulos, pero la forma más
sencilla es crear un archivo con una extensión ".py" que contenga funciones y variables.

Otro método es escribir los módulos en el idioma nativo en el que se escribió el propio intérprete de Python. Por
ejemplo, puede escribir módulos en el lenguaje de programación C y, cuando se compilan, se pueden usar desde su
código Python cuando se usa el intérprete estándar de Python.

Un módulo puede ser importado por otro programa para hacer uso de su funcionalidad.
Así es como también podemos usar la biblioteca estándar de Python. El código siguiente muestra cómo utilizar los
módulos de biblioteca estándar.

Código

importar os
imprimir os.getcwd()

Producción

<Su directorio de trabajo actual>

3.15.1 Archivos .pyc compilados por bytes

Importar un módulo es un asunto relativamente costoso, por lo que Python hace algunos trucos para hacerlo más
rápido. Una forma es crear archivos compilados por bytes con la extensión ".pyc", que es una forma intermedia en la
que Python transforma el programa. Este archivo “.pyc” es
Machine Translated by Google

29 Introducción a Python 943

útil cuando importa el módulo la próxima vez desde un programa diferente; será mucho más rápido ya
que una parte del procesamiento requerido para importar un módulo ya está hecho. Además, estos
archivos compilados por bytes son independientes de la plataforma.
Tenga en cuenta que estos archivos ".pyc" generalmente se crean en el mismo directorio que los
archivos ".py" correspondientes. Si Python no tiene permiso para escribir en los archivos de ese
directorio, no se crearán los archivos ".pyc".

3.15.2 de . . . declaración de importación

Si desea importar directamente la variable "argv" a su programa (para evitar tener que escribir sys.
cada vez), puede usar la instrucción "from sys import argv". En general, debe evitar usar esta
declaración y usar la declaración de importación en su lugar, ya que su programa evitará conflictos de
nombres y será más legible.

Código

from math import sqrt print('La


raíz cuadrada de 16 es {}'.format(sqrt(16)))

3.15.3 Cree sus propios módulos

Crear sus propios módulos es fácil; esto se debe a que cada programa de Python también es un
módulo. Solo debes asegurarte de que tenga extensión “.py”. El siguiente es un ejemplo de lo mismo:

Código (guardar como mymodule.py)

def decir hola():


print('Hola, habla mi módulo.')__version__='0.1'

Lo anterior fue un módulo de muestra; no tiene nada de especial en comparación con nuestro
programa Python habitual. Tenga en cuenta que el módulo debe colocarse en el mismo directorio que
el programa desde el que lo importamos o en uno de los directorios enumerados en sys.path.

Código (Otro módulo; guárdelo como mymodule_demo.py)

import mymodule
mymodule.sayhi()
print(”version {}“.format(mymodule.__version__))

Producción

Hola, habla mymodule.


Versión 0.1
Machine Translated by Google

944 P. Taori y HK Dasararaju

3.16 Paquetes

En la jerarquía de organización de sus programas, las variables suelen ir dentro de las funciones.
Las funciones y las variables globales suelen ir dentro de los módulos. ¿Y si quisieras organizar módulos? Aquí
es donde los paquetes entran en escena.
Los paquetes son solo carpetas de módulos con un archivo __init__.py especial que le indica a Python que
esta carpeta es especial porque contiene módulos de Python. Digamos que desea crear un paquete llamado
"mundo" con subpaquetes "asia", "áfrica", etc., y estos subpaquetes a su vez contienen módulos como "india",
"madagascar", etc.
Los paquetes son solo una conveniencia para organizar módulos jerárquicamente. Verá muchas instancias de
esto en la biblioteca estándar.

3.16.1 Paquetes relevantes

Hay una serie de paquetes estadísticos y econométricos disponibles en Internet que pueden simplificar
enormemente el trabajo de investigación. La siguiente es la lista de paquetes ampliamente utilizados:

1. NumPy: Numerical Python (NumPy) es el paquete base. Otros paquetes y bibliotecas están construidos sobre
NumPy. 2. pandas: proporciona estructuras de datos y capacidades de procesamiento similares a las
encontradas
en R y Excel. También proporciona capacidades de series temporales.
3. SciPy: colección de paquetes para abordar una serie de problemas informáticos en análisis de datos,
estadísticas y álgebra lineal. 4. matplotlib: biblioteca de trazado. Permite trazar una serie de gráficos 2D y
servirá
como biblioteca de gráficos principal.
5. IPython: shell interactivo de Python (IPython) que permite la creación rápida de prototipos de código.
6. Statsmodels: permite el análisis de datos, la estimación de modelos estadísticos,
pruebas, regresiones y representación gráfica de funciones.
7. BeautifulSoup: biblioteca de Python para rastrear la Web. Le permite extraer datos de páginas HTML y XML.

8. Scikits: una serie de paquetes para ejecutar simulaciones, aprendizaje automático, datos
minería, optimización y modelos de series de tiempo.
9. RPy: este paquete integra R con Python y permite a los usuarios ejecutar código R desde Python. Este paquete
puede ser realmente útil si cierta funcionalidad no está disponible en Python pero está disponible en R.
Machine Translated by Google

capitulo 30
Probabilidades y estadísticas

Peeyush Taori, Soumithri Mamidipudi y Deepak Agrawal

1. Introducción

Este capítulo tiene como objetivo presentar y explicar algunos conceptos básicos de
estadística y probabilidad para ayudar al lector a comprender algunos de los conceptos
más avanzados presentados en el texto principal del libro. Los temas principales que se
tratan son la teoría de conjuntos, permutaciones y combinaciones, distribuciones de
probabilidad discretas y continuas, estadísticas descriptivas y distribuciones bivariadas.
Si bien el objetivo principal de este libro está más allá del alcance de estas ideas, forman
la base sobre la cual se han desarrollado las técnicas avanzadas presentadas. Una
comprensión sólida de estos fundamentos, por lo tanto, es crucial para comprender los
conocimientos que pueden proporcionar técnicas más complejas.
Sin embargo, al explicar estas ideas, el capítulo esboza brevemente los principios
básicos en los que se basan. Para una discusión más completa, consulte Complete
Business Statistics de Aczel y Sounderpandian (McGraw-Hill, 2009).

P. Taori )
(London Business School, Londres, Reino Unido
Correo electrónico: taori.peeyush@gmail.com

S. Mamidipudi · D. Agrawal
Indian School of Business, Hyderabad, Telangana, India

© Springer Nature Switzerland AG 2019 945


B. Pochiraju, S. Seshadri (eds.), Essentials of Business Analytics, International
Series in Operations Research & Management Science 264, https://doi.org/
10.1007/978-3-319-68837 -4_30
Machine Translated by Google

946 P. Taori et al.

2 Fundamentos de la Probabilidad

2.1 Axiomas y teoría de conjuntos

Para comprender el estudio matemático de la probabilidad, es importante definir primero algunos


axiomas del campo e introducir algo de teoría básica de conjuntos.
Un conjunto es una colección de objetos. Por ejemplo, el conjunto de todos los números enteros de un
solo dígito es {1,2,3,..,9}; el conjunto de números pares de un solo dígito sería {2,4,6,8}, mientras que el
conjunto de números primos de un solo dígito sería {2,3,5,7}. Un subconjunto es un conjunto de elementos
que está totalmente incluido en algún otro conjunto. Entonces, el conjunto de todos los números primos
impares de un solo dígito {3,5,7} es un subconjunto del conjunto de números primos de un solo dígito.
También podemos usar alguna notación básica para denotar operaciones realizadas en dos
o más conjuntos. Definamos el conjunto de números pares de un solo dígito como A: {2,4,6,8},
y el conjunto de números primos de un solo dígito como B: {2,3,5,7}. Una unión de los dos
conjuntos incluiría todos los elementos de ambos conjuntos, denotados por el símbolo ÿ.
Entonces AÿB sería {2,3,4,5,6,7,8}. Una intersección de los dos conjuntos incluiría solo los
objetos o elementos presentes en ambos conjuntos, indicados por el símbolo ÿ. Por lo tanto,
AÿB sería {2}. Un complemento de un subconjunto (generalmente indicado con el símbolo ) es
, el complemento
un subconjunto que contiene todos los elementos que no están presentes de A,
en el subconjunto
original. Entonces A sería {1,3,5,7,9}. (Es importante señalar que la operación de
complementación requiere la definición del conjunto completo o conjunto universal; en este
caso, asumimos que el conjunto de números enteros de un solo dígito es el conjunto universal).
Es posible usar estas operaciones para incluir más conjuntos; por ejemplo, podríamos denotar
la intersección de cuatro conjuntos llamados W, X, Y y Z escribiendo WÿXÿYÿZ.
En el estudio de la probabilidad, podemos usar la teoría de conjuntos para definir los posibles
resultados de un experimento. Llamamos al conjunto de todos los posibles resultados de algún
experimento el “espacio muestral” de ese experimento. El espacio muestral de lanzar un dado,
por ejemplo, sería {1,2,3,4,5,6}. Un evento es el conjunto de resultados (un subconjunto del
espacio muestral) para el cual ocurre el resultado deseado. Así, el evento “sacar un número
par” sería descrito por el subconjunto {2,4,6}. El evento "tirar un número impar" sería descrito
por el subconjunto {1,3,5}. La intersección de estos dos conjuntos no contiene ningún elemento.
A tales conjuntos los llamamos "disjuntos". La unión de estos dos conjuntos describe el espacio
muestral. Llamamos a tales conjuntos una "partición" del espacio muestral (se dice que son
mutuamente excluyentes y colectivamente exhaustivos).
Si tenemos un subconjunto A que contiene nuestros resultados, denotamos la probabilidad
de ese evento como P(A). Para denotar la probabilidad de que ocurra el evento A dado que ha
ocurrido el evento B, escribimos P(A|B). Si A y B son disjuntos, P(A|B) = 0. Si A y B son eventos
independientes, lo que significa que la probabilidad de que uno ocurra no afecta la probabilidad
del otro, entonces P(A|B) = P (A) y P(B| A) = P(B). De esto podemos ver que dos eventos solo
pueden ser separados e independientes si uno de los eventos tiene una probabilidad de 0.
¿Cuál es exactamente la probabilidad de un conjunto? En el mundo simple de las frecuencias,
es cuenta relativa del evento definido por el conjunto. Por ejemplo, ¿con qué frecuencia veremos
el número 1 mientras lanzamos un dado? Si los dados fueran justos, uno diría 1/6, en promedio,
una vez cada seis lanzamientos.
Machine Translated by Google

30 Probabilidad y Estadística 947

El objetivo de estudiar la probabilidad es comprender la probabilidad de que ocurra un evento.


Dada una cierta cantidad de observaciones de un experimento (como sacar una carta de un paquete), la
probabilidad puede decirnos qué tan probable es algún resultado de ese experimento (como sacar un rey o
un diamante). La teoría de conjuntos nos permite estudiar estas preguntas al proporcionarnos un vocabulario
matemático con el que podemos hacer estas preguntas.

Hay tres axiomas principales de probabilidad:

1. La probabilidad de que ocurra cualquier evento debe estar entre cero y uno.

0 <= P(A) <= 1

2. Todo experimento debe dar como resultado un evento. La probabilidad de que no ocurra nada (indicado
como nulo o ÿ) es cero. La probabilidad de que ocurra el espacio muestral (denotado aquí por S, pero
no es una notación estándar para algo) es uno.

PAG (ÿ) = 0

P(S) = 1

3. Si dos o más eventos son mutuamente excluyentes (los subconjuntos que describen sus resultados son
disjuntos), entonces la probabilidad de que ocurra uno de ellos es simplemente la suma de las
probabilidades individuales.

PAG (A ÿ B ÿ C) = PAG (A) + PAG (B) + PAG (C).

2.2 Teorema de Bayes

El teorema de Bayes es una de las herramientas más poderosas en probabilidad. El teorema nos permite
relacionar probabilidades condicionales , o la probabilidad de que ocurra un evento dado que ha ocurrido
otro evento, entre sí.
Digamos que P(A|B) es la probabilidad de un evento A dado que ha ocurrido el evento B.
Entonces, la probabilidad de que A y B ocurran juntos es la probabilidad de que B ocurra por la probabilidad
de que A ocurra dado que B ha ocurrido (esto es como una regla de la cadena).

P (A ÿ B) = P (B).P (A|B)

Esto también es cierto a la inversa.

PAG (B ÿ A) = PAG (A).P (B|A)

¡Pero AÿB y BÿA son lo mismo!

Por lo tanto, el teorema de probabilidad condicional de Bayes proporciona la base para uno de los
algoritmos de aprendizaje automático más importantes: el aprendizaje automático ingenuo.
Machine Translated by Google

948 P. Taori et al.

algoritmo. El algoritmo postula la probabilidad de que ocurra un evento (lo anterior), absorbe y
analiza nuevos datos (la probabilidad) y luego actualiza su análisis para reflejar su nueva
comprensión (lo posterior).
Podemos usar el teorema de Bayes para analizar un conjunto de datos a fin de comprender la
probabilidad de ciertos eventos dados otros eventos, por ejemplo, la probabilidad de tener un
automóvil dada la edad y el salario anual de una persona. A medida que se introducen más datos
en el conjunto de datos, podemos calcular mejor la probabilidad de que ocurran ciertas
características junto con el evento y, por lo tanto, predecir mejor si una persona con un conjunto
aleatorio de características puede poseer un automóvil. Por ejemplo, digamos que se sabe que el
5% de la población posee un automóvil; llame a esto A. Esto se puede inferir de los datos de su
muestra. En su muestra, el 12 % tiene entre 30 y 40 años, llámelo B. En el subconjunto de
personas que poseen un automóvil, el 25 % tiene entre 30 y 40 años, esto es (B | A). Por lo tanto,
(0,25 × 0,12)
P(A) = 0,05. P(B) = 0,12. P(B|A) = 0,25. Por tanto, P (A|B) = = 0,60. Es decir, el 0,05 entre
tienen % de 30
losyque
40
años tienen coche.

2.3 Variables aleatorias y funciones de densidad

Hasta ahora hemos discutido la probabilidad en términos de espacios muestrales, en los que la
probabilidad de cualquier resultado individual es la misma. Ahora consideraremos experimentos
en los que la probabilidad de algunos resultados es diferente a la de otros. Estos experimentos se
denominan variables aleatorias. Una variable aleatoria asigna un valor numérico a cada resultado
posible de un experimento. Estas variables pueden ser de dos tipos: discretas o continuas.

Las variables aleatorias discretas son experimentos en los que hay un número finito de
resultados. Podríamos preguntar, por ejemplo, cuántas canciones hay en un álbum. Las variables
aleatorias continuas, por otro lado, son experimentos que pueden dar como resultado todos los
valores posibles en algún rango. Por ejemplo, podríamos modelar el kilometraje recorrido por un
automóvil como una variable aleatoria continua.
Normalmente, denotamos un experimento con una letra mayúscula, como X, y la posibilidad
de un resultado con una letra minúscula, como x. Por lo tanto, para averiguar la probabilidad de
que X tome el valor x (también conocido como que ocurra x), escribiríamos P(X = x). A partir de
los axiomas de probabilidad, sabemos que la suma de todas las P(x) debe ser 1. A partir de esta
propiedad, podemos construir una función de masa de probabilidad (PMF)
P para X que describe la probabilidad de que ocurra cada evento x.
Considere la tabla 30.1, que describe los resultados de lanzar un dado justo.
El PMF para cada resultado P(X = x) (x = 1,2, ... ,6) es igual a 1/6.
Ahora considere la tabla 30.2, que describe un dado que ha sido alterado.
En este caso, el PMF nos dice que la probabilidad de algunos resultados es mayor que la
probabilidad de otros resultados. La suma de todos los PMF sigue siendo igual a uno, pero
podemos ver que el dado ya no tiene la misma probabilidad de producir cada resultado.
Machine Translated by Google

30 Probabilidad y Estadística 949

Tabla 30.1 Probabilidad de Resultado (x) Probabilidad (p) PMF: P(X = x) = p


tirando un dado justo
1 1/6 P(X = 1) = 1/6
2 1/6 P(X = 2) = 1/6
3 1/6 P(X = 3) = 1/6
4 1/6 P(X = 4) = 1/6
5 1/6 P(X = 5) = 1/6
6 1/6 P(X = 6) = 1/6

Tabla 30.2 Probabilidad de Resultado (x) Probabilidad (p) PMF: P(X = x) = p


tirar un dado alterado
1 1/12 P(X = 1) = 1/12
2 3/12 P(X = 2) = 1/6
3 1/6 P(X = 3) = 1/6
4 1/6 P(X = 4) = 1/6
5 3/12 P(X = 5) = 1/4
6 1/12 P(X = 6) = 1/6

Figura 30.1 Computación


probabilidad de x entre a f(x)
yB

X
abdominales

PAG{a ÿ x ÿ b}

Una segunda función útil es la función de distribución acumulada (CDF), que es


definida como P(X ÿ x). Cuando x es mayor, la CDF es igual a uno. para la feria
dado, P(X ÿ 5) = 5/6. Para el dado injusto, P (X ÿ 5) = 11/12.
Las variables aleatorias continuas son experimentos en los que el resultado puede ser cualquier
valor en algún rango. Por ejemplo, podríamos decir que el kilometraje de un automóvil puede ser
entre 0 y 10.000 millas. En este caso, el PMF no es ideal ya que hay una gran
número de posibles resultados, cada uno con una pequeña posibilidad de ocurrir. En cambio, nosotros
puede usar una función de densidad de probabilidad (PDF), una función que nos dice el área de la
CDF en el rango que buscamos. Así que si quisiéramos saber la probabilidad de que
kilometraje de un automóvil entre 6000 y 8000 millas, podemos encontrarlo restando
la probabilidad de que el kilometraje sea inferior a 6000 millas (punto a) de la probabilidad
del kilometraje siendo inferior a 8000 millas (punto b) (Fig. 30.1).
Más generalmente, P(a ÿ X ÿ b) = P(X ÿ b) ÿ P(X ÿ a). En esta figura, el
la función f(x) mide la altura en cada punto de la curva. Por lo tanto, f se llama
la función de densidad de probabilidad o la función de densidad.
Machine Translated by Google

950 P. Taori et al.

Como cualquier PMF, un PDF también debe cumplir dos condiciones:

(a) f(x) ÿ 0 para todo x.


+ÿ
(b) 7 ÿÿf (x)dx = 1. (En general, esta integral necesita extenderse solo sobre el rango
sobre el cual se define f. Este rango también se denomina soporte de la distribución
de probabilidad).

2.4 Media y Varianza

Sin embargo, describir la función de densidad de probabilidad de una variable aleatoria


suele ser engorroso. Como las variables aleatorias pueden tomar cualquier número de
valores posibles, visualizar una función puede ser difícil. Para simplificar este proceso,
utilizamos dos herramientas principales de resumen: la media y la varianza. La media
es una medida de tendencia central: el valor esperado o promedio de la distribución.
La varianza es una medida de dispersión: qué tan agrupados están los resultados.
Estas dos medidas pueden darnos una idea de la distribución y su relación con el
experimento.
La media de una variable aleatoria también se denomina valor esperado: el
promedio ponderado de probabilidad que "esperamos" que ocurra. Se calcula como la
suma de los productos de cada resultado x y la probabilidad de ese resultado P(X =
x), y se denota por ÿ. (En general, el valor de una función, digamos G(x), calculada
+ÿ
usando la PDF f, se escribe como E [G](x)dx.
ÿÿG(x)f = 7 Esto se llama el valor esperado de G
bajo f. Por lo tanto, E[X] es el valor esperado de X, que también se denomina media).
En términos matemáticos,

ÿ = E (X) = (xP (X = x))

Aquí, el símbolo representa la suma de todos los valores de x. Para una


distribución continua,

+ÿ

Y [X] = xf (x)dx
=
ÿÿ

En el caso de un dado justo, el valor esperado es:

ÿ = 1ÿ1/6 + 2ÿ1/6 + 3ÿ1/6 + 4ÿ1/6 + 5ÿ1/6 + 6ÿ1/6 = 3,5

Esto nos dice que el valor "esperado" de un experimento puede no ser realmente igual a
un valor que el experimento puede tomar. En realidad, nunca podemos sacar 3,5 en un dado,
pero podemos esperar que, en promedio, el valor que tomará cualquier dado sea 3,5.
Machine Translated by Google

30 Probabilidad y Estadística 951

En el caso de una variable aleatoria continua, la media de la PDF no se puede calcular


mediante aritmética discreta. Sin embargo, podemos usar el cálculo para obtener el
mismo resultado.
Usando la función integral 7 para reemplazar la función aditiva , podemos encontrar:

ÿ = = xf(x) dx

donde f(x) es la PDF.


Aquí, se supone que los límites de la integral son el rango sobre el cual se define f, y
se omiten en la continuación a continuación.
El segundo resumen importante es la varianza. La varianza de un experimento es una
medida de qué tan lejos en promedio está cualquier resultado de la media. Conocer la
varianza de una función nos permite comprender cuán dispersos están los resultados en
relación con la media. Para encontrar esto, podemos medir la distancia entre cada
resultado y la media: (x ÿ ÿ), y sumarlos. Sin embargo, por definición, algunos valores
están por debajo de la media, mientras que otros valores están por encima de la media.
Simplemente sumando las distancias de estos resultados desde la media nos llevará a cancelar algunos
resultados. Para evitar esto, sumamos los cuadrados de las distancias: (x ÿ ÿ) 2.
La varianza de una variable aleatoria discreta, por lo tanto, se puede definir como:

V sobre(x) = E(x ÿ ÿ) 2

También se puede calcular como:

Var(X) = E X2 ÿ E(X)2

Para distribuciones continuas,

V ar(X) = = [x ÿ E(X)] 2.f (x)dx = = [x ÿ ÿ] 2.f (x)dx

Como la varianza se mide en términos del cuadrado de la variable aleatoria, no se


mide en las mismas unidades que la distribución misma. Para medir la dispersión en las
mismas unidades que la distribución, podemos usar la desviación estándar (indicada
como ÿ), que es la raíz cuadrada de la varianza.
Ejemplo: Lea los datos de los autos de muestra, precargados en conjuntos de datos R. Para imprimir las primeras
cinco líneas escriba lo siguiente:

> cabeza (coches)


velocidad dist
1 42
2 4 10
3 74 22
4 7
5 8 dieciséis
Machine Translated by Google

952 P. Taori et al.

Fig. 30.2 Diagrama de

dispersión: distribución del conjunto de


datos de automóviles

El comando R para obtener el resumen de estadísticas descriptivas dado un conjunto de datos es


dada por (Fig. 30.2):

> resumen (coches)


velocidad Min. dist
: 4,0 mín. : 2,00
1.er qu.: 12,0 1.er qu.: 26,00 Mediana: 15,0 Mediana:
36,00
Media: 15,4 Media: 42,98
3er Qu.:19,0 3er Qu.: 56,00 Máx. :120.00
:25,0 Máx.

> parcela(coches)

2.5 Distribución de Bernoulli

La distribución de Bernoulli es un tipo de variable aleatoria discreta que modela un experimento en el


que puede ocurrir uno de dos resultados. Por ejemplo, una pregunta con una respuesta de sí/no o el
lanzamiento de una moneda se pueden modelar utilizando distribuciones de Bernoulli.
Como solo hay dos resultados (por ejemplo, x1 y x2), conocer la probabilidad de un resultado
significa que conocemos la probabilidad del otro resultado, es decir, si P(X = x1) = p, entonces P(X =
x2) = 1 - pág. Esto se denota por X ÿ Bernoulli (p). El símbolo ÿ significa "distribuido como".

Una moneda justa tendrá P(X = cara) = 0,5. Una moneda injusta puede tener P(X = cara) = 0,45,
lo que significaría P(X = cruz) = 0,55.
Pero, ¿y si tenemos pruebas repetidas? Digamos, ¿muchos juicios de Bernoulli? Ver más.
Machine Translated by Google

30 Probabilidad y Estadística 953

2.6 Permutaciones y Combinaciones

En este caso, podemos usar la combinatoria para identificar cuántas formas hay de elegir
combinaciones. La combinatoria se ocupa de las combinaciones de objetos que pertenecen a
un conjunto finito. Una permutación es un orden específico de un conjunto de eventos. Por
ejemplo, la moneda que sale cara en el primer, tercer y cuarto lanzamiento de cinco
lanzamientos es una permutación: HTHHT. Dados “n” objetos o eventos, ¡hay n! (n factorial)
permutaciones de esos eventos. En este caso, dados cinco eventos: H, H, H, T y T, ¡hay 5!
formas de ordenarlos. 5! = 5*4*3*2*1 = 120. (Puede haber cierta confusión aquí. Observe que
algunas de estas permutaciones son iguales. El número 120 surge porque estamos tratando
las tres caras como caras diferentes y las dos cruces como colas diferentes En otra forma de
decir esto, los cinco eventos son diferentes cada uno: habría sido mejor si hubiéramos
etiquetado los eventos 1,2,3,4,5).
Sin embargo, a veces es posible que queramos elegir un número menor de eventos. Dados
cinco eventos, podemos querer un conjunto de tres resultados. En este caso, el número de
permutaciones viene dado por 5!/(5 ÿ 3)! = 5*4*3 = 60. Es decir, si tenemos “n” eventos y nos
gustaría elegir “k” de esos eventos, ¡el número de permutaciones es n!/(n ÿ k)! Si tuviéramos
cinco cartas numeradas del 1 al 5, la cantidad de formas en que podríamos elegir tres cartas
de ellas sería 60. (En otra forma de ver esto, podemos elegir el primer evento de cinco formas,
el segundo de cuatro formas, y el tercero de tres maneras, y así 5 * 4 * 3 = 60.)

Una combinación es el número de formas en que se puede extraer un conjunto de


resultados, independientemente del orden en que se extraigan los resultados. Si el número de
permutaciones de k eventos de un conjunto de n eventos es n!/(n ÿ k)!, el número de
combinaciones de esos eventos es el número de permutaciones, dividido por el número de
formas en que ocurren esas permutaciones : n!/((n ÿ k)!k!). (Habiendo dibujado k elementos,
ellos mismos se pueden permutar k! veces. Habiendo dibujado tres elementos, podemos
permutar los tres 3! veces. El número de combinaciones de dibujar tres elementos de cinco es
igual a 5!/((5 ÿ 3) !3!) = 60/6 = 10.)
Usando la teoría de las combinaciones, podemos entender la distribución binomial.

2.7 Distribución Binomial

Cuando tenemos intentos repetidos del experimento de Bernoulli, obtenemos la distribución


binomial. Digamos que estamos lanzando la moneda injusta diez veces y nos gustaría saber la
probabilidad de que los primeros cuatro lanzamientos sean cara.

4
P (HHHHTTTTTT) = (0.45) 6 ÿ (0,55) = 0,0011351.

Considere, sin embargo, la probabilidad de que cuatro de los diez lanzamientos sean caras.
Hay muchos órdenes (arreglos o secuencias) en los que pueden ocurrir los cuatro lanzamientos,
lo que significa que la probabilidad de P(X = 4) es mucho mayor que 0.0011351. En
Machine Translated by Google

954 P. Taori et al.

Tabla 30.3 Distribución XP


binomial con n = 10 y p =
1 0.187712
0,25
2 0.281568
3 0.250282
4 0.145998
5 0.058399
6 0.016222
7 0.003090
8 0.000386
9 0.000029
10 0.000001

en este caso viene dado por: 10!/[(10 ÿ 4)!*4!]*(0.45)4*(0.55)6 = 0.238 (= 210*0. 0.0011351,
donde 210 representa el número de combinaciones de dibujando cuatro de diez artículos.)

En general, una distribución binomial tiene dos resultados: 1 o 0, con probabilidad p y (1 ÿ


p) respectivamente; lo escribimos como X ÿ B(n,p). Si hay n ensayos independientes, el PMF
describe la probabilidad de que un evento ocurra x veces como:

nÿx
PAGS (X = x) = n!/ [(n ÿ x)!x!] ÿ px ÿ (1 ÿ p)

Para X ÿ B(n,p), la media E(X) es n*p, y Var(x) es n*p*(1 ÿ p). (Se puede verificar que estos
son iguales a n veces la media y la varianza de la distribución de Bernoulli).
En la tabla 30.3 se muestra una distribución de probabilidad de muestra para n = 10 y p = 0,25 .
En Excel, el comando es DISTR.BINOM(x,n,p,acumulativo). En R, el comando es DBINOM(x,
n, p).

2.8 Distribución de Veneno

La distribución de Poisson es una extensión de la distribución binomial para situaciones


en el que el número de ensayos es muy grande, la probabilidad de que ocurra un evento es
muy pequeña y la media (n*p) de la distribución es finita.
En este caso, podemos usar la distribución de Poisson, que tiene el PMF

, eÿnÿp.(n ÿ p) x -
P (X = x) =
¡X!

Usamos ÿ para denotar nxp, la media. Escribimos esto como X ÿ Poisson(ÿ).


Aquí, para la distribución de Poisson, la media y la varianza son ambas ÿ. En la tabla 30.4
se muestra un ejemplo de distribución de Poisson con ÿ = 2,5 (compárese con la distribución
binomial) . El comando de Excel es POISSON (número de éxitos, promedio, acumulado (0/1)).
En R, el comando es DPOIS(x, ÿ).
Machine Translated by Google

30 Probabilidad y Estadística 955

Tabla 30.4 Distribución XP


de Poisson con media = 2,5
1 0.205212
2 0.256516
3 0.213763
4 0.133602
5 0.066801
6 0.027834
7 0.009941
8 0.003106
9 0.000863
10 0.000216

2.9 Distribución normal

La distribución normal es una de las distribuciones continuas más importantes y se puede utilizar
para modelar una serie de fenómenos de la vida real. Está representado visualmente por una curva
de campana.
Así como la distribución binomial está definida por dos parámetros (n y p), la distribución normal
también puede definirse en términos de dos parámetros: ÿ (media) y sigma (desviación estándar).
Dadas la media y la desviación estándar (o varianza) de la distribución, podemos encontrar la forma
de la curva. Podemos denotar esto escribiendo X ÿ N(ÿ, sigma).

La curva de distribución normal tiene las siguientes propiedades:

1. La media, la mediana y la moda son iguales.


2. La curva es simétrica con respecto a la media.
3. El área total debajo de la curva es igual a uno.
4. La curva nunca toca el eje x.

La media de la distribución normal representa la ubicación de la centralidad, sobre la cual la


curva es simétrica. La desviación estándar especifica el ancho de la
curva.
La forma de la distribución normal tiene la propiedad de que podemos conocer la probabilidad
de que cualquier valor dado se encuentre dentro de una, dos o tres desviaciones estándar de la
media. Dados los parámetros de la distribución, podemos decir con confianza que el 68,2 % de los
puntos de datos se encuentran dentro de una desviación estándar de la media, el 95 % dentro de
dos desviaciones estándar de la media y más del 99 % se encuentran dentro de tres desviaciones
estándar de la media ( consulte la Fig. 30.3). A continuación se muestra un ejemplo con media = 10
y desviación estándar = 1. En Excel, el comando para obtener la distribución es DISTR.NORM(x, ÿ,
sigma, acumulativo (0/1)). En R, el comando es PNORM(x, ÿ, sigma) (Fig. 30.4).

Sin embargo, calcular la distribución normal puede volverse difícil. Podemos usar las propiedades
de la distribución normal para simplificar este proceso. Para hacer esto, podemos definir la
distribución normal “estándar”, denominada Z, como una distribución que
Machine Translated by Google

956 P. Taori et al.

Fig. 30.3 Forma de la


distribución normal

Fig. 30.4 Distribución


normal con media = 10 y 0,45
desviación estándar = 1 0.40
0.35
0.30
0.25
0.20
0.15
0.10
0.05
0

tiene media 0 y desviación estándar 1. Para cualquier variable X descrita por una distribución
normal, z = (X ÿ ÿ)/sigma. La puntuación z de un punto en la distribución normal indica cuántas
desviaciones estándar se encuentra con respecto a la media. Además, el área debajo de
cualquier punto en una distribución normal es igual al área debajo de sus puntuaciones z
correspondientes. Esto significa que solo necesitamos calcular áreas para puntajes z para
encontrar las áreas debajo de cualquier otra curva normal.
El segundo uso importante de las propiedades de la distribución normal es que es
simétrico. Esto significa que:

1. P(Z > z) = 1 ÿ p(Z < z)


2. PAG(Z < ÿ z) = PAG(Z > z)
3. P(z1 < Z < z2) = P(Z < z2) ÿ P(Z < z1)
Machine Translated by Google

30 Probabilidad y Estadística 957

Las tablas de distribución normal estándar proporcionan valores acumulativos para P(Z < z) hasta que
z = 0,5. Usando simetría, podemos derivar cualquier área debajo de la curva de estas tablas.

La distribución normal es de suma importancia debido a la propiedad de que la media de una muestra
aleatoria tiene una distribución aproximadamente normal con una media igual a la media de la población y
una desviación estándar igual a la desviación estándar de la población dividida por la raíz cuadrada de la
muestra. Talla. Esto se llama el teorema del límite central. Este teorema juega un papel importante en la
teoría del muestreo.

3 Análisis Estadístico

Merriam-Webster define la estadística como una "rama de las matemáticas que se ocupa de la recopilación,
el análisis, la interpretación y la presentación de masas de datos numéricos" . hacerlo de esa manera. Sin
embargo, una estadística también es una "cantidad (como la media de una muestra) que se calcula a partir
de una muestra". Por lo tanto, podemos tener varias estadísticas, o hechos, sobre un conjunto de datos
que hemos recopilado, que hemos encontrado mediante el uso de estadísticas.

Definamos algunos términos útiles.

• Un “conjunto de datos” es simplemente un registro de todas las piezas de información que hemos
recopilado. Si estuviéramos examinando automóviles, nuestro conjunto de datos podría incluir el color,
la edad, el modelo, el lugar de fabricación, etc. de cada automóvil.
• Una “población” es la suma total de todos los datos en el campo que estamos examinando.
Por ejemplo, si quisiéramos investigar el kilometraje de todos los automóviles del mundo, nuestra
población estaría formada por todos y cada uno de los automóviles que se han fabricado. • Una
“muestra” es un subconjunto de la población que hemos registrado. A menudo, las estadísticas deben
basarse en muestras, ya que no es factible registrar a toda la población; encontrar el kilometraje de
cada automóvil que se haya fabricado parece una tarea imposible.

La diferencia entre una muestra y una población es clave para el análisis estadístico. Si usamos un
conjunto de datos que consiste en toda la población de automóviles en el mundo (imaginando por un
momento que hemos podido recopilarlo) podemos saber con certeza que hemos contabilizado todas las
posibles grabaciones que están disponibles. Sin embargo, si estamos usando una muestra que hemos
extraído de la población, no podemos estar seguros de que hay otros hallazgos que hemos pasado por alto
que pueden cambiar drásticamente la naturaleza de nuestro conjunto de datos. Consulte el cap. 2 para más
detalles.
Esto es importante porque la recopilación es solo una parte de las estadísticas. Después de recopilar
datos, debemos analizarlos para encontrar información sobre el conjunto de datos que hemos obtenido,

1https://www.merriam-webster.com/dictionary/statistics (consultado el 22 de junio de 2018).


Machine Translated by Google

958 P. Taori et al.

y por lo tanto sobre el mundo que hemos registrado en nuestro conjunto de datos. Estas herramientas
de análisis, a pesar de ser muy simples, pueden ser increíblemente profundas e informar a las
herramientas computacionales más avanzadas.
El uso de análisis de datos que ayuda a describir, mostrar o resumir datos de una manera que nos
ayude a identificar patrones en el conjunto de datos se conoce como estadística descriptiva.
Las herramientas que usamos para hacer predicciones o inferencias sobre una población se llaman
estadísticas inferenciales. Hay dos tipos principales de análisis estadístico. El primero es el análisis
univariado, que describe un conjunto de datos que solo registra una variable. Se utiliza principalmente
para describir varias características del conjunto de datos. El segundo es el análisis multivariante, que
examina más de una variable al mismo tiempo para determinar la relación empírica entre ellas. El
análisis bivariado es un caso especial de análisis multivariado en el que se examinan dos variables.

Para analizar un conjunto de datos, primero debemos resumir los datos y luego usarlos para hacer
inferencias.
El primer tipo de estadística que podemos derivar de una variable en un conjunto de datos numéricos
son las medidas de "tendencia central", o la tendencia de los datos a agruparse en torno a algún valor.
La media aritmética, o el promedio, es la suma de todos los valores que toma la variable en el conjunto,
dividida por el número de valores en el conjunto de datos. Esta media corresponde al valor esperado
que encontramos en muchas distribuciones de probabilidad.
La mediana es el valor en el conjunto de datos por encima del cual cae el 50% de los datos. Divide
el conjunto de datos en dos mitades iguales. De manera similar, podemos dividir los datos en cuatro
cuartos iguales, llamados cuartiles, o 100 particiones iguales, llamadas percentiles.
Si hay un valor en el conjunto de datos que ocurre más veces (más a menudo) que cualquier
otro, se llama el modo.
El segundo tipo de estadística son las medidas de dispersión. La dispersión es una medida de cómo
los datos agrupados en el conjunto de datos están sobre la media. Ya hemos encontrado la primera
medida de dispersión: la varianza. La varianza también se conoce como el segundo momento central
del conjunto de datos; se mide con la fórmula:

2
(Valor de los datos ÿ Media)
norte

donde n es el tamaño de la muestra.


Para encontrar medidas más altas de dispersión, medimos los valores esperados
de mayores potencias de las desviaciones del conjunto de datos de la media. En general,

r
(Valor de los datos ÿ Media)
r ÿ th momento central = ÿr = = mi , (X - ÿ) r- .
norte

Principalmente, los momentos centrales tercero y cuarto son útiles para comprender la forma de la
distribución. El tercer momento central de una variable es útil para evaluar una medida llamada asimetría
del conjunto de datos. La asimetría es una medida de simetría y, por lo general, la moda puede indicar
si el conjunto de datos está sesgado en una determinada dirección. El coeficiente de asimetría se
calcula como:
Machine Translated by Google

30 Probabilidad y Estadística 959

f(x)
Distribución
simétrica Distribución
asimétrica a la derecha

X
Media = Mediana = Moda Moda Media
Mediana

f(x)

Distribución simétrica con


Distribución
dos modas
asimétrica a la izquierda

X
Moda media Modo Modo
Mediana Media = Mediana

Fig. 30.5 Diferentes tipos de distribuciones

m2
3
ÿ1 =
ÿ3 2

A medida que el sesgo pasa de negativo a positivo, pasa de quedar sesgado


a la derecha sesgada. En cero es una distribución simétrica (Fig. 30.5).
El cuarto momento central se utiliza para medir la curtosis, que es una medida de la "cola"
de la distribución. Podemos pensar en la curtosis como una medida de la probabilidad de que
haya valores extremos en el conjunto de datos. Si bien la varianza es una medida de la
distancia de cada punto de datos desde la media, la curtosis nos ayuda a comprender qué tan
largas y gruesas son las colas de la distribución. El coeficiente de curtosis se mide como (Fig. 30.6):

m4
ÿ2 =
ÿ2 2
Machine Translated by Google

960 P. Taori et al.

Fig. 30.6 Distribuciones


normales con diferente curtosis.
La línea roja representa una
curva de frecuencia de una
distribución de cola larga.
La línea azul representa una
curva de frecuencia de una
distribución de cola corta. El negro
la línea es la curva de campana estándar

Tabla 30.5 Tabla de Color Frecuencia


distribución de frecuencias
Rojo 10
verde 14
negro 12
Blanco 19
Azul 11

naranja 2
Púrpura 1

4 Visualización de datos

La visualización de datos puede ser extremadamente importante, ya que una buena visualización puede aclarar
patrones en el conjunto, mientras que una mala visualización puede oscurecer las características de los datos.
Un método básico para visualizar datos es la tabla de frecuencias. Una tabla de frecuencia simplemente
enumera cada valor en el conjunto de datos y cuenta la frecuencia con la que se han producido esos valores.
Por ejemplo, considere la Tabla 30.5, que enumera el color de los automóviles que circulan por una carretera:
Los gráficos y tablas también pueden ser una herramienta eficaz para representar las características de los

datos.
En un gráfico circular, un círculo se divide en varios "sectores" que indican la proporción de la composición del
conjunto de datos. En un gráfico de barras, el tamaño de la variable para varias categorías se representa como
una barra vertical. En un diagrama de dispersión, los puntos de datos que constan de dos valores se trazan en
un gráfico bidimensional que puede representar una relación entre las dos variables.

El uso de gráficos de barras para representar conjuntos de datos puede volverse visualmente confuso.
Para evitar esto, podemos usar diagramas de caja, que simplifican los conjuntos de datos al dividirlos en
particiones de igual tamaño. Luego, al dibujar un diagrama de caja, podemos comprender intuitivamente si el
conjunto de datos está sesgado y cómo se concentran los datos.

Para dibujar un diagrama de caja, hacemos lo siguiente:

1. Divida los datos en cuartiles 2. En un


eje que represente la variable, dibuje un cuadro de longitud igual a Q3-Q1
Machine Translated by Google

30 Probabilidad y Estadística 961

Fig. 30.7 Diagrama de caja de la


variable de distancia en el conjunto de

datos de automóviles

Fig. 30.8 Gráfica QQ de la variable


de distancia en el conjunto de datos

de automóviles

3. Desde cada lado de la caja, extienda una línea hasta los valores máximo y mínimo 4. Indique la mediana
en la caja con una línea continua

En R, el diagrama de caja se crea usando la función diagrama de caja. La sintaxis es diagrama de caja
(nombre de variable). Por ejemplo, dibujemos un diagrama de caja para la variable de distancia en el conjunto
de datos de automóviles (Fig. 30.7):

> boxplot(coches$dist)

Podemos usar diagramas de caja para entender si una distribución es normal. Para hacer esto, trazamos
dos conjuntos de quintiles en el mismo gráfico. Si ambos son de la misma distribución, deben estar en la
misma línea. (Este enfoque se puede aplicar a dos distribuciones cualquiera. El eje x traza los puntos en los
que, digamos, 5, 10, 15, ... se encuentran el 100 % de las observaciones. El eje y hace lo mismo para la
distribución de comparación. Si el Los puntos 5 y 5 %, 10 y 10 %, etc. son iguales, luego obtenemos una línea
recta). En R, los siguientes comandos trazarán un gráfico QQ y también un intervalo de confianza para la
variable de distancia en el conjunto de datos de automóviles (Fig. 30.8) .

> qqPlot(coches$dist)

En general, en R, el comando qqplot(x,y) producirá el gráfico cuantil-cuantil para las variables x e y. Por
ejemplo, el comando qqplot(cars$dist, cars$speed) produce la gráfica que se muestra en la figura 30.9.
Machine Translated by Google

962 P. Taori et al.

Fig. 30.9 Gráfica QQ de la variable


distancia versus velocidad en el conjunto de
datos de automóviles

5 Análisis bivariado

El análisis bivariado se encuentra entre los tipos de análisis más básicos. Al usar las herramientas
desarrolladas para considerar cualquier variable individual, podemos encontrar correlaciones entre dos
variables. Los diagramas de dispersión, las tablas de frecuencia y los diagramas de caja se utilizan con
frecuencia en el análisis bivariado.
El primer paso para comprender el análisis bivariado es ampliar la idea de la varianza. La
varianza es una medida de la dispersión de una variable. La covarianza es una medida de la
desviación combinada de dos variables. Mide cuanto uno
la variable cambia cuando otra variable cambia. Se calcula como:

El (X, Y) = mi [( X - mi (X )) (Y - mi (Y))] = mi (XY) - mi (X) mi (Y)

Sin embargo, es difícil usar la covarianza para comparar las relaciones entre dos variables,
ya que las unidades de covarianza dependen de las variables originales.
Además, dado que la covarianza depende de la escala, la comparación de diferentes
covarianzas debe tener en cuenta la escala. Para hacer esto, podemos estandarizar la medida.
Esta medida se llama correlación. El coeficiente de correlación (también escrito como Corr) de
dos variables X e Y se denota como ÿxy.

El (X, Y )
ÿxy =
ÿx .ÿy

El coeficiente de correlación siempre se encuentra entre ÿ1 y +1. A medida que se mueve


de negativo a positivo, las variables cambian de moverse perfectamente entre sí a moverse
perfectamente entre sí. En 0, las variables no se mueven entre sí (para ser perfectamente
honestos, debemos decir en un sentido promedio). Las variables independientes no están
correlacionadas (pero las variables no correlacionadas no son independientes con algunas
excepciones, como cuando ambas variables se distribuyen normalmente).
Machine Translated by Google

30 Probabilidad y Estadística 963

Algunas propiedades de covarianza y correlación:

1. Corr(X,X) = 1 (X está perfectamente correlacionado consigo mismo)


2. Cov(X,X) = Var(X) (La dispersión de X respecto a sí mismo es la varianza)
3. Var(X + Y) = Var(X) + Var(Y) + 2Cov(X,Y)
4. Var(X ÿ Y) = Var(X) + Var(Y) ÿ 2Cov(X,Y)

Es importante tener en cuenta que la correlación es una herramienta poderosa pero


simple, que puede no captar observaciones matizadas. Por ejemplo, si X e Y están
relacionados de forma cuadrática, su correlación será 0 aunque sepamos que existe una
relación entre las dos variables. Además, la existencia de puntos de datos no autorizados,
o valores atípicos, puede cambiar drásticamente el valor de la correlación. Lo que es más
importante, es fundamental recordar que la correlación no implica causalidad. El simple
hecho de que dos variables estén correlacionadas de alguna manera no nos brinda suficiente
evidencia para inferir una relación entre ellas. Más detalles se dan en el Cap. 7.
En R, las funciones cov(x,y) y cor(x,y) producen la covarianza y la correlación,
respectivamente. Si hay más de dos variables, dar el nombre del conjunto de datos produce
las matrices de covarianza y correlación. Por ejemplo, estos comandos en el conjunto de
datos de automóviles producen el siguiente resultado:
> cov(autos$dist, autos$velocidad) [1]
109.9469

> cor(autos$dist, autos$velocidad) [1]


0.8068949

Para las variables cars$dist y cars$speed, covarianza = 109.95 y correlación = 0.8068.


Machine Translated by Google

Índice

A ANN, véase Red neuronal artificial (ANN)


Pruebas A/B, 617, 728, 739, 755, 757, 758 cuarteto de Anscombe, 114, 115, 243
Centros Médicos Académicos, 765–771, 785, 787–788 Apache OpenNLP, 298
Manzana, 102, 108, 510, 824, 830
ACF, consulte Función de covarianza automática (ACF) reloj de manzana, 766
Propagación directa de activación, 538 Interfaz de programación de aplicaciones (API), 22,
Intercambio de anuncios, 726, 728 34, 36, 37, 80, 96, 97, 99, 106, 285
servidores de anuncios, 725 Deriva libre de arbitraje, 670
Exponencial simple de tasa de respuesta adaptativa Teoría de precios de arbitraje (APT), 12, 662
alisado (ARRSES), 392, 409, 411, 415 ARCH, consulte el modelo de heteroscedasticidad
condicional autorregresiva (ARCH)
Problema del tejido adiposo, 180–181, 189 ARIMA, véase Media móvil integrada autorregresiva
R2 ajustado , 200–204, 220–222, 239 (ARIMA)
Modelos de inventario avanzados, 839 Media aritmética, 27, 958
Ley del Cuidado de Salud a Bajo Precio (ACA), 13, 770 ARMA, ver Media móvil autorregresiva
Planificación agregada, 337. (ARMA)
Aceite, 617 ARRSES, consulte Suavizado exponencial único de tasa
Airbnb, 652 de respuesta adaptativa (ARRSES)
Criterio de información de Akaike (AIC), 221–223, 263–265, Inteligencia artificial (IA), 71, 509, 527, 533, 848, 867
268, 397, 428, 434, 453, 455
Red neuronal artificial (ANN), 10, 11, 383, 537, 540, 570–
Amazonas, 78, 105, 106, 509, 556, 565, 602, 652, 728, 576, 579, 607, 867
744, 803, 804, 824, 826 modelo ASESOR, 626
Amazon ir, 605 Gestión de activos, 659, 660, 685, 849
Amazon Prime, 550, 652 Sociedad de gestión de activos (AMC), 660, 685, 771–774,
Amazon S3 (Servicio de almacenamiento simple), 78, 782–784, 787, 788
105 Estimación del precio de los activos, 12, 663–672
Servicios web de Amazon (AWS), 105, 106 Optimización de surtido, 603, 613, 614
AmazonDB, 80 Planificación de surtido, 600, 654, 825
AMC, véase Sociedad de gestión de activos (AMC) Atlas de salud y clima, 769.
Anaconda, 919, 924 Coeficiente de autocorrelación, 389
Análisis de varianza (ANOVA), 4, 137, Función de autocovarianza (ACF), 389
166–169, 171, 427, 728, 730–733, 735–738 Codificadores automáticos, 540, 575

Calificación automatizada de ensayos, 584

© Springer Nature Switzerland AG 2019 B. Pochiraju, 965

S. Seshadri (eds.), Essentials of Business Analytics, International Series in Operations Research &
Management Science 264, https://doi.org/10.1007/978-3-319-68837 -4
Machine Translated by Google

966 Índice

Conmutación automática por error del servidor de región, 80 Negro y Scholes, 12


Heterocedasticidad condicional autorregresiva Caja negra, 403
(ARCH) modelo, 396, 397, 667 Recomendaciones combinadas, 564–565
Media móvil integrada autorregresiva Problema de mezcla, 337
(ARIMA), 8, 389, 395–399, 409, 410, 414, 417, intermitentes, 617
605 Bloomberg, 685, 687
Modelos autorregresivos, 389, 625, 667 balizas Bluetooth, 11, 604
Promedio móvil autorregresivo (ARMA), 395–397, 667, Azul allá, 618
700–702 Impulso, 10, 546–547
Axiomas de probabilidad, 947, 948 Arranque, 401, 523, 607, 634
Banco del Eje, 744 Agregación Bootstrap, 546, 607
Acotación, 366, 367
Diagramas de caja, 185, 186, 194, 196, 197, 202, 238, 239,
B 960–962
Babilonia, 767 Transformación de Box-Cox, 180, 232-233
Retropropagación, 573, 592 Método de ramificación y acotación, 7, 365–367
Selección de funciones hacia atrás, 519 Ramificación, 366–367, 369
Embolsado, 10, 546, 547, 607 Conjunto específico de marca, 643
Bolsa de palabras, 6, 286, 297, 532, 563 Ladrillo, 617
Banco de Pagos Internacionales, 686 movimiento browniano, 660
Banner publicitario, 13, 723
Comité de Supervisión Bancaria de Basilea
(BCBS), 672 C
Modelo de riesgo de línea de base, 625 Cáncer, 570, 766
Base, 24, 34, 104, 218, 291, 292, 295, 354, Modelo de valoración de activos de capital (CAPM), 12,
359, 360, 402, 404, 421, 440, 510, 534, 540, 625, 661, 662
644, 650, 662, 676, 690, 714, 716, 721, 739, 751, Sistema de coordenadas cartesianas, 344–345
752, 757, 758, 767, 806, 818, 829, 830, 834, 835, Casandra, 80
879, 915, 945 Rasgos categóricos, 526, 527
Variable respuesta categórica, 248
Modelo de bajo, 626 Gestión de categorías, 825
Descenso de gradiente por lotes, 573, 583 Causalidad, 963
clasificador bayesiano, 10, 488, 493, 529–549 Elegido, 618
estimación bayesiana, 669 Censura, 8, 439–444, 457, 602
Criterio de información bayesiano (BIC), 221, 222, 264, Centro para el Control de Enfermedades (CDC), 284
265, 268, 397 CentOS Linux, 87
Teorema de Bayes, 947–948 Teorema del límite central, 4, 137, 140–141, 148, 316, 957
BCBS, véase el Comité Bancario de Basilea Segundo momento central, 958
Supervisión (BCBS)
Hermosa sopa, 944 Suposición de certeza, 343.
Bernardo Madoff, 684 CF, consulte Filtrado colaborativo (CF)
distribución Bernoulli, 491, 952, 954 CGE, ver Equilibrio general computable
Regresión del mejor subconjunto, 180, 220, 222–223 (GCE)
Mejor-peor conjunto, 643 Método de relación de cadena, 626
Bfonics, 617 Distribución Chi-Cuadrado (ÿ2) , 4, 149, 150, 174, 254, 255
Sesgo-varianza-compensación, 520
BIC, consulte Criterio de información bayesiano (BIC) Análisis de elección, 625
Grandes datos, 1, 3, 32, 42, 71–108, 289, 382, 602, 663, Conjunto basado en elección, 643, 644
741, 794, 863 CISCO, 827
Técnicas de macrodatos, 766–770, 794, 877 Citibank, 660
Clasificadores jerárquicos binarios, 547–549 CIV, consulte Valor de influencia del cliente (CIV)
Análisis bivariado, 958, 962–963 Etiqueta de clase, 461, 510, 511, 514, 515, 524, 528, 535,
Distribuciones bivariadas, 945 545, 571
Machine Translated by Google

Índice 967

Clasificación, 5, 101, 264, 265, 269, 273, Rendimiento constante a escala (CRS), 637, 638
292, 293, 373–374, 402, 432, 461, 478, 479, 484, calificaciones de los consumidores, 643

511–513, 515, 517, 518, 520, 522–549, 554, 570, Variables aleatorias continuas, 948, 949, 951
571, 574, 576, 577, 579, 588, 859 trama, 259–260, Gráficos de contorno, 344, 348
265 tabla, 259–260, 265 Variables de control, 340
Casco convexo, 362, 364, 380
Restricción de convexidad, 638
Clasificador, 10, 510, 511, 522–523, 567, 571, 579, 592 Capa de convolución (CONV), 10, 579–582
Redes neuronales convolucionales (CNN), 10,
Registro de flujo de clics, 73 540, 570, 574, 576–583, 588, 589, 591, 594
Computación en la nube, 103–108
Cloudera, 3, 86–90 Gráficos de coocurrencia (COG), 289–290, 296, 298, 501
Análisis de conglomerados, 625
CLV, consulte Valor de por vida del cliente (CLV) Distancia de Cook, 212, 213, 430
CNN, consulte Redes neuronales convolucionales Funciones de cópula, 12, 672, 673, 676
(CNN) Correlación, 208–211, 219, 273, 300, 389,
Coeficiente de determinación, 191–192, 194 504, 509, 514, 564, 579, 607, 661, 668, 672–677,
COGS, consulte Costo de bienes vendidos (COGS) 679, 683, 696, 715, 716, 739, 826, 962, 963
Problema de arranque en frío, 557, 559, 562
Cole bombardeo sospechosos, 722 Semejanza de coseno, 476, 482, 499, 545, 555, 556, 562
Cole Haan, 617
Filtrado colaborativo (CF), 9, 101, 555, 557, 559, 561, 564 Rentabilidad, 823, 824, 830, 831, 842, 844
Costo de bienes vendidos (COGS), 290, 292, 298–
Colinealidad, 5, 180, 215–224, 228, 239, 241, 243 301, 670, 826
Modelo de regresión de datos de conteo, 421–437
Combinaciones, 28, 60, 118, 167, 238, 295, Covarianza, 187, 188, 212, 242, 492–494, 530, 532–534, 661,
298, 325, 337, 355, 380, 388, 395, 397, 418, 424, 690, 696, 962, 963
432, 437, 466, 477, 481, 488, 497, 514, 518, 526, Covariables, 9, 183, 188, 427, 428, 441,
535, 536, 549, 554, 562, 565, 604, 629, 643, 645, 446–448, 450, 453, 455–457, 606, 625
675, 735, 736, 739, 749, 750, 774, 807, 809, 810, Cox y Snell R2, 257–258, 264, 268
832–834, 878, 900, 927, 945, 953, 954 Modelo de riesgos proporcionales de Cox, 440, 447–449, 456

Adquisición de productos básicos, 14, 829 Repositorio CRAN, 801


Identificador común, 31 CRD, ver Diseño completamente al azar
Comparación de dos poblaciones, 161–162 (CRD)
Complemento, 33, 234, 630, 720, 744, 761, 946 CreditMetrics™, 670
Condiciones de holgura complementaria de Programación de tripulación, 337
optimalidad, 361. Recomendaciones de dominios cruzados, 565–566
Enumeración completa, 23, 366 Datos transversales, 24, 238, 383, 625, 667
Diseño completamente aleatorizado (CRD), 13, 729–732, Enfoque de Croston (CR), 8, 400, 401
735 CRS, consulte Rendimiento constante a escala (CRS)
Capital componente, 679–682 CRV, consulte Valor de referencia del cliente (CRV)
Equilibrio general computable (CGE), 829 Función de distribución acumulativa (CDF), 442, 949
Simulación por computadora, 6, 307, 333
Pares concordantes, 5, 261–262 Riesgo acumulativo, 442, 457
Modelo medio condicional, 642, 700–701 Relaciones curvilíneas, 12, 630–635
Probabilidades condicionales, 444, 532, 674, 947 Atribución algorítmica/personalizada, 747–750
Variación condicional, 396, 397, 430, 701 Análisis de clientes, 12, 75–76, 626, 650–654
Modelos de varianza condicional, 701–702 Identidad del cliente, 32, 33
Intervalos de confianza, 4, 137, 141–151, 161, Valor de influencia del cliente (CIV), 12, 653–654
169, 170, 192–195, 203, 204, 233, 256, 271, 315, Valor de por vida del cliente (CLV), 12, 440, 624, 650–652,
316, 329, 388, 451, 634, 961 654
Análisis conjunto, 12, 624–626, 643–650, 655 Valor de referencia del cliente (CRV), 12, 626, 652–654
Vacas conectadas, 828
Machine Translated by Google

968 Índice

retención de clientes, 600, 651 Red Q profunda (DQN), 575


Satisfacción del cliente, 14, 623, 637, 823, 828, 830–832, 842– Degenerado, 353–355, 377
844, 847, 848, 855, 856, 858 Grados de libertad, 145–147, 149, 150, 160, 164–169, 176,
191, 193–195, 199, 200, 206, 211, 252, 255–257,
Atención al cliente, 284, 306, 308, 824, 825, 830, 844, 855 263, 264, 268, 270, 426, 427, 477, 733

Cíclico, 388–390 Diagnóstico de borrado, 180, 206, 211–215


método Delfos, 626
Previsión de la demanda, 11, 14, 15, 400, 416,
D 607, 654, 704, 798, 811, 813, 814, 819, 824–826
Suavizado exponencial amortiguado, 394, 413
Recopilación de datos, 2, 11, 19–38, 101, 138, 213, Plataforma del lado de la demanda (DSP), 726
285, 384, 440, 600, 603–605, 607, 616, 617, 644– Software del lado de la demanda (DSP), 725
645, 654, 767, 772, 774, 776–778, 851, 856, 879 Codificador automático de eliminación de ruido (DA), 575

Variable dependiente, 183, 257, 263, 266, 269, 272, 273, 576,
Dimensiones de datos, 119, 120, 122, 134 583, 625–627, 630, 633, 635, 737
Marketing basado en datos, 741
Análisis envolvente de datos (DEA), 12, 624, 625, 636–641, Proceso de búsqueda primero en profundidad, 368
655 Umbral de profundidad, 525
Minería de datos, 75, 498, 855 Título derivado, 660
Relaciones de datos y gráficos, 119 Clasificadores descriptivos, 488, 522, 523, 534
almacenamiento de datos, 600 Estadísticas descriptivas, 179, 185–186, 769, 945, 952, 958
Administrador de base de datos (DBA), 48
Sistema de gestión de bases de datos (DBMS), 42–43 Experimento diseñado, 22
Lenguaje de control de datos (DCL), 47, 48 Desviación R2, 25
Lenguaje de definición de datos (DDL), 47–48 DFFITS, 212
Marcos de datos, 101 DHL, 602
Lenguaje de manipulación de datos (DML), 47–48 Prueba de Dickey-Fuller, 305, 666, 693-695
Nodos de datos, 78, 81–84 Dictáfonos, 768
DBA, consulte Administrador de base de datos (DBA) Atribución digital, 654, 722, 744–750
DBMS, consulte Sistema de gestión de base de datos Diarios digitales, 768
(DBMS) Dimensionalidad, 29, 122, 286, 344, 345, 467,
DBN, consulte Redes de creencias profundas (DBN) 482, 531, 559, 572, 606, 616, 661, 663, 683, 685,
DCL, véase Lenguaje de control de datos (DCL) 690, 691, 696
DCO, consulte Optimización de creatividades dinámicas Reducción de dimensionalidad, 101
(DCO) Pares discordantes, 261, 262
DDL, consulte Lenguaje de definición de datos (DDL) Descubrimiento, 524, 549, 550, 570
DEA, consulte Análisis envolvente de datos (DEA) Simulación de eventos discretos (DES), 13, 770, 772, 786
Límite de decisión, 527, 533, 534, 540, 542, 547, 549, 567
Variables aleatorias discretas, 139, 948, 951, 952
Toma de decisiones bajo incertidumbre, 7, 305, 317–327 Análisis discriminante, 533, 625, 747
Clasificadores discriminativos, 522, 523, 534, 535
Unidades de toma de decisiones (DMU), 637, 638 Disjuntos, 946, 947
Árboles de decisión (DT), 10, 11, 182, 273, 519, Dispersión, 8, 185, 238, 428, 707, 708, 950, 951, 958, 962
524, 526, 527, 535, 545–547
Variables de decisión, 305, 317–319, 321, Computación distribuida, 77, 78
324–327, 338–344, 356–358, 360–369, 375–378, Centros de distribución (DC), 827, 828, 830, 831,
605, 608, 812, 840 833, 834, 839, 840, 843
Redes de creencias profundas (DBN), 575 Divide y vencerás, 365, 390, 545
Recomendaciones basadas en contenido profundo, Suposición de divisibilidad, 343
562–563 DML, consulte Lenguaje de manipulación de datos (DML)
Aprendizaje profundo, 6, 10, 106, 374, 516, 534, 540, 569– DMU, consulte Unidades de toma de decisiones (DMU)
594, 605, 607, 661 ADN, 768
Redes neuronales profundas (DNN), 570, 607 DNN, consulte Redes neuronales profundas (DNN)
Machine Translated by Google

Índice 969

Documento, 6, 283, 286–292, 294–301, 476, 735, 736, 739, 747, 748, 776, 797, 801, 805, 806,
482, 484, 510, 511, 517–519, 532, 545, 670, 852 811, 816, 817, 819, 826, 829, 833, 834, 840, 841,
850, 854, 857, 876–878, 886
clasificador de documentos, 510
Matriz documento-término (DTM), 288, 292, 296, 300 Estimación, 7, 9, 12, 33, 139, 180, 186, 189,
193, 195, 199, 211, 223, 233, 250–251, 263, 264,
Dolor, 318, 617 275, 276, 278, 279, 328, 338, 369, 371, 383, 388,
DQN, consulte Red Q profunda (DQN) 397, 398, 441, 443, 449, 459, 462, 488–491, 494,
Programa de recomendación de Dropbox, 652 504, 508, 512, 577, 602, 603, 610, 611, 616, 617,
Valores duales, 355, 358 628, 641, 642, 645, 652, 663–665, 667–669, 683,
Variables ficticias, 5, 180, 224–233, 239, 247, 248, 263, 437, 685, 696, 702, 805, 806, 829, 879, 886, 944
647, 730, 731, 734
Optimización creativa dinámica (DCO), 728
Estimación de parámetros, 189, 199, 223, 250–251,
275
Y Estimadores, 139–141, 148, 149, 190, 191, 199, 223, 396,
eBay, 728, 804 444, 490, 606, 616
Comercio electrónico, 73, 331, 507, 549, 553, 554, 563, 599, Análisis de Euclides, 617
601, 616, 743, 803, 804 Distancias euclidianas, 476, 528
Economías de escala, 343, 757, 833, 834 Eugenio Fama, 662
EDA, consulte Análisis de datos exploratorios (EDA) Ceros excesivos, 430
Modelo de eficiencia, 830 Exogeneidad, 188.
Hipótesis del mercado eficiente (EMH), 662, 665 Algoritmo de maximización de expectativas (EM), 480,
EGARCH, 685, 701–703, 705, 707–709, 713, 716 613
Valor esperado, 140, 147, 148, 151, 186, 307, 328, 424,
Valores propios, 470, 471, 590, 688–690 425, 429, 660, 950, 958
Vectores propios, 470, 688–690 Experimento, 13, 22, 87, 422, 434, 608,
Distribución elíptica, 662 729–733, 736, 737, 739, 752–754, 773, 775, 778–
EMH, véase Hipótesis del mercado eficiente (EMH) 781, 783, 787–789, 877, 946–948, 950–953
Anuncios de interacción, 724
Sesgo de compromiso, 564 Diseño experimental, 644, 647, 649, 723, 728,
Matriz de participación, 551, 556–561 729, 735, 739, 750, 785
Conjunto, 10, 527, 545–547, 549, 607, 886 Variables explicativas, 182, 247–249, 251–253, 255, 257,
Pabellón pensado, 919, 920, 923 262–266, 268–270, 421, 422, 427, 435, 447–449,
integridad de la entidad, 43 451, 642, 886
Entropía, 525, 587, 589 Análisis exploratorio de datos (EDA), 427
Epidemiología, 766 Suavizado exponencial, 391–395, 401, 410, 413, 605
sistemas ERP, 825, 858 Modelo de elección exponencial (EC), 610
Propagación inversa de errores, 539 Variable de exposición, 430 ExtenSim versión 9.0, 786
Estimaciones, 5, 72, 74, 137–151, 163, 164, 167, 169, 170, Datos externos, 23, 908 Punto extremo, 351, 352
179, 180, 183, 190–195, 199–208, 211–215, 218–
221, 223, 225, 228, 229, 232, 233, 239, 241, 242,
247, 249–256, 258, 261–268, 273–276, 278, 284,
292, 296, 309, 310, 313, 315–320, 328, 331, 332,
369–371, 373, 381, 389, 390, 394, 396–398, 408,
409, 425, 427, 428, 431, 432, 434, 436, 440, 442– F
445, 448, 449, 451, 453, 455, 488, 489, 524, 529, Detección de rostros, 570
531, 532, 556, 571, 584, 599, 601, 605, 606, 608, Facebook, 13, 26, 71, 72, 75, 76, 284, 285,
613, 614, 616, 628, 629, 633, 634, 638, 640– 642, 478, 499, 512, 545, 550, 553, 565, 570, 601, 654,
645, 647–649, 652, 662, 663, 665, 668–670, 683– 719, 721, 724, 726, 728, 739, 748–750, 762
686, 690, 692, 702, 708, 709, 715, 728, 732,
Análisis factorial, 295, 625, 663, 690–691
Diseños factoriales, 644, 736, 739
Fama-modelo francés de tres factores, 667
Machine Translated by Google

970 Índice

Minorista de moda, 6, 7, 306, 309, 317, 318, 321, 323, 336, 672–724, 761, 767, 771, 796, 797, 805, 829, 833,
826 834, 839, 875–877, 880, 883–887, 896, 902, 903,
Distribución F, 4, 165, 167, 176, 195, 212, 335, 685, 698, 806, 905, 907–909, 913–915, 925, 936–942, 944, 948–
959 951, 961
Científicos de datos centrados en características, 516

Distribuciones de características, 514 Resonancia magnética funcional, 34


Ingeniería de funciones, 10, 516–519, 532, 537, 574, 577 Teorema fundamental de la valoración de activos,
660
Normalización de características, 517 Teorema fundamental de la programación lineal, 352
Selección de características, 519, 606
Espacio destacado, 486, 488, 522, 524–526, 531, 533, 537,
545, 562
Transformación de características, 517 GRAMO

Banco de la Reserva Federal (Fed), 679, 686 Gaaña, 550


Fedex, 825, 843 Consumo de gasolina, 181–182, 201, 206–208, 210
Métodos de filtrado, 519
Instrumento financiero, 660, 661 Cópulas gaussianas, 672–676, 715
Modelo de atribución de primera interacción/primer clic, 746 GE, 307
Discriminación de género, 182, 224, 229
Primera forma normal (1NF), 44 Condicional autorregresivo generalizado
Análisis discriminante de Fisher, 468, 515 modelo de heteroscedasticidad (GARCH), 397,
FitBit, 766 667, 668, 684, 685, 696–699, 701–706, 708–
Visualización a medida, 124 713, 715
Destello, 723, 826 Modelos lineales generalizados (GLM), 425, 536, 544
Flipkart, 556, 744
canal, 101 Generación de números aleatorios, 333–334
Huellas, 617 Redes adversarias generativas, 540.
Vado, 132, 828 Conjunto genérico, 643
Pronóstico/intervalos de predicción, 7, 193, 195, 204, 385, Geo-cercas, 655, 722
406, 408 Movimiento browniano geométrico (GBM), 660
Pronóstico, 7, 8, 11, 14, 15, 75, 180, 338, Índice de Ginni, 524
381–418, 512, 518, 521, 601, 605–607, 625, 626, GJR, 685, 700–704, 706–709, 712, 716
647, 654, 796, 805–806, 814, 824–826 GLM, consulte Modelos lineales generalizados (GLM)
Goldman Sachs, 660
Pronóstico de la demanda intermitente, 399–400 Google, 6, 37, 38, 77, 105, 106, 284, 301,
Clave foránea, 43, 64, 66–67 383, 498, 499, 509, 520, 570, 601, 720, 722–725,
Selección de función de reenvío, 519 728, 741, 742, 744, 750, 755, 760, 762, 769, 877
Método directo, 263
Transformaciones de Fourier, 517 Adwords de Google, 720, 741, 762
Detección de siniestros fraudulentos, 76 Google Analytics, 720
Conjunto de perfil completo, 643 Gran consulta de Google, 106
Capas totalmente conectadas (FC), 579, 582, 592 Cerebro de Google, 769
Función, 5, 7–9, 61, 102, 149, 185, 191, 210, 234, 249–263, Plataforma en la nube de Google (GCP), 106
266, 269, 270, 275, 276, 279, 300, 308–310, 312, Motor de computación de Google, 106
317, 319, 320, 323, 325, 336, 337, 339, 341, 342, Redes de Display de Google, 724
344, 346–359, 370–378, 382, 389, 390, 396, 397, Google DoubleClick, 725
408, 411–414, 426, 431, 434, 440, 442, 443, 446– Google Maps, 37, 38, 520, 723
448, 451, 453, 455, 456, 463, 464, 470, 472, 476, API de predicción de Google, 106
480, 482, 485–490, 492–494, 524, 528–537, 540– Tráfico de Google, 722
547, 552, 563, 571, 574, 576, 581, 582, 586, 587, Tendencias de Google, 769
591, 592, 601, 607, 609, 610, 638, 640–642, 662, Descenso de gradiente, 573, 581, 583, 594, 607
667, 669, Procesamiento de gráficos, 98, 101
Unidades de procesamiento de gráficos (GPU), 482, 516,
575
Machine Translated by Google

Índice 971

GráficoX, 101 Desafío ImageNet, 570, 578


distribución Gumbel, 610 Técnicas de imputación, 519.
Capital incremental, 679–681
Sangría, 897, 923–925
H Eventos independientes, 946
H1N1, 6, 284 Muestras independientes, 163–166, 169, 170
Hadoop, 3, 72, 77–85, 87, 89, 90, 92–99, 101, 105–108 Variables independientes, 6, 183, 251, 252, 254, 255, 266,
272, 275, 347, 373, 424, 434, 625–628, 630, 655,
Arquitectura Hadoop, 80–82 962
Sistema de archivos distribuido Hadoop (HDFS), 3, 78, 80– Región no factible implica, 346
85, 94, 101 Estadística inferencial, 958
Ecosistema Hadoop, 78–s81 Observación influyente, 211–213, 232, 239
Transmisión de Hadoop, 89, 90, 92, 93 extracción de información, 510
Harry Markowitz, 661 Infraestructura como servicio (IAAS), 104, 105
Harvard, 684, 685 Informática en memoria, 96, 97
HARVEY, 307 Analítica de innovación, 626
Sombrero matriz, 205 Funciones de entrada, 467, 511, 512, 517, 518, 536, 537,
Relación de riesgo, 447, 449, 451 547, 569
Base H, 80, 94 Instagram, 654
HBO, 724 Peligro instantáneo, 442
HDFS, consulte Sistema de archivos distribuido Hadoop Seguros, 8, 15, 71, 76, 213, 284, 338,
(HDFS) 421–423, 430–434, 437, 440, 441, 659, 766, 769,
Operaciones de salud, 766, 768 770, 843, 847–861
Mapas de calor, 125, 126, 617 optimización de enteros, 614
matriz hermítica, 677 Programación entera, 7, 343, 362, 365, 374
Heterogéneo, 292, 483, 495, 498 Entorno de desarrollo integrado (IDE), 891, 892, 919
Heterocedasticidad, 5, 180, 215, 233–237, 239, 249, 667–
669 Distribución integrada, 824, 831
Colmena, 80, 94, 101 Integra R con Python, 944
Datos de exclusión, 387 Efecto de interacción, 11, 227, 626–632, 655, 736–
Suavizado exponencial de Holt (HES), 392–393, 410 739, 755, 759
Modo interactivo, 897, 923
método de Holt, 394, 413 Python interactivo (IPython), 944
Método de tendencia y estacionalidad de Holt–Winters, Internet de las cosas (IoT), 73, 105, 460, 507, 604
393–394 Interpolación, 240, 273, 557, 584, 688
Homogéneo, 291, 666, 817 Lengua interpretada, 890, 919
Hortonworks, 87 Intersección, 32, 125, 345, 346, 348, 350, 353, 503, 504, 946
Prueba de Hosmer y Lemeshow, 252, 257, 263, 264, 271
Intervalo, 2, 4, 7, 8, 24, 27, 83, 98, 131, 137,
Percepción visual humana, 115 139, 141–151, 157, 161, 169, 170, 192, 193, 195,
Modelos de obstáculos, 422, 434–435 203, 204, 233, 256, 271, 313, 315, 316, 329, 373,
Prueba de hipótesis, 4, 137, 151–156, 169–171 385, 388, 399, 400, 406, 408, 414, 429, 441, 442,
444, 451, 574, 619, 634, 661, 663, 674, 961

yo
Características invariantes, 517
IAAS, véase Infraestructura como servicio (IAAS) Gestión de inventario, 824, 826, 827
IBM, 43, 47, 78, 87, 570 Optimización de inventario, 14, 337, 609, 826–827, 829
IBM Watson, 570
Banco ICICI, 636, 637 Rotación de inventario, 826, 830
Perspectivas de fabricación de IDC, 827 IoT, consulte Internet de las cosas (IOT)
IDE, consulte Entorno de desarrollo integrado iPad, 776
(IDE) Conjunto de datos IRIS, 467, 514
Tamaño de muestra ideal, 144, 148, 149 Componentes irregulares/de error, 388
Clasificación de imágenes, 570, 577, 579, 588 Filtrado colaborativo elemento a elemento, 555, 556
Machine Translated by Google

972 Índice

j Líneas de negocio (LoB), 681, 716


JavaScript, 723 LinkedIn, 652
Máquina virtual Java (JVM), 99 Linux, 87, 892
Cine Jio, 556 Eliminación por listas, 272
Función de densidad de probabilidad conjunta, 371, 531 Captura de datos basada en ubicación, 32, 34, 603
JPMorgan, 660, 681, 682 Sesgo de ubicación, 565
Probabilidades de registro, 251, 535

Regresión logística, 7, 249–252, 254, 256–258, 260–264,


k 266, 269–271, 274, 441, 517, 518, 535–537, 540,
Kafka, 101 544, 545, 547, 594, 607, 747
Estimaciones de Kaplan-Meier, 444-445
Kate Spade, 617 Planificación logística, 831, 844
Funciones del núcleo, 489, 490, 528, 544, 545 Logística de distribución, 454
Indicadores clave de rendimiento (KPI), 600 Memoria a largo plazo (LSTM), 574, 590
Klarna, 601 Señor y Taylor, 617
Kline, 605 Tarjetas de fidelización, 600
K-clasificador vecino más cercano (k-NN), 10, 274, 527– Formulación de LP, consulte Programación lineal (LP)
529, 532, 535, 540, 545 LSTM, consulte Memoria a corto plazo (LSTM)
Kohl´s, 603
Curtosis, 698–700, 714, 959, 960
METRO

Aprendizaje automático (ML), 9–11, 15, 71, 95, 98, 101,


L 106, 374, 459–505, 507–570, 600, 601, 605–607,
Multiplicador de Lagrange, 541–543 618, 769, 848, 944, 947
Procesamiento del lenguaje, 6, 283, 286, 294, 297– Traducción automática, 10, 583, 584, 588–590
299, 569, 570 Macy's, 602, 605
traducción de idiomas, 570 MANOVA, 625
Suavizado laplaciano, 524, 532 Anuncios de mapas, 723
Intervalos de confianza de muestra grande, 147–148 MapaR, 87
Modelo de atribución del último clic de AdWords, 746 MapReduce, 3, 77, 78, 80, 81, 84–98, 108, 501–504
Modelo de atribución de última interacción/último clic,
13, 745, 746 Pronóstico de cuota de mercado, 626, 647–648
Último modelo de atribución de clic no directo, 745 Cadena de Markov, 613
Operador de selección y contracción mínima absoluta Arquitectura amo-esclavo, 78, 81
(LASSO) regresión, 11, 180, 220, 223, 224, 338, matplotlib, 944
606 Enfoques de factorización de matrices, 557–559, 561
Valores de apalancamiento, 205–206 mattel, 297
LexisNexis, 769, 854 Estimación de máxima verosimilitud (MLE), 5, 12, 247,
Prueba de razón de verosimilitud, 5, 252, 255, 448 250, 266, 275–279, 371–372, 397, 398, 425, 427,
Modelo de atribución lineal, 13, 746 432, 445, 448, 449, 616, 634, 668, 669, 685
Análisis discriminante lineal (LDA), 10, 533–535
MBC, ver clasificador bayesiano multimodal
Desigualdades lineales, 345 (CMB)
Optimización lineal, 7, 338, 339, 614, 828 McFadden R2, 257–258, 268
Programación lineal (LP), 7, 339–347, 349, Medida de tendencia central, 185, 238, 950, 958
351–369, 374, 375, 377, 378, 380, 610, 637, 638,
809, 812–814, 817 Medida de dispersión, 185, 238, 708, 950, 951, 958,
formulación, 340–342, 353 962
Regresión lineal, 4, 5, 7, 114, 179, 180, Medidas de pureza, 524, 525
184–186, 189, 193, 198, 201, 204, 205, 208, 211, Mide la eficiencia, 636, 637, 639
215, 230, 231, 234–244, 247, 248, 250, 258, 264, mediana, 27, 32, 108, 185, 193, 194, 201, 208, 209, 214–
273, 275, 369, 371, 373, 421–424, 429, 437, 535, 216, 223, 225, 227, 229, 230, 235, 237, 273, 405,
606, 626, 645 425, 427, 433, 435, 454, 456, 488, 808, 952, 955,
958, 961
Machine Translated by Google

Índice 973

Análisis de mediación, 12, 625, 633, 635, 656 Distribución multivariada de Cauchy, 662
Valor medicinal en una hoja, 182–183 Exponencial multivariante, 662
Motor de recomendación basado en memoria, 552, 555, 557 Normal multivariante, 662
Análisis estadístico multivariante, 625
Meses, 99 Distribución t de Student multivariante, 662
Meta-reglas de visualización de datos, 4, 116–133 MySQL, 1, 3, 42, 43, 47–51, 53, 54, 68, 80, 102, 106
Método de mínimos cuadrados, 4, 180, 189, 191, 199,
223, 232, 233, 236, 275
Microsoft, 43, 46, 47, 106, 297, 344, 375, 405, 570, 589
norte

Microsoft Azure, 106 Nagelkerke R2, 257–258, 268


Kit de herramientas cognitivas de Microsoft, 106 Clasificador Naïve Bayes, 10, 531–532
Millennials demográfico, 602 Método ingenuo (NF), 8, 390–391
precio MIN, 62 Reconocimiento de entidad nombrada (NER), 286, 298,
Datos faltantes, 5, 31, 247, 272–274, 372, 384, 526, 687 300
NodoNombre, 81–84
Características que faltan, 519, 526 Espacio de nombres, 83

estrategia de mitigación, 828 Procesamiento del lenguaje natural (PNL), 6, 283, 286,
optimización de enteros mixtos, 614 287, 294, 297–300, 569
Mezcla de gaussianos (MoG), 483, 489, 492–494, Juego de herramientas de lenguaje natural (NLTK), 298
530, 531, 535, 545 Comunicación de campo cercano (NFC), 604, 751
ML, consulte Aprendizaje automático (ML) Distribución binomial negativa, 8, 431
MLE, consulte Estimación de máxima verosimilitud Modelo de regresión binomial negativa, 431
(MLE) Neocognitrón, 579
MLP, consulte Perceptrones multicapa (MLP) NER, ver Reconocimiento de entidad nombrada (NER)
Datos MNIST, 10, 471, 515, 575–576, 582–583 Modelo logit anidado, 11, 613
MNL, consulte Logit multinomial (MNL) Netflix, 19–20, 509, 512, 550, 556, 826
Publicidad móvil, 725 Valor actual neto (VAN), 12, 19, 661
Autocorrección móvil, 584 Analítica

Modo, 27, 30, 99, 219, 273, 549, 550, 611, 719, 723, 858, 897, de red, 722 y
923, 937, 938, 955, 958 diagramas de influencia, 722
Científicos de datos centrados en modelos, 516–517 planificación, 337
Validación de modelos, 237–239 Redes neuronales (NN), 10, 11, 338, 374, 383, 537–540,
Moderación, 625, 628, 635 545, 582, 583, 586, 591, 607, 855
MoG, véase Mezcla de gaussianos (MoG)
Simulación Monte Carlo, 6, 12, 306, 669–672 Diseño de nuevos
Inteligencia de Mordor, 766 productos,
Morgan Stanley, 660 desarrollo 626, 11, 75, 402, 624, 643
Recomendación de película, 563 Problema del periódico, 181
Métodos de promedio móvil (MA), 8, 388, 389, 391, 396, 397 Recomendación de noticias, 563
Nextel, 830
MR, consulte Regresión múltiple (MR) Predicción de la siguiente palabra, 10, 584, 585, 587–588,
Perceptrones multicapa (MLP), 10, 570–576, 579, 594

581–585, 592–594 NFC, consulte Comunicación de campo cercano (NFC)


Clasificador bayesiano multimodal (MBC), 530–531 NLP, consulte Procesamiento del lenguaje natural (NLP)
9/11, 722
Regresión logística multinomial (MNL), 5, 15, 266–269 premio nobel, 660, 662
Nominal, 2, 24, 25, 27, 132, 247, 266, 670, 730
Logit multinomial (MNL), 610–613, 806, 817, 867, 870 Análisis no lineal, 369–374
Optimización no lineal, 369–374
Regresión múltiple (MR), 225, 252, 396, 626, 627, 634 Factorización de matrices no negativas, 558
Clasificador no paramétrico, 527
Prueba de razón de varianza múltiple, 666 Frontera envolvente no paramétrica, 637
Análisis multivariado, 625, 958 Procedimientos de remuestreo no paramétrico, 634
Machine Translated by Google

974 Índice

Herramientas no paramétricas, 11, 625 747, 748, 750, 793–798, 806, 808–811, 815, 817,
Hipótesis de la caminata no aleatoria, 666 824, 826–829, 887, 944
Errores no muestrales, 23 Ordinales, 2, 24, 25, 27, 180, 230, 266, 269, 512
Distribución normal, 141, 149, 156, 157, 185, 187, 193, 231, Modelos de regresión logística ordinal, 266
249, 275, 276, 278, 310, 311, 313, 319, 371, 430, Mínimos cuadrados ordinarios (OLS), 4, 8, 236, 249, 369–
466, 491, 529, 669, 670, 673 , 685, 696–698, 702, 371, 373, 634
708, 816, 839, 955–957, 960 ORIÓN, 307
GARCH ortogonal, 683, 684, 696
Normalidad, 194, 196, 202, 208, 215, 231–233, 238, 239, 466, Ortogonalidad, 468, 469, 739–740
634, 685, 698, 699 Valores atípicos, 5, 8, 205–206, 213, 243, 384, 388,
Normalización, 43–46, 517, 528 403, 404, 462, 488, 490, 493, 517, 545, 963
base de datos NoSql, 80
VAN, véase Valor actual neto (VAN) Proporciones de características
Desviación nula, 425, 427, 428, 433, 435 de salida, 518 Sobredefinido, 354
Hipótesis nula, 151–154, 156–161, 163–167, 170, 171, 193, Sobredispersión, 8, 430–433, 436 Ozon.ru,
195, 206, 253, 255–257, 426, 434, 694 602

Python numérico (NumPy), 944


PAGS

PACF, consulte Función de autocorrelación parcial


O (PACF)
Laboratorios de roble, 617 Comparaciones de observación pareada, 162–163
Función objetivo, 7, 9, 337, 339, 341, 342, Clasificador por parejas, 547–549
344, 346–352, 354, 355, 357, 375, 376, 378, 463– Eliminación por pares, 272
465, 470, 472, 480, 486, 487, 490, 493, 535, 536, Conjunto de herramientas de decisión de Palisade, 310, 311

540–543, 640, 887 pandas, 944


Coeficientes de función objetivo, 341, 357, 378 Cómputo paralelo, 3, 77, 81, 84
Programación orientada a objetos, 918 Parámetros, 4, 5, 30, 33, 138–139, 141, 142, 145, 151, 156,
Reconocimiento de objetos, 510 164, 179, 183, 184, 187–191, 199–201, 204, 212,
Datos observacionales, 636 220, 223, 232, 241, 247, 249–251, 264, 266, 275,
Ecuaciones observacionales, 187 276, 278, 369–371, 374, 377, 392, 397, 398, 400,
navaja de Occam, 520, 574 410–414, 422, 423, 425–428, 430, 431, 433–435,
Razón de probabilidades, 249, 251, 535 442, 443, 447–449, 453, 455, 463–465, 473, 476,
Office365, 105 480–482, 486, 489, 490, 492, 493, 517, 524, 530,
Regresor compensado, 430 531, 535, 536, 542, 544, 545, 558, 572, 574–576,
Variable compensada, 422, 430, 432 579–583, 585–587, 592, 606, 607, 610, 613, 615,
OLS, consulte Mínimos cuadrados ordinarios (OLS) 629, 642, 650, 667–669, 685, 686, 701, 702, 708,
Minorista omnicanal, 11, 616 715, 726, 728, 742, 773, 778, 779, 787, 797, 801,
Prueba de hipótesis unilateral, 159–161 805, 806, 833–835, 858, 877, 896, 915, 940, 941, 955
Ahora, 80
Código abierto, 1, 3, 77, 78, 80, 286, 298, 606, 890, 892,
915, 918 idioma, 890, 918

Eficiencia operativa, 640, 830 Función de densidad paramétrica, 489, 490


Investigación de operaciones (OR), 339, 773, 774, 778, 785 Métodos paramétricos, 456, 634
Modelo paramétrico(ing), 443, 447, 449,
ilusión óptica, 126 453–455, 457, 535
Optimalidad, 7, 338, 344, 356, 359–362, 364, 365, 527 Función de autocorrelación parcial (PACF), 8, 389, 395–
397
Optimización, 7, 9, 14, 21, 34, 49, 97, 325–327, 337–380, 386, Conjunto de perfil parcial, 644
391, 393, 397, 398, 414, 463–465, 470–475, 479, 480, Coeficientes de regresión parcial, 202, 203, 241
489, 490, 493, 497, 521, 535, 541, 542, 549–551, 568, Clasificador de ventana Parzen (PWC), 10, 492, 528–529,
587, 603, 608–610, 613, 614, 672, 531, 540
PasS, consulte Plataforma como servicio (PasS)
Machine Translated by Google

Índice 975

Paypal, 652 P-cuántos, 12, 659-663, 685, 709, 714


PayTM, 565 Análisis predictivo, 75, 338, 381, 382, 407, 601, 824, 855,
PCA, consulte Análisis de componentes principales (PCA) 859
PDF, consulte Función de densidad de probabilidad (PDF) Sesgo de preferencia, 564
Correlación de Pearson, 555–557 Optimización de precios e ingresos, 337, 796
Percentiles, 193, 212, 517, 958 Procesos perceptivos primarios, 113.
Perceptron, 10, 534–536, 540, 570–572, 575, 591, 592 Datos primarios, 21, 31, 284, 683
algoritmo, 534–536, 570, 571, 592 clasificadores Clave principal, 33, 43, 53, 64–65
basados, 535 números primos, 946
Análisis de componentes principales (PCA), 9, 462, 466,
Mapas perceptivos, 625 468–472, 475, 480, 515, 516, 535, 663, 683, 688,
PERCA, 617 690–692, 696, 709
Análisis de desempeño, 659 Probabilidad, 2, 5, 138–140, 142, 143, 147,
Índice de rendimiento (PI), 828 152–157, 159, 161, 163, 185, 186, 203, 242, 248–
Permutaciones, 749, 750, 895, 945, 953 252, 254, 255, 257–262, 265, 269, 272, 275–277,
Personalización, 33, 549, 550, 566, 600, 618, 654, 741 295, 296, 299, 309, 310, 313, 331, 334, 336, 371–
373, 399, 431, 442, 444, 445, 448, 449, 462, 464,
Educación personalizada, 549, 566. 482, 488, 490, 492, 498–500, 512, 524, 525, 529,
Pfizer, 768 531–533, 549, 552, 583–585, 610, 612, 619, 652,
Simulación física, 6, 307 662, 665, 667–669, 671–676, 694, 697, 701, 709,
cerdo, 80 715, 736, 801, 802, 808, 809, 816, 817, 819, 828,
cerdo latino, 80 839, 848, 945–963
PIMCO, 660
Plataforma como servicio (PasS), 105, 106
Plataforma independiente, 890, 919, 943 Función de densidad de probabilidad (PDF), 276, 371, 372,
PMF, consulte Función de masa de probabilidad (PMF) 431, 442, 531–533, 839, 949–951
Pronóstico puntual, 7, 384 Distribuciones de probabilidad, 138, 140, 242, 299, 334,
Punto de venta (POS), 11, 30, 75, 138, 476, 477, 495, 511, 336, 373, 482, 585, 662, 665, 672, 676, 701, 945,
603, 617, 744, 824, 827 954, 958
Distribución de veneno, 8, 423, 424, 430, 431, Función de masa de probabilidad (PMF), 948–950, 954
491, 611, 614, 954–955
histograma de Poisson, 423 probit, 625
Modelo de regresión de Poisson, 8, 421–425, 431, 434, Mapa de proceso de visita a la clínica, 13
435, 437 Función de producción, 640, 641
Varianza de Poisson, 423 Planificación de la producción, 337, 379
Modelos politómicos, 266 Análisis del ciclo de vida del producto, 626, 804
Ponzi, 684 Motor de recomendaciones basado en perfiles, 559–
Agrupación de capas (PISCINA), 10, 579–583, 594 567

sesgo de popularidad, 565 Publicidad programática, 13, 725–728


Población, 4, 13, 23, 31, 132, 137–151, 156, 160–167, 169, Pantalla programática, 725–728
183, 195, 203, 213, 237, 240, 276, 278, 316, 320, Modelo de riesgo proporcional, 9, 440, 447–449, 456, 625
423, 466, 730, 769–771, 805, 829, 830, 850, 876,
878, 886, 948, 957, 958 Supuesto de proporcionalidad, 343
Poda, 366, 367, 496, 497
Media poblacional, 138–144, 146, 147, 149, 151, 156, 163, Regiones puras, 522, 524, 533, 540
164, 166, 167, 276, 316 Pureza-umbral, 525 p-valor,
Proporción de población, 138, 147, 148, 161 157–159, 161, 163, 165, 166, 168,
Gestión de cartera, 659, 663, 664, 683 193–195, 203, 206–209, 214–216, 221, 223, 225,
Selección de cartera, 337 227, 229, 230, 235, 237, 255–257, 263, 268, 270,
POS, consulte Punto de venta (POS) 426, 431–434, 451, 733, 738
Modelo de atribución basado en la posición, 746–747
Probabilidad posterior, 492, 532, 549 PWC, véase clasificador de ventanas Parzen (PWC)
Curva de potencia, 155, 156 P-mundo, 659–663, 665, 714
Machine Translated by Google

976 Índice

Python, 1–3, 47, 49, 68, 84, 87–90, 92, 93, 96, 99, 101, 108, Curva de características operativas del receptor (ROC),
298, 344, 889, 891, 897, 899, 904, 917–944 5, 261
Análisis de actualidad, frecuencia, valor monetario (RFM),
626, 650
Recomendación para venta cruzada, 564
q Recomendación para el valor de por vida, 564
QDA, consulte Análisis discriminante cuadrático Recomendación de fidelidad, 564;
(QDA) Recomendación para la Prevención de Churn, 564
Q-cuántos, 12, 659–661, 663 Recomendación para Upsell, 564
Códigos QR, consulte Códigos de respuesta rápida (QR) Paradigma de recomendación, 461, 512–513
Análisis cuadrático discriminante (QDA), 10, 533–535 Puntaje de recomendación, 521, 552, 556, 557, 562–565,
567
Finanzas cuantitativas, 12, 659, 663 Sistemas de recomendación, 33, 550, 553, 555, 570, 859
Análisis cuantitativo de la cadena de suministro,
844 Capa de unidades lineales rectificadas (RELU), 10,
Cuartiles, 185, 196, 231, 958, 960 579–581

Sesgo de longitud de consulta, 518 Redes neuronales recurrentes (RNN), 10, 540, 570, 571,
Códigos de respuesta rápida (QR), 604, 750 574, 583–590, 593, 594
Mundo Q, 659–661, 663, 669, 672 Red Hat Linux, 87
corrimiento al rojo, 105

Integridad referencial, 43, 64, 66


R Regresante, 183
R2, 191, 192, 194, 200–204, 212, 215, Regresión, 5, 183–184, 222 análisis,
220–222, 237, 238, 240, 257–258, 263, 268 114, 179–245, 247–281, 381, 384, 441, 606, 730, 731,
734, 735, 738 modelos, 5, 8, 11, 13, 179, 180, 184,
Identificación por radiofrecuencia (RFID), 11, 31, 34, 604 185,
187, 195, 252–257, 373, 423–425, 441, 446–447,
Rakuten, 825 512, 518, 527, 625, 730, 734 paradigma, 512, 513
Bosque aleatorio, 10, 527, 546, 607, 867
Muestra aleatoria, 137, 138, 181, 308–310, 312, 315, 317, Regresores, 4, 5, 179–180, 182–185, 187–206, 208, 210–212,
319, 327, 336, 401, 443, 886, 957 216–223, 228, 232–234, 238–241, 426, 430, 436,
449, 454, 456
Variables aleatorias, 140–142, 147, 149, 162, Regularización, 558, 606, 610
308, 309, 312, 313, 315, 317, 318, 321, 323, 324, Aprendizaje por refuerzo, 10, 460, 508, 575
327, 334, 343, 370, 372, 672–674, 772, 787, 801, Sistemas de gestión de bases de datos relacionales
948–952 (RDBMS), 3, 41–68, 76
Hipótesis del paseo aleatorio, 665 Confiabilidad, 31, 81, 441, 830
Conjunto basado en rango, 643 RELU, véase Capa de unidades lineales rectificadas (RELU)
Conjunto basado en calificación, 643 Banco de la Reserva de la India (RBI), 679, 686, 714
Proporción, 2, 24, 27, 122, 131, 164, 191, 194, 212, 249, 251– Residual(es), 4, 179, 190, 191, 193–194, 196, 199–202,
253, 255, 267, 330, 426, 433, 440, 448, 449, 451, 204–206, 209, 212–216, 220, 221, 223, 225, 227,
518, 520, 535, 536, 573, 626, 637, 638, 640, 666, 229–232, 234–239 , 241, 243, 258, 370, 397, 425–
682, 750, 802, 848, 850, 856, 960 427, 429, 430, 432, 433, 435, 449, 470, 558, 665,
667, 682 desviación, 425–428, 432, 433, 435
Funciones de relación, 518 parcelas, 179 , 197, 205–209, 230, 239, 241,
RBI, véase Banco de la Reserva de la India (RBI)
RDBMS, consulte Sistemas de administración de bases de
datos relacionales (RDBMS) 243
RDD, consulte Distribución de datos resistente (RDD) Distribución de datos resilientes (RDD), 99–102
Bucle de lectura-evaluación-impresión (REPL), 97 Variable de respuesta, 5, 183–185, 188, 189, 191–195,
Ofertas en tiempo real (RTB), 13, 725–727, 874 197, 200, 202, 205, 208, 211, 219, 220, 231–
Toma de decisiones en tiempo real, 827 233, 237–241, 244, 247–249, 251, 252 , 369, 371–
Sistemas de localización en tiempo real (RTLS), 777 373, 424, 435, 439, 606, 739
Traducción en tiempo real, 570
Machine Translated by Google

Índice 977

Máquinas de Boltzmann restringidas (RBM), 575 Efectos de escala, 638


Análisis minorista, 11, 12, 337, 599–619, 654, 826 Gráficos de dispersión, 4, 31, 188, 189, 197, 198, 205,
210, 211, 216–218, 466–467, 477, 514, 515, 952,
Venta al por menorNext, 617 960, 962
Paradigma de recuperación, 461, 513 Scikits, 944
RFID, véase Identificación por radiofrecuencia SciPy, 922, 944
(RFID) Rendimiento de puntuación, 520, 526
Análisis RFM, consulte Análisis de actualidad, pedregal, 292
frecuencia y valor monetario (RFM) Modo de secuencias de comandos, 897, 923

Regresión de cresta, 180, 220, 223–224, 606 Optimización de motores de búsqueda (SEO), 721
valores predeterminados correctos, 519 Métodos de búsqueda, 338, 365, 393
@Riesgo, 310–313, 316, 319, 325, 334, 335 Estacional, 8, 37, 331, 388–391, 393, 395, 517
Agregación de riesgos, 672 Ajuste estacional y cíclico, 389.
Aversión al riesgo, 12, 659, 661, 677 SEBI, consulte la Junta de Bolsa y Valores de
Gestión de riesgos, 12, 659, 660, 663, 664, 672–683, 686 India (SEBI)
Datos secundarios, 2, 21–23, 31
RiskMetrics™, 681 Segunda forma normal (2NF), 44–45
Mundo neutral al riesgo, 659, 661 Junta de Bolsa y Valores de la India
Rito de ayuda, 605 (A SEBI), 679, 686
RNN, consulte Redes neuronales recurrentes (RNN) Comisión de Bolsa y Valores (SEC), 679, 686
Curva ROC, consulte Curva de características
operativas del receptor (ROC) Semilla, 312, 314–316, 319, 322, 333, 336, 493, 566, 783
Ronald Fisher, 728, 736
RPy, 944 Segmentación, 11, 30, 283, 291–295, 577, 624, 625, 655, 793,
RStudio, 291, 292, 296, 891–893, 897, 899 794
RTB, consulte Ofertas en tiempo real (RTB) Selfie paredes, 602
Rudyard Kipling, 660 rasgo semántico, 518
Calle La La, 826 Datos semiestructurados, 73, 74
Clasificadores basados en reglas, 523–524 Sensibilidad, 7, 260, 261, 355–360, 376, 377, 379, 480–
481, 783, 787, 795, 813
Análisis de sensibilidad, 7, 355–360, 787, 813
S Análisis de opinión, 6, 13, 283, 291–295, 298, 570, 601, 721
Saavn, 550
Analítica de ventas, 626 Procesamiento secuencial, 95, 98
Fuerza de ventas, 27, 28, 626 Serendipia, 549, 550
Samartán, 826 optimización del nivel de servicio, 337
Muestra, 138–140 SES, consulte Suavizado exponencial simple (SES)
distribuciones, 140–142, 147, 149, 156–158, Teoría de conjuntos, 496, 905, 945–947
163 SFA, consulte Análisis de frontera estocástica (SFA)
error, 23, 309, 316 Precios sombra, 7, 355–361, 364, 375–378, 813, 814, 816
estimaciones, 138, 170, 433
media, 4, 39, 138, 140–143, 145, 146, 148, 152, 156, Shakespeare, 286
167, 310, 316 proporción, 138, 140, 147, 148, 161 Prueba de Shapiro Wilk, 698
determinación del tamaño, 144, 148–149 espacio, 946, Arquitectura de nada compartido, 84
948 estadística, 139, 140, 151, 156, 157, 160, 161 estantes, 617
encuesta, 23 Brillante, 290–293, 296, 299
Tasa de gastos de envío, 833, 834
Relación señal-ruido, 520
Samsung, 744, 824 Suavizado exponencial simple (SES),
SAP HANA, 827 391–392, 395, 399, 400, 409–411, 415
Imágenes de satélite, 570
Modelo saturado, 426, 432, 434, 437 Modelo de regresión lineal simple, 273, 369
SBA, consulte la aproximación de Syntetos y Boylan Algoritmo símplex, 339–340, 351, 354, 355, 361
(SBA)
Machine Translated by Google

978 Índice

Simulación, 6, 7, 12–15, 305–337, 614, 615, Descenso de gradiente estocástico, 573


619, 669–672, 678, 686, 687, 765–770, 772–774, Prueba de estrés (ing), 159, 170, 676
780–785, 876–878, 883–886, 944 Modelado de ecuaciones estructurales (SEM), 634
Datos estructurados, 73, 76
Regresor único, 4, 188–197, 199, 200, 202–205, 210, Lenguaje de consulta estructurado (SQL), 43, 47–68, 80, 99,
234 101
Descomposición en valores singulares (SVD), 557 Sesgo subjetivo, 523, 553
Umbral de tamaño, 525 Problema de selección de subconjuntos, 519
Sesgo, 234, 238, 426–427, 958, 959 Aprendizaje supervisado, 9–10, 374, 460–461, 464, 468, 478,
Teorema de Sklar, 672 504–505, 507–513, 521, 527, 570, 571, 574, 575, 607,
coeficiente intelectual de la escuela, 608, 618
Variables de holgura, 353, 357, 542–544 Interrupción de la cadena de suministro, 14, 827–828
Movimiento deslizante, 349 Gestión de la cadena de suministro, 14, 823, 824, 829
Suavizado, 8, 390–395, 400, 401, 410, 413, 414, 524, 532, Plataforma lateral de suministro (SSP), 726
557, 584, 605 Máquinas de vectores de soporte (SVM), 10, 518, 540–
Sesgo social, 565 542, 544, 545, 747, 896
Gráfico social, 32, 33, 565 Análisis de supervivencia, 8, 9, 439–457, 625, 748
Software como servicio (SaaS), 105 Curva de supervivencia, 439, 443–446, 449, 451, 454, 456,
espacio de solución, 345 457
Recomendación de canción, 563 Distribución de supervivencia, 439
Chispa, 3, 71, 72, 94–102, 105, 108 SVD, consulte Descomposición en valores singulares (SVD)
Ecosistema Spark, 99–100 SVM, consulte Máquinas de vectores de soporte (SVM)
CHISPA MLib, 101 Programa Swachha Bharat (India limpia), 826
CHISPA SQL, 101, 102 Pizarra Swasthya, 767
CHISPA Streaming, 101 Aproximación de Syntetos y Boylan (SBA), 8, 400, 410, 414,
Especificidad, 260–261 418
Reconocimiento de voz, 517, 569, 570, 584 Pensamiento sistémico, 844.
Etiquetador de voz, 510
Correctores ortográficos, 584
Spotify, 601 T

Velocidad, 830 Mesa, 101

SQL, consulte Lenguaje de consulta estructurado (SQL) Destino, 11–13, 20, 27, 33, 292, 316, 331, 375, 405, 512, 535,
Sqoop, 80 557, 589, 604, 617, 624, 625, 636, 643, 655, 720–

capital independiente, 680 722, 724, 725, 727, 728, 741, 747, 757, 794, 818,

Conjunto estándar, 643 826, 839, 873–880


Error estándar, 4, 114, 140, 141, 144, 146, 148, 152, 160, 161,
163, 166, 180, 191–194, 199, 201, 209, 211, 212, 214– Motores Tata, 652
217, 219, 223 , 225, 227, 229, 230, 235, 237, 256, TCL, consulte Distribución t del lenguaje de control de
268, 270, 426, 428, 429, 431, 445, 451, 634, 708, 782 tracción (TCL), 145–147, 160, 163, 173, 193, 206, 662, 702,
703, 707–709
Recomendaciones de contenidos didácticos, 563;
Distribución normal estándar, 143, 145–147, 163, 171, 231, Explosión de la burbuja tecnológica, 827

670, 674, 955, 957 Telemedicina, 13, 766, 767

Estacionariedad, 389, 395, 397, 692–695 Representación del producto tensorial (TPR), 574
Estacionario, 389, 396, 397, 665 Teradata, 87

Muestreo estadístico, 309, 316, 327 Matriz de término-documento (TDM), 6, 286, 288,
Modelos de estado, 944 291, 294, 296, 298, 299
raíz-palabra, 287 Frecuencia de término—-Documento inverso
Esteban Ross, 662 Frecuencia (TFIDF), 288, 289, 300, 476, 482, 545
Método paso a paso, 221, 263
Regresión paso a paso, 180, 220, 222, 223 Prueba de hipótesis, 192–193
Arreglo de puntadas, 618 Pruebas de significancia, 200
Análisis de frontera estocástica (SFA), 625, 626, 640–642 Análisis de texto, 5–6, 283–301, 928
Cuerpo de texto, 287, 291, 295, 584, 595
Machine Translated by Google

Índice 979

modelo theta, 395, 410, 413 UPS, 307, 825


Tercera revolución industrial, 71 Proveedores de Urban Outfitters, 617

Tercera forma normal (3NF), 45–46 Filtrado colaborativo usuario-usuario, 555


Thomson Reuters, 687
Persistencia de umbral (TP), 664, 676, 685–687,
703, 707, 709 EN

Timberland, 617 Validación, 5, 31–32, 180, 237–239, 244, 270, 521, 574, 867
Modelo de atribución de decaimiento de tiempo, 746–747
Serie temporal, 7, 8, 24, 132, 383–384, 386–388, 403, 404, Valoración, 12, 19–21, 440, 624, 659, 663, 796, 802, 804–
605, 625, 667, 692, 694, 867 805, 815
Tiempos Inc, 724 Valor en riesgo (VaR), 12, 664, 676–680, 685, 686, 696,
Tiempo hasta el evento, 8, 439–441, 443 702, 703, 707–709, 714–716
Tiempo de recuperación (TTR), 828 VaR, ver Valor en Riesgo (VaR)
teorema de separación de Tobin, 662 Rendimiento variable a escala (VRS), 637, 638
Tobías, 625 Varianza, 4, 5, 12, 27, 32, 147–151, 161,
Tokenización, 286, 287, 298, 300 164–167, 170, 180, 186, 188, 189, 192, 193, 195,
Minería de temas, 6, 295–297, 299 198, 200, 201, 204, 205, 211–213, 218, 233, 239,
Lenguaje de control de tracción (TCL), 47, 48 252, 273, 310, 337, 371, 389, 396, 397, 400, 423,
Análisis de compensación, 626, 647–648 427, 428, 430, 431, 433, 434, 462, 468–471, 474,
Tendencia, 13, 76, 113, 132, 208, 210, 220, 273, 475, 493, 515, 517, 518, 546, 606, 607, 611, 642,
388–395, 397, 403, 404, 408, 410, 412, 565, 601, 653, 662, 665, 666, 668, 694, 697, 699–702, 709,
602, 604, 607, 630, 666, 667, 692, 694, 720, 721, 776, 777, 784, 799, 817, 867, 879, 950–952, 954,
724, 741, 768, 794, 795, 815, 824, 826, 847 955, 958, 959, 962

Trilateración, 722
Medios recortados, 388 Proporciones de descomposición de la varianza (VP), 218,
TripAdvisor, 721 219, 241
Twitter, 13, 36, 37, 71, 550, 553, 565, 601, 719, 721, 724, Factores de inflación de varianza (VIF), 218, 219, 239
739, 748, 756, 762 Variación entre muestras, 168
Teorema de los dos fondos, 662 Variación dentro de las muestras, 168
Diseños factoriales de dos niveles, 736, 739 Variedad, 30, 31, 73–75, 117, 291, 330, 387,
Error tipo I, 4, 152, 153, 156, 157, 159, 171 459, 460, 465, 467, 477, 484, 494, 498, 504, 507,
Error tipo II, 4, 153, 156 508, 534, 536, 540, 545, 557, 567, 577, 582, 588,
600, 611, 660, 766, 769, 786, 809, 853, 890, 908,
918
EN EN CONTRA, 14, 830–844
Uber, 20, 21, 35, 75, 479, 652, 794, 803 Modelos de regresión automática vectorial (VAR), 625,
Desequilibrado, 24 667

Región factible ilimitada, 345–347 Velocidad, 31, 72–74


Modelización de la incertidumbre, 308 Función de velocidad, 518
optimización sin restricciones, 338 Veracidad, 73, 74
Objetos unidimensionales, 906 verizon, 830
Clasificador bayesiano unimodal (UBC), 530 Análisis
Unión, 495, 946 de video, 617
Raíz unitaria, 389, 395, 694 subtítulos, 570
Análisis univariante, 625, 958 búsqueda, 570
Juego universal, 946 vigilancia, 570
Laboratorio AMP de la Universidad de California, Berkeley, VIF, consulte Factores de inflación de varianza (VIF)
95 Máquina virtual (VM), 3, 86–90, 99
Impuntualidad, 772, 780, 781, 787, 788 Espejo virtual, 306, 308
Datos no estructurados, 23, 31, 73, 74, 284, 604, Instituto Fisiológico Humano Virtual, 768
605, 607, 752, 891, 922 Vistaprint, 601
Aprendizaje no supervisado, 9, 10, 292, 295, Sistema de la corteza visual, 579
459–505, 508, 510, 530, 532, 575, 688 VM, consulte Máquina virtual (VM)
Machine Translated by Google

980 Índice

Volumen, 31, 73, 74, 76–79, 181, 202, 203, 307, 309, 318, Organización Mundial de la Salud, 769
323, 384, 399, 507, 531, 580, 581, 593, 601, 663, Segunda Guerra Mundial, 307

682, 720, 782, 784, 793, 824, 832–837, 839, 840, métodos de envoltura, 519
849, 877 Escribir una vez Leer muchas (WORM), 81
VRS, consulte Rendimiento variable a escala (VRS)

X
En
XGBoost, 527, 547
Problema de equilibrio salarial, 182
Prueba de Wald, 5, 252, 255–256, 270
Anuncios de papel tapiz, 724 WalMart,
Y
300, 604, 794, 823, 843 WarbyParker.com,
Yale, 684, 685
616 Transformaciones Wavelet, 517
Tecnologías portátiles, 13, 766, 767 Web Otro negociador de recursos más (YARN), 3,
78, 80, 81, 93–95, 98, 99
scraping, 35, 300, 890, 918 Desarrollo de sitios
Rendimiento al vencimiento, 665, 666
web, 890, 918 Distribución Weibull, 455, 457
Índice de Youden, 5, 259–261, 271
Números enteros, 946 Wikipedia, 300, 383,
570 Medios winsorizados, 388 Wordcloud, 6, Youtube, 71, 74, 291, 478, 495, 509, 512, 513, 550, 553,

288, 289, 292, 294, 296, 297, 299–301 564, 744

WordNet, 576, 577 Word2vec, 584, 587


Recomendaciones basadas en el flujo de
trabajo, 566–567 Optimización de la fuerza de trabajo, DE

337 Unidades de trabajo, 772 Bono cupón cero, 665


Modelos sin inflar, 422
Modelos Poisson inflado cero (ZIP) y binomial negativo
inflado cero (ZINB), 434–435

Zomato, 509

También podría gustarte