Archivo de la etiqueta: patrones

Introducción a las expresiones regulares

Según la wikipedia una expresión regular, a menudo llamada también patrón, es una expresión que describe un conjunto de cadenas sin enumerar sus elementos.

Ayuda a encontrar elementos en un texto que coincidan con la descripción de la expresión de un modo más simple y rápido que de cualquier otra forma.

Las expresiones regulares tengo que reconocer que son algo complicadas pero cuando se entiende tiene un enorme potencial. Pero algún día hay que empezar no? Así que mejor que nos pongamos manos a la masa.

Carácteres básicos:

  • \ para mi probablemente sea uno de los caracteres más importantes. Sirve para hacer que el carácter que precede pierda su significado y pase a ser un carácter normal. Por ejemplo \* pasaría a buscar un * o \\ (doble barra invertida) pasaría a ser una sola.

  • . indica que le falta un carácter es decir ‘.asa’ puede devolver ‘casa’, ‘basa’… pero nunca ‘asa’.
  • ? indica que el elemento predecesor puede estar o no, por ejemplo ‘casa?’ Puede devolver ‘casa’ o ‘cas’.
  • * este elemento permite que el elemento anterior pueda estar desde 0 veces a infinitas, por ejemplo, ‘casa*’ puede ser ‘cas’, ‘casa’ o ‘casaaaaaaaaa’
  • + implica que el carácter al que está asociado pueda por lo menos una o más veces. Sigamos con el ejemplo ‘casa+’ puede ser ‘casa’, ‘casaaaa’ pero en ningún caso ‘cas’.
  • ^ indica que está en el principio de la cadena.

  • $ este por el contrario indica que se encuentra en el fin.

  • () sirve para agrupar un conjunto de elementos, por lo que ‘(casa)‘ pararía a ser un solo elemento ocasionando que ‘(casa)+’ pudiera devolver ‘casacasacasa‘ o simplemente ‘casa’.
  • | (barra vertical) sirve para marcar una ‘o’ (para los programadores seria el equivalente a una or). Por ejemplo ‘(casa|hogar)’ puede devolver ‘casa’ o ‘hogar’, en ningún caso ‘casahogar’.
  • [] los corchetes brindan la posibilidad de escoger entre uno de los elementos que están en su interior. Se pueden marcar rangos usando el guión medio. ‘[a-z]‘ nos puede devolver cualquier letra minúscula de la ‘a‘ a la ‘z‘.
  • {} puede contener uno o dos números separados por una coma. Vendría a ser el elemento propio equivalente y de uso idéntico a ?, +, * pero personalizado. Por ejemplo ‘{2, 7}‘ quiere decir que el elemento se puede repetir mínimo dos veces pero con un máximo de 7. Con ‘{7,}‘ indicas que de 7 hasta infinito.

Mi primera expresión regular pensada íntegramente por mi y que funciona, sirve para encontrar las url de un texto.

(https?\:\/\/)*[0-9a-zA-z\-\_\.]+\.(com|es|net|org|info)\/*[a-zA-z\-\_\.\/]*

 Pero vamos a verla por partes:

 (https?\:\/\/)* => Este trozo indica que tiene que usar el protocolo ‘http’ o ‘https’ (de aquí el interrogante después de la ‘s’ juntamente con \: para indicar que van los dos puntos y \/ dos veces esto para señalar que quiero una barra normal.

[0-9a-zA-z\-\_\.]+ => esto sería el cuerpo de la url antes de la extensión. Puede constar de uno o más elementos en minúsculas, mayúsculas, números guiones o puntos (subdominios).

\.(com|es|net|org|info) => indica que ahora consta de un punto seguido de una de las extensiones com, es, net, org o info.

\/*[a-zA-z\-\_\.\/]* => y finalmente brinda la posibilidad de que sea un subdirectorio

Técnicas de análisis de Big Data

Evidentemente cuanta más data tengamos más exhaustivo va a ser nuestro análisis, algunas de estas técnicas pueden ser aplicadas a grupos pequeños, pero todas pueden ser aplicadas al Big Data. Aquí van los grupos:

  • A/B Testing: Esto es una de las técnicas que se puede usar con grupos de data pequeños. Se trata de mostrar dos versiones distintas de la web (o de lo que sea) para determinar que variación se adapta mejor a nuestros objetivos.

  • Aprendizaje de asociaciones: Se trata de encontrar relaciones entre datos que nos puedan ser útiles. En el caso de Facebook sería que personas tenemos mas posibilidades de empezar a seguir, pero en caso de Amazon es que producto posiblemente compraremos si hemos realizado un seguido de acciones (por ejemplo que dos productos se suelen comprar a la vez). Sabiendo esto lo pueden poner más fácil a los clientes.

  • Clasificación: Se trata de que la computadora determine a que grupo de data pertenece un nuevo set de data basándose en clasificaciones pasadas y los ejemplos “entrados a mano”. Un ejemplo sería determinar el idioma de un texto basado en ejemplos dados por humanos que si sepan que lengua es. Evidentemente cuanto mayor sea el dato a comparar menos probabilidades de error tendrá.

  • Análisis del cluser: Se trata de reducir el cluster a grupos más pequeños y de ordenarlos de otra forma encontrando similaridades que antes se nos habían pasado por alto. Por ejemplo, que tienen en común una chica de 20 años de Madrid y un hombre sevillano de 40 años? Pues que a los dos les gusta hacer puzzles en su tiempo libre.

  • Crowdsourcing: Es una técnica de recolección de data enviada por un largo grupo de usuarios (de aquí “crowd”). Preguntas a la comunidad y esta te responde. Un ejemplo de esto sería Starbucks que pregunta a los usuarios en que podría mejorar y que nuevos productos debería sacar al mercado.

  • Fusión e integración de la data: A veces hay datos que por si solos no aportan mucho pero combinados con otros ya es otro tema. El GPS de tu móvil sólo dice dónde estás, pero combinado con Twitter puedes encontrar gente nueva, o combinado con un mapa de la zona te ayuda a ubicarte.

  • Data mining: Es un conjunto de técnicas para extraer información útil de grandes cantidades de data y presentarlo de forma que los humanos lo podamos comprender y poder sacar provecho de ello. La data si no se sabe usar por si sola no sirve de nada.

  • Aprendizaje predictivo: Con el uso de modelos predictivos (basados en estadística y machine learning) podemos determinar o intentar predecir el futuro de determinados modelos.

  • Algoritmos genéticos: También conocidos como algoritmos de la evolución sirven para mejorar problemas no lineales. Como dice la teoría de la evolución, “sobrevive el mejor adaptado”, pues este caso vendría a ser el cambio que desarrolla un mejor desempeño.

  • Machine learning: Una parte de este es la inteligencia artificial y se basa en evolucionar su comportamiento basado en datos empíricos.

  • Circuitos neuronales: Recibe este nombre porque se parecen bastante a las conexiones de nuestras neuronas. Esta técnica nos ayuda a buscar patrones no lineales y optimizarlos.

  • Análisis de redes: Es un conjunto de técnicas que permiten encontrar los nodos de más influencia, la dirección de los datos. Esto permite conocer a los influencers (para estrategias de marketing) o para identificar los cuellos de botella.

  • Optimización: Los algoritmos genéticos son una de estas técnicas, sirven para mejorar el proceso en función el coste, velocidad…

  • Reconocimiento de patrones: Es una de las partes de clasificación. Dada una entrada, da una salida siguiendo el mismo algoritmo.

  • Predecir modelos: Se trata de crear un modelo matemático con la mayor probabilidad de predecir la salida. Calculan la probabilidad de que pase una determinada cosa.

  • Regresión: Es una de las técnicas para predecir modelos, se trata de que dadas algunas constantes, calcular que pasa cuando se modifican las variables.

  • Simulación: Dadas las probabilidades de todas las variables calcula que pasa en cada escenario para unos datos concretos. Haciendo así ver como puede reaccionar nuestro (p.ej.) material, a determinadas condiciones.

Uf, este ha sido un post muy intenso. Me ha costado lo suyo pero creo que ha salido bastante completo. Espero que os haya gustado, para cualquier cosa ya sabéis, comentario! 😉