Skip to content

Instantly share code, notes, and snippets.

@lifeart
Last active January 29, 2021 19:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lifeart/824e28ef54fc6909d1cbc120b0ef14ce to your computer and use it in GitHub Desktop.
Save lifeart/824e28ef54fc6909d1cbc120b0ef14ce to your computer and use it in GitHub Desktop.
stateofjs mining

source: https://www.kaggle.com/sachag/state-of-js

71% ember devs like react (persons 469)
72% ember devs like vuejs (persons 474)
25% ember devs like angular (persons 476)\

71% react devs like vuejs (persons 10583)
27% react devs like angular (persons 10595)
13% react devs like ember (persons 10586)\

48% angular devs like react (persons 1436)
73% angular devs like vuejs (persons 1456)
13% angular devs like ember (persons 1468)\

29% vuejs devs like react (persons 1791)
7% vuejs devs like angular (persons 1844)
8% vuejs devs like ember (persons 1839)\

33% other devs like react (persons 579)
35% other devs like vuejs (persons 615)
15% other devs like angular (persons 635)
8% other devs like ember (persons 649)\

3% ember devs never heard about vuejs (15 persons)
8% react devs never heard about ember (876 persons)
16% angular devs never heard about ember (238 persons)
10% vuejs devs never heard about ember (192 persons)
15% other devs never heard about ember (95 persons)\

more results - https://docs.google.com/spreadsheets/d/1saDZ5Ms6pVSFRnbJuPweAHDG6qfOfwNR1BsSjPtI6d4/edit?usp=sharing

const fs = require('fs');
const items = JSON.parse(fs.readFileSync('state_of_js_2016_2020.json', 'utf8'));
const last = items.filter((item) => [2020].includes(item.year));
// 2_5, 5_10, 10_20
const exp = last.filter((item) => ['1_2', '2_5', '5_10', '10_20'].map(e=>`range_${e}`).includes(item.user_info.years_of_experience));
// 10_30, 30_50, 50_100, 100_200,
const payd = exp.filter((item) => ['10_30','30_50', '50_100', '100_200'].map(e=>`range_${e}`).includes(item.user_info.yearly_salary));
const shape = {};
const fans = ['ember', 'react', 'angular', 'vuejs', 'other'];
fans.forEach((el) => {
shape[el] = {};
})
payd.forEach((el) => {
let fan = fans.find((techName) => el.tools && el.tools[techName] && (el.tools[techName].experience === 'would_use')) || 'other';
if (fan === 'other') {
const interested = fans.filter((techName) => el.tools && el.tools[techName] && (el.tools[techName].experience === 'interested'));
if (interested.length === 1) {
fan = interested[0];
}
}
Object.keys(el.tools || {}).forEach((tool)=> {
if (!fans.includes(tool)) {
return;
}
if (!(tool in shape[fan])) {
shape[fan][tool] = {
not_interested: 0,
would_use: 0,
interested: 0,
would_not_use: 0,
never_heard: 0
}
}
shape[fan][tool][el.tools[tool].experience]++;
});
});
const processed = [];
const processedTwo = [];
const processedThree = {
ember: 0,
react: 0,
vuejs: 0,
angular: 0
}
Object.keys(shape).forEach((fan) => {
Object.keys(shape[fan]).forEach((framework) => {
const yes = shape[fan][framework].would_use + shape[fan][framework].interested;
const no = shape[fan][framework].not_interested + shape[fan][framework].would_not_use;
const neverHeard = shape[fan][framework].never_heard;;
const total = yes + no + neverHeard;
if (fan !== framework) {
const val = Math.round(((yes / total) * 100));
const nh = Math.round(((neverHeard / total) * 100));
const str = `${val}% \`${fan}\` devs like \`${framework}\` (persons ${total})\\`;
// processed[] = ;
processed.push(str);
// const str = ;
if (nh > 1) {
if (fan !== 'other') {
processedThree[framework] += neverHeard;
}
processedTwo.push(`${nh}% \`${fan}\` devs never heard about \`${framework}\` (${neverHeard} persons)\\`);
}
}
// processed[`${fan} > ${framework} > -`] = ((no / total) * 100).toFixed(2);
});
processed.push('\n');
});
console.log(processed.join('\n'));
console.log(processedTwo.join('\n'));
console.log(processedThree);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment