Red States, Blue States

of 38
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Information Report



Views: 45 | Pages: 38

Extension: PDF | Download: 0

Red States, Blue States. McCain. Obama. 2008 Presidential election. Modular Programming. Modular programming. Model problem by decomposing into components. Polygon. Geometric primitive. Region. Name, postal abbreviation, polygonal boundary.
Red States, Blue StatesMcCainObama2008 Presidential electionModular ProgrammingModular programming. Model problem by decomposing into components.Polygon. Geometric primitive.Region. Name, postal abbreviation, polygonal boundary.Vote tally. Number of votes for each candidate.Election map. Regions and corresponding vote tallies for a given election.ElectionMap……VoteTallyVoteTallyRegionRegionStringStringPolygonGeographic BoundariesBoundary Data: States within the Continental USUSA data file. State names and boundary points. Data source: US census bureau, more USA.txt-124.731216 24.544102 -66.980385 49.384365104AlabamaUSA498 -88.200027 34.995548 -88.202919 35.007942…New JerseyUSA368 -74.695305 41.357330 -74.461754 41.250000 -74.366302 41.202801… -74.721313 41.347294…(-66.98, 49.38)number of regionsbounding box368 points(latitude, longitude)(-124.73, 24.54)Boundary Data: Counties within a StateState data files. County names and boundary points.Data source: US census bureau,, 41.35)% more NJ.txt-75.560143 38.928589 -73.894402 41.3573321AtlanticNJ127 -74.877563 39.608414 -74.736694 39.729721…MercerNJ88 -74.748825 40.424248 -74.722702 40.375301 -74.674507 40.384399… -74.808403 40.415401…number of subregionsbounding box88 points(latitude, longitude)(-75.56, 38.92)Polygon Data TypePolygon. Closed, planar path with straight line segments.Simple polygon. No crossing lines.polygon(8 points)simple polygon(10 points)simple polygon(368 points)Polygon Data Type: Java Implementationpublic class Polygon { private int N; // number of boundary points private double[] x, y; // the points (x[i], y[i]) // read from input stream public Polygon(Scanner in) {N = in.nextInt();x = new double[N];y = new double[N];for (int i = 0; i < N; i++) { x[i] = in.nextdDouble();y[i] = in.nextDouble(); } } public void fill() {StdDraw.filledPolygon(x, y); } public double perimeter() { … } public boolean contains(double x0, double y0) { … } public StringtoString() { … }}Polygon: Pieces and HolesPieces. A state can be comprised of several disjoint polygons.Holes. A county can be entirely inside another county.CharlottesvilleNorthamptonRegion Data TypeRegion. Represents a state or county.Mercer, NJ88 point polygonNew Jersey, USA368 point polygonRegion Data Type: Java Implementationpublic class Region {private String name; // name of regionprivate String usps; // postal abbreviationprivate Polygon poly; // polygonal boundarypublic Region(String name, String usps, Polygon poly) { = name;this.usps = usps;this.poly = poly; } public void draw() { poly.fill(); } public boolean contains(double x0, double y0) {return poly.contains(x0, y0);} public String toString() { … }}Election ReturnsElection Returns: By StateElection returns. Number of votes for Bush, Kerry, Nader by region.Data source: David Leip, more USA2004.txtAlabama,1176394,693933,13122,Alaska,190889,111025,10684,Arizona,1104294,893524,14767,Arkansas,572898,469953,12094,California,5509826,6745485,164546,Colorado,1101255,1001732,27343,Connecticut,693826,857488,27455,Delaware,171660,200152,3378,District of Columbia,21256,202970,3360,Florida,3964522,3583544,61744,Georgia,1914254,1366149,21472,Hawaii,194191,231708,3114,Idaho,409235,181098,8114,Kansas,736456,434993,16307,Kentucky,1069439,712733,13688,…Virginia,1716959,1454742,26666,Washington,1304894,1510201,43989,West Virginia,423778,326541,5568,Wisconsin,1478120,1489504,29383,Wyoming,167629,70776,5023,1,914,254 Bush1,366,149 Kerry21,472 NaderElection Returns: By CountyElection returns. Number of votes for Bush, Kerry, Nader by region.Data source: David Leip, more NJ2004.txtAtlantic,49487,55746,864,Bergen,189833,207666,2745,Burlington,95936,110411,1609,Camden,81427,137765,1741,Cape May,28832,21475,455,Cumberland,24362,27875,948,Essex,83374,203681,2293,Gloucester,60033,66835,1096,Hudson,60646,127447,1353,Hunterdon,39888,26050,742,Mercer,56604,91580,1326,Middlesex,126492,166628,2685,Monmouth,163650,133773,2516,Morris,135241,98066,1847,Ocean,154204,99839,2263,Passaic,75200,94962,1149,Salem,15721,13749,311,Somerset,72508,66476,1295,Sussex,44506,23990,900,Union,82517,119372,1498,Warren,29542,18044,622,56,604 Bush91,580 Kerry 1,326 NaderVote Tally Data TypeVoteTally. Represents the election returns for one region.Mercer, NJNew Jersey, USAelection returns56,604 Bush91,580 Kerry 1,326 Nader1,670,003 Bush1,911,430 Kerry 30,258 NaderVote Tally Data Type: Java Implementationpublic class VoteTally {private int rep,dem,ind; public VoteTally(String name, String usps, int year) { In in = new In(usps + year + ".txt");String input = in.readAll(); int i0 = input.indexOf(name);int i1 = input.indexOf(",", i0+1);int i2 = input.indexOf(",", i1+1);int i3 = input.indexOf(",", i2+1);int i4 = input.indexOf(",", i3+1);rep = Integer.parseInt(input.substring(i1+1, i2));dem = Integer.parseInt(input.substring(i2+1, i3));ind = Integer.parseInt(input.substring(i3+1, i4));} public Color getColor() {if (rep > dem) return StdDraw.RED;if (dem > rep) return StdDraw.BLUE; return StdDraw.BLACK;}} % more NJ2004.txt … Mercer,56604,91580,1326, …i1i0i2i3i4Screen Scraping the Election ReturnsScreen scrape. Data available on Web; download html and parse.…Election Scraper (sketch)int year = 2004; // election yearString usps = "NJ"; // United States postal code for New Jerseyint fips = 34; // FIPS code for New JerseyString url = "";In in = new In(url + "?year=" + year + "&fips="fips); Out file = new Out(usps + year + ".txt"); String input = in.readAll();while (true) { // screen scrape county nameint p = input.indexOf("width:100px", p);if (p == -1) break;int from = input.indexOf("<b>", p);int to = input.indexOf("</b>", from);String county = input.substring(from + 3, to); // screen scrape vote totals for each candidate // save results to file file.println(county + "," + bush + "," + kerry + "," + nader + ",");}extract text between <b>and </b> tags, that occursafter width:100pxElection MapElection Map Data TypeElectionMap. Represents the election map for a given election.public static void main(String[] args) { String name = args[0];int year = Integer.parseInt(args[1]); ElectionMap election = new ElectionMap(name, year);;}% java ElectionMap NJ 2004% java ElectionMap USA 1968Election Map Data Type: Java Implementationpublic class ElectionMap { private int N; private Region[] regions; private VoteTally[] votes;public ElectionMap(String name, int year) { In in = new In(name + ".txt");// read in bounding box and rescale coordinates N = in.readInt(); regions = new Region[N];votes = new VoteTally[N]; for (int i = 0; i < N; i++) { String name = in.readLine();String usps = in.readLine(); Polygon poly = new Polygon(in);regions[i] = new Region(name, usps, poly);votes[i] = new VoteTally(name, usps, year); } }public void show() {for (int i = 0; i < N; i++) { StdDraw.setPenColor(votes[i].getColor());regions[i].draw();} }}Modular ProgrammingRelationships among data types.ElectionMap……VoteTallyRegionRegionintVoteTallyStringStringPolygonintintint…doubledoubleintData VisualizationVisual Display of Quantitative InformationRed states, blue states. Creates a misleading and polarizing picture.Edward Tufte. Create charts with high data density that tell the truth.Purple AmericaIdea. [Robert J. Vanderbei]Assign color based on number of votes.
  • a1 = Bush votes.
  • a2 = Nader votes.
  • a3 = Kerry votes.
  • Bush55% Kerry, 45% Bush100% Kerry100% Naderpublic Color getColor() { int tot = dem + rep + ind; return new Color((float) rep/tot, (float) ind/tot, (float) dem/tot);}VoteTally.javaPurple New Jersey% java ElectionMap NJ 2004Purple America% java ElectionMap USA 2004Purple America% java ElectionMap USA-county 2004Data Visualization: Design IssuesRemark. Humans perceive red more strongly than blue.Remark. Amount of color should be proportional to number of votes,not geographic boundary.Remark. Project latitude + longitude coordinates to 2d plane.Mercator projectionAlbers projection3D Visualization3D visualization. Volume proportional to votes; azimuthal projection.Robert J. Area of state proportional to number of electoral votes.Michael Gastner, Cosma Shalizi, and Mark Pyatigorsky (based on New York Times visualization) programming.
  • Break a large program into smaller independent modules.
  • Ex: Polygon, Region, VoteTally, ElectionMap, In,Out.
  • Ex 1. Build large software project.
  • Software architect specifies API.
  • Each programmer implements one module.
  • Debug and test each piece independently. [unit testing]
  • Ex 2. Build reusable libraries.
  • Language designer extends language with ADTs.
  • Programmers share extensive libraries.
  • Ex: In, Out, Draw, Polygon, …
  • Extra SlidesInteractive MapsInteractive MapGoal. Click a county to retrieve its information.public void showRegion(double x, double y) { for (int i = 0; i < numberOfRegions; i++)if (regions[i].contains(x, y))StdOut.println(regions[i] + "\n" + votes[i] + "\n");}while (true) {double x = StdDraw.mouseX();double y = StdDraw.mouseY();if (StdDraw.mousePressed())election.showRegion(x, y);;}Polygon DiversionQ. How to determine whether a point is inside a simple polygon?no two segments crossPolygon DiversionQ. How to determine whether a point is inside a simple polygon?A. Go in straight line. Count number of times you jump over two segments crossOOP AdvantagesOOP enables:
  • Data abstraction: manage complexity of large programs.
  • Modular programming: divide large program into smaller independent pieces.Encapsulation: hide information to make programs robust.
  • Inheritance: reuse code.
  • Religious wars ongoing.
    We Need Your Support
    Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

    Thanks to everyone for your continued support.

    No, Thanks

    We need your sign to support Project to invent "SMART AND CONTROLLABLE REFLECTIVE BALLOONS" to cover the Sun and Save Our Earth.

    More details...

    Sign Now!

    We are very appreciated for your Prompt Action!