WHO Dataset

WHO Data Set

We compiled a set of social, economic, health, and political indicators using data from the World Health Organization and partner organizations. The dataset is available in the following comma-separated values (CSV) file: http://www.exploredata.net/Downloads/WHO-Data-Set

Referecia de Processing para usar archivos CSV: https://processing.org/reference/Table.html

dataset

Table table; // tabla para cargar todos los datos del dataset
float porcentajesPoblacion[]; // arreglo que almacenará el procentaje de cada país de la población mundial
float totalPoblacion = 0; // variable usada para calcular la población mundial
int xr[], yr[], wr[], hr[]; // posición x, y, ancho y alto de las barras de cada país para detección del mouse

void setup() {
  size(500, 500);
  table = loadTable("WHO.csv", "header"); // carga el archiv CSV
  println(table.getRowCount() + " total rows in table");  // imprime tl total de filas (países)
  porcentajesPoblacion = new float[table.getRowCount()+1]; // crea arreglo para almacenar porcentajes
  xr = new int[table.getRowCount()+1]; // crea arreglo para almacenar x de la barra
  yr = new int[table.getRowCount()+1]; // crea arreglo para almacenar y de la barra
  wr = new int[table.getRowCount()+1]; // crea arreglo para almacenar ancho w de la barra
  hr = new int[table.getRowCount()+1]; // crea arreglo para almacenar altura h de la barra
   
  // calcula el total de la población sumando fila por fila en totalPoblacion  
  for (TableRow row : table.rows ()) {
    totalPoblacion = totalPoblacion + row.getInt("Population (in thousands) total");;
  }
  println(" el total de la poblacion mundial es: "+totalPoblacion);
    
  // calcula los porcentajes de población correspondientes a cada país y los guarda en el arreglo  
  for(TableRow row : table.rows ()) {
    porcentajesPoblacion[row.getInt("CountryID")] = row.getInt("Population (in thousands) total")/totalPoblacion*100;
  }
  
  // calcula y guarda las posiciones x, y, w, h para cada barra
  int x = 0;
  for (TableRow row : table.rows ()) {
    int gentecita = row.getInt("Population (in thousands) total");
    float genteEscala = map(gentecita, 0, 1328474, 0, 460);
    int paisID = row.getInt("CountryID");
    xr[paisID] = x;
    yr[paisID] = (int)((height-20)-genteEscala);
    wr[paisID] = 3;
    hr[paisID] = (int)genteEscala;
    x = x + 5; 
  }
   
}

void draw() {
  background(255);
  
  int x = 0;
  for (TableRow row : table.rows ()) {
    // para cada fila extrae la población y el continente
    int gentecita = row.getInt("Population (in thousands) total"); 
    int continente = row.getInt("Continent");
    // escala el valor de la población para que quepa en la pantalla
    float genteEscala = map(gentecita, 0, 1328474, 0, 460);
    // si el continente es el 5 seleccione el color verde para la barra
    if (continente == 5) {
      fill(30, 200, 20);
    } else {
      // si no, seleccione un gris
      fill(180);
    }
    int paisID = row.getInt("CountryID");
    // if comentado para ver si el mouse esta dentro de la barra
    //if(mouseX>=xr[paisID] && mouseX<=xr[paisID]+wr[paisID] && mouseY>=yr[paisID] && mouseY<=yr[paisID]+hr[paisID]) {     
    // si la X del mouse está sobre la barra del país seleccionado     
    if(mouseX>=xr[paisID] && mouseX<=xr[paisID]+wr[paisID]) {  
      // use el color rojo
      fill(200, 30, 20);
      // pinte el nombre del país seleccionado
      text(row.getString("Country"),xr[paisID],yr[paisID]-10);
    }
    
    // pinte la barra para el país de esta fila
    noStroke(); 
    rect(x, (height-20)-genteEscala, 3, genteEscala);
    x = x + 5;     
  }
}

Descargar Folder con el ejemplo de clase: DATA_05

Variación cargando partes del data set en arreglos: DATA_03