public Result<Place[]> SearchPlace(string lat, string lng, string query)
        {
            Dictionary<string, string> parameters = new Dictionary<string, string>();
            if (!string.IsNullOrEmpty(query))
                parameters.Add("query", query);
            parameters.Add("ll", string.Format("{0},{1}", lat, lng));

            List<Place> result = new List<Place>();
            List<Venue> apiResult = _FSClient.SearchVenues(parameters);

            foreach (var venue in apiResult)
            {
                result.Add(this.ConvertPlace(venue));
            }

            return this.GetResult(result.ToArray());
        }
        /// <summary>
        /// Transforms provided list of Venues to list of FPlaces. If list of recent Checkins is provided, places will contain names of friends that checked at specific place.
        /// </summary>
        /// <param name="venues">list of Venue objects to transform</param>
        /// <param name="checkins">list of Checkin objects to include in places</param>
        /// <returns>list of transformed FPlaces</returns>
        public static List<FPlace> TransformToFPlaces(List<Venue> venues, List<Checkin> checkins)
        {
            if (venues == null)
                throw new ArgumentNullException("venues");

            List<FPlace> places = new List<FPlace>();

            venues.ForEach(venue =>
                {
                    FPlace place = new FPlace
                    {
                        Id = venue.id,
                        Name = venue.name,
                        Location = new Location
                            {
                                Latitude = venue.location != null ? venue.location.lat : 0,
                                Longitude = venue.location != null ? venue.location.lng : 0
                            },
                        Address = venue.location != null ? venue.location.address : string.Empty,
                        City = venue.location != null ? venue.location.city : string.Empty,
                        Country = venue.location != null ? venue.location.country : string.Empty,
                        FormattedAddress = venue.location != null ? venue.location.formattedAddress : null,
                        Phone = venue.contact != null ? venue.contact.phone : string.Empty,
                        Category = venue.categories != null ? venueCatManager.GetOurCategory(venue.categories) : string.Empty,
                        CheckinsCount = venue.stats != null ? venue.stats.checkinsCount : 0,
                        HereNow = venue.hereNow != null ? venue.hereNow.count : 0,
                        Url = venue.url
                    };

                    if (checkins != null)
                    {
                        checkins.ForEach(checkin =>
                        {
                            if (checkin.venue != null && checkin.venue.id == venue.id && checkin.user != null)
                                place.FriendsHere.Add(checkin.user.firstName + " " + checkin.user.lastName);
                        });
                    }

                    places.Add(place);
                });

            return places;
        }
        public ActionResult AdicionarTips()
        {
            SharpSquare sharpSquare = new SharpSquare(clientId, clientSecret);
            List<Banco.Models.Tip> tiplist = new List<Banco.Models.Tip>();
            List<Banco.Models.User> userlist = new List<Banco.Models.User>();
            List<Banco.Models.Venue> venuelist = new List<Banco.Models.Venue>();
            Dictionary<string, string> parametros = new Dictionary<string, string>();
            List<FourSquare.SharpSquare.Entities.Venue> venues = new List<FourSquare.SharpSquare.Entities.Venue>();
            List<FourSquare.SharpSquare.Entities.Tip> tips = new List<FourSquare.SharpSquare.Entities.Tip>();
            parametros.Add("limit", "500"); // tentando pegar ateh 500 venues e tips

            for (double lon = -43.2652; lon < -43.2475; lon += 0.0005)
            {

                parametros.Remove("limit");
                parametros.Add("limit", "50");
                parametros.Add("ll", "-22.8707," + lon.ToString().Replace(',', '.'));
                venues = sharpSquare.SearchVenues(parametros);

                foreach (FourSquare.SharpSquare.Entities.Venue v in venues)
                {
                    Banco.Models.Venue ven;
                    ven = db.Venues.FirstOrDefault(f => f.SquareId == v.id);
                    if (ven == null && venuelist.FirstOrDefault(f => f.SquareId == v.id) == null)
                    {
                        ven = new Banco.Models.Venue();
                        ven.SquareId = v.id;
                        ven.lat = -22.8707;
                        ven.lon = lon;
                        venuelist.Add(ven);
                        db.Venues.Add(ven);
                    }
                    ven.Name = v.name;
                    parametros.Remove("ll");
                    parametros.Remove("limit");
                    parametros.Add("limit", "500");
                    tips = sharpSquare.GetVenueTips(v.id, parametros);
                    foreach (FourSquare.SharpSquare.Entities.Tip t in tips)
                    {
                        Banco.Models.Tip tip;
                        //Verifica de tip já foi adicionada anteriormente no banco
                        tip = db.Tips.FirstOrDefault(f => f.SquareId == t.id);
                        if (tip == null && tiplist.FirstOrDefault(f => f.SquareId == t.id) == null)
                        {
                            //Se é uma tip nova cria uma e adiciona no context
                            tip = new Banco.Models.Tip();
                            tip.SquareId = t.id;
                            tip.Venue = ven;
                            tiplist.Add(tip);
                            db.Tips.Add(tip);

                        }
                        //sendo tip nova ou não atualiza os campos
                        tip.Description = t.text;
                        Banco.Models.User user;
                        user = db.Users.FirstOrDefault(f => f.SquareId == t.user.id);
                        if (user == null && userlist.FirstOrDefault(f => f.SquareId == t.user.id) == null)
                        {
                            user = new Banco.Models.User();
                            user.SquareId = t.user.id;
                            user.Name = t.user.firstName;
                            userlist.Add(user);
                            db.Users.Add(user);
                        }
                        if (user == null && userlist.FirstOrDefault(f => f.SquareId == t.user.id) != null)
                        {
                            user = userlist.FirstOrDefault(f => f.SquareId == t.user.id);
                        }
                        tip.User = user;
                    }
                }
                db.SaveChanges();
            }
            ViewBag.Message = "Venues, tips e users adicionados ao banco com sucesso.";
            return View();
        }
        public ActionResult readPredictFromFile()
        {
            List<char> listaPredict = new List<char>();
            List<string> listId = new List<string>();
            try
            {   // Open the text file using a stream reader.
                using (StreamReader sr = new StreamReader("C:\\Users\\Avell B155 MAX\\Documents\\facul\\projetofinal\\Python notebook\\unclasspredicaofinal.txt"))
                {
                    // Read the stream to a string, and write the string to the console.
                    sr.ReadLine();
                    sr.ReadLine();
                    sr.ReadLine();
                    while (!sr.EndOfStream)
                    {
                        string line = sr.ReadLine();
                        listaPredict.Add(line[25]);

                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("The file could not be read:");
                Console.WriteLine(e.Message);
            }
            try
            {   // Open the text file using a stream reader.
                using (StreamReader sr = new StreamReader("C:\\Users\\Avell B155 MAX\\Documents\\facul\\projetofinal\\Python notebook\\attributes2.txt"))
                {
                    // Read the stream to a string, and write the string to the console.
                    while (!sr.EndOfStream)
                    {
                        string line = sr.ReadLine();
                        listId.Add(line);

                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("The file could not be read:");
                Console.WriteLine(e.Message);
            }
            var tips = db.Tips.Where(w => w.status == 0).OrderBy(o => o.Id);
            int countId = 0;
            int countProgress = 0;
            foreach (Banco.Models.Tip t in tips)
            {
                countId++;

                if (int.Parse(listId.ElementAt(countProgress)) == countId)
                {
                    t.WekaPredictFinal = int.Parse(listaPredict.ElementAt(countProgress).ToString());
                    countProgress++;
                }
            }
            db.SaveChanges();
            ViewBag.Teste = listId;
            return View();
        }
        public void SatisfacaoInterna()
        {
            List<Banco.Models.User> users = db.Users.ToList();

            foreach (Banco.Models.User u in users)
            {
                List<Banco.Models.Tip> tipsUser = db.Tips.Where(w => w.UserId == u.Id && w.WekaPredictFinal != 0).ToList();
                List<int> listaDesvio = new List<int>();
                foreach (Banco.Models.Tip t in tipsUser)
                {
                    if (t.WekaPredictFinal == 1)
                    {
                        listaDesvio.Add(10);
                    }
                    else if (t.WekaPredictFinal == 2)
                    {
                        listaDesvio.Add(5);
                    }
                    else
                        listaDesvio.Add(0);
                }
                if (tipsUser.Count < 6)
                    u.pesoInterno = 1;
                else
                    u.pesoInterno = (float)CalculateStdDev(listaDesvio);
                //if (u.pesoInterno < 3)
                //    u.pesoInterno = 1;
                //else if (u.pesoInterno >= 3 && u.pesoInterno <= 4)
                //    u.pesoInterno = 2;
                //else if (u.pesoInterno > 4)
                //    u.pesoInterno = 3;
            }
            db.SaveChanges();
            List<Banco.Models.Venue> venues = db.Venues.ToList();
            foreach (Banco.Models.Venue v in venues)
            {
                List<Banco.Models.Tip> tipsVenue = db.Tips.Where(w => w.VenueId == v.Id).ToList();
                float somaPesos = 0;
                float somaTotal = 0;
                foreach (Banco.Models.Tip t in tipsVenue)
                {
                    if (t.WekaPredictFinal == 1)
                    {
                        somaTotal += 10 * t.User.pesoInterno;
                    }
                    else if (t.WekaPredictFinal == 2)
                    {
                        somaTotal += 5 * t.User.pesoInterno;
                    }
                    somaPesos += t.User.pesoInterno;
                }
                if (somaPesos == 0)
                    v.ratePesoInterno = 0;
                else
                    v.ratePesoInterno = somaTotal / (double)somaPesos;
            }
            db.SaveChanges();
        }
        public void WriteARFF()
        {

            // Write the string to a file.
            System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\Users\\Avell B155 MAX\\Documents\\facul\\projetofinal\\lasttestDuasClassesMedianaComp.arff");
            file.WriteLine("% 1. Title: Sentiment Analysis\n");
            file.WriteLine("@RELATION tips\n");
            file.WriteLine("@ATTRIBUTE sent1        NUMERIC");
            file.WriteLine("@ATTRIBUTE sent2        NUMERIC");
            file.WriteLine("@ATTRIBUTE sent3        NUMERIC");
            file.WriteLine("@ATTRIBUTE sent4        NUMERIC");
            file.WriteLine("@ATTRIBUTE sent5        NUMERIC");
            file.WriteLine("@ATTRIBUTE mean1        NUMERIC");
            file.WriteLine("@ATTRIBUTE mean2        NUMERIC");
            file.WriteLine("@ATTRIBUTE mean3        NUMERIC");
            file.WriteLine("@ATTRIBUTE mean4        NUMERIC");
            file.WriteLine("@ATTRIBUTE mean5        NUMERIC");
            file.WriteLine("@ATTRIBUTE stdv1        NUMERIC");
            file.WriteLine("@ATTRIBUTE stdv2        NUMERIC");
            file.WriteLine("@ATTRIBUTE stdv3        NUMERIC");
            file.WriteLine("@ATTRIBUTE stdv4        NUMERIC");
            file.WriteLine("@ATTRIBUTE stdv5        NUMERIC");
            file.WriteLine("@ATTRIBUTE class        {0,1}\n");
            file.WriteLine("@DATA");
            var tips = db.Tips.Where(w => w.Venue.rate != 0 && w.WekaPredictFinal != 0).GroupBy(g => g.VenueId);
           
            foreach (var g in tips)
            {
                string line = "";
                List<int> sents = new List<int>();
                List<double> means = new List<double>();
                List<float> stdvs = new List<float>();
                string classe = "0";
                if (g.Count() > 4)
                {
                    Banco.Models.Venue v = db.Venues.Find(g.Key);
                    //if (v.rate < 5)
                    //    classe = "0";
                    //else if (v.rate >= 5 && v.rate <= 6)
                    //    classe = "1";
                    //else if (v.rate > 6 && v.rate <= 8)
                    //    classe = "2";
                    //else
                    //    classe = "3";
                    classe = v.rate > 6.9 ? "1" : "0";
                    foreach (var t in g.Take(5))
                    {
                        sents.Add(t.WekaPredictFinal);
                        if (t.User.pesoInterno != 1)
                        {
                            means.Add(t.User.mediaComentarios);
                            stdvs.Add(t.User.pesoInterno);
                        }
                    }
                    if (means.Count != 0)
                    {
                        if (means.Count != 5)
                        {
                            int cont = means.Count;
                            for (int i = 0; i < 5 - cont; i++)
                            {
                                means.Add(means.Sum() / means.Count);
                                stdvs.Add(stdvs.Sum() / stdvs.Count);
                            }
                        }
                        foreach (int sent in sents)
                        {
                            line += sent.ToString() + ",";
                        }
                        foreach (double mean in means)
                        {
                            line += mean.ToString().Replace(',', '.') + ",";
                        }
                        foreach (float stdv in stdvs)
                        {
                            line += stdv.ToString().Replace(',', '.') + ",";
                        }
                        line += classe;
                        file.WriteLine(line);
                    }
                }
            }

            file.Close();
        }
Esempio n. 7
0
        protected Venue BuscarAgregarEstablecimiento(Establecimiento establecimiento)
        {
            var listaNiveles = new List<string>
                                           {
                                               "Inicial",
                                               "Primario",
                                               "Secundario"
                                           };

            Venue fourSquareVenue = null;
            var sharpSquare = (SharpSquare)Session["SharpSquare"];

            if (establecimiento.FourSquareVenueId == null)
            {
                var latitudLongitud = establecimiento.Latitud.ToString(CultureInfo.InvariantCulture.NumberFormat)
                                      + "," +
                                      establecimiento.Longitud.ToString(CultureInfo.InvariantCulture.NumberFormat);

                var parametros = new Dictionary<string, string>();
                parametros.Add("ll", latitudLongitud);
                parametros.Add("intent", "match");
                var nombreReducido = establecimiento.Nombre.ToLower()
                    .Replace("inst.", "")
                    .Replace("instituto", "")
                    .Replace("colegio", "")
                    .Replace("coleg.", "")
                    .Replace("priv.", "")
                    .Replace("integral", "")
                    .Replace("escuela", "")
                    .Replace("educ.", "")
                    .Replace("fund.", "")
                    .Replace("fundacion", "")
                    .Replace("secundaria", "")
                    .Replace("primaria", "")
                    .Replace("infantil", "")
                    .Replace("jardin", "")
                    .Replace("jardin de infantes", "")
                    .Replace("maternal", "")
                    .Replace("parroquial", "")
                    .Trim();
                parametros.Add("query", nombreReducido);

                var categorias = new List<string>();

                //categorias.Add("4bf58dd8d48988d131941735"); //Centro Espiritual
                if (establecimiento.NivelTipo.Any(x => listaNiveles.Contains(x.NivelEducativo.Valor)))
                {
                    categorias.Add("4bf58dd8d48988d13b941735"); //Colegio
                }
                else
                {
                    if (establecimiento.NivelTipo.Any(x => x.NivelEducativo.Valor == "Otros"))
                    {
                        categorias.Add("4bf58dd8d48988d1f2931735"); //Lugar de Artes interpretativas
                    }
                    else
                    {
                        categorias.Add("4d4b7105d754a06372d81259"); //Facultades y Universidades
                    }
                }
                parametros.Add("categoryId", String.Join(",", categorias));
                Logger.Error("Hago un Search Venues");
                var listaDeLugares = sharpSquare.SearchVenues(parametros);

                Venue lugar = null;
                //Busco el Id de FourSquare

                lugar = listaDeLugares.OrderBy(x => Math.Abs(x.location.lat - establecimiento.Latitud)
                    + Math.Abs(x.location.lng - establecimiento.Longitud)
                    ).FirstOrDefault();
                if (lugar == null)
                {
                    var venue = new Dictionary<string, string>();
                    venue.Add("name", establecimiento.Nombre);
                    venue.Add("address", establecimiento.Direccion);
                    venue.Add("city", "Buenos Aires");
                    venue.Add("state", "Buenos Aires");
                    //venue.Add("phone", establecimiento.Telefonos); //Tira error por ser una string y no un numero
                    venue.Add("ll", establecimiento.Latitud.ToString(CultureInfo.InvariantCulture.NumberFormat)
                                        + "," +
                                        establecimiento.Longitud.ToString(CultureInfo.InvariantCulture.NumberFormat));

                    if (establecimiento.NivelTipo.Any(x => listaNiveles.Contains(x.NivelEducativo.Valor)))
                    {
                        venue.Add("primaryCategoryId", "4bf58dd8d48988d13b941735"); //Colegios
                    }
                    else
                    {
                        if (establecimiento.NivelTipo.Any(x => x.NivelEducativo.Valor == "Otros"))
                        {
                            venue.Add("primaryCategoryId", "4bf58dd8d48988d1f2931735"); //Artes Interpretativas
                        }
                        else
                        {
                            venue.Add("primaryCategoryId", "4bf58dd8d48988d198941735"); //Edificio Universitario
                        }
                    }
                    Logger.Error("Agrego un Venue");
                    fourSquareVenue = sharpSquare.AddVenue(venue);
                    fourSquareVenue = sharpSquare.GetVenue(fourSquareVenue.id);
                    return fourSquareVenue;
                }
                Logger.Error("Hago un getvenue por Id");
                fourSquareVenue = sharpSquare.GetVenue(lugar.id);
                return fourSquareVenue;
            }
            Logger.Error("Hago un getvenue por Id que ya tengo guardada");
            fourSquareVenue = sharpSquare.GetVenue(establecimiento.FourSquareVenueId);
            return fourSquareVenue;
        }