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); } }
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); }
public int GetMedian(VoivodeshipNames name, int sportIndex, StatisticsDataFields field) { List <int> data = getDataByCriteria(name, sportIndex, field); data.Sort(); return(getMedian(data)); }
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(""); }
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); }
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); } }
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)); }
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); }
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)); } }
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); }
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)); }
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)); }
public double GetStandardDeviation(VoivodeshipNames name, int sportIndex, StatisticsDataFields field) { List <int> data = getDataByCriteria(name, sportIndex, field); return(getStandardDeviation(data)); }
public double GetArithmeticAverage(VoivodeshipNames name, int sportIndex, StatisticsDataFields field) { List <int> data = getDataByCriteria(name, sportIndex, field); return(getArithmeticAverage(data)); }