Estadísticas del blog, versión 2017

Antes de acabar el año, es momento de hacer un repaso a las estadísticas del blog. Sé que el año no ha acabado, pero no creo que vaya a haber muchos cambios hasta que sean las campanadas.

Usuarios

En general 2017 ha sido un muy buen año. A fecha del 10 de diciembre he recibido 24.677 sesiones, de 19.618 usuarios y 29.925 visitas a páginas (al acabar diciembre serán más de 30.000 fácilmente). Todo esto sin contar a la gente que entra con un bloqueador de anuncios, que puede bloquear Google Analytics también. Según PageFair, en España el 19% de los usuarios de escritorio usan un AdBlocker. La gráfica que se dibuja es un poco rara sin embargo.

Prácticamente se ve plana debido al gran pico que hubo a finales de julio. De esta gráfica solo se puede apreciar otro pico el 20 de abril. Estos picos se relacionan con dos de los artículso más leídos este año en el blog.

El público no ha evolucionado mucho. Ha aumentado ligeramente el procentaje de mujeres y han aumentado los grupos de edad más alta, mientras que la franja 18-24 ha sufrido un descenso.

En el idioma tampoco hay grandes sorpresas. La mayoría entráis con español, catalán o en-us (que no deja de ser una configuración por defecto muy común). Las visitas en alemán, francés las achaco principalmente a emigrantes y portugués de Brasil a que mucha gente de allí sabe algo de español.

Si bien otros años estaba más compensada la cosa, este año España acapara la mayor parte de las visitas (15.227). Le sigue muy de lejos, pero de forma nada despreciable Méxio y Argentina (1.588 y 1.003 respectivamente). Para completar los 10 países que más visitan mi blogn tenemos a Colombia, Estados Unidos, Chile, Venezuela, Perú, Alemania y Reino Unido.

Estados Unidos ya lleva siendo durante bastantes años un país hispano más, relativamente potente, en lo que es este blog y como siempre, me sorprende la falta de presencia de algunos países latinoamericanos como Uruguay o Ecuador, que podrían estar perfectamente por encima de Alemania o Reino Unido.

Tecnología

Respecto a los navegadores hay una tendencia clara en el uso de Chrome. Firefox se mantiene en segunda posición y Safari consolida su tercera posición. Vemos que Edge todavía no ha superado a Internet Explorer en este blog. El navegador más extraño con el que se ha accedido a mi blog es Puffin.

En sistemas operativos no hay apenas cambios. Windows y Android siguen siendo los reyes. Mención especial a aquellos que usan Firefox OS y BlackBerry.

Adquisición

Esta es una de mis partes preferidas, saber de dónde venís. Menéame repite como una web desde las que entra más tráfico al blog (este año este blog llegó a portada). Google aporta muchas visitas, como el gran buscador. RSS en realidad es una categoría peligrosa, puesto que hay varios sitios que toman la fuente RSS (planetas, bots, …). Finalmente, Facebook parece despegar, aunque Twitter sigue arriba. Mención especial a Instagram (sorprendente para mí, la verdad) y… sigo sin saber como se contabilizan tantas visitas desde ads.adpv.com, pero creo que es un error en algún sitio.

Otras webs que me han enlazado: foroantiusura.org, hispachan.org, Pocket, iessanvicente.com, campusvirtual.uva.es, aulas.inf.uva.es, Mastodon, rust.libhunt.com, GNU Social, www3.gobiernodecanarias.org, … Desde el infame DesdeLinux todavía llega gente a mi blog…

Contenido

Y si, llegó la hora de saber cuáles han sido las páginas más vistas. La ganadora indiscutible es Todo lo que debes de saber sobre las tarjetas de crédito, débito y prepago, un artículo algo diferente en el blog, sobre uno de los muchos temas secundarios que me interesan y que gustó mucho. Este artículo causó el pico de finales julio. A continuación un clásico, Tutorial de GnuCash, que fue publicada el año anterior y sigue atrayendo a miles de personas. ¿Os acordáis del pico de abril? Fue provocado por Novedades de C++17. Y es que, a la gente le interesa mucho C++. Y solo después de estos tres artículos tenemos a la portada del blog. El tutorial de Rust, de CMake y de WiX también han recibido bastantes visitas. Y el artículo de la Calculadora de 4 bits sigue recibiendo muchas visitas desde el año 2013 (es de los que estaban en el primer Blogger del principio).

Estadística en Python: distribución binomial, normal y de Poisson (Parte VI)

Después del rollo del capítulo anterior, vamos a entrar en algo más práctico, modelos de probabilidad. Hemos hablado de las funciones de probabilidad y de densidad, sin embargo, nos falta algo muy importante. ¿Cuáles son esas funciones exactamente? Es donde entran los modelos de probabilidad, modelos estadísticos que se pueden ajustar a una variable aleatoria con mejor o peor precisión y que nos dan los valores de la probabilidad. Empecemos, pero antes hagamos un apunte sobre las equivalencias en SciPy:

  • cdf(x) – Función de distribución F(X)
  • sf(x) = 1 – cdf(x)
  • pmf(x) – Función de probabilidad f(x) (distribuciones discretas)
  • pdf(x) – Función de densidad f(x) (distribuciones continuas)
  • ppf(x) – Función inversa a cdf(x). Nos permite obtener el valor correspondiente a una probabilidad.

Distribución Binomial

Un ensayo de Bernouilli se define como un experimento donde puede darse un éxito o fracaso y donde cada ensayo es independiente del anterior. Por ejemplo, un ensayo de Bernoulli de parámetro 0.5 sería lanzar una moneda a cara o cruz (mitad de posibilidades de cara, mitad de posibilidades de cruz).

Si repetimos N veces los ensayos de Bernouilli tenemos una distribución binomial.

\(
X \rightarrow B(N,P)
\)

SciPy nos permite usar binom para trabajar con distribuciones binomiales.
Ejemplo: Un proveedor de DVDs regrabables afirma que solamente el 4 % de los
artículos suministrados son defectuosos. Si un cliente compra un lote de 25
DVDs, ¿cuál es el número esperado de DVDs defectuosos en el lote? Si el cliente
encuentra que 4 de los DVDs comprados son defectuosos, ¿debe dudar de la
afirmación del vendedor?
El número de DVDs defectuosos esperados es el equivalente a decir el número medio de DVDs defectuosos.

Es decir, de media habría 1 DVD defectuoso en el paquete. mean calcula la media de la distribución.

Para saber si hay que fiarse del vendedor vamos a calcular cuál era la probabilidad de que nos tocasen 4 DVDs defectuosos.

Es decir, la probabilidad que ocurriese era del 1%. Podemos sospechar del fabricante. cdf calcula las probabilidades acumuladas. En este caso tenemos que calcular la probabilidad de que hubiese 4 o más fallos, Pr{X>=4}. Una manera fácil de calcularlo es hacer 1-Pr{X<4}. cdf(n) nos permite calcular probabilidades acumuladas hasta N. Otra opción sería simplemente obtener la probabilidad de 0 DVDs defectuosos, 1 DVD defectuoso, de 2 DVDs defectuosos, de 3 DVDs defectuosos, sumarlo y restarlo de 1.

pmf(n) devuelve la probabilidad de que X=N, Pr{X=N} Esto solo tiene sentido en ciertas distribuciones, las discretas, como es el caso de la binomial.

Podemos calcular la gráfica de esta distribución binomial.

En el gráfico también se puede ver que las probabilidades de tener 4 o más DVDs defectuosos son mínimas.

Distribución hipergeométrica

La distribución hipergeométrica es un modelo en el que se considera una población finita de tamaño N en la cual hay M individuos con una determinada característica y se seleccionan n y queremos saber la probabilidad de que haya cierto número de individuos con esa característica en la selección. Para trabajar con estas distribuciones, SciPy trae hypergeom.

Ejemplo: Se formó un jurado de 6 personas de un grupo de 20 posibles miembros de los cuales 8 eran mujeres y 12 hombres. El jurado seelecionó aleatoriamente, pero solamente tenía 1 mujer. ¿Hay motivos para dudarde la aletoriedad de la selección?

La probabilidad de que ocurriese lo que ocurrió es del 18,7%, una probabilidad suficientemente alta como para pensar que no hubo manipulación. Podemos dibujar esta hipergeométrica:

Como se puede observar en la gráfica el caso más probable, con cerca del 35% de posibilidades era que hubiese dos mujeres seleccionadas. Destacar también, que la probabilidad de que haya 7 mujeres en el jurado es cero, porque solo hay 6 plazas en el jurado.

Distribución de Poisson

La distribución de Poisson recoge sucesos independientes que ocurren en un soporte continuo. El número medio de sucesos por unidad de soporte se le conoce como λ y caracteriza la distribución. poisson nos permite crear distribuciones de este tipo.

Algunos ejemplos de distribuciones de Poisson: número de clientes que llegan cada hora a cierto puesto de servicio, número de averías diarias de un sistema informático, número de vehículos que pasan diariamente por un túnel, número de defectos por kilómetro de cable, …

Ejemplo: La impresora de una pequeña red informática recibe una media de 0.1 peticiones por segundo. Suponiendo que las peticiones a dicha impresora son independientes y a ritmo constante, ¿cuál es la probabilidad de un máximo de 2 peticiones en un segundo? Si la cola de la impresora tiene un comportamiento deficiente cuando recibe más de 10 peticiones en un minuto, ¿cuál es la probabilidad de que ocurra esto?

Variable Y: número de peticiones a la impresora en un minuto (y la probabilidad de que suceda)

Distribución exponencial

Para modelizar el intervalo entre dos sucesos consecutivos que siguen una distribución de Poisson se usa la distribución exponencial de parámetro λ.

Ejemplo: El proceso de accesos a una página web se produce de una forma estable e independiente, siendo el intervalo entre dos accesos consecutivos una v.a. exponencial. Sabiendo que, de media, se produce un acceso cada minuto,¿cuál es la probabilidad de que no se produzcan accesos en 4 minutos? y ¿cuál esla probabilidad de que el tiempo transcurrido entre dos accesos consecutivos sea inferior a 90 segundos?

Esta distribución en SciPy es un poco rara, ya que no está implementada como podría esperarse.

Distribución normal

Probablemente el modelo de distribución más usado y conocido. Lo usamos para describir variables reales continuas.

Ejemplo: La duración de un determinado componente electrónico, en horas, es una v.a. que se distribuye según una N(2000,40). ¿Cuál es la probabilidad de que la duración de una de esas componentes sea superior a 1900 horas? ¿y de que esté entre 1850 y 1950 horas?

Podemos representar esta variable.

Estos modelos no son perfectos, pero son lo suficientemente flexibles para ser un buen punto de partida.

Estadística en Python: cálculo de probabilidades (Parte V)

Ahora entramos en una de mis partes favoritas de la estadística, el cálculo de probabilidades, sin embargo va a ser muy teórico, sin apenas Python. En primer lugar vamos a definir algunos conceptos:

  • Experimento cualquier proceso de obtención de una observación o medida en el que se suponen fijos ciertos factores. Los experimentos puede ser deterministas si solo es posible un resultado (aunque sea desconocido) y aleatorios. Llamamos azar a los factores que no controlamos de un experimento aleatorio.
  • Probabilidad: la incertidumbre de observar un determinado resultado antes de que se realice el experimento.
  • Suceso: el resultado o conjunto de resultados de un experimento aleatorio
  • Espacio muestral: el conjunto de todos los resultados posibles de un experimento aleatorio
  • Suceso complementario de A: lo que ocurre cuando no ocurre A
  • Suceso seguro: Aquel que ocurre siempre. Se representa con Ω
  • Suceso imposible: Aquel que no forma parte del espacio muestral
  • Sucesos incompatibles: Aquellos que no pueden ocurrir de forma simultánea

El cálculo de probabilidades nos sirve para valorar el riesgo de nuestras decisiones, anticipar eventos y valorar si nuestras hipótesis eran razonables.

Para el cálculo de probabilidades vamos a seguir la axiomática de Kolmogoroff.

Regla de Laplace

La ley fundamental de las probabilidades, define la probabilidad como la razón entre el número de casos favorables y el número de casos totales.

\(
Pr\{A\} = \frac{k}{n}
\)

Esto es muy sencillo de utilizar y no voy a poner código Python. Para calcular tanto el número de casos favorables como el de casos totales es recomendable tener nociones de combinatoria, que resulta extremadamente útil en ese tipo de situaciones.

Probabilidad condicionada

¿Qué ocurre si disponemos de información suplementaria? Formulado de otra forma, ¿qué pasa si queremos calcular la probabilidad de A sabiendo B ha ocurrido? ¿Daría el mismo resultado? La respuesta es que no, la probabilidad de A condicionada por B se define de la siguiente forma:

\(
Pr\{A | B\} = \frac{Pr\{A \cap B \}}{Pr\{B\}}
\)

¿Cómo se calcula la probabilidad de la intersección de A y B?

\(
Pr\{A \cap B\} = Pr\{A\}Pr\{B|A\}
\)

Aquí nos damos cuenta que si A es independiente de B, la probabilidad de su intersección es simplemente el producto de Pr{A} y Pr{B}.

Teorema de Bayes

La generalización de lo anterior es el conocido teorema de Bayes. Podemos usarlo para resolver una gran cantidad de problemas.

En la provincia de Soria, el negocio de acceso a Internet se reparte entre dos operadores, Timofónica y Robafone y dos únicas marcas de routers, Xisco y Nuaweii. En Soria, la cuota de mercado de Timofónica es del 60% y de Robafone el resto. El 70% de los usuarios dispone de router Xisco y el 30% de ambas marcas. Además se sabe que la probabilidad de corte de acceso es 0.1 para usuarios de Timofónica, 0.15 para Robafone y 0.05 para routers Xisco.

¿Cuál es la probabilidad de que a un usuario se le corte el Internet?

Primero vamos a definir un diccionario pr con las probabilidades que nos da el enunciado. Tenemos varias probabilidades relacionadas con un usuario: operador, router, fallos condicionados, …

Para calcular la probabilidad de corte de un usuario hay que sumar la probabilidad de ser usuario de una compañía y tener un corte y de ser de otra compañía y tener un corte.

En este caso Pr{Corte} = 0.12. La probabilidad de que un usuario cualquiera de Soria tenga un corte es del 12%.

Si se sabe que un usuario tiene la línea cortada, ¿cuál es la probabilidad de que tenga router Xisco en casa?

En este caso se pide Pr{Xisco|Corte}. Según el teorema de Bayes, esto es:

\(
Pr\{Xisco|Corte\} = \frac{Pr\{Xisco \cap Corte\}}{Pr\{Corte\}} = \frac{Pr\{Xisco\}Pr\{Corte | Xisco\}}{Pr\{Corte\}}
\)

Que da una probabilidad de 0,29. Es decir, si el usuario tiene un corte, la probabilidad de que en su casa tenga un router Xisco es del 29%.

¿Cuál es la probabilidad de que se produzca un corte a un usuario que no tiene un router Xisco?

En este caso se pide Pr{Corte | Nuaweii}. Y tenemos un pequeño problema y es que no sabemos la probabilidad de que un usuario tenga en su casa Nuaweii. Con un poco de manipulación matemática podemos obtener una expresión que no depende de Pr{Nuaweii}.

\(
Pr\{Corte|Nuaweii\} = \frac{Pr\{Corte \cap Nuaweii\}}{Pr\{Nuaweii\}} \\ = \frac{Pr\{Corte \cap (\Omega-Xisco)\}}{1-Pr\{Xisco\}} = \frac{Pr\{Corte – Corte \cap Xisco\}}{1-Pr\{Xisco\}} \\ = \frac{Pr\{Corte\}-Pr\{Corte \cap Xisco\}}{1-Pr\{Xisco\}}
\)

Funciones asociadas

Función de probabilidad: Una función que devuelve la probabilidad de ser obtenido un valor en un experimento aleatorio. La suma de las funciones de probabilidad de todos los valores que puede tomar la variable es 1.

Función de distribución F(x) Una función que devuelve la probabilidad de obtener un valor igual o menor al valor en un experimento aleatorio. Esta función lo que hace es ir acumulando.

Función de densidad f(x): Como en variables aleatorias continuas no tiene sentido hablar de función de probabilidad (siempre sería 0), se define la función de densidad, como la función que da la probabilidad de que una variable aleatoria esté entre A y B.

Como es lógico es posible pasar entre función de densidad y de distribución mediante integreación y derivación.

Medidas asociadas

Esperanza matemática (μ) o media poblacional

\(
\mu = E(x) = \int_{-\inf}^{\inf} xf(x)dx
\)

Mediana: el X que da como resultado 0.5 en la función de densidad, F(X) = 0.5

Varianza:
\(
Var(X) = \sigma^2 = E((X-\mu)^2)
\)

Y con esto dejamos este capítulo teórico pero necesario para el siguiente (que será muy útil).

 

 

Curve, una tarjeta para dominarlas a todas

Hace poco llegó a mi conocimiento la existencia de Curve, se trata de una tarjeta que te permite tener todas tus tarjetas combinadas en una única tarjeta. Así, con la misma tarjeta, puedes pagar una compra con tu tarjeta del BBVA y después pagar con la de Bankia.

La tarjeta no tenía comisiones, así que decidí pedirla, aunque solo fuese por probarla. Me bajé la app, me registré y el envío llegó a España desde Reino Unido en unos días.

Se trata de una tarjeta MasterCard, aceptada en multitud de establecimientos y cajeros. Tiene NFC, chip EMV y banda magnética. Para activarla debemos realizar una compra con chip, usando el PIN que se nos mostrará en la aplicación. Por su uso no nos cobran nada, pero no la recomiendo para retirar dinero de cajeros, pues en España nos cobrarán (para eso mejor Revolut o N26). La tarjeta la controlamos a través de la aplicación:

Tarjeta de N26 en la aplicación de Curve

En la aplicación podemos seleccionar entre las tarjetas que tenemos agregadas y ver los gastos que hemos realizados con ellas.

Tarjetas que tengo agregadas a mi tarjeta Curve

Para añadir una tarjeta hay varios métodos, dependiendo de la tarjeta en cuestión. El más habitual será hacer un cargo para posteriormente devolver la cantidad. Si la tarjeta no tiene protecciones de PIN 3D, nos pedirá que indiquemos un número que aparece en el concepto del cargo.

No podemos usar una tarjeta hasta que no esté verificada

Actualmente Curve dispone de un sistema de referidos. Por cada amigo que invites tú ganas 5£ y tu amigo gana 5£. Curve es una muy buena tarjeta, que permite controlar todas tus tarjetas desde un único sitio. Es la tarjeta que actualmente llevo en la cartera para pagar (y la de Revolut para los cajeros). Mi código de amigo, por el cual os darán 5£ al hacer vuestra primera compra es:

ZC6PR

Para haceros con la tarjeta necesitáis registraros desde la aplicación para Android o para iOS.

Easter egg en el comando man de GNU/Linux

Recientemente se ha sabido de un easter egg escondido en el comando man de GNU/Linux. Se trata de una referencia al popular grupo de música sueco, ABBA.

Si conocéis la discografía de ABBA mínimamente seguro que os sonará la canción: Gimme! Gimme! Gimme! (A Man After Midnight)


Pues exactamente ocurre eso. Si ejecutamos man a las 00:30 (after midnight), nos saltará un gimme, gimme, gimme. Sí, es un chsite terrible, pero así es el humor de los programadores de man. Este easter egg fue introducido hace ahora 6 años a raíz de una broma en Twitter.

Ejecutando el easter egg

Existen dos maneras de ver el easter egg. La primera es esperar hasta las 00:30 y entonces ejecutar man. Otra opción es usar faketime para simular en el comando que la hora es 00:30.

Este easter egg ha provocado algún que otro en su interacción con otros programas, por lo que los programadores han considerado quitarlo. No obstante, debido al revuelo causado, se ha reducido su impacto y ahora solamente se muestra si se ejecuta man sin más argumentos.