internal static AmericanRacePercents GetNatlGradRates(XmlDocument src, double avg) { var p = new AmericanRacePercents { Asian = avg, AmericanIndian = avg, Hispanic = avg, Black = avg, Mixed = avg, National = avg, Pacific = avg, White = avg }; if (src == null) return p; double natlAvg, amerIndian, asian, hispanic, black, white, pacific, mixed; //read data from source if (TreeData.AmericanHighSchoolData == null) return p; var node = src.SelectSingleNode("//national/avg-graduation-rate"); var elem = node as XmlElement; var attr = elem?.Attributes["natl-percent"]?.Value; if (attr == null || !double.TryParse(attr, out natlAvg)) return p; attr = elem.Attributes["american-indian"]?.Value; if (attr == null || !double.TryParse(attr, out amerIndian)) return p; attr = elem.Attributes["asian"]?.Value; if (attr == null || !double.TryParse(attr, out asian)) return p; attr = elem.Attributes["hispanic"]?.Value; if (attr == null || !double.TryParse(attr, out hispanic)) return p; attr = elem.Attributes["black"]?.Value; if (attr == null || !double.TryParse(attr, out black)) return p; attr = elem.Attributes["white"]?.Value; if (attr == null || !double.TryParse(attr, out white)) return p; attr = elem.Attributes["pacific"]?.Value; if (attr == null || !double.TryParse(attr, out pacific)) return p; attr = elem.Attributes["mixed-race"]?.Value; if (attr == null || !double.TryParse(attr, out mixed)) return p; p.National = natlAvg; p.AmericanIndian = amerIndian; p.Asian = asian; p.Hispanic = hispanic; p.Black = black; p.White = white; p.Pacific = pacific; p.Mixed = mixed; return p; }
/// <summary> /// Returns a hashtable whose keys as American's call Race based on the given <see cref="zipCode"/> /// </summary> /// <param name="zipCode"></param> public static AmericanRacePercents RandomAmericanRaceWithRespectToZip(string zipCode) { var pick = 0; //if calling assembly passed in no-args then return all zeros if (String.IsNullOrWhiteSpace(zipCode)) { return(AmericanRacePercents.GetNatlAvg()); } UsZipCodeXml = UsZipCodeXml ?? XmlDocXrefIdentifier.GetEmbeddedXmlDoc(US_ZIP_CODE_DATA, Assembly.GetExecutingAssembly()); if (UsZipCodeXml == null) { return(AmericanRacePercents.GetNatlAvg()); } //get the data for the given zip code var zipStatElem = UsZipCodeXml.SelectSingleNode( $"//{ZIP_STAT}[@{VALUE}='{zipCode}']"); if (zipStatElem == null || !zipStatElem.HasChildNodes) { //try to find on the zip code prefix var zip3 = zipCode.Substring(0, 3); var zipCodeElem = UsZipCodeXml.SelectSingleNode( $"//{ZIP_CODE_SINGULAR}[@{PREFIX}='{zip3}']"); if (zipCodeElem == null || !zipCodeElem.HasChildNodes) { return(AmericanRacePercents.GetNatlAvg()); } pick = Etx.MyRand.Next(0, zipCodeElem.ChildNodes.Count - 1); zipStatElem = zipCodeElem.ChildNodes[pick]; if (zipStatElem == null || zipStatElem.ChildNodes.Count == 0) { return(AmericanRacePercents.GetNatlAvg()); } } pick = Etx.MyRand.Next(0, zipStatElem.ChildNodes.Count - 1); var arpNode = zipStatElem.ChildNodes[pick]; return(!TryParseRacePercentsXmlNode(arpNode, out var arp) ? AmericanRacePercents.GetNatlAvg() : arp); }
/// <summary> /// Return a <see cref="NorthAmericanRace"/> randomly with weight based on <see cref="zipCode"/>. /// </summary> /// <param name="zipCode">Null to get natl averages.</param> /// <returns> /// Defaults to randomly to national averages /// [http://kff.org/other/state-indicator/distribution-by-raceethnicity/] /// </returns> public static NorthAmericanRace GetAmericanRace(string zipCode) { var amRace = RandomAmericanRaceWithRespectToZip(zipCode); var raceHashByZip = amRace != null ? new Dictionary <string, double> { { Enum.GetName(typeof(NorthAmericanRace), NorthAmericanRace.AmericanIndian), amRace.AmericanIndian }, { Enum.GetName(typeof(NorthAmericanRace), NorthAmericanRace.Asian), amRace.Asian }, { Enum.GetName(typeof(NorthAmericanRace), NorthAmericanRace.Black), amRace.Black }, { Enum.GetName(typeof(NorthAmericanRace), NorthAmericanRace.Hispanic), amRace.Hispanic }, { Enum.GetName(typeof(NorthAmericanRace), NorthAmericanRace.Mixed), amRace.Mixed }, { Enum.GetName(typeof(NorthAmericanRace), NorthAmericanRace.Pacific), amRace.Pacific }, { Enum.GetName(typeof(NorthAmericanRace), NorthAmericanRace.White), amRace.White } } : AmericanRacePercents.GetNatlAvgAsDict(); var randPick = Etx.RandomPickOne(raceHashByZip); Enum.TryParse(randPick, out NorthAmericanRace pickOut); return(pickOut); }
internal static AmericanRacePercents GetNatlGradRates(XmlDocument src, double avg) { var p = new AmericanRacePercents { Asian = avg, AmericanIndian = avg, Hispanic = avg, Black = avg, Mixed = avg, National = avg, Pacific = avg, White = avg }; if (src == null) { return(p); } double natlAvg, amerIndian, asian, hispanic, black, white, pacific, mixed; //read data from source var node = src.SelectSingleNode("//national/avg-graduation-rate"); var elem = node as XmlElement; var attr = elem?.Attributes["natl-percent"]?.Value; if (attr == null || !double.TryParse(attr, out natlAvg)) { return(p); } attr = elem.Attributes["american-indian"]?.Value; if (attr == null || !double.TryParse(attr, out amerIndian)) { return(p); } attr = elem.Attributes["asian"]?.Value; if (attr == null || !double.TryParse(attr, out asian)) { return(p); } attr = elem.Attributes["hispanic"]?.Value; if (attr == null || !double.TryParse(attr, out hispanic)) { return(p); } attr = elem.Attributes["black"]?.Value; if (attr == null || !double.TryParse(attr, out black)) { return(p); } attr = elem.Attributes["white"]?.Value; if (attr == null || !double.TryParse(attr, out white)) { return(p); } attr = elem.Attributes["pacific"]?.Value; if (attr == null || !double.TryParse(attr, out pacific)) { return(p); } attr = elem.Attributes["mixed-race"]?.Value; if (attr == null || !double.TryParse(attr, out mixed)) { return(p); } p.National = natlAvg; p.AmericanIndian = amerIndian; p.Asian = asian; p.Hispanic = hispanic; p.Black = black; p.White = white; p.Pacific = pacific; p.Mixed = mixed; return(p); }
/// <summary> /// Attempt to parse the race-percent-by-hs child node of a zip-stat. /// </summary> /// <param name="node"></param> /// <param name="arp"></param> /// <returns></returns> internal static bool TryParseRacePercentsXmlNode(XmlNode node, out AmericanRacePercents arp) { arp = new AmericanRacePercents(); if (node?.Attributes == null) { return(false); } var attr = node.Attributes["american-indian"]; if (attr != null) { if (Double.TryParse(attr.Value, out var dblOut)) { arp.AmericanIndian = dblOut; } } attr = node.Attributes["asian"]; if (attr != null) { if (Double.TryParse(attr.Value, out var dblOut)) { arp.Asian = dblOut; } } attr = node.Attributes["hispanic"]; if (attr != null) { if (Double.TryParse(attr.Value, out var dblOut)) { arp.Hispanic = dblOut; } } attr = node.Attributes["black"]; if (attr != null) { if (Double.TryParse(attr.Value, out var dblOut)) { arp.Black = dblOut; } } attr = node.Attributes["white"]; if (attr != null) { if (Double.TryParse(attr.Value, out var dblOut)) { arp.White = dblOut; } } attr = node.Attributes["pacific"]; if (attr != null) { if (Double.TryParse(attr.Value, out var dblOut)) { arp.Pacific = dblOut; } } attr = node.Attributes["mixed-race"]; if (attr != null) { if (Double.TryParse(attr.Value, out var dblOut)) { arp.Mixed = dblOut; } } return(!arp.IsEmpty()); }