Public
Edited
Dec 9, 2022
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
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
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!="Not applicable")

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!="Not applicable")

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!="Not applicable")
.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!="Not applicable")
.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!="Not applicable")
.filter(d=>d.key)

Insert cell
ghით_დაჯგუფებული = d3.nest()
.key(d=>d.key=="0-10"||d.key== "არც აქ ვარ აქტიური"?"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
საწყისი_მონაცემები_გადმოწერილი = d3.csv(
"https://raw.githubusercontent.com/bumbeishvili/tech-survey-data/main/2019.csv"
)
Insert cell
საწყისი_მონაცემები = საწყისი_მონაცემები_გადმოწერილი
.filter(d=>{
if(ოფისში_მომუშავეები){
return d['14. სამუშაოს ტიპი'] == "Office" && d['13. დასაქმების ტიპი']!="არ ვარ დასაქმებული"
}
if(რემოუთად_მომუშავეები){
return (d['14. სამუშაოს ტიპი'] == "Remote" ||d['14. სამუშაოს ტიპი'] == "Remote and office") && 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 != "Not applicable")
.filter(d=>d.key!="არ ვარ პროგრამისტი ვიყენებ მხოლოდ PS და batch")
.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.length<20)
.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)
.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()
.sort((a,b)=> a.value.revenue<b.value.revenue?1:-1)
Insert cell
ასაკით_დალაგებული_შემოსავლიანები=ასაკით_დაჯგუფებული_შემოსავლიანები.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)
.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)
.sort(d=>d.key)
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@v5')
Insert cell
dc = require("https://unpkg.com/dc@3.1.9/dc.js")
Insert cell
crossfilter = 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:'points',
group:'ეროვნული გამოცდების ქულა უნარებში ',
},
{
selector:'gpa',
group:'თქვენი GPA უნივერსიტეტში (თუ სწავლობთ ან დამთავრებული გაქვთ)',
},
{
selector:'locCountry',
group:'16. ქვეყანა სადაც ფიზიკურად იმყოფებით',
},
{
selector:'hours',
group:'17. საშუალოდ რამდენ საათს მუშაობთ თვეში (და არა კვირაში!) ?',
},
{
selector:'orgType',
group:'15. ძირითადი დამსაქმებელი ორგანიზაცის საქმიანობის სფერო ',
},
{
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:"framework",
group:'7. რომელ framework-ს იყენებთ ძირითადად',
},
{
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="framework">
<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="orgType">
<h3> სფეროთი</h3>
</div>

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

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

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

<div id="points">
<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
Type JavaScript, then Shift-Enter. Ctrl-space for more options. Arrow ↑/↓ to switch modes.

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