Esempio n. 1
0
        /// <summary>
        /// Assigns a value to <see cref="College"/> at random based on the given values
        /// </summary>
        /// <param name="homeState"></param>
        /// <param name="hsGradDt"></param>
        protected internal void AssignRandomCollege(string homeState, DateTime?hsGradDt)
        {
            if (hsGradDt == null)
            {
                return;
            }

            //get college grad data for same state as hs
            var univGradData =
                UsStateData.GetStateData(homeState)?.PercentOfGrads
                .FirstOrDefault(x => x.Item1 == (OccidentalEdu.Bachelor | OccidentalEdu.Grad));

            var bachelorGradRate = univGradData?.Item2 ??
                                   AmericanUniversity.DefaultNationalAvgs.First(
                x => x.Key == (OccidentalEdu.Bachelor | OccidentalEdu.Grad)).Value;

            //roll for some college
            if (Etx.RandomRollAboveOrAt((int)Math.Round(bachelorGradRate * 2), Etx.Dice.OneHundred))
            {
                AssignEduFlagAndLevel();
                return;
            }

            //pick a univ
            var univ = GetAmericanUniversity(homeState);

            if (univ == null)
            {
                AssignEduFlagAndLevel();
                return;
            }

            if (!Etx.RandomRollBelowOrAt((int)Math.Round(bachelorGradRate * 10), Etx.Dice.OneThousand))
            {
                //dropped out of college
                AddUniversity(univ, null);
                AssignEduFlagAndLevel();
                return;
            }

            //college grad
            //get a date for when amer would grad from college
            var univGradDt = GetRandomGraduationDate(hsGradDt.Value, AmericanUniversity.YearsInUndergradCollege);

            AddUniversity(univ, univGradDt);

            //try for post-grad
            var postGradRate = AmericanUniversity.DefaultNationalAvgs.First(
                x => x.Key == (OccidentalEdu.Master | OccidentalEdu.Grad)).Value;

            if (Etx.RandomRollBelowOrAt((int)postGradRate * 10, Etx.Dice.OneThousand))
            {
                var postGradDt   = GetRandomGraduationDate(univGradDt, AmericanUniversity.YearsInPostgradCollege);
                var postGradUniv = GetAmericanUniversity(homeState);

                AddUniversity(postGradUniv, postGradDt);
            }

            AssignEduFlagAndLevel();
        }
Esempio n. 2
0
        /// <summary>
        /// Assigns the Msa and AverageEarnings properties based on a match to the underlying data.
        /// </summary>
        /// <param name="node"></param>
        protected internal void ParseCityXmlNode(XmlNode node)
        {
            const string METRO     = "Metro";
            const string MSA_TYPE  = "msa-type";
            const string CBSA_TYPE = "cbsa-type";

            var cityNode = node as XmlElement;

            if (!String.IsNullOrWhiteSpace(cityNode?.Attributes[MSA_CODE]?.Value))
            {
                Msa = new MStatArea {
                    Value = cityNode.Attributes[MSA_CODE].Value
                };
                if (!String.IsNullOrWhiteSpace(cityNode.Attributes[MSA_TYPE]?.Value))
                {
                    Msa.MsaType = cityNode.Attributes[MSA_TYPE].Value == METRO
                        ? UrbanCentric.City | UrbanCentric.Large
                        : UrbanCentric.City | UrbanCentric.Small;
                }
            }
            if (!String.IsNullOrWhiteSpace(cityNode?.Attributes[CBSA_CODE]?.Value))
            {
                Msa = new MStatArea {
                    Value = cityNode.Attributes[CBSA_CODE].Value
                };
                if (!String.IsNullOrWhiteSpace(cityNode.Attributes[CBSA_TYPE]?.Value))
                {
                    Msa.MsaType = cityNode.Attributes[CBSA_TYPE].Value == METRO
                        ? UrbanCentric.City | UrbanCentric.Large
                        : UrbanCentric.City | UrbanCentric.Small;
                }
            }
            AverageEarnings = GetAvgEarningsPerYear(cityNode) ??
                              UsStateData.GetStateData(StateName)?.AverageEarnings;
        }
Esempio n. 3
0
        public void TestGetStateData()
        {
            var testStateName = "Maryland";
            var testState     = UsState.GetStateByName(testStateName);
            var testResult    = UsStateData.GetStateData(testState.ToString());

            Assert.IsNotNull(testResult);
            Assert.AreEqual("Maryland", testResult.StateName);
            Assert.IsNotNull(testResult.AverageEarnings);
            Assert.AreNotEqual(0, testResult.EmploymentSectors.Count);
            Assert.AreNotEqual(0, testResult.PercentOfGrads.Count);
            Assert.AreNotEqual(0, testResult.PropertyCrimeRate.Count);
            Assert.AreNotEqual(0, testResult.ViolentCrimeRate.Count);
            var percentCollegeGrad =
                testResult.PercentOfGrads.FirstOrDefault(x => x.Item1 == (OccidentalEdu.Bachelor | OccidentalEdu.Grad));

            Assert.AreNotEqual(0, percentCollegeGrad);
            System.Diagnostics.Debug.WriteLine(percentCollegeGrad);
            for (var i = 0; i < 100; i++)
            {
                var attempt = Etx.RandomRollAboveOrAt((int)Math.Round(percentCollegeGrad.Item2 * 2), Etx.Dice.OneHundred);
                System.Diagnostics.Debug.WriteLine(attempt);
            }

            //expected to resolve to national
            testResult = UsStateData.GetStateData(null);
            Assert.IsNotNull(testResult);
            Assert.AreEqual("United States", testResult.StateName);
            Assert.IsNotNull(testResult);
            Assert.IsNotNull(testResult.AverageEarnings);
            Assert.AreNotEqual(0, testResult.EmploymentSectors.Count);
            Assert.AreNotEqual(0, testResult.PercentOfGrads.Count);
            Assert.AreNotEqual(0, testResult.PropertyCrimeRate.Count);
            Assert.AreNotEqual(0, testResult.ViolentCrimeRate.Count);
        }
Esempio n. 4
0
        /// <summary>
        /// Assigns a value to <see cref="HighSchool"/> at random based on the given inputs
        /// </summary>
        /// <param name="homeState"></param>
        /// <param name="zipCode"></param>
        /// <param name="isLegalAdult"></param>
        /// <param name="dtAtAge18"></param>
        /// <param name="hsGradDt"></param>
        /// <returns></returns>
        protected internal bool AssignRandomHighSchool(string homeState, string zipCode, bool isLegalAdult, DateTime dtAtAge18,
                                                       out DateTime?hsGradDt)
        {
            hsGradDt = null;

            //get hs grad data for state amer lived in when 18
            var hsGradData =
                UsStateData.GetStateData(homeState)?.PercentOfGrads
                .FirstOrDefault(x => x.Item1 == (OccidentalEdu.HighSchool | OccidentalEdu.Grad));

            //determine prob. of having hs grad
            var hsGradRate = hsGradData?.Item2 ?? AmericanHighSchool.DF_NATL_AVG;

            //first try city, then state, last natl
            var hss = AmericanHighSchool.GetHighSchoolsByZipCode(zipCode)
                      ?? AmericanHighSchool.GetHighSchoolsByState(homeState);

            var hs = hss.Length > 1 ? hss[Etx.RandomInteger(0, hss.Length - 1)] : hss.First();

            //still in hs or dropped out
            if (!isLegalAdult || Etx.RandomRollAboveOrAt((int)Math.Round(hsGradRate) + 1, Etx.Dice.OneHundred))
            {
                //assign grad hs but no date
                _highSchools.Add(new AmericanHighSchoolStudent(hs));
                AssignEduFlagAndLevel();
                return(false);
            }

            //get a date of when amer would be grad'ing from hs
            hsGradDt = GetRandomGraduationDate(dtAtAge18.AddYears(-4), AmericanHighSchool.YearsInHighSchool, true);

            //assign grad hs with grad date
            _highSchools.Add(new AmericanHighSchoolStudent(hs)
            {
                Graduation = hsGradDt
            });
            return(true);
        }
Esempio n. 5
0
        public void TestSolvePercentHsGradByStateAndRace()
        {
            //test resolves to simple natl average given no input
            var testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(null, null);

            //test resolves to natl avg's when no state
            Assert.AreEqual(89.6, testResult);
            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(null, NorthAmericanRace.Mixed);
            Assert.AreEqual(89.6, testResult);
            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(null, NorthAmericanRace.AmericanIndian);
            Assert.AreEqual(77.6, testResult);
            var testState     = UsState.GetStateByPostalCode("CA");
            var testStateData = UsStateData.GetStateData(testState.ToString());

            Assert.IsNotNull(testStateData);

            //percent-highschool-grad="80.6"
            //asian="89.0" natl-percent="82.0"
            // 89 - 82 = 7
            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(testState.ToString(), NorthAmericanRace.Asian);
            Assert.AreEqual(87.6, testResult);

            //american-indian="70.0"
            // 70 - 82 = -12
            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(testState.ToString(), NorthAmericanRace.AmericanIndian);
            Assert.AreEqual(68.6, testResult);

            testState = UsState.GetStateByPostalCode("ID");
            Assert.IsNotNull(testState);
            Assert.IsNotNull(UsStateData.GetStateData(testState.ToString()));

            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(testState.ToString(), NorthAmericanRace.Asian, OccidentalEdu.Bachelor | OccidentalEdu.Grad);
            //percent-college-grad="23.9"
            //
            //asian="54.0" natl-percent="30.0"
            // 54.0 - 30.0 = 24, 23.9+24 = 47.9
            Assert.AreEqual(47.9, testResult);
        }
Esempio n. 6
0
        /// <summary>
        /// Difference of national avg to race average added to state average.
        /// </summary>
        /// <param name="state"></param>
        /// <param name="race"></param>
        /// <param name="edu"></param>
        /// <returns></returns>
        public static double SolvePercentGradByStateAndRace(string state, NorthAmericanRace?race,
                                                            OccidentalEdu edu = OccidentalEdu.HighSchool | OccidentalEdu.Grad)
        {
            AmericanRacePercents p;

            p = edu >= OccidentalEdu.Bachelor ? AmericanUniversity.NatlGradRate() : AmericanHighSchool.NatlGradRate();
            var stateAvg  = p.National;
            var natlAvg   = p.National;
            var stateData = UsStateData.GetStateData(state);

            if (stateData?.PercentOfGrads != null && stateData.PercentOfGrads.Count > 0)
            {
                var f = stateData.PercentOfGrads.FirstOrDefault(x => x.Item1 == edu);
                if (f != null)
                {
                    stateAvg = Math.Round(f.Item2, 1);
                }
            }

            var raceNatlAvg = new Dictionary <NorthAmericanRace, double>
            {
                { NorthAmericanRace.AmericanIndian, p.AmericanIndian - natlAvg },
                { NorthAmericanRace.Asian, p.Asian - natlAvg },
                { NorthAmericanRace.Hispanic, p.Hispanic - natlAvg },
                { NorthAmericanRace.Black, p.Black - natlAvg },
                { NorthAmericanRace.White, p.White - natlAvg },
                { NorthAmericanRace.Pacific, p.Pacific - natlAvg },
                { NorthAmericanRace.Mixed, p.Mixed - natlAvg }
            };

            if (race == null || !raceNatlAvg.ContainsKey(race.Value))
            {
                return(Math.Round(stateAvg, 1));
            }

            return(Math.Round(stateAvg + raceNatlAvg[race.Value], 1));
        }