Entradas

Mostrando entradas de 2011

Ignorar Tiempo en Query Linq to Entities

En Linq to Entities realizar una comparación de fechas sin tener en cuenta la hora me presentó un problema.

Mi código era:
var RessSor = (from s in db.sorteoLoteria join l in db.dic_loteria on s.fk_loteriaId equals l.pk_id where s.fecha.Date == dt.Date select new { NombreComercial = l.nombreComercial, NombreSEO = l.nombreSEO }); Este código funcionaba correctamente en LinQ to SQL, pero en LinQ to Entities no. Investigando un poco encontré la solución: using System.Data.Objects; ... var RessSor = (from s in db.sorteoLoteria join l in db.dic_loteria on s.fk_loteriaId equals l.pk_id where EntityFunctions.TruncateTime(s.fecha) == dt.Date select new { NombreComercial = l.nombreComercial, NombreSEO = l.nombreSEO });

Algoritmo Distancia Hamming Levenshtein en C#

El algoritmo Distancia de Hamming compara uno por uno los caracteres para ver cambios de uno con respecto al otro.

El algoritmo de Distancia de Levenshtein calcula numero de operaciones para convertir una cadena a otra.


Distancia de Hamming en C#
public static int HammingDistance(String s1, String s2) { int counter = 0; for (int k = 0; k < s1.Length; k++) { if (s1.ElementAt(k) == s2.ElementAt(k)) counter++; } return counter; }
Distancia de Levenshtein en C# static int LevenshteinDistance(string s, string t, out double porcentaje) { porcentaje = 0; // d es una tabla con m+1 renglones y n+1 columnas int costo = 0; int m = s.Length; int n = t.Length; int[,] d = new int[m + 1, n + 1]; // Verifica que exista algo que comparar if (n == 0) return m; if (m == 0) return n; …

Reducción Dimensiones Usando Entropía

Para este algoritmo se utilizó el algoritmo de Distancia de Hamming y se realizaron todas las adecuaciones para ir buscando la mínima entropía eliminando columnas de datos hasta al final tener solamente 2 columnas. Tener en cuenta que como el desarrollo se realizo en c# las columnas inician en 0.

Para ayuda de vectores se usó la librería Math.Net Numerics
public static string Entropy(ArrayList arrText) { string retorno = ""; //Total de columnas string sT = arrText[0].ToString(); double F = (double)Tools.ContarEjemplos(sT, ","); double E = 0; int i, j = 0; DenseMatrix S = new DenseMatrix(arrText.Count, arrText.Count, 0); for (i = 0; i < arrText.Count; i++) { for (j = i + 1; j < arrText.Count; j++) { S[i, j] = Tools.HammingDistance(arrText[i].ToString().Replace(",", ""), arrText[j].ToString().Replace(",", "")) / F; } } //A diferencia de la fo…

Minimización de Error en Discretización Binning

Esta implementación se realizó en C# con ayuda de la librería Math.Net Numerics para matrices y vectores.

Los pasos que se siguieron fueron los siguientes:

1. Organización de los datos de menor a mayor
2. Ejecución del algoritmo BIN Equal-Depth
3. Realizar medición del error inicial y realizar todos los posibles movimientos de ítems de izquierda a derecha para ver si se minimiza el error.
4. Realizar todos los posibles movimientos de derecha a izquierda para ver si se minimiza el error.
5. En caso de que el error luego de efectuar los movimientos sea inferior al error inicial se retorna al paso 3. Si ya el error no se minimiza más se finaliza. El error se mide en base a la suma de las desviaciones con respecto al promedio en cada uno de los grupos.
public static DenseVector[] MinimizeER(DenseVector[] vBins) { DenseVector[] vOutput = new DenseVector[vBins.Length]; int i = 0; int j = 0; double Error = CalcularTotalError(vBins); double ErrorInicial = Error; double Erro…

Algoritmos de Discretización Binning

En Mineria de Datos una de las técnicas que podemos emplear para realizar la discretización de nuestros datos es la de separar nuestros datos en BINs (Binning discretization).

Esta discretización hace parte del pre-procesamieto inicial que debemos realizar a los datos.

El desarrollo de los algoritmos se realizó en .NET con el lenguaje c#. Para ayuda de vectores se usó la librería Math.Net Numerics.

Para los resultados aquí mostrados se usaron 3 Bins y se usaron los siguientes datos:
3,2,1,5,4,3,1,7,5,3,8,10,9,5,5,2

Para el algoritmo BIN se implementaron los siguientes modos:

Anchos Iguales (BIN Equal-Width)
Este algoritmo organiza los Bins en grupos donde el salto de cada uno es: (maximo-minimo)/N, donde N es el numero de bins que se desean.

public static DenseVector[] ObtenerBinsEqualWidth(double[] data, int nBins) { int i = 0; double maximo = data.Max(); double minimo = data.Min(); //Se organizan los Bins con saltos iguales double salto = (maximo - minimo) / nBin…

Publicación en Twitter con ASP.NET

Imagen
En un post anterior habia descrito la forma de publicar post mediante programación, pero Twitter cambio la forma de hacerlo. Ahora vamos a hacerlo mediante la libreria TwitterVB.

Primero debemos descargar la dll llamada TwitterVB.dll desde TwitterVB y agregarla a nuestro proyecto en la carpeta bin.

Luego accedemos a Twitter y luego al link https://dev.twitter.com/apps para registrar nuestra nueva aplicación que se actualizará desde código. Una vez registremos la aplicación vamos a obtener dos datos que vamos a necesitar. El primero es el Customer key y el segundo es el Customer Secret.


Ya desde programación realizamos lo siguiente:
TwitterVB2.TwitterAPI tw = new TwitterVB2.TwitterAPI(); string url = tw.GetAuthorizationLink(sCustomerKey, sCustomerSecret);
La url que obtenemos desde programación la invocamos en nuestro navegador... esto nos mostrará una ventana de validación de permisos de Twitter. Hacemos clic en permitir acceso y esto nos mostrará un PIN de validación:


El numero de va…

Guardar comentarios con api de facebook

La funcionalidad de guardar comentarios de uno de mis portales se desactivo debido a actualizaciones en la api de facebook.

Aunque la funcionalidad de escribir los comentarios se mantuvo intacta, la de guardarlos en mi base de datos se perdió.

El código que tenia era algo como lo siguiente:

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>
<div id="divfb_connect"></div>

<script type="text/javascript">
    var fbcDiv = document.getElementById('divfb_connect');
    var fbcUrl = 'http://www.mysite.com' + location.pathname;
    var fbcPath = location.pathname;
    var fbcTitle = document.title;
    var fbcXid = 'asdfqwer';

    fbcDiv.innerHTML = '<fb:comments numposts="10" candelete="true" canpost="true" url="' + fbcUrl + '" title="' + fbcTitle + '" xid="&#…