Week 4: Data Visualization
Description:
This project consisted of creating a data visualization for some kind of data.
Idea:
For this assignment, I wanted to create some kind of visualization involving soccer. I really enjoy watching soccer and one of my favorite tournaments is the World Cup. Therefore I decided to do some research on the latest World Cup in Russia 2018. I initially liked the data involving goals for each country so I decided to collect such data on the official FIFA webpage.
Challenges:
For this project, there was no major challenge for me. The only difficult process was collecting data and working with CSV files. One major example was when I was using colors. I had to manually put every single piece of data. Initially, I thought I could write the colors in RGB in one single cell. However, Processing failed to read the data as colors. Finally, I had to write every single RGB value in a separate cell. For the piechart, I tried to make it interactive by making it bigger once clicked and making it display the names of the players. Although I tried to use the rotate function and textAlign function, I failed to get the outcome I wanted.
Process:
For this project, I first started collecting data. I used the official FIFA website to collect data such as matches played, goals scored, goals against, own goals, and penalty goals. After collecting such data I used Microsoft excel to write each country’s name and data. I tried different designs and positions until I liked the last one where I place all of the data at the bottom of the screen and show it in bar graphs. When I completed this, I decided to put some color. For the overall design, I used the official colors used in the Russia World Cup. Then I got the idea to represent each country’s uniform color along with the name. After being done with this, I realized that the screen looked somewhat empty. Later I decided to add two additional features. The first one was a pie chart involving the top thirteen goal scorers. The second one involved the number of World Cup wins by country.
Conclusion:
Overall I had a lot of fun creating this project because it involved something I liked. Although it was tedious to work with a lot of data I think I got to practice a lot for this project. I used previous topics such as OOP and using text. Even though I failed to complete the part for the text, I was satisfied with the result. The project looks a little empty but I think I will keep working on it to fill it and make it more interactive. Although the project took me more time than expected, I feel I enjoyed investigating and creating this data visualization. Also compared to other projects, I think I have improved a lot in avoiding hardcoding.
Country[] countries; PieChart[] players; Winners[] winner; PFont font; Table table, table2, table3; color red = color(211, 2, 8); color gold = color(229, 198, 133); color white = color(245, 238, 213); color black = color(23,23,0); color blue = color(1, 83, 134); color blue2 = color(0, 116, 177); int zoomindata = 0; color[] colors= { red, gold, blue, black, blue2 }; String[] countryname = { "BRA", "GER", "ITA", "ARG", "FRA", "URU", "ENG", "ESP"}; void setup(){ size(1400, 720); loadData(); } void draw(){ font = createFont("Montserrat", 40); background(245, 238, 213); textSize(64); fill(153, 0, 0); rect(0,0,width, 80); rect(0,height-30,width, 30); fill(255); textAlign(CENTER); textFont(font); text("FIFA WORLD CUP RUSSIA 2018", width/2, 55); for(int i = 1; i < 33; i++){ countries[i].drawData(); } for(int i = 0; i < 14; i++){ if(zoomindata == 0){ players[i].drawData(); } else if(zoomindata == 1){ players[i].drawBigCircle(); } } for(int i = 0; i < 8; i++){ winner[i].drawData(); } } void loadData(){ //array for bottom data table = loadTable("worldcup2018.csv"); //array for piechart table2 = loadTable("piechart.csv"); //array for winners table3 = loadTable("line_chart.csv"); countries = new Country[table.getRowCount()]; players = new PieChart[table2.getRowCount()]; winner = new Winners[table3.getRowCount()]; for (int i = 0; i < table.getRowCount(); i++){ TableRow row = table.getRow(i); String name = row.getString(0); float matchplay = row.getFloat(1); float goalfor = row.getFloat(2); float goalscore = row.getFloat(3); float goalagainst = row.getFloat(4); float pkgoal = row.getFloat(5); float owngoal = row.getFloat(6); int r1 = row.getInt(7); int g1 = row.getInt(8); int b1 = row.getInt(9); int r2 = row.getInt(10); int g2 = row.getInt(11); int b2 = row.getInt(12); color c1 = color(r1, g1, b1); color c2 = color(r2, g2, b2); countries[i] = new Country(41*i, name, matchplay, goalfor, goalscore, goalagainst, pkgoal, owngoal, c1, c2); } for (int i = 0; i < table2.getRowCount(); i++){ TableRow row2 = table2.getRow(i); String player = row2.getString(0); float goal = row2.getFloat(1); int colornum = i%5; float anglei = row2.getFloat(4); float anglef = row2.getFloat(3); players[i] = new PieChart(player, goal, colors[colornum], anglei*TWO_PI, anglef*TWO_PI); } for (int i = 0; i < table3.getRowCount(); i++){ TableRow row3 = table3.getRow(i); //String country = row3.getString(0); float wins = row3.getFloat(1); int colorbar = i%5; winner[i] = new Winners(i, countryname[i], wins, colors[colorbar]); } } void mousePressed(){ if(mouseX > 1000 && mouseY < 500){ zoomindata = 1; } } void mouseReleased(){ zoomindata = 0; }
class Country{ float posX, posY; String name; color color1, color2; float MP, GF, GS, GA, PG, OG; float spacebtwy, spacebtwx, widthbar, barheight; Country(float x, String n, float matches, float goalf, float goals, float goala, float pkgoal, float owng, color c1, color c2){ posX = x; posY = height - 50; spacebtwy = 5; spacebtwx = 5; name = n; MP = matches; GF = goalf; GS = goals; GA = goala; PG = pkgoal; OG = owng; widthbar = 5; color1 = c1; color2 = c2; barheight = 15; } void drawData(){ textSize(16); noStroke(); fill(255); text(name, posX+20, posY+40); fill(red); rect(posX+spacebtwx, posY-MP*barheight, widthbar, MP*barheight); fill(gold); rect(posX+2*spacebtwx, posY-GF*barheight, widthbar, GF*barheight); fill(blue); rect(posX+3*spacebtwx, posY-GS*barheight, widthbar, GS*barheight); fill(black); rect(posX+4*spacebtwx, posY-GA*barheight, widthbar, GA*barheight); fill(blue2); rect(posX+5*spacebtwx, posY-PG*barheight, widthbar, PG*barheight); fill(red); rect(posX+6*spacebtwx, posY-OG*barheight, widthbar, OG*barheight); fill(color1); rect(posX+5, posY, 15, 20); fill(color2); rect(posX+20, posY, 15, 20); } }
class PieChart{ float posX, posY; float percentage; float radius; float anglei, anglef; color colors; String name; PieChart(String player, float goal, color colorpie, float angle1, float angle2){ posX = 1200; posY = 300; radius = 300; colors = colorpie; anglei = angle1; anglef = angle2; float num = goal; name = player; } void drawData(){ fill(colors); arc(posX, posY, radius, radius, anglei, anglef); } void drawBigCircle(){ fill(colors); arc(width/2, height/2, radius*2, radius*2, anglei, anglef); textSize(24); pushMatrix(); translate(width/2, height/2); rotate((anglei+anglef)/2); fill(0); textAlign(RIGHT); text(name, 0, 0); popMatrix(); } }
class Winners{ float posX, posY; float wins; color colors; String name; int barlength, barwidth; Winners(int position, String country, float number, color colorbar){ posX = 70; posY = 40*position + 110; name = country; wins = number; colors = colorbar; barlength = 75; barwidth = 25; } void drawData(){ fill(colors); rect(posX, posY, wins*barlength, barwidth); fill(0); textSize(18); textAlign(RIGHT); text(name, posX-5, posY+20); } }