Guest User

Untitled

a guest
Nov 15th, 2020
46
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <Query Kind="Program">
  2.   <NuGetReference>Extreme.Data</NuGetReference>
  3.   <NuGetReference>Extreme.Data.Json</NuGetReference>
  4.   <NuGetReference>Extreme.Numerics</NuGetReference>
  5.   <NuGetReference>Extreme.Numerics.Generic</NuGetReference>
  6.   <NuGetReference>Extreme.Numerics.SinglePrecision</NuGetReference>
  7.   <Namespace>Extreme.Collections</Namespace>
  8.   <Namespace>Extreme.Mathematics</Namespace>
  9.   <Namespace>Extreme.Statistics.Multivariate</Namespace>
  10.   <RemoveNamespace>System.Collections</RemoveNamespace>
  11.   <RemoveNamespace>System.Data</RemoveNamespace>
  12.   <RemoveNamespace>System.Diagnostics</RemoveNamespace>
  13.   <RemoveNamespace>System.Linq.Expressions</RemoveNamespace>
  14.   <RemoveNamespace>System.Reflection</RemoveNamespace>
  15.   <RemoveNamespace>System.Text</RemoveNamespace>
  16.   <RemoveNamespace>System.Text.RegularExpressions</RemoveNamespace>
  17.   <RemoveNamespace>System.Threading</RemoveNamespace>
  18.   <RemoveNamespace>System.Transactions</RemoveNamespace>
  19.   <RemoveNamespace>System.Xml</RemoveNamespace>
  20.   <RemoveNamespace>System.Xml.Linq</RemoveNamespace>
  21.   <RemoveNamespace>System.Xml.XPath</RemoveNamespace>
  22. </Query>
  23.  
  24. //sources
  25. //https://twitter.com/ClimateAudit/status/1326905529160126464
  26. //https://results.enr.clarityelections.com//MI/Oakland/105840/269402/reports/detailxls.zip
  27. //www.climateaudit.info/data/election/MI_Oakland-2020.csv
  28.  
  29. public static void Main()
  30. {
  31.     var dirpath = @"C:\Users\user\Desktop\Trump2020data\climateaudit\";
  32.     var filenames = new List<string> { "MI_Oakland-2020.csv" };
  33.  
  34.     foreach (var filename in filenames)
  35.     {
  36.         var text = File.ReadAllText(dirpath + filename);
  37.         var data = text.Split(Environment.NewLine).Select(i => i.Split(",")).Where(i => i.Count() > 1).Skip(1).ToList();//.Dump("data", 0);
  38.         var results = data.Select((i, index) =>
  39.             {
  40.                 int colindex = 0;
  41.                 return new PrecinctResult
  42.                 {
  43.                     index = index,
  44.                     name = i[colindex++].Replace(@"""", ""),
  45.                     StrAbsenteeD = double.Parse(i[colindex++]),
  46.                     StrElectionD = double.Parse(i[colindex++]),
  47.                     StrTotalD = double.Parse(i[colindex++]),
  48.                     StrAbsenteeR = double.Parse(i[colindex++]),
  49.                     StrElectionR = double.Parse(i[colindex++]),
  50.                     StrTotalR = double.Parse(i[colindex++]),
  51.                     StrAbsenteeO = double.Parse(i[colindex++]),
  52.                     StrElectionO = double.Parse(i[colindex++]),
  53.                     StrTotalO = double.Parse(i[colindex++]),
  54.                     StrVotesTotal = double.Parse(i[colindex++]),
  55.                     MixAbsenteeD = double.Parse(i[colindex++]),
  56.                     MixElectionD = double.Parse(i[colindex++]),
  57.                     MixTotalD = double.Parse(i[colindex++]),
  58.                     MixAbsenteeR = double.Parse(i[colindex++]),
  59.                     MixElectionR = double.Parse(i[colindex++]),
  60.                     MixTotalR = double.Parse(i[colindex++]),
  61.                     MixAbsenteeO = double.Parse(i[colindex++]),
  62.                     MixElectionO = double.Parse(i[colindex++]),
  63.                     MixTotalO = double.Parse(i[colindex++]),
  64.                     MixVotesTotal = double.Parse(i[colindex++]),
  65.                     TotAbsenteeD = double.Parse(i[colindex++]),
  66.                     TotElectionD = double.Parse(i[colindex++]),
  67.                     TotTotalD = double.Parse(i[colindex++]),
  68.                     TotAbsenteeR = double.Parse(i[colindex++]),
  69.                     TotElectionR = double.Parse(i[colindex++]),
  70.                     TotTotalR = double.Parse(i[colindex++]),
  71.                     TotAbsenteeO = double.Parse(i[colindex++]),
  72.                     TotElectionO = double.Parse(i[colindex++]),
  73.                     TotTotalO = double.Parse(i[colindex++]),
  74.                     TotVotesTotal = double.Parse(i[colindex++])
  75.                 };
  76.             }).ToList();
  77.  
  78.         var array = new Array2D<double>(results.Count(), 4);
  79.         //data.Dump();
  80.         for (int r = 1; r < results.Count(); r++)
  81.         {
  82.             var colindex = 0;
  83.             array[r, colindex++] = results[r].MixElectionD / results[r].TotVotesTotal;
  84.             array[r, colindex++] = results[r].MixElectionR / results[r].TotVotesTotal;
  85.             array[r, colindex++] = results[r].StrElectionD / results[r].TotVotesTotal;
  86.             array[r, colindex++] = results[r].StrElectionR / results[r].TotVotesTotal;
  87.         }
  88.  
  89.         //array.Dump(0);
  90.  
  91.         var m = Matrix.Create(results.Count(), 4, array, MatrixElementOrder.NotApplicable);
  92.         PrincipalComponentAnalysis pca = new PrincipalComponentAnalysis(m);
  93.         pca.Compute();
  94.  
  95.         for (int i = 0; i < pca.Components.Count(); i++)
  96.         {
  97.             PrincipalComponent component = pca.Components[i];
  98.             Console.WriteLine("{0,2}{1,12:F4}{2,11:F4}{2,14:F3}%{3,10:F3}%",
  99.                 i, component.Eigenvalue, component.EigenvalueDifference,
  100.                 100 * component.ProportionOfVariance,
  101.                 100 * component.CumulativeProportionOfVariance);
  102.         }
  103.  
  104.         for (int i = 0; i < pca.ScoreMatrix.Columns[0].Count(); i++)
  105.         {
  106.             results[i].PC1 = pca.ScoreMatrix.Columns[0][i];
  107.             results[i].PC2 = pca.ScoreMatrix.Columns[1][i];
  108.             results[i].PC3 = pca.ScoreMatrix.Columns[2][i];
  109.             results[i].PC4 = pca.ScoreMatrix.Columns[3][i];
  110.             //results[i].PC5 = pca.ScoreMatrix.Columns[4][i];
  111.         }
  112.  
  113.         results = results.OrderBy(i => i.PC1).ToList().Dump(0);
  114.         pca.Dump("pca",0);
  115.  
  116.         if (true)
  117.         {
  118.             var c = Util.Chart(Enumerable.Range(0, results.Count()));
  119.             c.AddYSeries(i => results[i].StrElectionR, LINQPad.Util.SeriesType.Line, "StrElectionR");
  120.             c.AddYSeries(i => results[i].MixElectionR, LINQPad.Util.SeriesType.Line, "MixElectionR");
  121.             c.AddYSeries(i => results[i].StrElectionD, LINQPad.Util.SeriesType.Line, "StrElectionD");
  122.             c.AddYSeries(i => results[i].MixElectionD, LINQPad.Util.SeriesType.Line, "MixElectionD");
  123.             c.DumpInline($"{filename} ordered by PC1");
  124.         }
  125.  
  126.         if (true)
  127.         {
  128.             var c = Util.Chart(Enumerable.Range(0, results.Count()));
  129.             c.AddYSeries(i => results[i].StrElectionR / results[i].TotVotesTotal, LINQPad.Util.SeriesType.Line, "StrElectionR / TotVotesTotal");
  130.             c.AddYSeries(i => results[i].MixElectionR / results[i].TotVotesTotal, LINQPad.Util.SeriesType.Line, "MixElectionR / TotVotesTotal");
  131.             c.AddYSeries(i => results[i].StrElectionD / results[i].TotVotesTotal, LINQPad.Util.SeriesType.Line, "StrElectionD / TotVotesTotal");
  132.             c.AddYSeries(i => results[i].MixElectionD / results[i].TotVotesTotal, LINQPad.Util.SeriesType.Line, "MixElectionD / TotVotesTotal");
  133.             c.DumpInline($"{filename} ordered by PC1, divided by votescast");
  134.         }
  135.     }
  136. }
  137.  
  138. class PrecinctResult
  139. {
  140.     public int index;
  141.     public string name;
  142.     public Double StrAbsenteeD;
  143.     public Double StrElectionD;
  144.     public Double StrTotalD;
  145.     public Double StrAbsenteeR;
  146.     public Double StrElectionR;
  147.     public Double StrTotalR;
  148.     public Double StrAbsenteeO;
  149.     public Double StrElectionO;
  150.     public Double StrTotalO;
  151.     public Double StrVotesTotal;
  152.     public Double MixAbsenteeD;
  153.     public Double MixElectionD;
  154.     public Double MixTotalD;
  155.     public Double MixAbsenteeR;
  156.     public Double MixElectionR;
  157.     public Double MixTotalR;
  158.     public Double MixAbsenteeO;
  159.     public Double MixElectionO;
  160.     public Double MixTotalO;
  161.     public Double MixVotesTotal;
  162.     public Double TotAbsenteeD;
  163.     public Double TotElectionD;
  164.     public Double TotTotalD;
  165.     public Double TotAbsenteeR;
  166.     public Double TotElectionR;
  167.     public Double TotTotalR;
  168.     public Double TotAbsenteeO;
  169.     public Double TotElectionO;
  170.     public Double TotTotalO;
  171.     public Double TotVotesTotal;
  172.     public Double PC1;
  173.     public Double PC2;
  174.     public Double PC3;
  175.     public Double PC4;
  176.     public Double PC5;
  177. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×