Ejemplo n.º 1
0
        //supervises computation of regional multipliers for a BLS regional center based on a regression
        //equation previously determined by an external model
        public void computeAndSaveRegMult(BlsCenter BlsCity, List <Series> blsSeriesArr, double dynamicNationalIndex)
        {
            string[] validSeriesIDs = { "blsReadyMixConcID", "blsTractorShovelLoadersID", "blsEnergyID", "blsFuelsUtilitiesID" };
            // var seriesLabelIDFrags = new List<string> { "PCU327320327320","PCU33312033312014","SA0E","SAH2" };
            var seriesIDMap = "";
            var blsVarDict  = new Dictionary <string, double>();

            if (blsSeriesArr != null)
            {
                foreach (Series serie in blsSeriesArr)
                {
                    seriesIDMap = getSeriesIDMapping(serie.seriesID);
                    foreach (var data in serie.data)
                    {
                        if (data.periodName == "Annual")
                        {
                            blsVarDict.Add(seriesIDMap, Convert.ToDouble(data.value));
                            Console.WriteLine("BLS Series #{0}: year:{1} periodName:{2} value:{3} saved for {4}", serie.seriesID, data.year, data.periodName, data.value, seriesIDMap);
                            break;
                        }
                    }
                }
            }
            //perform regionalization calcs

            /* Feb 2018 replaced with city-specific model
             * BlsCity.regionalFactor = this.c0_intercept +
             *  (this.c1_readyMix * blsVarDict[validSeriesIDs[0]]) +
             *  (this.c2_tractorShovel * blsVarDict[validSeriesIDs[1]]) +
             *  (this.c3_energy * blsVarDict[validSeriesIDs[2]]) +
             *  (this.c4_fuelUtils * blsVarDict[validSeriesIDs[3]]);*/

            //Feb 2018 city specific model
            BlsCity.regionalFactor = BlsCity.c0_intercept +
                                     (BlsCity.c1_readyMix * blsVarDict[validSeriesIDs[0]]) +
                                     (BlsCity.c2_tractorShovel * blsVarDict[validSeriesIDs[1]]) +
                                     (BlsCity.c3_energy * blsVarDict[validSeriesIDs[2]]) +
                                     (BlsCity.c4_fuelUtils * blsVarDict[validSeriesIDs[3]]);

            BlsCity.inflationFactor = Math.Round(BlsCity.regionalFactor / BlsCity.regModel2014Index, dcp);
            BlsCity.regionalFactor  = Math.Round(BlsCity.regionalFactor / dynamicNationalIndex, dcp);
            if (BlsCity.blsCity == "NATIONAL")
            {
                BlsCity.selectString = String.Format("{0} ({1}) {2}", BlsCity.blsCity, "NA", BlsCity.regionalFactor);
            }
            else
            {
                BlsCity.selectString = String.Format("{0} ({1:F0} miles) {2}", BlsCity.blsCity, BlsCity.distToCurrentPoint, BlsCity.regionalFactor);
            }
        }
Ejemplo n.º 2
0
        // computes reginal multipliers for a list of BLS centers
        public bool computeRegionalizationMult(List <BlsCenter> BlsCenters)
        {
            int count        = 0;
            int currentYear  = DateTime.Now.Year;
            int currentMonth = DateTime.Now.Month;
            int dataYear     = currentYear - 1;

            bool status = true;

            //bls data is updated between the 15th and 20th of the month as of this writting so assume previous years data available in Feb
            if (currentMonth < 2)
            {
                dataYear = dataYear - 1;
            }

            // do the National series first to get the dynamicNationalIndex
            BlsCenter     National    = BlsCenters[3];
            List <string> nationalIDs = new List <string>();

            nationalIDs.Add(National.blsReadyMixConcID);
            nationalIDs.Add(National.blsTractorShovelLoadersID);
            nationalIDs.Add(National.blsEnergyID);
            nationalIDs.Add(National.blsFuelsUtilitiesID);
            status = status && getBLSData(National, nationalIDs.ToArray(), dataYear.ToString(), dataYear.ToString(), National.regionalFactor);

            foreach (BlsCenter BlsCity in BlsCenters)
            {
                count           += 1;
                BlsCity.dataYear = dataYear;
                if (count > shortListCount + 1)
                {
                    break;                             //do not compute for National and other cause default multipliers are always 1 however need to compute for National so can calc inflation
                }
                List <string> seriesIDs = new List <string>();
                seriesIDs.Add(BlsCity.blsReadyMixConcID);
                seriesIDs.Add(BlsCity.blsTractorShovelLoadersID);
                seriesIDs.Add(BlsCity.blsEnergyID);
                seriesIDs.Add(BlsCity.blsFuelsUtilitiesID);
                status = status && getBLSData(BlsCity, seriesIDs.ToArray(), dataYear.ToString(), dataYear.ToString(), BlsCenters[3].regionalFactor);
                Console.WriteLine("Element #{0}: {1} {2} {3} {4} {5}", count, BlsCity.blsCity, BlsCity.blsReadyMixConcID, BlsCity.blsTractorShovelLoadersID, BlsCity.blsEnergyID, BlsCity.blsFuelsUtilitiesID);
            }
            return(status);
        }
Ejemplo n.º 3
0
        //retrieves data via the BLS api given a valid BLS regional center, a series id and start/end year
        public bool getBLSData(BlsCenter BlsCity, string[] seriesIDs, string startyear, string endyear, double dynamicNationalIndex)
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.bls.gov/publicAPI/v2/timeseries/data/");

            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method      = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string newJson = Newtonsoft.Json.JsonConvert.SerializeObject(new SeriesPost()
                {
                    seriesid        = seriesIDs,//(new List<string>() { "CUUR0000SA0" }).ToArray(),
                    startyear       = startyear,
                    endyear         = endyear,
                    catalog         = false,
                    calculations    = false,
                    annualaverage   = true,
                    registrationKey = "03ee11d0a8e54c08b09a34263273be15"
                });

                //TODO comment out for production So you can see the JSON thats output
                //System.Diagnostics.Debug.WriteLine(newJson);

                streamWriter.Write(newJson);
                streamWriter.Flush();
                streamWriter.Close();
            }
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var     result = streamReader.ReadToEnd();
                blsResp obj    = Newtonsoft.Json.JsonConvert.DeserializeObject <blsResp>(result);
                //check to see if success response received
                if (obj.ToString() == "Status: REQUEST_SUCCEEDED")
                {
                    computeAndSaveRegMult(BlsCity, obj.Results.series, dynamicNationalIndex);
                }
                //Console.ReadLine();
            }
            return(true);
        }