示例#1
0
        private void drawPreview(int areaIndex)
        {
            VoivodeshipNames areaName = (VoivodeshipNames)areaIndex;

            prevLabel.Content = VoivodeshipNamesExtensions.GetName(areaName);

            Point chartPosition = new Point(previewCanvas.Width / 2, previewCanvas.Height / 2);
            int   chartSize     = (int)(previewCanvas.Width / 4);

            PieChart pieChart = new PieChart(chartPosition, chartSize);

            pieChart.Create(mapPainter.GetAreaChartValues(areaIndex));

            StatisticsData[] statisticsData = mapPainter.Holder.VoivodeshipData[areaIndex];
            StatisticsData   minData        = mapPainter.Holder.GetMinDatasInVoivodeship(areaName);
            StatisticsData   maxData        = mapPainter.Holder.GetMaxDatasInVoivodeship(areaName);

            ChernoffFace[] faces = ChernoffFace.GetFaces(pieChart, statisticsData, minData, maxData);

            previewCanvas.Children.Clear();

            pieChart.Draw(previewCanvas);

            foreach (ChernoffFace face in faces)
            {
                face.Draw(previewCanvas);
            }
        }
示例#2
0
        private List <int> getDataByCriteria(VoivodeshipNames name, int sportIndex, StatisticsDataFields field)
        {
            List <int> dataList = new List <int>();

            if (name != VoivodeshipNames.None && sportIndex >= 0)
            {
                dataList.Add(VoivodeshipData[(int)name][sportIndex].GetByFiled(field));
            }
            else if (name != VoivodeshipNames.None)
            {
                for (int i = 0; i < VoivodeshipData[(int)name].Length; i++)
                {
                    dataList.Add(VoivodeshipData[(int)name][i].GetByFiled(field));
                }
            }
            else if (sportIndex >= 0)
            {
                for (int i = 0; i < VoivodeshipData.Length; i++)
                {
                    dataList.Add(VoivodeshipData[i][sportIndex].GetByFiled(field));
                }
            }
            else
            {
                for (int i = 0; i < VoivodeshipData.Length; i++)
                {
                    for (int j = 0; j < VoivodeshipData[i].Length; j++)
                    {
                        dataList.Add(VoivodeshipData[i][j].GetByFiled(field));
                    }
                }
            }

            return(dataList);
        }
示例#3
0
        public int GetMedian(VoivodeshipNames name, int sportIndex, StatisticsDataFields field)
        {
            List <int> data = getDataByCriteria(name, sportIndex, field);

            data.Sort();

            return(getMedian(data));
        }
示例#4
0
        public LegendWindow(DataHolder holder, VoivodeshipNames name)
        {
            InitializeComponent();

            this.holder = holder;

            initMapLegend();
            initChartLegend();
            initChernoffFaceLegend(name);
        }
        public static string GetName(VoivodeshipNames name)
        {
            switch (name)
            {
            case VoivodeshipNames.Dolnoslaskie:
                return("Dolnośląskie");

            case VoivodeshipNames.Kujawskopomorskie:
                return("Kujawsko-pomorskie");

            case VoivodeshipNames.Lodzkie:
                return("Łódzkie");

            case VoivodeshipNames.Lubelskie:
                return("Lubelskie");

            case VoivodeshipNames.Lubuskie:
                return("Lubuskie");

            case VoivodeshipNames.Malopolskie:
                return("Małopolskie");

            case VoivodeshipNames.Mazowieckie:
                return("Mazowieckie");

            case VoivodeshipNames.Opolskie:
                return("Opolskie");

            case VoivodeshipNames.Podkarpackie:
                return("Podkarapackie");

            case VoivodeshipNames.Podlaskie:
                return("Podlaskie");

            case VoivodeshipNames.Pomorskie:
                return("Pomorskie");

            case VoivodeshipNames.Slaskie:
                return("Śląskie");

            case VoivodeshipNames.Swietokrzyskie:
                return("Świętokrzyskie");

            case VoivodeshipNames.Warminskomazurskie:
                return("Warmińsko-mazurskie");

            case VoivodeshipNames.Wielkopolskie:
                return("Wielkopolskie");

            case VoivodeshipNames.Zachodniopomorskie:
                return("Zachodniopomorskie");
            }

            return("");
        }
示例#6
0
        public double GetSkewness(VoivodeshipNames name, int sportIndex, StatisticsDataFields field)
        {
            List <int> data = getDataByCriteria(name, sportIndex, field);

            double arithmeticAverage = getArithmeticAverage(data);
            double standardDeviation = getStandardDeviation(data);

            data.Sort();
            double median = getMedian(data);

            return(3 * ((arithmeticAverage - median) / standardDeviation));
        }
        public AreaDetailsWindow(MapPainter mapPainter, VoivodeshipNames voivodeshipName)
        {
            InitializeComponent();

            this.mapPainter      = mapPainter;
            this.voivodeshipName = voivodeshipName;

            previewFacePosition = new Point(faceCanvas.Width / 2, faceCanvas.Height / 2);
            previewFaceSize     = (int)(faceCanvas.Width / 3);

            chartPosition = new Point(chartCanvas.Width / 2, chartCanvas.Height / 2);
            chartSize     = (int)(chartCanvas.Width / 4);
        }
示例#8
0
        public List <Point> GetPointsByCriteria(VoivodeshipNames name, int sportIndex,
                                                StatisticsDataFields fieldX, StatisticsDataFields fieldY)
        {
            List <Point> points = new List <Point>();

            if (name != VoivodeshipNames.None && sportIndex >= 0)
            {
                points.Add(new Point(
                               VoivodeshipData[(int)name][sportIndex].GetByFiled(fieldX),
                               VoivodeshipData[(int)name][sportIndex].GetByFiled(fieldY)
                               ));
            }
            else if (name != VoivodeshipNames.None)
            {
                for (int i = 0; i < VoivodeshipData[(int)name].Length; i++)
                {
                    points.Add(new Point(
                                   VoivodeshipData[(int)name][i].GetByFiled(fieldX),
                                   VoivodeshipData[(int)name][i].GetByFiled(fieldY)
                                   ));
                }
            }
            else if (sportIndex >= 0)
            {
                for (int i = 0; i < VoivodeshipData.Length; i++)
                {
                    points.Add(new Point(
                                   VoivodeshipData[i][sportIndex].GetByFiled(fieldX),
                                   VoivodeshipData[i][sportIndex].GetByFiled(fieldY)
                                   ));
                }
            }
            else
            {
                for (int i = 0; i < VoivodeshipData.Length; i++)
                {
                    for (int j = 0; j < VoivodeshipData[i].Length; j++)
                    {
                        points.Add(new Point(
                                       VoivodeshipData[i][j].GetByFiled(fieldX),
                                       VoivodeshipData[i][j].GetByFiled(fieldY)
                                       ));
                    }
                }
            }

            return(points);
        }
        private void updateResults()
        {
            string           selectedName = (string)voivodeshipComboBox.SelectedValue;
            VoivodeshipNames selectedArea = VoivodeshipNamesExtensions.Parse(selectedName);

            int sportIndex = sportComboBox.SelectedIndex - 1;
            StatisticsDataFields dataField = (StatisticsDataFields)propertyComboBox.SelectedIndex;

            double arithmeticAverage = dataHolder.GetArithmeticAverage(selectedArea, sportIndex, dataField);
            int    median            = dataHolder.GetMedian(selectedArea, sportIndex, dataField);

            String dominant = "";

            foreach (int dominantValue in dataHolder.GetDominant(selectedArea, sportIndex, dataField))
            {
                dominant += dominantValue + ", ";
            }

            double quarterDeviation  = dataHolder.GetQuarterDeviation(selectedArea, sportIndex, dataField);
            double standardDeviation = dataHolder.GetStandardDeviation(selectedArea, sportIndex, dataField);
            double skewness          = dataHolder.GetSkewness(selectedArea, sportIndex, dataField);
            double giniCoefficient   = dataHolder.GetGiniCoefficient(selectedArea, sportIndex, dataField);

            String skewnessDescription = String.Format("{0:0.00} ", skewness);

            if (skewness < 0)
            {
                skewnessDescription += "(Lewostronna asymetria)";
            }
            else if (skewness > 0)
            {
                skewnessDescription += "(Prawostronna asymetria)";
            }
            else
            {
                skewnessDescription += "(Rozkład symetryczny)";
            }

            arithmeticAverageLabel.Content = String.Format("{0:0.00}", arithmeticAverage);
            medianLabel.Content            = median.ToString();
            dominantLabel.Content          = dominant;
            quarterDeviationLabel.Content  = String.Format("{0:0.00}", quarterDeviation);
            standardDeviationLabel.Content = String.Format("{0:0.00}", standardDeviation);
            skewnessLabel.Content          = skewnessDescription;
            giniCoefficientLabel.Content   = String.Format("{0:0.00}", giniCoefficient);
        }
        private void update()
        {
            string               axisX        = (string)axisXComboBox.SelectedValue;
            string               axisY        = (string)axisYComboBox.SelectedValue;
            int                  sportIndex   = sportComboBox.SelectedIndex - 1;
            string               selectedName = (string)voivodeshipComboBox.SelectedValue;
            VoivodeshipNames     selectedArea = VoivodeshipNamesExtensions.Parse(selectedName);
            StatisticsDataFields dataFieldX   = (StatisticsDataFields)axisXComboBox.SelectedIndex;
            StatisticsDataFields dataFieldY   = (StatisticsDataFields)axisYComboBox.SelectedIndex;

            chart.ChartAreas["chartArea"].AxisX.Title = axisX;
            chart.ChartAreas["chartArea"].AxisY.Title = axisY;
            chart.Series["series"].Points.Clear();

            List <Point> points                        = dataHolder.GetPointsByCriteria(selectedArea, sportIndex, dataFieldX, dataFieldY);
            double       pearsonCoefficient            = dataHolder.GetPearsonCorrelationCoefficient(points);
            string       pearsonCoefficientDescription = String.Format("{0:0.00} ", pearsonCoefficient);

            if (pearsonCoefficient < 0.2)
            {
                pearsonCoefficientDescription += "(brak związku liniowego)";
            }
            else if (pearsonCoefficient < 0.4)
            {
                pearsonCoefficientDescription += "(słaba zależność)";
            }
            else if (pearsonCoefficient < 0.7)
            {
                pearsonCoefficientDescription += "(umiarkowana zależność)";
            }
            else if (pearsonCoefficient < 0.9)
            {
                pearsonCoefficientDescription += "(dość silna zależność)";
            }
            else
            {
                pearsonCoefficientDescription += "(bardzo silna zależność)";
            }

            pearsonCoefficientLabel.Content = pearsonCoefficientDescription;

            foreach (Point point in points)
            {
                chart.Series["series"].Points.AddXY(point.X, point.Y);
            }
        }
示例#11
0
        public double GetGiniCoefficient(VoivodeshipNames name, int sportIndex, StatisticsDataFields field)
        {
            List <int> data = getDataByCriteria(name, sportIndex, field);

            data.Sort();

            int    sum = 0;
            double avg = 0;

            for (int i = 0; i < data.Count; i++)
            {
                sum += (2 * i - data.Count - 1) * data[i];
                avg += data[i];
            }

            avg /= data.Count;

            return(sum / ((data.Count * data.Count) * avg));
        }
示例#12
0
        public List <int> GetDominant(VoivodeshipNames name, int sportIndex, StatisticsDataFields field)
        {
            List <int> data = getDataByCriteria(name, sportIndex, field);

            data.Sort();

            int maxValue = int.MinValue;
            int count;

            Dictionary <int, int> dictionary = new Dictionary <int, int>();

            foreach (int value in data)
            {
                if (dictionary.TryGetValue(value, out count))
                {
                    count            += 1;
                    dictionary[value] = count;
                }
                else
                {
                    count = 1;
                    dictionary.Add(value, count);
                }

                if (count > maxValue)
                {
                    maxValue = count;
                }
            }

            List <int> results = new List <int>();

            foreach (KeyValuePair <int, int> entry in dictionary)
            {
                if (entry.Value == maxValue)
                {
                    results.Add(entry.Key);
                }
            }

            return(results);
        }
示例#13
0
        private void initChernoffFaceLegend(VoivodeshipNames name)
        {
            if (name == VoivodeshipNames.None)
            {
                faceTabItem.IsEnabled = false;
            }
            else
            {
                faceTabItem.IsEnabled          = true;
                legendTabControl.SelectedIndex = 2;

                StatisticsData minData = holder.GetMinDatasInVoivodeship(name);
                StatisticsData maxData = holder.GetMaxDatasInVoivodeship(name);

                initChernoffFaceColorLegend(ColorScheme.GetValueIntervals(minData.Sections, maxData.Sections));
                initChernoffFaceEyesLegend(ColorScheme.GetValueIntervals(minData.Boys, maxData.Boys));
                initChernoffFaceMustacheLegend(ColorScheme.GetValueIntervals(minData.Womens, maxData.Womens));
                initChernoffFaceLipsLegend(ColorScheme.GetValueIntervals(minData.Girls, maxData.Girls));
            }
        }
示例#14
0
        public double GetQuarterDeviation(VoivodeshipNames name, int sportIndex, StatisticsDataFields field)
        {
            List <int> data = getDataByCriteria(name, sportIndex, field);

            data.Sort();

            if (data.Count < 2)
            {
                return(0);
            }

            double lowerQuartile, upperQuartile;
            int    index;

            if (data.Count % 4 == 0)
            {
                index         = data.Count / 4;
                lowerQuartile = (data[index] + data[index + 1]) / 2;
            }
            else
            {
                index         = (int)Math.Round(data.Count / 4.0);
                lowerQuartile = data[index];
            }


            if ((3 * data.Count) % 4 == 0)
            {
                index         = (3 * data.Count) / 4;
                upperQuartile = (data[index] + data[index + 1]) / 2;
            }
            else
            {
                index         = (int)Math.Round((3 * data.Count) / 4.0);
                upperQuartile = data[index];
            }

            return((upperQuartile - lowerQuartile) / 2.0);
        }
示例#15
0
        public StatisticsData GetMinDatasInVoivodeship(VoivodeshipNames name)
        {
            int minSections = int.MaxValue;
            int minTotal    = int.MaxValue;
            int minWomens   = int.MaxValue;
            int minBoys     = int.MaxValue;
            int minGirls    = int.MaxValue;

            for (int i = 0; i < SportCount; i++)
            {
                if (minSections > VoivodeshipData[(int)name][i].Sections)
                {
                    minSections = VoivodeshipData[(int)name][i].Sections;
                }

                if (minTotal > VoivodeshipData[(int)name][i].Total)
                {
                    minTotal = VoivodeshipData[(int)name][i].Total;
                }

                if (minWomens > VoivodeshipData[(int)name][i].Womens)
                {
                    minWomens = VoivodeshipData[(int)name][i].Womens;
                }

                if (minBoys > VoivodeshipData[(int)name][i].Boys)
                {
                    minBoys = VoivodeshipData[(int)name][i].Boys;
                }

                if (minGirls > VoivodeshipData[(int)name][i].Girls)
                {
                    minGirls = VoivodeshipData[(int)name][i].Girls;
                }
            }

            return(new StatisticsData(minSections, minTotal, minWomens, minBoys, minGirls));
        }
示例#16
0
        public StatisticsData GetMaxDatasInVoivodeship(VoivodeshipNames name)
        {
            int maxSections = int.MinValue;
            int maxTotal    = int.MinValue;
            int maxWomens   = int.MinValue;
            int maxBoys     = int.MinValue;
            int maxGirls    = int.MinValue;

            for (int i = 0; i < SportCount; i++)
            {
                if (maxSections < VoivodeshipData[(int)name][i].Sections)
                {
                    maxSections = VoivodeshipData[(int)name][i].Sections;
                }

                if (maxTotal < VoivodeshipData[(int)name][i].Total)
                {
                    maxTotal = VoivodeshipData[(int)name][i].Total;
                }

                if (maxWomens < VoivodeshipData[(int)name][i].Womens)
                {
                    maxWomens = VoivodeshipData[(int)name][i].Womens;
                }

                if (maxBoys < VoivodeshipData[(int)name][i].Boys)
                {
                    maxBoys = VoivodeshipData[(int)name][i].Boys;
                }

                if (maxGirls < VoivodeshipData[(int)name][i].Girls)
                {
                    maxGirls = VoivodeshipData[(int)name][i].Girls;
                }
            }

            return(new StatisticsData(maxSections, maxTotal, maxWomens, maxBoys, maxGirls));
        }
示例#17
0
        public double GetStandardDeviation(VoivodeshipNames name, int sportIndex, StatisticsDataFields field)
        {
            List <int> data = getDataByCriteria(name, sportIndex, field);

            return(getStandardDeviation(data));
        }
示例#18
0
        public double GetArithmeticAverage(VoivodeshipNames name, int sportIndex, StatisticsDataFields field)
        {
            List <int> data = getDataByCriteria(name, sportIndex, field);

            return(getArithmeticAverage(data));
        }