cleanedData = {
let data = owid_co2_data7.map(a => {return {...a}})
let codeOnly = data.map( e => e.iso_code )
let codeList = codeOnly.filter( (value, index, array) => {
return array.indexOf(value) === index;
})
let isBlank = (value) => ( !value || value.length === 0 )
let cleanedData = []
let singleCountryData, lookingForNext
let keys = Object.keys(data[0])
let last = null, next = null
for(let i=0; i<codeList.length; i++){
singleCountryData = data.filter( (value, index, array) => {
return value.iso_code === codeList[i];
})
for(let k=4; k<keys.length; k++){
for(let j=0; j<singleCountryData.length; j++){
if( isBlank(singleCountryData[j][keys[k]]) ){ singleCountryData[j][keys[k]] = null}
}
last = null; next = 0
for(let j=0; j<singleCountryData.length; j++){
if( (singleCountryData[j][keys[k]]) == null ){
if( last === null || next === null ){}
else if(next < j) {
next = singleCountryData.findIndex( (element,index) => element[keys[k]] != null && j<index )
if( next == -1){
next = null
} else { // linear interpolation from existing last and next indexes, scaleLinear(domain, range)
singleCountryData[j][keys[k]] = d3.scaleLinear([last,next] , [+singleCountryData[last][keys[k]],+singleCountryData[next][keys[k]]])(j)
}
} else { // linear interpolation from existing last and next indexes
singleCountryData[j][keys[k]] = d3.scaleLinear([last,next] , [+singleCountryData[last][keys[k]],+singleCountryData[next][keys[k]]])(j)
}
} else { // if value, sets the last index
last = j
singleCountryData[j][keys[k]] = +singleCountryData[j][keys[k]]
}
}
}
// calculates co2, co2/capita, co2/gdp
for( let j=0; j<singleCountryData.length; j++){
if(singleCountryData[j].co2 != null){ singleCountryData[j].co2 = singleCountryData[j].co2 * 1e6 * 1000} // converts between millions of tonnes -> tonnes
if(singleCountryData[j].population != null && singleCountryData[j].gdp != null){
singleCountryData[j].gdp_per_capita = singleCountryData[j].gdp / singleCountryData[j].population
}
if(singleCountryData[j].population != null && singleCountryData[j].co2 != null){
singleCountryData[j].co2_per_capita = singleCountryData[j].co2 / singleCountryData[j].population
}
if(singleCountryData[j].co2 != null && singleCountryData[j].gdp != null){
singleCountryData[j].co2_per_gdp = singleCountryData[j].co2 / singleCountryData[j].gdp
}
}
}
return data
}