Public
Edited
Dec 9, 2022
1 fork
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
{
var div = DOM.element('div');
div.innerHTML = `<style>.observablehq p{font-size:16px;}</style>`
return div;
}


Insert cell
Insert cell
d3.nest()
.key(d=>d['თქვენი GPA უნივერსიტეტში (თუ სწავლობთ ან დამთავრებული გაქვთ)'])
.rollup(arr=> Math.round(d3.mean(arr,d=>d.revenue)))
.entries(ვალიდური_შემოსავლებიანები)
.filter(d=>Number(d.key.split('-')[0]))
.sort((a,b)=>a.key>b.key?1:-1)
Insert cell
GPA_განაწილება = d3.nest()
.key(d=>d['თქვენი GPA უნივერსიტეტში (თუ სწავლობთ ან დამთავრებული გაქვთ)'])
//.rollup(arr=> Math.round(d3.mean(arr,d=>d.revenue)))
.rollup(d=>{ return {revenue:Math.round(d3.mean(d,v=>v.revenue)),count:d.length}})
.entries(ვალიდური_შემოსავლებიანები)
.filter(d=>Number(d.key.split('-')[0]))
.sort((a,b)=>a.key>b.key?1:-1)


Insert cell
უნარების_განაწილება = d3.nest()
.key(d=>d['ეროვნული გამოცდების ქულა უნარებში '])
//.rollup(arr=> Math.round(d3.mean(arr,d=>d.revenue)))
.rollup(d=>{ return {revenue:Math.round(d3.mean(d,v=>v.revenue)),count:d.length}})
.entries(ვალიდური_შემოსავლებიანები)
.filter(d=>d.key)
.filter(d=>d.key!="ჩემ დროს არ იყო")
.filter(d=>d.key!="ჯერ არ ჩამიბარებია")
.filter(d=>d.key!="არ უპასუხია")
.filter(d=>d.key!="საერთოდ არ ჩამიბარებია")
.sort((a,b)=>a.key>b.key?1:-1)


Insert cell
Insert cell
სორს_კონტროლის_ტიპით_დაჯგუფებული = d3.nest()
.key(d=>d['8. რას იყენებთ source control-ისთვის?'])
.entries(ვალიდური_შემოსავლებიანები)
.filter(d=>d.key)
.filter(d=>d.key!="არ უპასუხია")

Insert cell
სორს_კონტროლით_დაჯგუფებული = d3.nest()
.key(d=>d.key=="არ ვიყენებთ"?"არ ვიყენებთ source control-ს":"ვიყენებთ source control-ს")
.rollup(d=>Math.round(d3.mean(d.map(v=>v.values).reduce((a,b)=>a.concat(b)),mn=>mn.revenue)))
.entries(სორს_კონტროლის_ტიპით_დაჯგუფებული)
.sort((a,b)=>a.key>b.key?1:-1)
Insert cell
ტესტერების_ტიპით_დაჯგუფებული = d3.nest()
.key(d=>d['9. გყავთ თუ არა ტესტერები?'])
.entries(ვალიდური_შემოსავლებიანები)
.filter(d=>d.key!="არ უპასუხია")

Insert cell
ტესტერებით_დაჯგუფებული = d3.nest()
.key(d=>d.key=="არა"?"არ გვყავს ტესტერები":"გვყავს ტესტერები")
.rollup(d=>Math.round(d3.mean(d.map(v=>v.values).reduce((a,b)=>a.concat(b)),mn=>mn.revenue)))
.entries(ტესტერების_ტიპით_დაჯგუფებული)
.sort((a,b)=>a.key>b.key?1:-1)
Insert cell
CI_ტიპით_დაჯგუფებული = d3.nest()
.key(d=>d['10. რას იყენებთ continuous integration-ისთვის?'])
.entries(ვალიდური_შემოსავლებიანები)
.filter(d=>d.key!="არ მაქვს account")
.filter(d=>d.key!="არ უპასუხია")
.filter(d=>d.key)

Insert cell
CIით_დაჯგუფებული = d3.nest()
.key(d=>d.key=="არ ვიყენებთ"?"არ ვიყენებთ CI-ს":"ვიყენებთ CI-ს")
.rollup(d=>Math.round(d3.mean(d.map(v=>v.values).reduce((a,b)=>a.concat(b)),mn=>mn.revenue)))
.entries(CI_ტიპით_დაჯგუფებული)
.sort((a,b)=>a.key>b.key?1:-1)
Insert cell
so_ტიპით_დაჯგუფებული = d3.nest()
.key(d=>d['11. თქვენი Stackoverflow-ს რეიტინგი'])
.entries(ვალიდური_შემოსავლებიანები)
.filter(d=>d.key!="არ მაქვს account")
.filter(d=>d.key!="არ უპასუხია")
.filter(d=>d.key)

Insert cell
SOით_დაჯგუფებული = d3.nest()
.key(d=>d.key=="0-10"||d.key=="არ ვარ აქტიური stackoverflow-ში"?"stackoverflow ქულა < 10 ":"stackoverflow ქულა > 10 ")
.rollup(d=>Math.round(d3.mean(d.map(v=>v.values).reduce((a,b)=>a.concat(b)),mn=>mn.revenue)))
.entries(so_ტიპით_დაჯგუფებული)
.sort((a,b)=>a.key>b.key?1:-1)
Insert cell
gh_ტიპით_დაჯგუფებული = d3.nest()
.key(d=>d['12. Max რამდენი star აქვს თქვენს ყველაზე პოპულარულ პროექტს github-ზე'])
.entries(ვალიდური_შემოსავლებიანები)
.filter(d=>d.key!="არ მაქვს account")
.filter(d=>d.key!="არ უპასუხია")
.filter(d=>d.key)

Insert cell
ghით_დაჯგუფებული = d3.nest()
.key(d=>d.key=="0-10"?"github stars < 10 ":"github stars > 10 ")
.rollup(d=>Math.round(d3.mean(d.map(v=>v.values).reduce((a,b)=>a.concat(b)),mn=>mn.revenue)))
.entries(gh_ტიპით_დაჯგუფებული)
.sort((a,b)=>a.key>b.key?1:-1)
Insert cell
შეერთებული_software_practice_შედეგები = [
სორს_კონტროლით_დაჯგუფებული,
ტესტერებით_დაჯგუფებული,
CIით_დაჯგუფებული,
SOით_დაჯგუფებული,
ghით_დაჯგუფებული
]
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
კომენტარები = საწყისი_მონაცემები_გადმოწერილი
.filter(d=>d['19. ღია კითხვა - თქვენი აზრით რა უნდა გაკეთდეს იმისთვის, რომ საქართველომ მიაღწიოს პროგრესს ინფორმაციული ტექნოლოგიების კუთხით? '].trim())
Insert cell
Insert cell
საწყისი_მონაცემები_გადმოწერილი = new Promise((r) =>
d3.csv(
"https://raw.githubusercontent.com/bumbeishvili/tech-survey-data/main/2020.csv",
(dt) => r(dt)
)
)
Insert cell
საწყისი_მონაცემები = საწყისი_მონაცემები_გადმოწერილი
.filter(d=>{
if(filterValue =='all') return true;
if(filterValue=="full_time_local"){
return d['14. სამუშაოს ტიპი'] == "Office - Local Projects" && d['13. დასაქმების ტიპი']!="არ ვარ დასაქმებული"
}
if('remote_international'){
return (d['14. სამუშაოს ტიპი'] == "Remote - International Projects") && d['13. დასაქმების ტიპი']!="არ ვარ დასაქმებული"
}
return true;
})
Insert cell
Insert cell
ენებით_დაჯგუფებული_შემოსავლიანები = d3.nest()
.key(d=>d['6. რომელ პროგრამირების ენას იყენებთ ძირითადად?'])
.rollup(d=>{ return {revenue:Math.round(d3.mean(d,v=>v.revenue)),count:d.length}})
.entries(ვალიდური_შემოსავლებიანები)
.slice()
.filter(d=>d.key)
.filter(d=>d.key != 'არ უპასუხია')
.filter(d=>d.key!='არც ერთს')
.filter(d=>d.key.length<15)
.sort((a,b)=> a.value.revenue>b.value.revenue?1:-1)
.reverse()
Insert cell
ფრეიმვორქებით_დაჯგუფებული_შემოსავლიანები = d3.nest()
.key(d=>d['7. რომელ framework-ს იყენებთ ძირითადად?'])
.rollup(d=>{ return {revenue:Math.round(d3.mean(d,v=>v.revenue)),count:d.length}})
.entries(ვალიდური_შემოსავლებიანები)
.filter(d=>d.key)
.filter(d=>d.key!="არც ერთს")
.filter(d=>d.key!="არ უპასუხია")
.slice()
.sort((a,b)=> a.value.revenue>b.value.revenue?1:-1)
.reverse()
Insert cell
function getRotation(d){
var centerAngle = (d.startAngle+d.endAngle)/2;
var grad = centerAngle/Math.PI*180;
if(grad<180){
grad-=90
}else{
grad+=90;
}
return Math.round(grad);
}
Insert cell
ენების_განაწილება = d3.nest()
.key(d=>d['6. რომელ პროგრამირების ენას იყენებთ ძირითადად?'].toUpperCase())
.rollup(d=>d.length)
.entries(საწყისი_მონაცემები)
.filter(d=>d.key)
.slice()
.sort((a,b)=>a.value>b.value?1:-1)
.reverse()
Insert cell
ენების_განაწილება_ჯამი = d3.sum(ენების_განაწილება,d=>d.value)
Insert cell
ენების_განაწილება_სხვათი = ენების_განაწილება
.slice(0,4)
.concat([{
key:"სხვები",
value:d3.sum(ენების_განაწილება.filter((d,i)=>i>=4),v=>v.value)
}])
.map(d=>Object.assign({},d,{value:Math.round(d.value/ენების_განაწილება_ჯამი*100)}))
Insert cell
ფრეიმვორქების_განაწილება = d3.nest()
.key(d=>d['7. რომელ framework-ს იყენებთ ძირითადად?'].toUpperCase())
.rollup(d=>d.length)
.entries(საწყისი_მონაცემები)
.filter(d=>d.key)
.filter(d=>d.key!="ᲐᲠᲪ ᲔᲠᲗᲡ")
.slice()
.sort((a,b)=>a.value>b.value?1:-1)
.reverse()
Insert cell
ფრეიმვორქების_განაწილება_ჯამი = d3.sum(ფრეიმვორქების_განაწილება,d=>d.value)
Insert cell
ფრეიმვორქების_განაწილება_სხვათი = ფრეიმვორქების_განაწილება
.slice(0,4)
.concat([{
key:"სხვები",
value:d3.sum(ფრეიმვორქების_განაწილება.filter((d,i)=>i>=4),v=>v.value)
}])
.map(d=>Object.assign({},d,{value:Math.round(d.value/ფრეიმვორქების_განაწილება_ჯამი*100)}))
Insert cell
Insert cell
ასაკის_რაოდენობები = d3.nest()
.key(d=>d["3. ასაკი"])
.rollup(d=>d.length)
.entries(საწყისი_მონაცემები)
.slice()
.sort((a,b)=>a.value<b.value?1:-1)
.filter(d=>d.key)
Insert cell
დალაგებული_ასაკები = ასაკის_რაოდენობები.slice().sort((a,b)=> a.key>b.key?1:-1)
Insert cell
ასაკის_სიჭარბე = ასაკის_რაოდენობები[0].key
Insert cell
მაქს_ასაკის_რაოდენობა = ასაკის_რაოდენობები[0].value
Insert cell
ასაკით_დაჯგუფებული_შემოსავლიანები = d3.nest()
.key(d=>d["3. ასაკი"])
.rollup(d=>{ return {revenue:Math.round(d3.mean(d,v=>v.revenue)),count:d.length}})
.entries(ვალიდური_შემოსავლებიანები)
.slice()
.filter(d=>d.value.count>=5)
.sort((a,b)=> a.value.revenue<b.value.revenue?1:-1)

Insert cell
ასაკით_დალაგებული_შემოსავლიანები=ასაკით_დაჯგუფებული_შემოსავლიანები
.slice()
.sort((a,b)=>a.key>b.key?1:-1)
Insert cell
მაქს_შემოსავლიანი_ასაკი = ასაკით_დაჯგუფებული_შემოსავლიანები[0].key
Insert cell
მაქს_შემოსავლიანი_ასაკის_შემოსავალი = ასაკით_დაჯგუფებული_შემოსავლიანები[0].value
Insert cell
Insert cell
გამოცდილებით_დაჯგუფებული_შემოსავლიანები = d3.nest()
.key(d=>d["4. სამუშაო გამოცდილება IT სფეროში"])
.rollup(d=>{ return {revenue:Math.round(d3.mean(d,v=>v.revenue)),count:d.length}})
.entries(ვალიდური_შემოსავლებიანები)
.slice()
.sort((a,b)=> a.value.revenue<b.value.revenue?1:-1)
Insert cell
გამოცდილებით_დალაგებული_შემოსავლიანები=გამოცდილებით_დაჯგუფებული_შემოსავლიანები
.slice()
.filter(d=>d.key!="არ მაქვს")
.sort((a,b)=>Number(a.key.split('-')[0])< Number(b.key.split('-')[0])?1:-1)
Insert cell
მაქს_შემოსავლიანი_გამოცდილება = გამოცდილებით_დაჯგუფებული_შემოსავლიანები[0].key
Insert cell
მაქს_შემოსავლიანი_გამოცდილების_შემოსავალი = გამოცდილებით_დაჯგუფებული_შემოსავლიანები[0].value
Insert cell
Insert cell
სქესები = d3.nest()
.key(d=>d['2. სქესი'])
.entries(ვალიდური_შემოსავლებიანები )
.filter(d=>d.key)
.filter(d=>d.key!="არ უპასუხია")
.sort((a,b)=>a.key>b.key?1:-1)


Insert cell
შემოსავლები_სქესის_მიხედვით=d3.nest()
.key(d=>d['2. სქესი'])
.rollup(d=>{ return {revenue:Math.round(d3.mean(d,v=>v.revenue)),count:d.length}})
.entries(ვალიდური_შემოსავლებიანები )
.filter(d=>d.key)
.filter(d=>d.key!="არ უპასუხია")
.sort(d=>d.key)
Insert cell
Insert cell
დასაქმებული_რესპონდენტები
Insert cell
ვალიდური_შემოსავლებიანები = დასაქმებული_რესპონდენტები
.slice()
.map(d=>Object.assign({revenue:getAverageRevenue(d)},d))
.filter(d=>d.revenue)
.filter(d=>d.revenue<20000) // filter too big ones
Insert cell
ვალიდური_შემოსავლიანები_მდედრობითი = ვალიდური_შემოსავლებიანები.filter(d=>d['2. სქესი']=="მდედრობითი")
Insert cell
function getAverageRevenue(response){
var rev = response['18. საშუალო თვიური შემოსავალი ხელზე ლარებში ბოლო 1 წლის მანძილზე'];
var res = rev.replace(/k/g,'000');
var ranges = res.split('-');
var min = Number(ranges[0]);
var max = Number(ranges[1])
return (min+max)/2
}
Insert cell
საშუალო_შემოსავალი = Math.round(d3.mean(ვალიდური_შემოსავლებიანები,d=>d.revenue))
Insert cell
Insert cell
დასაქმებული_რესპონდენტები = საწყისი_მონაცემები.filter(d=>{
return d['13. დასაქმების ტიპი'] != "არ ვარ დასაქმებული"
})
Insert cell
დასაქმებულთა_პროცენტი = Math.round(დასაქმებული_რესპონდენტები.length/საწყისი_მონაცემები.length*100)
Insert cell
Insert cell
import {load,requireFromGithub} from "@bumbeishvili/fetcher"
Insert cell
d3 = require("d3@v4")
Insert cell
dc.d3.version
Insert cell
dc = require('dc@3.1.9')
Insert cell
import {radio} from "@jashkenas/inputs"
Insert cell
//dc = require("https://unpkg.com/dc@3.1.9/dc.js")
Insert cell
crossfilter = await require("crossfilter2@1.4.6");
Insert cell
windowCrossfilter = {
window.crossfilter = crossfilter;
return "window-crossfilter"
}
Insert cell
style = html`<style>
p{
font-size:14px;
}
</style>`
Insert cell
InjectDcCss = {
var div = DOM.element('div');
div.innerHTML = '<link rel="stylesheet" type="text/css" href="https://unpkg.com/dc@3.0.0-beta.1/dc.css">'
return div;
}
Insert cell
Insert cell
dcConfigs = [
{
selector:'memory',
group:'რამდენი აქვს მეხსიერება? ',
},
{
selector:'ssd_hdd',
group:'რომელი მეხსიერების ტიპი აქვს კომპიუტერს?',
},
{
selector:'ram',
group:'რამდენი აქვს ოპერატიული მეხსიერება? (RAM)',
},
{
selector:'compOrigin',
group:'ლეპტოპის მოდელი',
},
{
selector:'workStationModel',
group:'ვინმეს რომ ეკითხა რა კომპიუტერზე მუშაობთო, რას უპასუხებდით?',
},
{
selector:'workStation',
group:'რომელზე მუშაობთ ძირითადად?',
},
{
selector:'eduLevel',
group:'განათლების დონე',
},
{
selector:'points',
group:'ეროვნული გამოცდების ქულა უნარებში ',
},
{
selector:'gpa',
group:'თქვენი GPA უნივერსიტეტში (თუ სწავლობთ ან დამთავრებული გაქვთ)',
},
{
selector:'covid19',
group:'იმოქმედა თუ არა Covid-19 პანდემიამ თქვენს შემოსავალზე?',
},
{
selector:'desiredRevenue',
group:'თქვენი აზრით ხელფასის რა რაოდენობა შეეფერება თქვენს ამჟამინდელ ცოდნას და გამოცდილებას (ლარებში, თვიურად)',
},
{
selector:'satisfaction',
group:'კმაყოფილი ხართ ახლანდელი სამუშაო ადგილით?',
},
{
selector:'hours',
group:'17. საშუალოდ რამდენ საათს მუშაობთ თვეში (და არა კვირაში!) ?',
},
{
selector:'locCountry',
group:'16. ქვეყანა სადაც ფიზიკურად იმყოფებით',
},
{
selector:'countryRevenue',
group:'ქვეყანა, საიდანაც ყველაზე მეტი შემოსავალი გაქვთ მიღებული ბოლო ერთი წლის მანძილზე',
},

{
selector:'orgType',
group:'15. ძირითადი დამსაქმებელი ორგანიზაცის საქმიანობის სფერო ',
},
{
selector:'workLang',
group:'სამუშაო ენა',
},
{
selector:'workType',
group:'14. სამუშაოს ტიპი',
},
{
selector:'jobType',
group:'13. დასაქმების ტიპი',
},
{
selector:'github',
group:'12. Max რამდენი star აქვს თქვენს ყველაზე პოპულარულ პროექტს github-ზე',
},
{
selector:'stackoverflow',
group:'11. თქვენი Stackoverflow-ს რეიტინგი',
},
{
selector:'ci',
group:'10. რას იყენებთ continuous integration-ისთვის?',
},
{
selector:'testers',
group:'9. გყავთ თუ არა ტესტერები?',
},
{
selector:"sourceControl",
group:'8. რას იყენებთ source control-ისთვის?',
},
{
selector:"language",
group:'6. რომელ პროგრამირების ენას იყენებთ ძირითადად?',
},
{
selector:"frameworks",
group:'7. რომელ framework-ს იყენებთ ძირითადად?',
},
{
selector:"cloud",
group:'იყენებთ თუ არა cloud-ს და რომელს?',
},
{
selector:"category",
group:'5. რომელ კატეგორიას მიეკუთვნებით ყველაზე მეტად?',
},
{
selector:"workExperience",
group:'4. სამუშაო გამოცდილება IT სფეროში',
},
{
selector:"place",
group:'1. სად ნახეთ ეს გამოკითხვა?',
},
{
selector:"gender",
group:'2. სქესი',
},
{
selector:"age",
group:'3. ასაკი',
}
]
Insert cell
function container() { return `
<h1>საშუალო ანაზღაურება (ლარი)</h1>
<div>
<div class="dc-wrapper-second">
<div id="place">
<h3> გამოკითხვით</h3>
</div>
<div id="gender">
<h3> სქესით</h3>
</div>
<div id="age">
<h3> ასაკით</h3>
</div>
<div id="workExperience">
<h3> გამოცდილებით</h3>
</div>
<div id="category">
<h3> კატეგორიით </h3>
</div>
<div id="language">
<h3> პროგ. ენით </h3>
</div>
<div id="cloud">
<h3> ღრუბლოვანით </h3>
</div>
<div id="frameworks">
<h3> ფრეიმვორქით </h3>
</div>
<div id="sourceControl">
<h3> src. control</h3>
</div>
<div id="testers">
<h3> ტესტერებით</h3>
</div>
<div id="ci">
<h3> CI-ით</h3>
</div>
<div id="stackoverflow">
<h3> Stackoverflow-ით</h3>
</div>

<div id="github">
<h3> github-ით </h3>
</div>

<div id="jobType">
<h3> დასაქმებით </h3>
</div>

<div id="workType">
<h3> სამუშაოთი </h3>
</div>

<div id="workLang">
<h3> სამუშაო ენით</h3>
</div>

<div id="orgType">
<h3> სფეროთი</h3>
</div>

<div id="hours">
<h3> დრო (სთ/თვე) </h3>
</div>

<div id="countryRevenue">
<h3> შემოსავლებით </h3>
</div>



<div id="locCountry">
<h3>მდებარეობით </h3>
</div>

<div id="satisfaction">
<h3>სამუშაოს კმაყოფილებით</h3>
</div>

<div id="desiredRevenue">
<h3>შესაფერისი ხელფასით</h3>
</div>


<div id="covid19">
<h3>პანდემიის გავლენით</h3>
</div>

<div id="gpa">
<h3>GPA-ით</h3>
</div>


<div id="points">
<h3>უნარებით </h3>
</div>

<div id="eduLevel">
<h3>განათლების დონით</h3>
</div>

<div id="workStation">
<h3>კომპიუტერით</h3>
</div>

<div id="workStationModel">
<h3>კომპიტერის მოდელით</h3>
</div>

<div id="compOrigin">
<h3>მწარმოებლით</h3>
</div>

<div id="ram">
<h3>ოპერატიულით</h3>
</div>

<div id="ssd_hdd">
<h3>მეხსიერების ტიპით</h3>
</div>

<div id="memory">
<h3>მეხსიერებით</h3>
</div>

</div>
</div>

<hr style="clear:both;">
`;
}
Insert cell
year = {
const date = new Date();
date.setMonth(date.getMonth()+2);
return date.getFullYear();
}
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