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);
            }
        }
Ejemplo n.º 4
0
        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);
        }