private PregNode SetSpouseStatistics(PregNode person, Dictionary <string, PregNode> allpersons) { if (string.IsNullOrEmpty(person.MarriedNin)) { return(null); } var spouse = allpersons.ContainsKey(person.MarriedNin) && allpersons[person.MarriedNin].Confirmed ? allpersons[person.MarriedNin] : null; SpouseExists_GivenHasSpouse.Update(spouse != null ? 1 : 0); if (spouse == null) { return(null); } SpouseSameSex_GivenHasValidSpouse.Update(spouse.Kjonn == person.Kjonn ? 1 : 0); SpouseDuplex_GivenHasValidSpouse.Update(spouse.MarriedNin == person.Nin ? 1 : 0); if (person.BirthDay.HasValue && spouse.BirthDay.HasValue) { SpouseAgeDifferentialInYears.Update(Math.Abs(person.BirthDay.Value.Subtract(spouse.BirthDay.Value).TotalDays / 365)); } return(spouse); }
private void SetParentStatistics(PregNode person, Dictionary <string, PregNode> allpersons) { var hasDad = !string.IsNullOrEmpty(person.DadNin); var hasMom = !string.IsNullOrEmpty(person.MomNin); var dad = (hasDad && allpersons.ContainsKey(person.DadNin) && allpersons[person.DadNin].Confirmed) ? allpersons[person.DadNin] : null; var mom = (hasMom && allpersons.ContainsKey(person.MomNin) && allpersons[person.MomNin].Confirmed) ? allpersons[person.MomNin] : null; if (hasDad) { ParentninExists_GivenHaveParentNin.Update(dad != null ? 1 : 0); } if (hasMom) { ParentninExists_GivenHaveParentNin.Update(mom != null ? 1 : 0); } if (dad != null && mom != null) { ParentSameSex_GivenHaveValidParentNin.Update(dad.Kjonn == mom.Kjonn ? 1:0); } if (hasDad && hasMom) { ParentsAreMarried.Update(dad != null && mom != null && (dad.MarriedNin == mom.Nin || mom.MarriedNin == dad.Nin) ? 1 : 0); } }
private void SetChildrenStatistics(PregNode person, Dictionary <string, PregNode> allpersons, PregNode spouse) { var kids = person.ChildNins.Where(nin => allpersons.ContainsKey(nin) && allpersons[nin].Confirmed).Select(a => allpersons[a]).ToList(); if (kids.Count > 0) { NumberOfChildren_GivenHaveChildren.Update(kids.Count); } if (kids.Count > MaxNumberOfChildren_GivenHaveChildren) { MaxNumberOfChildren_GivenHaveChildren = kids.Count; } if (string.IsNullOrEmpty(person.MarriedNin)) { HasChildren_GivenHasNotSpouseNin.Update(kids.Any() ? 1: 0); } else { HasChildren_GivenHasSpouseNin.Update(kids.Any() ? 1 : 0); } if (!kids.Any()) { return; } if (spouse != null) { HasChildrenWithBetterHalf_GivenValidSpouseNinAndHaveChildren.Update(kids.Any(kid => kid.DadNin == spouse.Nin || kid.MomNin == spouse.Nin) ? 1 : 0); } var kidsTogetherWithOther = kids.Where(kid => kid.DadNin != null && kid.MomNin != null).ToList(); if (kidsTogetherWithOther.Any()) { var allParentNins = new List <string>(); foreach (var kid in kidsTogetherWithOther) { if (kid.DadNin != person.Nin) { allParentNins.Add(kid.DadNin); } if (kid.MomNin != person.Nin) { allParentNins.Add(kid.MomNin); } } var duplicateKeys = allParentNins.GroupBy(x => x) .Where(group => group.Count() > 1) .Select(group => group.Key); HaveMoreThanOneKidTogether_GivenHaveOneKidTogether.Update(duplicateKeys.Any() ? 1 : 0); } if (!person.BirthDay.HasValue) { return; } foreach (var kid in kids.Where(k => k.BirthDay.HasValue)) { var value = kid.BirthDay.Value.Subtract(person.BirthDay.Value).TotalDays / 365; AgeDifferentalInYearsToParent.Update(value); } }
private async Task <int> Import() { Console.WriteLine("Staring import"); while (_dataProvider.HasMore()) { Imported++; var p = await _dataProvider.GetNextPerson(); if (p == null) { continue; } bool birthdayWasFoundFromNin; var ageQuant = PersonStatistics.CalculateAgeQuant(p, _ageQuants, out birthdayWasFoundFromNin); if (ageQuant == PersonStatistics.InvalidQuant) { continue; } var pregNode = new PregNode { Confirmed = true, AgeQuants = ageQuant, BirthDay = p.DateOfBirth, Kjonn = CommonFunctions.GetKjonn(p.NIN).Value, MomNin = GetParent(p.MothersNIN), DadNin = GetParent(p.FathersNIN), DebugId = DebugMode ? p.GivenName : null, MarriedNin = p.SpouseNIN, Nin = p.NIN, Id = _nextId++ }; _statistics.FromImport(p, ageQuant); if (pregNode.MomNin != null) { _persons[pregNode.MomNin].ChildNins.Add(pregNode.Nin); } if (pregNode.DadNin != null) { _persons[pregNode.DadNin].ChildNins.Add(pregNode.Nin); } if (_persons.ContainsKey(p.NIN)) { _persons[p.NIN].MomNin = pregNode.MomNin; _persons[p.NIN].Confirmed = pregNode.Confirmed; _persons[p.NIN].DadNin = pregNode.DadNin; _persons[p.NIN].DebugId = pregNode.DebugId; _persons[p.NIN].FamilyId = pregNode.FamilyId; _persons[p.NIN].Nin = pregNode.Nin; _persons[p.NIN].Id = pregNode.Id; _persons[p.NIN].AgeQuants = pregNode.AgeQuants; _persons[p.NIN].Kjonn = pregNode.Kjonn; } else { _persons.Add(p.NIN, pregNode); } if (_persons.Count % 10000 == 0) { Console.WriteLine("Done importing " + _persons.Count); } } return(Imported); }