Danfo.js는 구조화 된 데이터를 조작하고 처리하기위한 직관적이고 사용하기 쉬운 고성능 데이터 구조를 제공하는 오픈 소스 JavaScript 라이브러리입니다.
특징: Danfo.js is fast. It is built on Tensorflow.js and supports tensors out of the box. This means you can convert danfo data structure
우리가 주의할 것은 Tensorflow를 기반으로 한다.
1) 브라우저
<script src="https://cdn.jsdelivr.net/npm/danfojs@0.1.2/dist/index.min.js"></script>
2) Node.js
npm install danfojs-node
이때 주의 할 점이 Node.js의 경우 같은 코드의 결과라도
referenceerror: dfd is not defined
이러한 오류가 날 수 있다.
원인은 tensorflow가 설치되지 않아서이다.
따라서 이와 관련한
npm install @tensorflow/tfjs-node
명령을 실행해주어야 한다.
그 후에도 정상적으로 실행은 되면서 Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
이런 출력을 볼 수도 있는데 가이드라인 차원에서 더 빨라질수도 있다는 일종의 경고 메세지일 뿐이다.
node.js
const dfd = require("danfojs-node");
var s = new dfd.Series([20,21,22,23]);
console.log(s);
browser
var s = new dfd.Series([20,21,22,23]);
console.log(s);
아래의 내용들은 browser 기준의 script 내용만 담을 예정이다.
var s = new dfd.Series([20,21,22,23]);
s.describe().print();
위 결과를 보면
이와같이 나타나면서 통계와 관련한 내용들을 얻어낼 수 있다.
<body>
<div id="s_table"></div>
<script>
var s = new dfd.Series([20,21,22,23]);
s.plot('s_table').table();
</script>
</body>
<body>
<div id="s_line"></div>
<script>
var s = new dfd.Series([20,21,22,23]);
s.plot('s_line').line();
</script>
</body>
1) 배열방식
var d1 = new dfd.DataFrame([
{'온도':20, '요일':'월', '판매량':40},
{'온도':24, '요일':'화', '판매량':42},
{'온도':21, '요일':'수', '판매량':44},
{'온도':10, '요일':'목', '판매량':48},
{'온도':5, '요일:':'금', '판매량':50}
])
2) 객체방식
var d2 = new dfd.DataFrame({
'온도' : [20,24,21,10,5],
'요일' : ['월','화','수','목','금'],
'판매량' : [40,42,44,48,50]
})
<body>
<div id="d1_table"></div>
<script>
dfd.read_csv('https://khw970421.github.io/covid/Project1/covidcity(changed).csv')
.then(function(data){
data.plot('d1_table').table();
})
</script>
</body>
위와같이 실행을 하면 해당 브라우저에 표를 출력할 수 있다. (github.io 서버에는 csv파일이 존재)
var d1 = new dfd.DataFrame([
{'온도':20, '요일':'월', '판매량':40},
{'온도':24, '요일':'화', '판매량':42},
{'온도':21, '요일':'수', '판매량':44},
{'온도':10, '요일':'목', '판매량':48},
{'온도':5, '요일:':'금', '판매량':50}
])
열 골라내기
d1.loc({columns:['온도','판매량']}).print();
행 골라내기
d1.loc({rows:[1,3]}).print();
위와같이 loc을 이용해서 필요한 부분을 가져올 수있다.
d1.query({"column":"온도","is":">","to":20}).print();
해당 코드를 통해 column에서 온도가 20도 보다 높은 row들을 print하는 역할을 수행한다.
이를 좀 더 변형 시키면
d1.query({"column":"온도","is":">","to":20}).loc({columns:['온도','판매량']}).print();
코드를 통해 column에서 온도가 20도 보다 높은 row들 중에서 columns가 온도와 판매량만을 가진 것들을 출력하는 역할을 수행한다.
var newRow = new dfd.DataFrame({'온도':[30,40],'요일':['토','일'],'판매량':[70,80]});
d1.append(newRow).print();
9.에 있는 d1에다가 해당 내용을 적용시키면 행이 2개 추가되는 것을 알 수 있다.
value.addColumn('column' : 'A','value':[ ]);
var newRow = new dfd.DataFrame({'온도':[30,40],'요일':['토','일'],'판매량':[70,80]});
var new_array = d1.append(newRow);
new_array.addColumn({'column':'rain','value':[true,false,true,false,true,true,true]});
new_array.print();
필요한 column을 추가시킨다.
d1.drop({axis:0,index:[0]});
d1.drop({axis:1,columns:['온도']});
주의할 점은 axis가 행 삭제때는 0이고 열 삭제때는 1이라는 것이다.