Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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.
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.
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
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
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
Lugares 58 17 22 3 100
Deportes 500 Día laborable Día laborable Fin de semana Fin de semana
Lugares 34 9 6 1 50
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
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).
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
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:
< Copie y pegue el nombre de la ruta tal como está. Asegúrese de pegar en la consola R, no en el editor.>
< tamaño de paso, es decir, mínimo, mínimo + tamaño de paso, mínimo + 2* tamaño de paso, ...
será simulado>
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
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.
> simulación()
Ingrese la ruta completa de la carpeta de la fuente de datos: D:\MyData\InfoMedia_Solutions
**************************************************** ****************
Nota: Ingrese todos los valores a continuación solo como números enteros positivos.
**************************************************** ****************
**************************************************** ***************************
Puede consultar los archivos a continuación (csv e imagen) en el directorio de trabajo actual.
>
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)
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
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.
(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 .
(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
(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.
(c) Reúna los modelos anteriores para estimar mejor el alcance total.
6. Optimización (Tarea 3): Ahora, optimizamos el alcance total usando optimización no lineal.
tcnicas de mizacin (consulte el Cap. 11 Mejoramiento):
• 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
1. Introducció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
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.
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
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
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.
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
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
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
Í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
svmdoc: Support Vector Machines --- la interfaz para libsvm en el paquete e1071 (fuente, pdf) svminternals: svm()
internals (fuente, pdf)
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.
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:
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()
[1] ”/Usuarios/rdirectorio“
Para cambiar el directorio de trabajo, use el comando setwd() con el nombre del directorio como
argumento:
> setwd('/Usuarios/otroRDirectorio')
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
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.
[1] 2.995732
[1] 105
[1] 7
> piso(5.3)
[15
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 (#).
Código
Producción
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
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
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.
> x <- 5
>y=5
> imprime(x)
[1] 5
> imprimir(y)
[1] 5
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
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
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:
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
28 Introducción a R 903
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.
[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.
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
>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:
[1] 1 4
[1] 1 3 2 4
28 Introducción a R 905
> conjuntoA <- c(”a”, “b”, “c”, “d”, “e”) > conjuntoB <- c(”d”,
“e”, “f”, “g”)
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.
[1] FALSO
> x[3]
[[1]]
[1] FALSO
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
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[1]
$col1 [1]
123
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
[,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
> tenue(m1)
[1] 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
uso de los operadores rbind y cbind . Mientras que rbind unirá las columnas por fila, cbind unirá
las columnas de otra manera. Por ejemplo:
> cbind(x,y)
xy [1,]
1 12 [2,] 2 13
[3,] 3 14 [4,] 4
15 [5,] 5 16
[6,] 6 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.
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
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
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.
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[,2]
[1] VERDADERO FALSO FALSO VERDADERO VERDADERO FALSO FALSO VERDADERO VERDADERO FALSO
FALSO
[12] VERDADERO VERDADERO FALSO FALSO VERDADERO VERDADERO FALSO FALSO VERDADERO
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
28 Introducción a R 911
7 %/% 2 daría 3.
< (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 devuelve Verdadero. Si ambos operandos son números, primero se convierten a un tipo
común. De lo contrario, siempre devuelve False.
x = 2; y = 2; x == y devuelve Verdadero. x
= 'cadena'; y = 'stR'; x == y devuelve Falso. x =
'cadena'; y = 'cadena'; x == y devuelve Verdadero.
x = 2; y = 3; x != y devuelve Verdadero.
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“
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
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
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.
}
Machine Translated by Google
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:
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.
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
Producción
[1] 15
Código
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
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
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.
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
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.
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.
1. Panel de navegación: enumera todos los paquetes disponibles, los paquetes instalados y los
historial de paquetes instalados.
Machine Translated by Google
2. Panel principal: este panel le brinda más detalles sobre cada paquete y le permite
gestionar los paquetes a nivel individual.
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
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.
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.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
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
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.
Código
Producción
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.
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
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
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
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
Producción
2
02
<escriba 'int'>
<escriba 'str'>
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.
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
>>> 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
print(nuevacadena [3:7]) # Imprimirá del 4to al 6to carácter print(nuevacadena [3:]) # Imprimirá todo desde
el 4to carácter hasta el final
Producción
¿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.
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
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']
Producción
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
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 ... )
Producción
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
Producción
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).
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:
3 * 6 daría 18; '3'*4 daría como resultado '3333'; 'ab*4' daría como resultado 'abababab'.
5 // 2 daría 2.
< (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
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 = 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,
not (booleano NOT): Si x es Verdadero, devuelve Falso. Si x es Falso, devuelve Verdadero. Para
ejemplo,
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
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
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
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
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
Producción
1
2
3
4
5
6
7
Para extremos de bucle
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
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
Producción
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.
Leerá una línea de la entrada del teclado y se la dará al programa como una cadena.
“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.
Por ejemplo:
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.
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
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
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
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
Cuando llamamos a write(), escribirá los datos como una cadena en el archivo que abrimos anteriormente.
Sintaxis
archivo_objeto.escribir(cadena);
Código
# Cerrar archivo
archivo1.cerrar()
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
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
Producción
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
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.
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
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
La declaración de "retorno" se usa para regresar de una función, es decir, salir de la función. Opcionalmente, también
Código
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
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
ú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".
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
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:
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.
import mymodule
mymodule.sayhi()
print(”version {}“.format(mymodule.__version__))
Producción
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.
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
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
2 Fundamentos de la Probabilidad
1. La probabilidad de que ocurra cualquier evento debe estar entre cero y uno.
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.
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)
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
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.
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
X
abdominales
PAG{a ÿ x ÿ b}
+ÿ
Y [X] = xf (x)dx
=
ÿÿ
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
ÿ = = xf(x) dx
V sobre(x) = E(x ÿ ÿ) 2
Var(X) = E X2 ÿ E(X)2
> parcela(coches)
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
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.)
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
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.)
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).
, eÿnÿp.(n ÿ p) x -
P (X = x) =
¡X!
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).
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
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:
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.
• 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,
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
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
f(x)
Distribución
simétrica Distribución
asimétrica a la derecha
X
Media = Mediana = Moda Moda Media
Mediana
f(x)
X
Moda media Modo Modo
Mediana Media = Mediana
m2
3
ÿ1 =
ÿ3 2
m4
ÿ2 =
ÿ2 2
Machine Translated by Google
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.
datos de automóviles
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
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:
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
Índice
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
Í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
968 Índice
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
Índice 971
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
Í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
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
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
Índice 975
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
Índice 977
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
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,
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
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
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,
Zomato, 509