241211 노드 (RESTful DB연동, 데이터 분석 : TensorFlow.js)

241211 에이콘 아카데미 수업에 기반하여 작성되었음을 알립니다.

 

데이터 분석

데이터 분석, 데이터 수집 및 가공이 중요하다.
지금은 사람이 데이터를 분석하기에는 데이터가 너무나도 많다. 컴퓨터의 힘을 빌릴 수 밖에 없다.
통계학과나 수학과 사람들이 유리한 측면도 있다.
딥러닝 관련한 라이브러리를 사용하면 접근성 측면에서도 쉽게 접근할 수 있다.
전공, 비전공, 문/이과 가릴 것 없이 모두 다 해야하는 업무

노드 실습 (RESTful DB O)

어제와 이어서

update.html

    <script>
        function fillinEditdata(){
            // http://localhost:3000/update.html?code=1&sang=장갑&su=999&dan=999 데이터가 넘어옴
            console.log(window.location.search); // code=1&sang=장갑&su=999&dan=999 ? 뒤에 있는 쿼리 문자열을 얻는 라이브러리 파라미터만 잘라옴
            const params = new URLSearchParams(window.location.search); // URLSearchParams : 쿼리 문자열을 객체로 변환해준다. 값을 추출할 수 있게 해준다.
            console.log(params, ' ', params.get('code')); // URLSearchParams ' ' '1'

            document.getElementById('code').value = params.get('code') || '';
            document.getElementById('sang').value = params.get('sang') || '';
            document.getElementById('su').value = params.get('su') || '';
            document.getElementById('dan').value = params.get('dan') || '';

        }
        document.addEventListener('DOMContentLoaded', fillinEditdata);
    </script>

수정할 데이터 넣기

        async function updateData(event) {
            event.preventDefault();

            const code = document.getElementById('code').value;
            const data = {
                sang:document.getElementById('sang').value,
                su:document.getElementById('su').value,
                dan:document.getElementById('dan').value
            };

            try {
                const response = await fetch(`/sangdata/${code}`, {
                    method:'PUT',
                    headers:{'Content-Type':'application/json'},
                    body:JSON.stringify(data)
                });

                const result = await response.json();

                if(response.ok) {
                    document.getElementById('output').textContent = `수정 성공: ${JSON.stringify(result, null, 2)}`;
                    alert('수정 완료');
                    window.location.href = '/select.html';
                } else {
                    document.getElementById('output').textContent = `수정 실패: ${JSON.stringify(result, null, 2)}`;
                }
            } catch (error) {
                console.error('수정 오류 : ', error);
            }
        }

수정 완료

수정 확인


데이터 분석

1. 회기
x축을 학생, y축을 점수로 두고 시험을 본 학생들의 점수를 점으로 찍어내어 표시할 수 있을 것이다.
점을 전부 찍어냈다면 데이터 분포를 확인할 수 있다. 1월부터 11월까지 월별로 데이터가 있다고 가정한다.
12월 시험을 아직 안봤지만 이전 데이터를 가지고 12월의 수치를 예측할 수 있다.
같은 방법으로 투자 비용과 판매 개수를 비교하는 데이터를 축적하여 미래를 예측할 수 있다.

2. 분류
기존 데이터를 가지고 서로 다른 집단을 두고, 임의의 새로운 고객이 들어왔을 때 어느 집단에 속할지를 분류할 수 있다.

y = wx + b 만 기억하고 있다면 끝이다! 
w : 기울기, b : 절편 직선을 그으때 사용하는 수식
1차 방정식만 이해하고 있다면 회기, 분류를 모두 할 수 있다.

y = 2x+0 이라고 가정, x값만 넣어주면 y값을 추출할 수 있다.
딥러닝을 통해서 알아내고자 하는 것 기울기와 절편

35, 70, 90, ..... 
이러한 숫자들의 나열(데이터)에서 의미와 문맥을 집어넣게되면 목적을 파악할 수 있다.
마찬가지로 어디에선가 데이터를 수집하고 그 데이터에 의미와 문맥을 집어넣게된다면 통계량을 구할 수 있다.
통계량 : 평균, 분산, ...

기술 통계와 추론통계
1. 기술통계
1) 평균
2) 중앙값
3) 최빈값
4) 분산 : 분산은 통계의 마법이다.
...
2. 추론통계 : 회기분석이나 분류를 하게하는 것이 추론 통계
모집단을 통해 평균을 구하기는 불가능에 가깝다. 모집단 내에서 표본집단을 뽑아 평균을 내야한다.
표본집단의 평균이 모집단의 평균일거야하고 추론하는 것이 추론 통계이다.
신뢰있는 표본을 뽑아야한다. 신뢰할 수 있는 적당량의 표본을 뽑아야한다.
95% 이상의 신뢰도를 기본으로 본다.

통계에서의 데이터들을 변수(확률)라고 이야기한다.
변동성 : 데이터의 퍼짐 정도, 변동성이 작으면 작을 수록 평균에 가까워진다. 변동성이 클수록 평균에서 멀어짐
변동성이 얼마일까 수치화, 평균이 만약에 0이라고 가정한다. 데이터가 1, -2, -3, 4 다 더하고 4로 나누면 0, 변동성을 구할 수 없다. -값을 +로 바꿔주어 변동성을 구한다. 데이터를 전부 제곱하여 4로 나누어지면 변동성을 구할 수 있다. 실제보다 더 큰 값이지만 변동성을 더 확연히 볼 수 있다. 그것이 싫다면 루트를 씌워주면된다.

회기나 분류에는 두개의 변수가 필요하다.
일반적으로 공부시간이 많으면 성적이 높을 것이다. 수입/지출, 운동량/근육량도 마찬가지
두개의 변수를 통해 변동성을 구함

두 데이터의 관계가 있어야한다. 상관관계를 분석하여 패턴을 구할 수 있다.

y와 b 값을 구하는 방법, 최소제곱법

예측값과 실제값을 비교하여 학습, 계속 반복해서 학습 차이가 실제값과 같아질때까지 최적의 추세선을 구한다.
x축 기울기, y축 비용 기울기를 늘려나가다가 어느 정도까지 비용이 줄어들고 한 지점에서 다시 비용이 늘어나게 된다. 코스트가 가장 적은 값을 찾아내야한다. 접선의 기울기가 0인 지점, 코스트가 최소가되는 지점이다.
경사하강법 이라고한다. 최적의 w값을 구하기 위한 방법

Optimizer

가장 최적은 Adam


인공신경망


and, or는 계산 가능한데 XOR 계산 못함


노드 실습 (TensorFlow)

학습을 시킬 때 컴퓨터에 개 사진을 천장을 넣어 학습시킨다.

만약에 학습이 너무 잘되어있다면 개의 생김새를 다리 네개와 꼬리하나가 달린 것이다라고 너무 최적화되어있다면

담요에 싸인 개, 유모차를 타고있는 개를 줬을 때 맞추지 못한다. 학습 데이터에 딱맞게 만들면 안된다. 어느정도는 틀리게 만들어줘야한다.

 

공분산 상관계수

공분산은 두 변수 관계를 나타내는 척도이긴하다 -까지 무한대이기 때문에 

상관관계를 이용하면 -1 ~ 1 사이로 압축되기 때문에  두 변수의 관계를 파악하기 쉽다.

0.3 ~ 0.7이면 좋다. 0.3 이상이면 써먹기 좋다. 0.7 이상은 잘 안나옴

 

내일 이어서!