<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>2227-1899</journal-id>
<journal-title><![CDATA[Revista Cubana de Ciencias Informáticas]]></journal-title>
<abbrev-journal-title><![CDATA[Rev cuba cienc informat]]></abbrev-journal-title>
<issn>2227-1899</issn>
<publisher>
<publisher-name><![CDATA[Editorial Ediciones Futuro]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S2227-18992016000300008</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Algoritmo para corregir anomalías a nivel de instancia en grandes volúmenes de datos utilizando MapReduce]]></article-title>
<article-title xml:lang="en"><![CDATA[Algorithm to correct instance level anomalies in large volumes of data using MapReduce]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Nuñez-Arcia]]></surname>
<given-names><![CDATA[Yaisel]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Díaz-de-la-Paz]]></surname>
<given-names><![CDATA[Lisandra]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[García-Mendoza]]></surname>
<given-names><![CDATA[Juan Luis]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Central Marta Abreu de Las Villas  ]]></institution>
<addr-line><![CDATA[Santa Clara Villa Clara]]></addr-line>
<country>Cuba</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>09</month>
<year>2016</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>09</month>
<year>2016</year>
</pub-date>
<volume>10</volume>
<numero>3</numero>
<fpage>105</fpage>
<lpage>118</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_arttext&amp;pid=S2227-18992016000300008&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_abstract&amp;pid=S2227-18992016000300008&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_pdf&amp;pid=S2227-18992016000300008&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[RESUMEN Los problemas de calidad de datos a nivel de instancia tienen un impacto directo en la toma de decisiones de las organizaciones y afectan su desempeño. A medida que crece desmedidamente la información es mayor la probabilidad de que se encuentren dichos problemas en los datos. En este trabajo se presenta un algoritmo para corregir anomalías a nivel de instancia en fuentes de datos big data con formato estructurado o semi-estructurado. Como método de agrupamiento se utiliza el algoritmo K-means, para calcular la distancia de edición entre las cadenas se aplica la modificación de Levenshtein y para manejar el volumen de los datos se utiliza el modelo de programación distribuida MapReduce. Además, con el fin de mejorar la calidad de los datos se propusieron las siguientes cuatro fases: identificación del tipo de fuente de datos, el formato de los datos y el problema a corregir; pre-procesamiento de los datos; agrupamiento de los datos y limpieza de los datos.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[ABSTRACT Data quality problems at instance level have a direct impact on decision making of organizations and affect their performance. As information grows unreasonably it is greater the probability that such problems occur in data. This paper presents an algorithm to correct instance level anomalies in big data sources with semi-structured or structured format. As a clustering method, K-means algorithm was used. To calculate the edit distance between strings the modification of Levenshtein was applied, and to handle the volume of the data, MapReduce model for distributed programming was used. Besides, in order to improve data quality, the following four phases were proposed: identification of the data source type, data format and the problem to be solved; pre-processing of the input data; data clustering and data cleansing.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[calidad de datos]]></kwd>
<kwd lng="es"><![CDATA[limpieza de datos]]></kwd>
<kwd lng="es"><![CDATA[big data]]></kwd>
<kwd lng="es"><![CDATA[algoritmo K-means]]></kwd>
<kwd lng="es"><![CDATA[MapReduce]]></kwd>
<kwd lng="en"><![CDATA[data quality]]></kwd>
<kwd lng="en"><![CDATA[data cleansing]]></kwd>
<kwd lng="en"><![CDATA[big data]]></kwd>
<kwd lng="en"><![CDATA[K-means algorithm]]></kwd>
<kwd lng="en"><![CDATA[MapReduce]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><B>ART&Iacute;CULO  ORIGINAL</B></font></p>     <p>&nbsp;</p>     <p><strong><font size="4" face="Verdana, Arial, Helvetica, sans-serif">Algoritmo para corregir anomal&iacute;as a nivel de  instancia en grandes vol&uacute;menes de datos utilizando <em>MapReduce</em></font><font size="4"><em></em></font></strong></p>     <p>&nbsp;</p>     <p><strong><font size="3" face="Verdana, Arial, Helvetica, sans-serif">Algorithm to correct instance level anomalies  in large volumes of data using MapReduce</font></strong></p>     <p>&nbsp;</p>     <p>&nbsp;</p>     <P><font size="2"><strong><font face="Verdana, Arial, Helvetica, sans-serif">Yaisel Nu&ntilde;ez-Arcia<strong><sup>1*</sup></strong>,Lisandra D&iacute;az-de-la-Paz<strong><sup>1</sup></strong>, Juan Luis Garc&iacute;a-Mendoza</font></strong><font face="Verdana, Arial, Helvetica, sans-serif"><strong><sup>1</sup></strong></font></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><sup>1</sup>Universidad Central &ldquo;Marta Abreu&rdquo; de Las Villas. Carretera a Camajuan&iacute;  km 51/2. Santa Clara, Villa Clara, Cuba. Tel&eacute;fono: 42-281515</font>    <br>   <font size="2" face="Verdana, Arial, Helvetica, sans-serif">    ]]></body>
<body><![CDATA[<br>   </font></p>     <P><font face="Verdana, Arial, Helvetica, sans-serif"><span class="class"><font size="2">*Autor para la correspondencia: </font></span><font size="2"><a href="mailto:ynunes@uclv.c">ynunes@uclv.c</a>u<a href="mailto:leclerc@matcom.uh.cu"></a> </font></font>     <p>&nbsp;</p>     <p>&nbsp;</p> <hr>     <P><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>RESUMEN</b> </font>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los problemas de calidad de  datos a nivel de instancia tienen un impacto directo en la toma de decisiones  de las organizaciones y afectan su desempe&ntilde;o. A medida que crece desmedidamente  la informaci&oacute;n es mayor la probabilidad de que se encuentren dichos problemas  en los datos. En este trabajo se presenta un algoritmo para corregir anomal&iacute;as  a nivel de instancia en fuentes de datos <em>big  data</em> con formato estructurado o semi-estructurado. Como m&eacute;todo de  agrupamiento se utiliza el algoritmo <em>K-means</em>,  para calcular la distancia de edici&oacute;n entre las cadenas se aplica la  modificaci&oacute;n de Levenshtein y para manejar el volumen de los datos se utiliza  el modelo de programaci&oacute;n distribuida <em>MapReduce</em>.  Adem&aacute;s, con el fin de mejorar la calidad de los datos se propusieron las  siguientes cuatro fases: identificaci&oacute;n del tipo de fuente de datos, el formato  de los datos y el problema a corregir; pre-procesamiento de los datos;  agrupamiento de los datos y limpieza de los datos. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><span lang=EN-GB>Palabras clave: </span></b>calidad de datos, limpieza de datos, <em>big  data</em>, algoritmo <em>K-means</em>, <em>MapReduce</em></font><font size="2"><em></em></font></p> <hr>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><span lang=EN-GB>ABSTRACT</span></b> </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Data quality problems at instance level have a direct impact on decision  making of organizations and affect their performance. As information grows  unreasonably it is greater the probability that such problems occur in data.  This paper presents an algorithm to correct instance level anomalies in big  data sources with semi-structured or structured format. As a clustering method,  K-means algorithm was used. To calculate the edit distance between strings the  modification of Levenshtein was applied, and to handle the volume of the data,  MapReduce model for distributed programming was used. Besides, in order to  improve data quality, the following four phases were proposed: identification  of the data source type, data format and the problem to be solved;  pre-processing of the input data; data clustering and data cleansing.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><span lang=EN-GB>Key words: </span></b>data quality, data cleansing, big data, K-means algorithm, MapReduce</font></p> <hr>     ]]></body>
<body><![CDATA[<p>&nbsp;</p>     <p>&nbsp;</p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>INTRODUCCI&Oacute;N</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Las organizaciones actualmente manejan grandes cantidades de datos que  provienen de una &uacute;nica fuente o de la fusi&oacute;n de varias fuentes heterog&eacute;neas.  Usualmente al integrar fuentes diversas surgen problemas de calidad que  necesitan ser tratados, por tanto, se hace imprescindible contar con algoritmos  y herramientas que permitan mantener un control adecuado de la calidad de los  datos. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La existencia de estos problemas degrada significativamente la calidad de  la informaci&oacute;n con un impacto directo en la eficiencia de una empresa. Esto se  debe a m&uacute;ltiples razones que generalmente se expresan durante la inserci&oacute;n de  los datos, estas son: la falta de reglas implementadas, el incorrecto manejo de  los datos cambiantes y los errores de escritura tales como: errores  lexicogr&aacute;ficos y transposiciones de caracteres.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Como consecuencia de ello, se  encuentran con m&aacute;s frecuencia de lo deseado anomal&iacute;as tales como:  inconsistencias, valores perdidos, registros duplicados y representaciones no  convencionales de datos (Koudas et al., 2006). La  eliminaci&oacute;n de estos problemas en los sistemas de informaci&oacute;n generalmente se  conoce por el t&eacute;rmino &ldquo;limpieza de datos&rdquo; y tiene como principal objetivo  mejorar la calidad de los datos (Barateiro and  Galhardas, 2005). </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Una de las t&eacute;cnicas existentes para corregir las anomal&iacute;as de tipo cadena  en diferentes fuentes de datos es a trav&eacute;s del agrupamiento basado en el  c&aacute;lculo de las distancias entre cadenas. En el Centro de Estudios de  Inform&aacute;tica (CEI) de la Universidad Central &ldquo;Marta Abreu&rdquo; de Las Villas (UCLV)  se han obtenido buenos resultados en bases de datos relacionales con el trabajo  presentado por L&oacute;pez (2011). En este &uacute;ltimo se utiliza como m&eacute;todo de agrupamiento el algoritmo PAM (<em>Partition Around Medoides</em>) introducido  por Kaufman and Rousseeuw (2009) y se propone una modificaci&oacute;n a la distancia de edici&oacute;n Levenshtein  (1966), de tal manera  que se construye un grafo a partir de la distancia entre los diferentes caracteres  del teclado m&aacute;s usado en Cuba, el tipo QWERTY (L&oacute;pez, 2011).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Por otra parte, con el crecimiento exponencial que ha  experimentado la informaci&oacute;n y la gran variedad de formatos de datos  existentes, se hace necesario analizar las posibilidades de extender dicho  algoritmo hacia otras fuentes de datos, por ejemplo, <em>big data</em> con formato estructurado o semi-estructurado.  Actualmente existe un amplio conjunto de tecnolog&iacute;as y marcos de trabajo para  procesar grandes vol&uacute;menes de datos (<em>big  data</em>), los cuales contin&uacute;an evolucionando. No obstante, se decide utilizar  el modelo de programaci&oacute;n distribuida <em>MapReduce, </em>por ser uno de los m&aacute;s utilizados en la literatura y m&aacute;s simples de  implementar (Gregory, 2016). Por tanto, el presente  trabajo tiene como objetivo proponer un algoritmo para corregir anomal&iacute;as a  nivel de instancia en fuentes de datos <em>big  data</em> con formato estructurado o semi-estructurado. </font></p>     <p>&nbsp;</p>     <p><strong><font size="3" face="Verdana, Arial, Helvetica, sans-serif">MATERIALES Y M&Eacute;TODOS </font></strong></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Durante el  procesamiento de grandes vol&uacute;menes de datos, la presencia de anomal&iacute;as e  impurezas en dichos datos conduce a la obtenci&oacute;n de resultados err&oacute;neos, los  cuales como consecuencia provocan la elevaci&oacute;n de los costos y la disminuci&oacute;n  de los beneficios de su an&aacute;lisis e interpretaci&oacute;n (L&oacute;pez et al., 2010, L&oacute;pez, 2011).    <br> Por consiguiente, se hace necesario analizar la informaci&oacute;n presente en  fuentes de datos <em>big data</em>, luego  detectar posibles anomal&iacute;as e inconsistencias en los datos y por &uacute;ltimo  realizar el proceso de correcci&oacute;n de errores, mejorando as&iacute; la calidad de los  datos.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Fuentes de datos <em>big data</em></strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En la literatura existen varias  definiciones de <em>big data</em>, en el  presente trabajo se aborda la siguiente definici&oacute;n. &ldquo;El t&eacute;rmino <em>big data</em> hace referencia a una inmensa y  compleja colecci&oacute;n de datos. Es un t&eacute;rmino aplicado a conjuntos de datos que superan  la capacidad habitual del software para capturarlos, gestionarlos y procesarlos  en un tiempo razonable&rdquo; (Hashem et al.,  2014). Para poder trabajar con <em>big data</em>, necesario conocer las posibles  representaciones de los datos. En (Batini and  Scannapieco, 2006) se refiere a tres tipos de  datos: estructurados, semi-estructurados y no estructurados. </font></p>     <p><ul>         <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los datos estructurados son  aquellos que cada elemento tiene una estructura asociada. Son datos en los  cuales se permite realizar f&aacute;cilmente las operaciones de entrada, consulta y  an&aacute;lisis en las fuentes de datos. Un ejemplo de fuentes datos estructurados es  el SQL (<em>Structured Query Language</em>),  creado para la gesti&oacute;n y consulta de datos en el RDBMS (<em>Relational Data Base Management System</em>) (Hashem et al., 2014), (Batini and  Scannapieco, 2006) (Batini and  Scannapieco, 2006, Hashem  et al., 2014).&nbsp; </font></li>         <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los datos semi-estructurados son  aquellos que presentan informaci&oacute;n procesada y con un formato definido, pero no  estructurado. De esta manera se puede tener la informaci&oacute;n definida, pero con  una estructura variable. Dos ejemplos son las bases de datos basadas en  columnas y los ficheros con informaci&oacute;n en un lenguaje de etiquetas HTML o XML (Hashem et al., 2014).</font></li>         <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los datos no estructurados son  aquellos que se expresan en lenguaje natural y no presentan ning&uacute;n tipo de  estructura. Ejemplo de ellos son los mensajes de texto, datos de los medios  sociales, videos, entre otros (Batini and  Scannapieco, 2006). </font></li>       </ul>   <font size="2" face="Verdana, Arial, Helvetica, sans-serif">El presente trabajo se enfoca en el an&aacute;lisis de posibles errores en las  fuentes de los datos con representaci&oacute;n estructurada o semi-estructurada en  grandes vol&uacute;menes de datos. En cada fuente de datos independientemente del formato  en que est&eacute;n representados dichos datos se pueden presentar diversos errores,  los cuales necesitan ser clasificados y caracterizados para luego ser  corregidos con el prop&oacute;sito de gestionar la informaci&oacute;n de manera precisa y  confiable. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Taxonom&iacute;a de errores en los datos</strong></font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Existen varios  niveles para tratar los errores o anomal&iacute;as presentes en los datos. Entre las  que se encuentra anomal&iacute;as a nivel de esquema o a nivel de instancia.    <br>   Tanto los datos  estructurados como semi-estructurados pueden presentar errores a nivel de  instancia. Los problemas a nivel de instancia se pueden dividir en problemas de  un &uacute;nico registro y problemas de m&uacute;ltiples registros (Gschwandtner et al.,  2012). </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&Uacute;nico registro: se  refiere a los problemas que se presentan en uno o varios campos de  un solo registro tambi&eacute;n denominado registro simple (Barateiro and Galhardas, 2005, L&oacute;pez, 2011).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A continuaci&oacute;n, se enumeran dichos problemas: </font></p>     <p><ul>         <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Ausencia de datos en un campo no  nulo: atributos que son rellenados con alg&uacute;n valor ficticio; por ejemplo, un  n&uacute;mero de carnet de identidad 99999999999 es un valor indefinido utilizado para  superar la restricci&oacute;n no nula. </font></li>         <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Datos err&oacute;neos: datos que son  v&aacute;lidos, pero no se ajustan a la entidad real; un ejemplo de datos err&oacute;neos es  31 que indica la edad de un empleado cuando este en realidad tiene 30 a&ntilde;os.</font></li>         <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Errores ortogr&aacute;ficos: palabras  mal escritas en campos de las fuentes de datos; por ejemplo, &ldquo;Calos Rodrigues&rdquo;  &#8203;&#8203;en lugar de &ldquo;Carlos Rodr&iacute;guez&rdquo;. </font></li>         <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Valores impl&iacute;citos: existencia de  datos extra&ntilde;os en alg&uacute;n campo de datos; un ejemplo com&uacute;n de valores impl&iacute;citos  es la inserci&oacute;n de un t&iacute;tulo en un campo de nombre, por ejemplo, &ldquo;Licenciado  Carlos Rodr&iacute;guez&rdquo;. </font></li>         <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Valores de campos perdidos: datos  que son almacenados en el campo equivocado. Por ejemplo, el valor &ldquo;Villa Clara&rdquo;  ubicado en el atributo Municipio. </font></li>         ]]></body>
<body><![CDATA[<li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Datos ambiguos: datos que pueden  ser interpretados en m&aacute;s de una manera, con diferentes significados. La  existencia de datos ambiguos puede ocurrir debido a la presencia de  abreviatura: por ejemplo: el nombre abreviado &ldquo;J. Gonz&aacute;lez&rdquo; puede ser ampliado  de diferentes formas, como: &ldquo;Juan Gonz&aacute;lez&rdquo;, &ldquo;Jorge Gonz&aacute;lez&rdquo;, &ldquo;Julio  Gonz&aacute;lez&rdquo;, etc. </font></li>         </ul> </p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">M&uacute;ltiples registros: los problemas con los datos en  m&uacute;ltiples registros no pueden ser detectados considerando cada registro por  separado, ya que como el nombre lo indica, se est&aacute; haciendo referencia a m&aacute;s de  un registro (<a href="#_ENREF_1" title="Barateiro, 2005 #2">Barateiro and Galhardas, 2005</a>, <a href="#_ENREF_12" title="L&oacute;pez, 2011 #5">L&oacute;pez, 2011</a>). </font></p> <ul>       <li>         <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Registros duplicados: son  aquellos que no contienen informaci&oacute;n contradictoria; por ejemplo, los  siguientes registros de empleados se consideran duplicados: Empleado1 (Nombre =  &ldquo;Carlos Rodr&iacute;guez&rdquo;, Direcci&oacute;n = &ldquo;25, Calle Primera, Municipio de Santa Clara&rdquo;,  Nacimiento = 07/10/1990); Empleado2 (Nombre = &ldquo;Carlo Rodr&iacute;guez&rdquo;, Direcci&oacute;n =  &ldquo;25, Calle 1ra, Sta Clara&rdquo;, Nacimiento = 07/10/1990).</font></p>   </li>       <li>         <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Contradicci&oacute;n de registros: son  aquellos que contienen informaci&oacute;n contradictoria; por ejemplo, si se  consideran los registros Empleado1 y Empleado2, pero con la siguiente  informaci&oacute;n: Empleado1 (Nombre = &ldquo;Carlos Rodr&iacute;guez&rdquo;, Direcci&oacute;n = &ldquo;25, Calle  1ra, Santa Clara&rdquo;, Nacimiento = 07/10/1990); Empleado2 (Nombre = &ldquo;Carlos  Rodr&iacute;guez&rdquo;, Direcci&oacute;n = &ldquo;25, Calle 1ra, Santa Clara&rdquo;, Nacimiento = 07/10/1980).</font></p>   </li>       <li>    <font size="2" face="Verdana, Arial, Helvetica, sans-serif">Datos no estandarizados:  diferentes registros que no utilizan las mismas representaciones de datos,  invalidando as&iacute; su comparaci&oacute;n: </font>     <ul>           <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Transposici&oacute;n de palabras: en un  solo campo, las palabras pueden aparecer en diferente orden; por ejemplo, los  nombres &ldquo;Carlos Rodr&iacute;guez&rdquo; &#8203;&#8203;y &ldquo;Garc&iacute;a, Julio&rdquo; no utilizan la misma regla de  ordenaci&oacute;n.</font></li>           <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Formato de codificaci&oacute;n: uso de  diferentes formatos de codificaci&oacute;n, por ejemplo, ASCII, UTF-8, entre otros.</font></li>           ]]></body>
<body><![CDATA[<li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Formato de representaci&oacute;n:  diferentes representaciones de un formato para la misma informaci&oacute;n; por ejemplo,  el formato de moneda puede ser $ 10.5, 10.5 $, etc. </font></li>           <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Unidad de medida: diferentes unidades utilizadas en registros distintos,  por ejemplo, las distancias dadas en cm y pulgadas.</font></li>         </ul>   </li>     </ul>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En el presente  trabajo se analizan espec&iacute;ficamente anomal&iacute;as provenientes de un &uacute;nico registro  tales como: errores ortogr&aacute;ficos, valores impl&iacute;citos y datos ambiguos  (abreviaturas); y de m&uacute;ltiples registros los datos no estandarizados  (transposici&oacute;n de palabras).&nbsp; Luego de  detallar los diferentes problemas que pueden encontrarse en las fuentes de  datos, se deben aplicar t&eacute;cnicas de limpieza de datos que permitan corregir  dichos errores en los datos con el fin de mejorar su calidad.</font></p>     <p><font size="2"><strong><font face="Verdana, Arial, Helvetica, sans-serif">T&eacute;cnicas de limpieza de datos</font></strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El proceso de limpieza de datos es una tarea crucial para  mejorar el resultado de la gesti&oacute;n de la informaci&oacute;n en una empresa. Es  importante su uso para corregir diferentes problemas como la integridad,  estandarizar valores, completar los datos que faltan, consolidar ocurrencias  duplicadas, entre otros (Barateiro and  Galhardas, 2005). </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Un enfoque de  limpieza de datos debe satisfacer los siguientes requisitos: detectar y  eliminar los principales errores en las fuentes de datos. Adem&aacute;s el enfoque  debe estar apoyado por herramientas automatizadas, en aras de limitar la labor  de inspecci&oacute;n y la programaci&oacute;n manual (Rahm and Do, 2000). </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para la  detecci&oacute;n de errores se pueden utilizar varios m&eacute;todos tales como:  estad&iacute;sticos, basados en patrones y reglas de asociaci&oacute;n y algoritmos de  agrupamiento basados en distancias. Los m&eacute;todos estad&iacute;sticos, aunque simples y  r&aacute;pidos, tienen como principal desventaja que generan muchos falsos positivos.  Los m&eacute;todos basados en patrones y en reglas de asociaci&oacute;n detectan posibles  errores a partir del an&aacute;lisis de los registros que incumplen los patrones y las  reglas descubiertas; sin embargo, su principal desventaja radica en no ser  escalable para grandes vol&uacute;menes de datos. Por otra parte, los m&eacute;todos de  agrupamiento basados en distancias ofrecen buenos resultados en la comparaci&oacute;n  de cadenas de texto, reconocimiento &oacute;ptico de caracteres y reconocimiento de  patrones, a pesar de tener una gran complejidad computacional (Dean and Ghemawat, 2008; Jhaver et al.,  2014). </font></p> <ol>       <li>         ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En el presente trabajo se utiliza el m&eacute;todo de agrupamiento  basado en distancias.&nbsp; Para aplicar esta  t&eacute;cnica de limpieza de datos se aplica algoritmo <em>K-means</em>, la modificaci&oacute;n a la distancia de edici&oacute;n de Levenshtein  propuesta por L&oacute;pez  (2011) y el modelo  de programaci&oacute;n <em>MapReduce</em>.</font></p>   </li>       <li>         <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Algoritmo <em>K-means</em></font></p>   </li>     </ol>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El algoritmo <em>K-means</em> fue introducido por MacQueen (1967) para el c&aacute;lculo de cl&uacute;steres.  Es un algoritmo simple, directo y est&aacute; basado en el an&aacute;lisis de las varianzas  que se encarga de agrupar un conjunto de datos en un n&uacute;mero predefinido de  cl&uacute;steres denominado K. Se comienza con un conjunto aleatorio de centroides de  cada uno de los cl&uacute;steres y se contin&uacute;a reasignando los datos del conjunto de  datos a los centroides, bas&aacute;ndose en la similitud entre el dato y el centroide.  El proceso de reasignaci&oacute;n no se detiene hasta que se converge al criterio de  parada (por ejemplo, se alcanz&oacute; un n&uacute;mero fijo de iteraciones o los cl&uacute;steres  encontrados no cambian luego de cierto n&uacute;mero de iteraciones) (Cambronero and Moreno, 2006; Villagra et al.,  2009). Este proceso se diferencia  del algoritmo PAM utilizado en (L&oacute;pez, 2011) en la forma de seleccionar los  centros, pues en el PAM se hace de manera est&aacute;tica, mientras que en el <em>K-means</em> se va re-calculando. Para realizar el re-c&aacute;lculo de  centroides en el <em>K-means</em> se tiene la  siguiente ecuaci&oacute;n: </font></p>     <p align="center"><img src="/img/revistas/rcci/v10n3/fo0108316.jpg" alt="fo01" width="473" height="194"></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para la conformaci&oacute;n de los grupos se  calcula la similitud entre cadenas. En este trabajo se utiliza la modificaci&oacute;n  de la distancia de edici&oacute;n de Levenshtein propuesta en (L&oacute;pez, 2011). </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Modificaci&oacute;n de la distancia de edici&oacute;n Levenshtein</strong> </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La  distancia de edici&oacute;n entre dos cadenas fue introducida por Levenshtein (1966) como la cantidad m&iacute;nima de operaciones de inserci&oacute;n, eliminaci&oacute;n y sustituci&oacute;n  que hay que hacer para transformar una cadena en la otra. La funci&oacute;n as&iacute;  definida se demuestra que constituye una m&eacute;trica y ha tenido algunas  variaciones en el tiempo (Zobel and Dart, 1996).  Posteriormente en (L&oacute;pez, 2011)  se adicion&oacute; una nueva operaci&oacute;n: la transposici&oacute;n, intercambio de caracteres  adyacentes, la cual es un error frecuente en las personas que teclean r&aacute;pido.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para  la utilizaci&oacute;n de este m&eacute;todo de agrupamiento, la distancia entre dos elementos  se determina empleando una modificaci&oacute;n de la distancia de edici&oacute;n de  Levenshtein planteada en (L&oacute;pez, 2011),  de tal manera que se tenga en cuenta la distancia en el teclado de los  diferentes caracteres. Con este agrupamiento se logra que cadenas menos  distantes queden reunidas en el mismo grupo.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para  buscar este costo se construye un grafo con el teclado de la computadora &nbsp;donde <em>V</em> es el conjunto de teclas (v&eacute;rtices del grafo) y <em>A</em> es el conjunto de aristas. El v&eacute;rtice &nbsp;est&aacute; conectado con el v&eacute;rtice &nbsp;si representan teclas adyacentes en el  teclado. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Una porci&oacute;n de este grafo que  representa el teclado se muestra en la <a href="#f01">Figura. 1</a> .</font></p>     <p align="center"><img src="/img/revistas/rcci/v10n3/f0108316.jpg" alt="f01" width="458" height="207"><a name="f01"></a></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">De  esta forma el costo w<sub>s</sub> &nbsp;de sustituir el car&aacute;cter <em>i</em> por el car&aacute;cter<em> j</em>, es  la longitud del camino m&aacute;s corto para ir de<em> i</em> a <em>j</em> en el grafo <em>G</em>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La  distancia de edici&oacute;n entre las cadenas <em>s</em> y <em>t</em> de longitud <em>n</em> y <em>m</em> respectivamente, la  cual se denomina &ldquo;EDUK&rdquo; (<em>Edition Distance  Using Keyboard</em>) (L&oacute;pez, 2011),  se define el c&aacute;lculo de la distancia a trav&eacute;s de una matriz de dimensi&oacute;n (n x  m) de forma tal que: </font></p>     <p align="center"><img src="/img/revistas/rcci/v10n3/fo0208316.jpg" alt="fo02" width="267" height="69"></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para el resto de los valores: </font></p>     <p align="center"><img src="/img/revistas/rcci/v10n3/fo0308316.jpg" alt="fo03" width="441" height="96"></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Donde,</font></p>     <p><img src="/img/revistas/rcci/v10n3/fo0408316.jpg" alt="fo04" width="121" height="22"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">, es la longitud del camino m&aacute;s corto en el grafo &nbsp;del  teclado para ir del car&aacute;cter s[i] al car&aacute;cter t[j], si son diferentes y R(s[i], t[j]) = 0, si los caracteres s[i] y t[j] son iguales, F(a, b, c, d) = w, si ab = dc, en otro caso no se tiene en  cuenta (<em>a, b</em>, son caracteres de la  cadena s y <em>c, d</em> caracteres de la  cadena t)</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Entonces EDUK(s,t) = d(n,m) </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En ocasiones las cadenas est&aacute;n  compuestas por m&aacute;s de una palabra. Es frecuente tambi&eacute;n que cadenas similares se escriban poniendo  en diferentes posiciones las palabras que la componen.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para tratar tales cadenas, en (L&oacute;pez, 2011) se propone: dividir cada  cadena en las palabras que la componen (se utiliza el t&eacute;rmino <em>token</em> para generalizar), buscar la  distancia EDUK de cada <em>token</em> de una  cadena con los <em>tokens</em> de la otra y  tomar la distancia m&iacute;nima, despu&eacute;s estas distancias se suman y el resultado  constituye la distancia entre las cadenas.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Formalizando esta idea: </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Sean s y t dos cadenas y S ={s1, s2, ...s<sub>p</sub>}, T ={t1, t2, ...t<sub>q</sub>} los conjuntos de los <em>tokens</em> que las forman, entonces: </font></p>     <p align="center"><img src="/img/revistas/rcci/v10n3/fo0508316.jpg" alt="fo05" width="344" height="136"></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La funci&oacute;n toma valor cero  solamente para el caso de cadenas iguales. Cuando se tengan dos cadenas con los  mismos <em>tokens</em> en &oacute;rdenes diferentes,  la distancia entre ellos es uno.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Al aplicar el algoritmo <em>K-means</em> y la t&eacute;cnica de limpieza de  datos basada en la distancia de edici&oacute;n entre cadenas, a medida que va  creciendo el volumen de datos aumenta la latencia en conformar los resultados. Con  el prop&oacute;sito de disminuir este tiempo, se decide utilizar el modelo de  programaci&oacute;n distribuida <em>MapReduce</em> por la popularidad alcanzada en la actualidad dentro de las tecnolog&iacute;as <em>big data</em> y por ofrecer soluciones para  este tipo de problema (Yan et al., 2012, Jhaver et al., 2014). </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Tecnolog&iacute;a <em>MapReduce</em></strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><em>MapReduce</em> es un modelo  de programaci&oacute;n para el procesamiento y generaci&oacute;n de grandes vol&uacute;menes de  datos en sistemas distribuidos y est&aacute; especialmente pensado para tratar  ficheros de gran tama&ntilde;o -del orden de gigabytes y terabytes-. Tambi&eacute;n mejora el  tratamiento de los datos no estructurados, ya que trabaja a nivel de sistema de  ficheros. Est&aacute; inspirado por las funciones <em>map</em> y <em>reduce</em> presentes en <em>Lisp</em> y otros lenguajes funcionales. Los  programas escritos en este estilo funcional son autom&aacute;ticamente paralelizados y  ejecutados en un cl&uacute;ster de m&aacute;quinas de bajo costo. El sistema se encarga de  dividir los datos de entrada, planificando la ejecuci&oacute;n del programa en un  conjunto de m&aacute;quinas, ocup&aacute;ndose de las fallas y manejando la comunicaci&oacute;n  requerida entre las mismas. Esto permite a los programadores sin experiencia  con este tipo de sistema utilizar f&aacute;cilmente los recursos de un sistema  distribuido (Ramet et al., 2011). </font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La funci&oacute;n <em>map</em> se aplica en paralelo a cada par llave/valor  del conjunto de datos de entrada produciendo una lista de pares <em>(k2,  v2)</em>.    <br>   <em>map (k1, v1) &ndash;&gt; list (k2, v2)</em></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Por cada llamada a dicha funci&oacute;n se agrupan todos los valores  intermedios asociados con la misma clave <em>k </em>y son enviados a la funci&oacute;n <em>reduce</em>.  Esta &uacute;ltimarecibe la clave con su conjunto de valores asociados y los  fusiona para formar un conjunto de valores posiblemente m&aacute;s peque&ntilde;o: </font></p>     <p><em>r<font size="2" face="Verdana, Arial, Helvetica, sans-serif">educe (k2, list (v2)) -&gt; list (v3)</font></em></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">T&iacute;picamente cada llamada <em>reduce </em>produce un valor (<em>v3</em> o un valor vac&iacute;o), aunque una misma  llamada puede devolver m&aacute;s de un valor (Dean and Ghemawat, 2008). Los resultados de las  llamadas se recopilan en la lista de resultados. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Este modelo de programaci&oacute;n ofrece m&uacute;ltiples ventajas como el poder  trabajar sobre cualquier formato de datos (estructurado, semi-estructurado o no  estructurado), no tener requisitos de hardware elevados, ser escalable a nivel  de tama&ntilde;o de cl&uacute;ster y de rendimiento, y funciona bien con grandes cantidades  de datos ya que trabaja en bloques independientes del tama&ntilde;o (Yan et al., 2012). </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Utilizando el modelo que se plantea con <em>MapReduce</em> se propone un algoritmo de  agrupamiento para la limpieza de datos a trav&eacute;s del c&aacute;lculo de la distancia  entre cadenas para el procesamiento de grandes conjuntos de datos. </font></p>     <p>&nbsp;</p>     <p><font face="Verdana, Arial, Helvetica, sans-serif"><strong><font size="3">RESULTADOS</font></strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para limpiar grandes vol&uacute;menes de datos se propone dividir  dicho proceso en las siguientes cuatro fases siguiendo un orden l&oacute;gico.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Fase  1 Identificaci&oacute;n</strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Inicialmente es necesario conocer el tipo de fuente de  datos, su formato de representaci&oacute;n y el (los) problema(s) a corregir. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Fase  2 Pre-procesamiento</strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En la propuesta del algoritmo para agrupar datos es  necesario tener un pre-procesamiento del conjunto de los datos de entrada para  poder realizar con &eacute;xito el agrupamiento a trav&eacute;s del c&aacute;lculo de las  distancias. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Luego de la etapa inicial como primer paso es necesario  calcular la cantidad de cl&uacute;steres (k), para as&iacute; conformar los cl&uacute;steres y sus  respectivos centros asociados. Para poder realizar el c&aacute;lculo de la distancia  entre las cadenas, estas se van a ir leyendo de un fichero. Como segundo paso  tomar k cadenas aleatoriamente del fichero, las cuales van a ser los centros del  cl&uacute;ster y se van a ubicar en un vector de centroides.&nbsp; </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Fase  3 Agrupamiento</strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En se esta etapa se aplica el siguiente <a href="/img/revistas/rcci/v10n3/fo0608316.jpg" target="_blank">algoritmo</a>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En el <a href="/img/revistas/rcci/v10n3/fo0608316.jpg" target="_blank">algoritmo</a> planteado para  lograr el agrupamiento de las cadenas se utiliza la funci&oacute;n <em>map</em>, la cual recibe una llave referente  a los centros de los cl&uacute;steres y un valor que va a ser una cadena del fichero  de entrada. En la l&iacute;nea 3 se calcula la distancia con la funci&oacute;n (5) del  centroide C0 del primer cl&uacute;ster del vector con el valor pasado por  par&aacute;metro a la funci&oacute;n. Luego en la l&iacute;nea 4 se recorre el vector de cl&uacute;steres  comenzando con la segunda posici&oacute;n, en cada <em>i-&eacute;simo</em> elemento se calcula la distancia del centro de cl&uacute;ster con el valor. En la  l&iacute;nea 6 se va a ir comparando las distancias hasta obtener la mejor en relaci&oacute;n  con el centro del cl&uacute;ster (l&iacute;neas 7 y 8). En la l&iacute;nea 11 se escribe en el  sistema de archivos el &iacute;ndice del centro del cl&uacute;ster referente con su resultado  asociado.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Por otra parte, en la funci&oacute;n <em>reduce</em> se recibe la lista de los valores  asociados a los centros de los cl&uacute;steres. En las l&iacute;neas de la 2 a la 4 se  recorre la lista de valores y se re-calcula el centro del cl&uacute;ster escogiendo el  mejor valor de los elementos. Este proceso se realiza utilizando la funci&oacute;n (1)  descrita anteriormente.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Posteriormente entre las l&iacute;neas de la 5 a la 7 se escribe en el sistema  de archivos el nuevo cl&uacute;ster y sus valores asociados. Por &uacute;ltimo, en las l&iacute;neas  de la 8 a la 9 se comprueba la convergencia entre el nuevo centro calculado y  el viejo centro. Si al realizar la comprobaci&oacute;n los centros no son iguales, se  incrementa un contador de actualizaci&oacute;n (quiere decir que se vuelve a ejecutar  nuevamente el algoritmo con los nuevos centros), este procedimiento se realiza  hasta que no se actualice m&aacute;s. </font></p>     ]]></body>
<body><![CDATA[<p><font size="2"><strong><font face="Verdana, Arial, Helvetica, sans-serif">Fase 4 Limpieza</font></strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Por &uacute;ltimo, se deben verificar  los diferentes grupos obtenidos en la etapa anterior. El proceso ahora se  reduce a la cantidad de grupos definidos, pues en cada uno de ellos se  encuentran las cadenas menos distantes.     <br>   En caso de presentar  ambig&uuml;edades como las que se muestran en la <a href="#t0108">Tabla</a> , se recomienda determinar de forma interactiva las sustituciones a  realizar, o sea preguntarle directamente al usuario (L&oacute;pez, 2011).</font></p>     <p align="center"><img src="/img/revistas/rcci/v10n3/t0108316.jpg" alt="t0108" width="474" height="139"><a name="t0108"></a></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Por ejemplo si se procesa la  cadena &ldquo;J. Gonz&aacute;lez&rdquo;, esta puede pertenecer a cualquiera de los dos cl&uacute;steres  que se muestran en la <a href="#t0108">Tabla</a> , por tanto se recomienda la  interacci&oacute;n analista y sistema para asignarla al cl&uacute;ster correcto.&nbsp; </font></p>     <p>&nbsp;</p>     <p><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><B>CONCLUSIONES</B></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En este trabajo se propuso un algoritmo para corregir  las anomal&iacute;as a nivel de instancia en fuentes de datos <em>big data </em>con formato estructurado o semi-estructurado. Para la implementaci&oacute;n del  algoritmo propuesto se utilizaron tres t&eacute;cnicas fundamentales, (i) la t&eacute;cnica  de agrupamiento, (ii) el c&aacute;lculo de la distancia de edici&oacute;n y (iii) la  programaci&oacute;n en paralelo. Espec&iacute;ficamente, para formar los grupos se us&oacute; el  algoritmo <em>K-means.</em></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para el c&aacute;lculo de  las distancias entre cadenas se utiliz&oacute; la modificaci&oacute;n a la distancia de  edici&oacute;n Levenshtein, y para manejar el volumen de los datos se emple&oacute; el  popular modelo de programaci&oacute;n en paralelo <em>MapReduce</em>,  lo cual constituye un elemento novedoso. Adem&aacute;s, se propusieron las siguientes  cuatro fases: identificaci&oacute;n del tipo de fuente de datos, el formato de los  datos y el problema a corregir; pre-procesamiento de los datos; agrupamiento de  los datos y limpieza de los datos, con el prop&oacute;sito de mejorar la calidad de  los datos. En trabajos futuros se debe probar el algoritmo en conjuntos de  datos <em>big data</em> con formato estructurado  o semi-estructurado para casos de estudio reales y se deben adaptar otras  t&eacute;cnicas de limpieza para corregir las anomal&iacute;as no expuestas en este trabajo.</font> </p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><B>REFERENCIAS  BIBLIOGR&Aacute;FICAS</B></font>     <!-- ref --><p><font size="2"><a><font face="Verdana, Arial, Helvetica, sans-serif">BARATEIRO, J. &amp; GALHARDAS, H. 2005. A Survey of Data Quality Tools. <em>Datenbank-Spektrum,</em> 14<strong>,</strong> 48.    </font></a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>BATINI, C. &amp; SCANNAPIECO, M. 2006. <em>Data quality: concepts, methodologies and techniques</em>, Springer.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>CAMBRONERO, C. G. &amp; MORENO, I. G. 2006. Algoritmos de aprendizaje:  knn &amp; kmeans. <em>Inteligencia en Redes  de Comunicaci&oacute;n, Universidad Carlos III de Madrid</em>.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>DEAN, J. &amp; GHEMAWAT, S. 2008. MapReduce: simplified data processing  on large clusters. <em>Communications of the  ACM,</em> 51<strong>,</strong> 107-113.    </a> </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>GREGORY, S. 2016. <em>Top Big Data  Processing Frameworks </em>[Online]. KDnuggets &trade;. Available: </a><a href="http://www.kdnuggets.com/2016/03/top-big-data-processing-frameworks.html">http://www.kdnuggets.com/2016/03/top-big-data-processing-frameworks.html</a> 2016]. </font></p>     ]]></body>
<body><![CDATA[<!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>GSCHWANDTNER, T., G&Auml;RTNER, J., AIGNER, W. &amp; MIKSCH, S. 2012. A  taxonomy of dirty time-oriented data. <em>Multidisciplinary  Research and Practice for Information Systems.</em> Springer.    </a> </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>HASHEM, I. A. T., YAQOOB, I., ANUAR, N. B., MOKHTAR, S., GANI, A. &amp;  KHAN, S. U. 2014. The rise of &ldquo;big data&rdquo; on cloud computing: Review and open  research issues. <em>Information Systems,</em> 47<strong>,</strong> 98-115.</a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>JHAVER, S., KHAN, L. &amp; THURAISINGHAM, B. 2014. Calculating Edit  Distance for Large Sets of String Pairs using MapReduce.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>KAUFMAN, L. &amp; ROUSSEEUW, P. J. 2009. <em>Finding groups in data: an introduction to cluster analysis</em>, John  Wiley &amp; Sons.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>KOUDAS, N., SARAWAGI, S. &amp; SRIVASTAVA, D. Record linkage:  similarity measures and algorithms.&nbsp;  Proceedings of the 2006 ACM SIGMOD international conference on  Management of data, 2006. ACM, 802-803.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>LEVENSHTEIN, V. I. Binary codes capable of correcting deletions,  insertions, and reversals.&nbsp; Soviet  physics doklady, 1966. 707-710.    </a></font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>L&Oacute;PEZ, B. 2011. Limpieza de Datos: Reemplazo de valores ausentes y  Estandarizaci&oacute;n. <em>Resumen de la tesis</em>.    </a></font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>L&Oacute;PEZ, B., P&Eacute;REZ, R. &amp; BATULE, M. 2010. Las reglas de asociaci&oacute;n  ordinales en la detecci&oacute;n de errores en los datos. <em>Revista Cubana de Ciencias Inform&aacute;ticas,</em> 4.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>MACQUEEN, J. Some methods for classification and analysis of  multivariate observations.&nbsp; Proceedings  of the fifth Berkeley symposium on mathematical statistics and probability,  1967. Oakland, CA, USA., 281-297.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>RAHM, E. &amp; DO, H. H. 2000. Data cleaning: Problems and current  approaches. <em>IEEE Data Eng. Bull.,</em> 23<strong>,</strong> 3-13.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>RAMET, D., LAGO, J., KARLSSON, J., FALGUERAS, J. &amp; TRELLES, O.  2011. Mr-Cirrus: Implementaci&oacute;n de Map-Reduce bajo MPI para la ejecuci&oacute;n  paralela de programas secuenciales. <em>Proceedings  of XXII Jornadas de Paralelismo, Las Palmas de Gran Canaria, Espa&ntilde;a</em>.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>VILLAGRA, A., GUZM&Aacute;N, A., PANDOLFI, D. &amp; LEGUIZAM&Oacute;N, G. 2009.  An&aacute;lisis de medidas no-supervisadas de calidad en clusters obtenidos por  K-means y Particle Swarm Optimization.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>YAN, C., YANG, X., YU, Z., LI, M. &amp; LI, X. Incmr: Incremental data  processing based on mapreduce.&nbsp; Cloud  Computing (CLOUD), 2012 IEEE 5th International Conference on, 2012. IEEE,  534-541.    </a> </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a>ZOBEL, J. &amp; DART, P. Phonetic string matching: Lessons from  information retrieval.&nbsp; Proceedings of  the 19th annual international ACM SIGIR conference on Research and development  in information retrieval, 1996. ACM, 166-172.    </a></font><font size="2"></font> </p>     <p>&nbsp;</p>     <p name="_ENREF_1">&nbsp;</p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Recibido: 25/03/2016    ]]></body>
<body><![CDATA[<br> Aceptado: 30/06/2016</font></p>      ]]></body><back>
<ref-list>
<ref id="B1">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[BARATEIRO]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[GALHARDAS]]></surname>
<given-names><![CDATA[H]]></given-names>
</name>
</person-group>
<source><![CDATA[A Survey of Data Quality Tools.]]></source>
<year>2005</year>
<volume>14</volume>
<page-range>48</page-range></nlm-citation>
</ref>
<ref id="B2">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[BATINI]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[SCANNAPIECO]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[Data quality: concepts, methodologies and techniques]]></source>
<year>2006</year>
<publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B3">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CAMBRONERO]]></surname>
<given-names><![CDATA[C. G]]></given-names>
</name>
<name>
<surname><![CDATA[MORENO]]></surname>
<given-names><![CDATA[I. G]]></given-names>
</name>
</person-group>
<source><![CDATA[Algoritmos de aprendizaje: knn & kmeans]]></source>
<year>2006</year>
<publisher-name><![CDATA[Universidad Carlos III de Madrid]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[DEAN]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[GHEMAWAT]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[MapReduce: simplified data processing on large clusters]]></source>
<year>2008</year>
<volume>51</volume>
<page-range>107-113</page-range><publisher-name><![CDATA[Communications of the ACM]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B5">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[GREGORY]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[Top Big Data Processing Frameworks]]></source>
<year>2016</year>
</nlm-citation>
</ref>
<ref id="B6">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[GSCHWANDTNER]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
<name>
<surname><![CDATA[GÄRTNER]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[AIGNER]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
<name>
<surname><![CDATA[MIKSCH]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[A taxonomy of dirty time-oriented data.]]></source>
<year>2012</year>
<publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[HASHEM]]></surname>
<given-names><![CDATA[I. A. T]]></given-names>
</name>
<name>
<surname><![CDATA[YAQOOB]]></surname>
<given-names><![CDATA[I]]></given-names>
</name>
<name>
<surname><![CDATA[ANUAR]]></surname>
<given-names><![CDATA[N. B]]></given-names>
</name>
<name>
<surname><![CDATA[MOKHTAR]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[GANI]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[KHAN]]></surname>
<given-names><![CDATA[S. U]]></given-names>
</name>
</person-group>
<source><![CDATA[The rise of &#8220;big data&#8221; on cloud computing: Review and open research issues]]></source>
<year>2014</year>
<volume>47</volume>
<page-range>98-115</page-range></nlm-citation>
</ref>
<ref id="B8">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[JHAVER]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[KHAN]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[THURAISINGHAM]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
</person-group>
<source><![CDATA[Calculating Edit Distance for Large Sets of String Pairs using MapReduce]]></source>
<year>2014</year>
</nlm-citation>
</ref>
<ref id="B9">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[KAUFMAN]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[ROUSSEEUW]]></surname>
<given-names><![CDATA[P. J]]></given-names>
</name>
</person-group>
<source><![CDATA[Finding groups in data: an introduction to cluster analysis]]></source>
<year>2009</year>
<publisher-name><![CDATA[John Wiley & Sons]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B10">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[KOUDAS]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
<name>
<surname><![CDATA[SARAWAGI]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[SRIVASTAVA]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<source><![CDATA[Record linkage: similarity measures and algorithms]]></source>
<year>2006</year>
<page-range>802-803</page-range></nlm-citation>
</ref>
<ref id="B11">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[LEVENSHTEIN]]></surname>
<given-names><![CDATA[V. I]]></given-names>
</name>
</person-group>
<source><![CDATA[Binary codes capable of correcting deletions, insertions, and reversals]]></source>
<year>1966</year>
<page-range>707-710</page-range></nlm-citation>
</ref>
<ref id="B12">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[LÓPEZ]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
</person-group>
<source><![CDATA[Limpieza de Datos: Reemplazo de valores ausentes y Estandarización]]></source>
<year>2011</year>
</nlm-citation>
</ref>
<ref id="B13">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[LÓPEZ]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
<name>
<surname><![CDATA[PÉREZ]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[BATULE]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[Las reglas de asociación ordinales en la detección de errores en los datos]]></source>
<year>2010</year>
<publisher-name><![CDATA[Revista Cubana de Ciencias Informáticas]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B14">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[MACQUEEN]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Some methods for classification and analysis of multivariate observations]]></source>
<year>1967</year>
<page-range>281-297</page-range><publisher-loc><![CDATA[^eOakland Oakland]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B15">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[RAHM]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[DO]]></surname>
<given-names><![CDATA[H. H]]></given-names>
</name>
</person-group>
<source><![CDATA[Data cleaning: Problems and current approaches]]></source>
<year>2000</year>
<volume>23</volume>
<page-range>3-13</page-range><publisher-name><![CDATA[IEEE Data Eng. Bull]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B16">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[RAMET]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[LAGO]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[KARLSSON]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[FALGUERAS]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[TRELLES]]></surname>
<given-names><![CDATA[O]]></given-names>
</name>
</person-group>
<source><![CDATA[Mr-Cirrus: Implementación de Map-Reduce bajo MPI para la ejecución paralela de programas secuenciales.]]></source>
<year>2011</year>
<publisher-loc><![CDATA[^eLas Palmas de Gran Canaria Las Palmas de Gran Canaria]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B17">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[VILLAGRA]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[GUZMÁN]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[PANDOLFI]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[LEGUIZAMÓN]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
</person-group>
<source><![CDATA[Análisis de medidas no-supervisadas de calidad en clusters obtenidos por K-means y Particle Swarm Optimization]]></source>
<year>2009</year>
</nlm-citation>
</ref>
<ref id="B18">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[YAN]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[YANG]]></surname>
<given-names><![CDATA[X]]></given-names>
</name>
<name>
<surname><![CDATA[YU]]></surname>
<given-names><![CDATA[Z]]></given-names>
</name>
<name>
<surname><![CDATA[LI]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[LI]]></surname>
<given-names><![CDATA[X]]></given-names>
</name>
</person-group>
<source><![CDATA[Incmr: Incremental data processing based on mapreduce]]></source>
<year>2012</year>
<page-range>534-541</page-range></nlm-citation>
</ref>
<ref id="B19">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[ZOBEL]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[DART]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
</person-group>
<source><![CDATA[Phonetic string matching: Lessons from information retrieval]]></source>
<year>1996</year>
<page-range>166-172</page-range><publisher-name><![CDATA[ACM]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
