Example #1
0
        /// <summary>
        /// Get the demographics data for all zipcodes in the list
        /// </summary>
        /// <param name="zipCodes"></param>
        /// <param name="saveToDb">Save each demographic as it is retrieved</param>
        /// <param name="randomWaitSeconds">Sleep for between 0 and randomWaitSeconds between each request</param>
        public static List <DemographicsModel> GetDemographics(List <int> zipCodes, [Optional] bool saveToDb, [Optional] int randomWaitSeconds)
        {
            List <DemographicsModel> results = new List <DemographicsModel>();

            DemographicsModel result = null;

            foreach (int zipCode in zipCodes)
            {
                // Sleep for a random number of seconds between 0 and randomWaitSeconds. Default is 0.
                Random random  = new Random();
                int    seconds = random.Next(0, randomWaitSeconds);
                System.Threading.Thread.Sleep(seconds * 1000);

                result = DemographicsQuery.GetDemographic(zipCode);
                if (null != result)
                {
                    results.Add(result);
                    if (saveToDb == true)
                    {
                        DemographicsData.UpdateDatabase(new List <DemographicsModel> {
                            result
                        });
                    }
                }
                else
                {
                    // We hit a ? and are blocked
                    break;
                }
            }

            Console.WriteLine("Queried a total of {0} zip codes", results.Count);
            return(results);
        }
 public static void UpdatePatientDemographics(int patientID, DemographicsModel demo)
 {
     if (Users == null)
     {
         Initialize();
     }
     Patients.FirstOrDefault(x => x.PatientData.ID == patientID.ToString()).Demographics = demo;
 }
        public async Task GetDemographicsModelShouldBeSuccessful()
        {
            ClarifaiResponse <IModel <Demographics> > response =
                await Client.GetModel <Demographics>(
                    Client.PublicModels.DemographicsModel.ModelID)
                .ExecuteAsync();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual(10000, response.Status.StatusCode);
            Assert.AreEqual(HttpStatusCode.OK, response.HttpCode);
            Assert.NotNull(response.RawBody);

            DemographicsModel demographicsModel = (DemographicsModel)response.Get();

            Assert.NotNull(demographicsModel.ModelID);
        }
Example #4
0
        public static DemographicsModel GetDemographic(int zipCode)
        {
            if (zipCode > 99999)
            {
                Console.WriteLine("Zip Code {0} cannot be more than 5 digits. Skipping it.", zipCode);
                return(null);
            }

            string page = DemographicsQuery.GetPage(zipCode);

            if (page.Equals("?"))
            {
                Console.WriteLine("Request for {0} contains '?' which means that this IP address is blocked by zipwho.com. Use www.whatismyip.com to see your IP address.", zipCode);
                return(null);
            }

            DemographicsModel result = DemographicsQuery.ParsePage(page, zipCode);

            return(result);
        }
Example #5
0
        public void DemographicsTest()
        {
            List <int> zipCodes = new List <int> {
                98103, 98052, 98007
            };

            List <DemographicsModel> results = DemographicsQuery.GetDemographics(zipCodes);

            Assert.AreEqual(3, results.Count);

            DemographicsModel fremont = results.Single(x => x.Zip == 98103);

            Assert.AreEqual(49044, fremont.MedianIncome);
            Assert.AreEqual(73, fremont.MedianIncomeRank);

            Assert.AreEqual(43.9, fremont.OwnerOccupiedHomesPercent);
            Assert.AreEqual(5, fremont.OwnerOccupiedHomesRank);

            Assert.AreEqual(36.5, fremont.MarriedPercent);
            Assert.AreEqual(2, fremont.MarriedRank);

            Assert.AreEqual("Seattle", fremont.City);
            Assert.AreEqual("WA", fremont.State);
        }
Example #6
0
        private static DemographicsModel ParsePage(string page, int zipCode)
        {
            // Get the csv list of fields and values. This needs to be done in two steps until a better regex can be made.
            string pattern     = @"getData\(\)(?<text>.*?)"";";
            Regex  regex       = new Regex(pattern, RegexOptions.Singleline);
            Match  match       = regex.Match(page);
            string partialText = match.Groups["text"].Value;

            pattern = @"""(?<fields>.*?)\\n(?<values>.*?)$";
            regex   = new Regex(pattern, RegexOptions.Singleline);
            match   = regex.Match(partialText);
            string fieldsCsv = match.Groups["fields"].Value;
            string valuesCsv = match.Groups["values"].Value;

            string[] fields = fieldsCsv.Split(',');
            string[] values = valuesCsv.Split(',');

            // Fields and values should align by their index. Put them into a dictionary.
            Dictionary <string, string> data = new Dictionary <string, string>();

            for (int i = 0; i < fields.Length; i++)
            {
                data.Add(fields[i], values[i]);
            }

            // Now populate the object with data from the dictionary
            DemographicsModel result = new DemographicsModel();

            result.Zip = zipCode;

            // Some of the data is empty so this condition will check if it is populated or not.
            if (!regex.IsMatch(partialText))
            {
                Console.WriteLine("No data found for {0}", zipCode);
            }
            else
            {
                result.City                        = data["city"];
                result.State                       = data["state"];
                result.MedianIncome                = Convert.ToInt32(data["MedianIncome"]);
                result.MedianIncomeRank            = Convert.ToInt32(data["MedianIncomeRank"]);
                result.CostOfLivingIndex           = Convert.ToDouble(data["CostOfLivingIndex"]);
                result.CostOfLivingRank            = Convert.ToInt32(data["CostOfLivingRank"]);
                result.MedianMortgageToIncomeRatio = Convert.ToDouble(data["MedianMortgageToIncomeRatio"]);
                result.MedianMortgageToIncomeRank  = Convert.ToInt32(data["MedianMortgageToIncomeRank"]);
                result.OwnerOccupiedHomesPercent   = Convert.ToDouble(data["OwnerOccupiedHomesPercent"]);
                result.OwnerOccupiedHomesRank      = Convert.ToInt32(data["OwnerOccupiedHomesRank"]);
                result.MedianRoomsInHome           = Convert.ToDouble(data["MedianRoomsInHome"]);
                result.MedianRoomsInHomeRank       = Convert.ToInt32(data["MedianRoomsInHomeRank"]);
                result.CollegeDegreePercent        = Convert.ToDouble(data["CollegeDegreePercent"]);
                result.CollegeDegreeRank           = Convert.ToInt32(data["CollegeDegreeRank"]);
                result.ProfessionalPercent         = Convert.ToDouble(data["ProfessionalPercent"]);
                result.ProfessionalRank            = Convert.ToInt32(data["ProfessionalRank"]);
                result.Population                  = Convert.ToInt32(data["Population"]);
                result.PopulationRank              = Convert.ToInt32(data["PopulationRank"]);
                result.AverageHouseholdSize        = Convert.ToDouble(data["AverageHouseholdSize"]);
                result.AverageHouseholdSizeRank    = Convert.ToInt32(data["AverageHouseholdSizeRank"]);
                result.MedianAge                   = Convert.ToDouble(data["MedianAge"]);
                result.MedianAgeRank               = Convert.ToInt32(data["MedianAgeRank"]);
                result.MaleToFemaleRatio           = Convert.ToDouble(data["MaleToFemaleRatio"]);
                result.MaleToFemaleRank            = Convert.ToInt32(data["MaleToFemaleRank"]);
                result.MarriedPercent              = Convert.ToDouble(data["MarriedPercent"]);
                result.MarriedRank                 = Convert.ToInt32(data["MarriedRank"]);
                result.DivorcedPercent             = Convert.ToDouble(data["DivorcedPercent"]);
                result.DivorcedRank                = Convert.ToInt32(data["DivorcedRank"]);
                result.WhitePercent                = Convert.ToDouble(data["WhitePercent"]);
                result.WhiteRank                   = Convert.ToInt32(data["WhiteRank"]);
                result.BlackPercent                = Convert.ToDouble(data["BlackPercent"]);
                result.BlackRank                   = Convert.ToInt32(data["BlackRank"]);
                result.AsianPercent                = Convert.ToDouble(data["AsianPercent"]);
                result.AsianRank                   = Convert.ToInt32(data["AsianRank"]);
                result.HispanicEthnicityPercent    = Convert.ToDouble(data["HispanicEthnicityPercent"]);
                result.HispanicEthnicityRank       = Convert.ToInt32(data["HispanicEthnicityRank"]);

                Console.WriteLine("Data found for {0}", zipCode);
            }

            result.LastUpdated = DateTime.UtcNow;
            return(result);
        }