๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ์์ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ํค์๋๋ก ๊ฒ์์ผ๋ก ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ๊ท์ฐฎ์ ํ์์ ํ๊ฒ ๋๊ณ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋๊น์ง ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๊ฑฐ์ณ์ผ ํฉ๋๋ค. ํ์ง๋ง ๊ณต๊ณต๋ฐ์ดํฐ ์๊ฐํํ๋ ๊ณณ์์ ๋ฐ์ดํฐ ๊ฒ์์ ํ๋ฉด ๊ณต๊ฐ๋ ๋ฐ์ดํฐ๋ค์ ํํด ๊ฒ์์ด ์ฝ๊ฒ ๋๋๋ก ๋์ด ์์ด ํธํ๊ฒ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ํค์๋๋ก ์ฐพ์ ์ ์์ต๋๋ค. ์ง๋์๊ฐ์ ์ฑํญ๋ ฅ์ด๋ ํค์๋๋ก ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ์์ ์์ฒด์ ์ผ๋ก ์๊ฐํ ์ฐจํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์๋๋ฐ ์ฑํญ๋ ฅ ๋ฐ์ดํฐ๋ฅผ Table๋ก ์ง์ ํ์ฌ ์ฑํญ๋ ฅ ํํฉ์ ์์๋ณด๊ณ ์ ๊ฐ๋จํ ์ถ๋ ฅ์ ํด๋ณด์์ต๋๋ค.
๊ณต๊ณต๋ฐ์ดํฐ ์๊ฐํ์์ ์๊ฐํ ๋ง๋ค๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ์๋์ ๊ฐ์ ์ฐฝ์ด ๋น๋๋ค.
๊ฒฝ์ฐฐ์ฒญ ์ฑํญ๋ ฅ ๋ฐ์ ๋ฐ ๊ฒ๊ฑฐ ํํฉ์ ๋ฉํ์ ๋ณด์ ๋๋ค. ์๋ณธ ๋ฐ์ดํฐ ๋งํฌ๋ฅผ ๋๋ฅด๋ฉด ํด๋น ๋ฐ์ดํฐํ์ผ์ ๋ค์ด๋ก๋์ ๋ฐ์ ์ ์์ต๋๋ค.
๋ค์์ผ๋ก, ๋ฒ๋ฌด๋ถ ์ฑํญ๋ ฅ์ฌ๋ฒ ์ฌ๋ฒ๋ฅ ํํฉ์ ๋ฉํ์ ๋ณด์ ๋๋ค. ์๋ณธ ๋ฐ์ดํฐ ๋งํฌ๋ฅผ ๋๋ฅด๋ฉด ํด๋น ๋ฐ์ดํฐ ํ์ผ์ ๋ค์ด๋ก๋์ ๋ฐ์ ์ ์์ต๋๋ค.
-์ฌ์ ํ์ต : [D3.js] ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ table๋ก ์ถ๋ ฅ
html์ Table๋ก ์ถ๋ ฅํ๊ธฐ ์ํด์ ์ฌ์ ํ์ต์์ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ Table๋ก ์ถ๋ ฅํ๋ ์์ค๋ฅผ ์ด์ฉํ์ฌ ์ถ๋ ฅํ๊ฒ ํ์์ต๋๋ค.
[์ฌ์ ํ์ต์์ค] : data.csv๋ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ฐ์์ ํ์ผ๋ช ๋ง ๋ฐ๊พธ๋ฉด ๋จ.
<body>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script type="text/javascript" src="http://d3js.org/d3.v5.min.js"></script>
<script type="text/javascript">
d3.csv("data.csv").then(function(data){
var sortstate = true;
var title = d3.keys(data[0]);
var table = d3.select('body').append('table')
.attr("class","table table-striped");
var thead = table.append('thead')
.attr("class","thead-dark");
var tbody = table.append('tbody');
var header = thead.append('tr')
.selectAll('th')
.data(title).enter()
.append('th')
.text(function (d) {return d;})
.on('click', function (d) {
sortstate = !sortstate;
rows.sort(function(a,b){
if(isNaN(a[d])){
if (sortstate) return b[d] > a[d];
else return a[d] > b[d];
}else{
if (sortstate) return b[d] - a[d];
else return a[d] - b[d];
}
});
});
var rows = tbody.selectAll('tr').data(data)
.enter()
.append('tr');
var cells = rows.selectAll('td')
.data(function (d) {
return title.map(function (title) {
return { 'title': title, 'value': d[title]};
});
})
.enter()
.append('td')
.text(function (d) { return d.value;});
});
</script>
</body>
์ฌ์ ํ์ต์ ์์ค๋ก Table ํํ๋ก ์ถ๋ ฅ์ ํด๋ด ๋๋ค.
[๊ฒฝ์ฐฐ์ฒญ]
๋ณด๋ฉด 2006๋ ๋ถํฐ 2017๋ ๊น์ง์ ๋ฐ์ดํฐ ์ธ๋ฐ ๋ฐ์๊ฑด์๋ 2006๋ ์ ๋นํด 2017๋ ์ 2๋ฐฐ์ด์ ์ฆ๊ฐํ๊ณ ๊ฒ๊ฑฐ๊ฑด์์ ๊ฒ๊ฑฐ์ธ์์๋ ๋ฐ์๊ฑด์์ ๋ง๊ฒ ์ต๋ํ ๊ฒ๊ฑฐ๊ฐ ์ด๋ฃจ์ด ์ก์ต๋๋ค. ํ์ง๋ง ์ํ๊น๊ฒ ๋ฐ์๊ฑด ๊ฑด์์ ๊ตฌ์๊ณผ ๋ถ๊ตฌ์ ์กฐ์น๋ฅผ ๋ณด๋ฉด ๊ตฌ์์ด 2006๋ ๋๊ฐ ๋ฐ์๊ฑด์์ ๋นํด ๊ตฌ์ ์กฐ์น๊ฐ ์ด๋ฃจ์ด์ง ์ซ์์ ๋น๊ตํ๋ฉด 2017๋ ์ ๋ฐ์๊ฑด์์ ๋นํด ๊ตฌ์ ์กฐ์น๋ฅผ ํ์ ํ๊ฒ ์ค์ด ๋ค์์ต๋๋ค. ์ฆ, ํผํด์๋ณด๋ค ๊ฐํด์์ ์ธ๊ถ์ ๋ ๋ง์ด ์ฑ๊ธด ๊ฒ์ด ์๋๋ฉด ๋ ์ง๋ฅ์ ์ผ๋ก ๋ฐ๋์ด ๊ตฌ์์ ํผํ ๊ฑด์ง ์๋๋ฉด ์ฑํญ๋ ฅ์ ๋ํ ๊ธฐ์ค์ ๋ฒ์๊ฐ ๋๊ณ ์ ๊ณ ๊ฐ ๋์ด๋์ ๊ฐ๋ฒผ์ด ๊ฒ์ ๋ํ ๋ถ๊ตฌ์ ์กฐ์น๊ฐ ๋ง์ ๊ฑด์ง ์๋ฌดํผ ์์น์์ผ๋ก๋ ์ฐธ ์ํ๊น์ด ํ์ค์ด๋ค์.
์ฌ๊ธฐ์, Table๋ฅผ ๋ณด๋ฉด ๋ฐ๋ก ๋์ผ๋ก ์ฐจ์ด๋ฅผ ๋ณผ๋ ค๋ฉด ์์น๋ฅผ ์ผ์ผํ ๋น๊ตํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ข ๋ณด๊ธฐ ๋ถํธํด์ง ์ ์์ต๋๋ค. ๊ทธ๋์, ์ง๋์๊ฐ์ ๋ฐฐ์ด D2B.js๋ก ๊ฐ๋จํ ๋ ๋ ๋ณ ๋ฐ์๊ฑด์๋ฅผ ๋น๊ตํด๋ณด๋๋ก ํ์ฃ .
์ฌ์ ํ์ต์ ์์ค๋ก ๊ฐ๋จํ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ์ ํด์ผํฉ๋๋ค.
์์ ์์น
for(var i=0; i<data.length; i++) {
outputData.push({label:data[i].๊ตฌ๋ถ, value:parseInt(data[i].๋ฐ์๊ฑด์.replace(/,/g, ""))});
}
๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ ์ฝค๋ง๊ฐ ๋ถ์ ์ซ์๊ฐ์ ๋ฌธ์์ด๋ก ์ฝ์ด์์ ์ซ์ํ์ผ๋ก ๋ฐ๊ฟ์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ฝ๋ฉ๊ณผ ๊ฐ์ ํํ๋ก ์์ ํจ
<script src="https://d3js.org/d3.v5.min.js"></script>
<script src="https://unpkg.com/[email protected]/build/d2b.min.js"></script>
<body>
<div class = 'pie-chart'></div>
<script>
var pie = d2b.chartPie().donutRatio(0.5); //๋ด๋ถํ
๋ค
pie.chartFrame().size({height: 400}); //์ฐจํธ ํฌ๊ธฐ
d3.csv("data.csv").then(function(data){
var outputData = [];
for(var i=0; i<data.length; i++) {
outputData.push({label:data[i].๊ตฌ๋ถ, value:parseInt(data[i].๋ฐ์๊ฑด์.replace(/,/g, ""))});
}
console.log(outputData);
render(outputData); //Pie Chart ์ถ๋ ฅ
});
function render(data){
var chart = d3.select('.pie-chart'); //'pie-chart'์ธ div ํ๊ทธ์ ํ
chart
.datum(data)
.transition()
.call(pie);
window.onresize = function () {chart.transition().call(pie)}; //ํธ์ถ
}
</script>
</body>
[๊ฒฐ๊ณผ]
์ ์ฒด ๋น์จ์์ ๋ ๋๋ณ ์ด๋์ ๋ ๋ฐ์์ด ๋๋์ง ์ดํด๋ณด์๋ค์.
์์์ ์ธ๊ธํ 2006๋ ๋์ ๋ฐ์๊ฑด์์ 2017๋ ์ ๋ฐ์๊ฑด์์ ์ฐจ์ด๋ฅผ ๋ณผ๊น์.
์ ๊ทธ๋ฆผ์ ๋ณด์๋ ๊ฒ ์ฒ๋ผ ์ซ์ ์์ผ๋ก๋ 2๋ฐฐ์ด์ ์ฆ๊ฐํ๋ค์. ์ข ์์ข์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ ๋๋ ์ข๊ฒ ๋ณํ๋๋ ์ฐจํธ๊ฐ ๋์ค๋ฉด ์ข์๋ฐ ์ด๋ ๊ฒ ์์ข์ ์ชฝ์ผ๋ก ์ฆ๊ฐํ๋ ๋ชจ์ต์ ๋ณด๋ฉด ์ฉ ๊ธฐ๋ถ์ ์ข์ง ์์ต๋๋ค.
[๋ฒ๋ฌด๋ถ]
์ฑํญ๋ ฅ ์ฌ๋ฒ์ ์ฌ๋ฒ๋ฅ ๋ ์ ํ ๋ฐ๋์ง ์๊ณ ์๋ค์. 2016๋ ๋๋ ์ ๋ ๋์ ๋นํด ์ด๋์ ๋ ์ค์ด ๋ค์์ง๋ง ๊ทธ๋๋ ๋์ ์์น์ ์ฌ๋ฒ๋ฅ ์ ๋ณด์ด๊ณ ์์ต๋๋ค. ์ด๋ฐ ํ์ค์์ ์ฐ๋ฆฌ๊ฐ ์ด๊ณ ์๋ค์.
Table๋ก ์ถ๋ ฅ์ d3.js๋ก ํด๋ดค๋๋ฐ ๋ฐ์ดํฐ ์์น๋ฅผ ๋ณด๋ฉด ์ฑํญ๋ ฅ์ ๋ํ ํ๊ตญ์ ํ์ฃผ์๋ฅผ ์ ์ ์์๋ค์. ๊ณต๊ณต๋ฐ์ดํฐ ์๊ฐํ์์๋ 2๊ฐ์ ๋ฐ์ดํฐ ๋ฐ์ ๊ณต๊ฐ ์๋์ด์ ์ฒ๋ฒ์ ๊ดํ ํํฉ์ ์ ์ ์์์ต๋๋ค. ์ฑํญ๋ ฅ ๊ด๋ จ ์ ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ์ถ์๋๋ฐ ์๋ฌดํผ ์ฑํญ๋ ฅ์ ๋ํ ๋ฌธ์ ๋ ๋๊ฐ์ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ๋ณด๋๋ผ๋ ์ฉ ์ข์ง ์๋ค์.
์ด ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๋ค์ํ ๋น๊ต ์ฐจํธ๋ฅผ ๋ง๋ค์ด ๋ณผ๊น ํ๋๋ฐ ๊ทธ๋ฅ ์์ธํด์ 2๊ฐ์ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ Table ํํ๋ก ๋ง๋ค์ด์ ์ถ๋ ฅํด๋ณด๊ณ ์ค๋ post๋ฅผ ๋ง๋ฌด๋ฆฌ ํฉ๋๋ค.