Published
Edited
Mar 6, 2019
Importers
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
z = require('https://bundle.run/zebras@0.0.11')
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
rainAmounts = [
18.3,
19,
14.1
]
Insert cell
rainDates = Array.from({length: 3}, (_, i) => Date.now() - 1000 * 60 * 60 * 24 * i)
Insert cell
Insert cell
rainfall = {
let rainDF = []
for (var i=0; i<rainAmounts.length; i++) {
rainDF.push({precipitation: rainAmounts[i], date: rainDates[i]})
}
return rainDF
}
Insert cell
titles = ['Halo: Combat Evolved', 'Halo 2', 'Halo 3', 'Halo Reach']
Insert cell
release_years = [2001, 2004, 2007, 2009]
Insert cell
Insert cell
Insert cell
daySeries = ["Monday", "Monday", "Wednesday"]
Insert cell
newRainfall = z.addCol("day", daySeries, rainfall)
Insert cell
Insert cell
groupedRainfall.Monday
Insert cell
Insert cell
Insert cell
columns = Object.keys(rainfall[0])
Insert cell
Insert cell
shape = ({rows: rainfall.length, columns:Object.keys(rainfall[0]).length})
Insert cell
function getShape(df) {
let numRows = df.length;
let numCols = Object.keys(df[0]).length;
let shape = ({rows: numRows, columns: numCols});
return shape;
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
migrationUrl = "https://gist.githubusercontent.com/cesandoval/b834ac93c07e03ec5205843b97f68017/raw/90951b60444376eebfcbbee9beca00c083f489f6/API_SM.POP.NETM_DS2_en_csv_v2_10473747.csv"
Insert cell
migration = d3.csv(migrationUrl)
Insert cell
Insert cell
Insert cell
Insert cell
z.head(5, migration)
Insert cell
Insert cell
Insert cell
migration.length
Insert cell
Insert cell
({rows: migration.length, columns:Object.keys(migration[0]).length})
Insert cell
Insert cell
migrationColumns = Object.keys(migration[0])
Insert cell
Insert cell
Insert cell
firstRow = Object.values(migration[0])
Insert cell
lastRow = Object.values(migration[migration.length-1])
Insert cell
randomRow = Object.values(migration[Math.floor(Math.random() * migration.length)])
Insert cell
Insert cell
Insert cell
Insert cell
numericalColumns = migrationColumns.slice(0, migrationColumns.length-4)
Insert cell
migrationParsed = z.parseNums(numericalColumns, migration)
Insert cell
Insert cell
z.head(5, migrationParsed)
Insert cell
Insert cell
countryName = z.getCol('Country Name', migrationParsed)
Insert cell
Insert cell
// 10th row of our Dataframe:
countryName[9]
Insert cell
Insert cell
z.describe(z.getCol('1962', migrationParsed))
Insert cell
Insert cell
test = z.valueCounts(z.getCol('Indicator Code', migrationParsed))
Insert cell
Insert cell
Insert cell
Insert cell
z.unique(z.getCol('Indicator Code', migrationParsed))
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
z.filter(r => r['1962'] > 0, migrationParsed)
Insert cell
Insert cell
z.filter(r => r['Country Name'] == "China", migrationParsed)
Insert cell
Insert cell
z.filter(r => r['1962'] > 0 && r['2012'] < 0, migrationParsed)
Insert cell
Insert cell
//We can use argument 'asc' to reverse the sorting
migrationSorted = z.sortByCol('2017', 'des', migrationParsed)
Insert cell
Insert cell
Insert cell
z.head(5, z.pickCols(['Country Name', '2017'], migrationSorted.slice(1)))
Insert cell
Insert cell
Insert cell
z.filter(r => r['Country Name'] == "Cayman Islands", migrationParsed)
Insert cell
Insert cell
isNaN(z.getCol('1960', migrationParsed)[1])
Insert cell
Insert cell
z.filter(r => Number.isNaN(r['1962']) == false, migrationParsed)
Insert cell
Insert cell
z.getCol('1960', migrationParsed)
Insert cell
Insert cell
z.dropCol(["1960"], migrationParsed)
Insert cell
migrationNanless = {
let columns = Object.keys(migrationParsed[0]);
let newDF = migrationParsed;
for (var col in columns) {
let colname = columns[col];
let column = z.getCol(colname, migrationParsed);
let collen = column.length;
let colvalcounts = z.valueCounts(column);
let colvalkeys = Object.keys(colvalcounts);
let colvalvals = Object.values(colvalcounts);
let colnumnans = 0
for (var i in colvalkeys) {
if (colvalkeys[i] == "NaN") {
colnumnans = colvalvals[i]
}
}
if (colnumnans == collen) {
newDF = z.dropCol(colname, newDF);
}
}
return newDF;
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
migrationMetaUrl = "https://gist.githubusercontent.com/cesandoval/b834ac93c07e03ec5205843b97f68017/raw/90951b60444376eebfcbbee9beca00c083f489f6/Metadata_Country_API_SM.POP.NETM_DS2_en_csv_v2_10473747.csv"
Insert cell
migrationMeta = d3.csv(migrationMetaUrl)
Insert cell
Insert cell
migrationMeta.length
Insert cell
Insert cell
migrationMetaColumns = Object.keys(migrationMeta[0])
Insert cell
z.head(5, migrationMeta)
Insert cell
Insert cell
Insert cell
Insert cell
migration_join = z.merge(migrationParsed, migrationMeta, "Country Code", "Country Code", "_df1", "_df2")
// migration_join = migrationParsed.map(x => Object.assign(x, migrationMeta.find(y => y['Country Code'] == x['Country Code'])));
Insert cell
Insert cell
Insert cell
migration_2017 = z.getCol('2017', migration_join)
Insert cell
z.print([
{
minMigration: z.min(migration_2017).toFixed(5),
maxMigration: z.max(migration_2017).toFixed(5),
meanMigration: z.mean(migration_2017).toFixed(5),
medianMigration: z.median(migration_2017).toFixed(5),
stdMigration: z.std(migration_2017).toFixed(5)
}
])
Insert cell
Insert cell
migration_2017_Piped = z.pipe(
[
z.parseNums(['1992','1997','2002','2007', '2012', '2017']),
z.getCol('2017'),
z.mean()
]
)(migration_join)
Insert cell
Insert cell
migrationByRegion = z.groupBy(x=>x.Region_df1, migration_join)
Insert cell
Insert cell
migrationCountRegion = z.gbCount("Region", migrationByRegion)
Insert cell
Insert cell
Insert cell
Insert cell
d3 = require("d3")
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more