SyntaxHighlighter.all();

2.1 기초 통계량

   - 평균 : 총 합/총 개수

   - 중앙값 : 데이터 크기 순으로 정렬했을 때 가운데 위치하는 값

   - 최빈값 : 데이터에서 가장 많이 나온 값

   - 최댓값/최솟값 : 가장 큰 값 / 가장 작은 값

   - 범위 : 최댓값과 최솟값의 차이 (항상 0보다 큰값)

 

2.2 분산과 표준편차

데이터가 평균을 기준으로 어느 정도 흐트러져 있는지를 알려줌 (클 수록 데이터가 평균으로부터 멀리 퍼져있다)

   - 표준오차 : 데이터와 평균과의 차이 

                   (데이터의 흐트러짐을 더 잘 표현하기 위해서는 표준오차에 제곱을 사용, 절대값 사용도 있음)

 

   - 분산(∝^2) : 표준오차/ 데이터의 개수

   - 표준편차() : 표준오차에서 제곱해준걸 루트로 풀어준다. (분산값에서 루트 씌어줌)

                   분모가 n인지 n-1인지를 보고서 모집단(n)이지, 표본집단(n-1)인지 알수 있음

 

   1) 모집단과 표본집단

       - 모집단 : 집단 전체 데이터       ex) 한국 평균 연봉 - 한국 전체 회사원

       - 표본집단 : 전체 데이터에서 따로 추출된 데이터(부분집합)     ex) 한국 평균 연봉 - 100000명의 회사원

 

   2) 정규분포와 표준편차

정규분포곡선과 표준편차의 관계 첨부

       - 3시그마 규칙 : ±3∝ 밖에 데이터가 존재할 확률은 0.3%이다.

 

2.3 데이터 표준화

데이터를 비교하기 위해서는 기준이 같아야 한다.

데이터 표준화(z) = (각데이터 - 데이터의 평균)/표준편차()

 

2.4 공분산과 상관계수

두 개의 데이터 간의 관계를 알아볼 수 있음

1) 공분산 : 두 개의 데이터가 비례인지? 반비례인지? 알 수 있음

            식

              S(xy) = (x값의 표준오차)(y값의 표준오차)/n-1

              -> (x값의 표준오차)(y값의 표준오차)가 양수 : 비례

              -> (x값의 표준오차)(y값의 표준오차)가 음수 : 반비례

       

2) 상관계수 : 두 개의 데이터가 어느 정도의 관계인지

           식

              R(xy) = S(xy)/(S(x)*S(y))  (-1<=R(xy)<=1)

                     = (x, y의 공분산)/ ((x의 공분산)*(y의 공분산))

              -> 상관관계가 양수면(양의 상관관계) : 비례

              -> 상관관계가 음수면(음의 상관관계) : 반비례

 

2.5 행렬

- 1차원 배열 : 벡터

- 2차원 배열 : 행렬

1) 행렬의 종류

     - 정방행렬 : 행과 열의 개수가 같은 행렬

     - 영행렬 : 모든 요소가 0인 행렬

     - 대각행렬 : 대각성분을 제외한 나머지가 모든 0인 행렬

     - 단위행렬 : 대각행렬+ 대각성분이 모두 1인 행렬

     - 삼각행렬 : 대각선 아래 or 위 요소가 모두 0인 행렬

     - 전치행렬 :  행렬의 행과 열을 바꾼 행렬

 

2) 행렬의 법칙

     - 교환법칙 : AB ≠ BA

     - 결합법칙 : (AB)C=A(BC)

     - 분배법칙 : A(B+C)=AB+AC

 

* 심화 *

- 표준화된 데이터의 분산 식 = Z'*Z/(n-1)

 

3) 공분산 행렬과 상관행렬

 - 상관행렬 식 = Z'*Z/(n-1)      ->분산을 구하는 행렬과 같지만 분산은 Z가 벡터이고 상관행렬은 Z가 행렬이다 

4) 역행렬

- AB=BA = I (B=A^ -1)

5) 좌표변환 행렬

x축대칭:  1  0             y축대칭 :  -1    0              원점 대칭 :      -1    0               회전:    cos  -sin

             0 -1                           0    1                                   0    -1                         sin   cos (시계방향 양수)

 

2.6 미분과 편미분

미분 : 어떤 점에서의 기울기

편미분 : 어떤 함수가 여러 가지 변수를 가지고 있을 때 각 변수에 대해서 미분을 하는 방식

;

  • 이 블로그 내의 데이터분석 내용은 데이터 분석을 떠받치는 수학(지음: 손민규 출판: 위키북스) 내용을 요약및 참고한 것입니다. 
  • 제가 이해한 대로 정리한 내용이기에 본문의 내용과 상이할 수 있습니다. 

데이터 분석 : 데이터에서 새로운 의미와 가치를 지닌 정보를 생산하는 일

 

1.1 데이터 분석 프로세스

데이터 분석 프로세스

     1) 문제 정의 : 목적 - 데이터 분석을 통해 최종적으로 얻고 싶은 것이 무엇인지

                                 ex) 떡볶이 회사의 매출 예측

                       목표 - 목적을 구체화 or 수단

                                 ex) 떡볶이 가게의 입지조건으로 일 평균 손님 수 예측

     

      2) 데이터 수집 : 모든 관련 데이터에 대하여 정의하고 조사

                          (지금 당장 필요 없다고 해도 나중에 필요할 수도 있다)

         

데이터의 종류

      3) 데이터 분석 

          - 데이터 전처리 과정 : 결측값, 이상치, 중복값등을 처리해 품질이 좋은 데이터로 통합

                                         (결측값: 빈 데이터, 이상치: 비정상적인 값, 중복값: 중복된 값)

         - 기초 통계 분석 과정 : 데이터의 대푯값(평균, 표준편차), 데이터 간의 상관계수등을 계산하여 데이터 특성 파악

                                         (의미 없는 데이터 제거하여 필요한 변수 선택)

         - 모델 구축 및 평가 과정 : 다양한 데이터 분석 알고리즘 활용하여 모델 만들어냄.

                                             *모델 : 각 알고리즘이 데이터 분석을 진행하면서 생성하는 로직이나 수식

       4) 검증 및 고찰

          - 분석 보고서 : 데이터를 분석해 얻은 새로운 정보와 앞으로의 방향 등..

          - 모델 : 분석 모델을 실무에 적용해 좋은 효과를 기대함

 

 

 

1.2 데이터 분석 알고리즘

     1) 분석 알고리즘

             - 통계적 방법 : 어떤 규칙이 있는지 분석하고 그 규칙을 알고리즘화하여 활용

             - 인공지능 방법 : 대용량 데이터에서의 규칙을 알고리즘이 찾아내게 만드는 방법

                                    여기서의 알고리즘은 두 가지로 나뉜다.

                                         - 화이트 박스 알고리즘 : 사람이 해석할수 있는 알고리즘 (ex) 결정 트리)

                                         - 블랙 박스 알고리즘 : 사람이 해석할 수 없는 알고리즘 (ex) 신경망..) 

       2) 변수의 종류

             - 종속 변수 : 결과를 나타내는 변수(Y)

             - 독립 변수 : 종속변수의 원인에 해당하는 변수(X)

 

        3) 변수와 알고리즘

목적    종속변수 독립변수 주요알고리즘
예측 종속 변수 예측 O O 선형 회귀분석
압축 차원 축소 X O 주성분분석
분류 닮은 데이터의 그룹화 O/X O 마할라노비스-다구치시스템 (교사학습)

       - 예측 알고리즘 : 종속변수와 독립변수 사이의 인과관계를 이용해 모델을 만들어 종석변수의 값 예측

       - 압축 알고리즘 : 데이터의 차원을 축소하기 위해 사용되는 알고리즘, 독립변수들 간의 관계 분석하여 정보를 압축

       - 분류 알고리즘 : 분류와 군집화로 나뉨

                                분류 : 종속변수를 기준으로 독립변수의 특징을 학습시켜 분류를 하는 알고리즘

                                군집화(종속변수X) : 독립변수의 속성을 파악해 비슷한 속성을 가진 데이터끼리 묶는 알고리즘 

  • 이 블로그 내의 하둡 내용은 하둡 완벽 가이드(지음: 톰 화이트, 옮김: 장형석 외 3명 출판: 한빛미디어) 내용을 요약및 참고한 것입니다. 
  • 제가 이해한 대로 정리한 내용이기에 본문의 내용과 상이할 수 있습니다. 

1. 하둡이란?

- 하둡 에코시스템 : 분산 컴퓨팅과 대규모 데이터 처리를 위한 기반 시설

 

  전통적인 RDBMS 맵리듀스
데이터 크기 GB TB
접근 방식 대화형과 일괄처리방식 일괄 처리 방식
변경 여러 번 읽고 쓰기 한 번 쓰고 여러 번 읽기
트랜잭션 ACID 없음
구조 쓰기 기준 스키마 읽기 기준 스키마
무결성 높음 낮음
확장성 비선형 선형

<RDBMS와 맵리듀스>

2. 하둡과 RDBMS

    - 하둡과 RDBMS의 차이점 : 데이터셋 내부에서 처리되는 구조의 양

    - 하둡은 읽기시점 스키마!  : 처리시점에 데이터를 해석하도록 설계되어 있기 때문에 유연함

                                       (하둡은 단순히 파일만 복사하면 됨)

   

3. 하둡과 그리드컴퓨팅

    - 그리드컴퓨팅 : 연결된 서로 다른 기종의 컴퓨터들을 하나로 묶어 가상의 대용량 고성능 컴퓨터를 구성하여

                        고도의 연산 작업 or 대용량 처리를 수행하는 것

   - 그리드 컴퓨팅은 네트워크 대역폭때문에 느림 

          -> 하둡은 계산노드에 데이터를 합께 배치! (데이터가 로컬에 있기 때문에 빠름)

          -> 데이터 지역성 (맵리듀스는 매우 높은 네트워크 대역폭을 가진 단일 데이터 센터에 있는
                                  신
뢰성 높은 전용 하드웨어에서 수분, 수 시산 내에 job을 실행할 수 있도록 설계됨)

   - 하둡은 내부적인 데이터 흐름에 신경쓰지 않아도 되고

      분산 처리 프레임워크(맵리듀스..)는 실패한 태스크를 자동으로 감지하여

      장애가 없는 머신에 재배치하도록 구현되어 있기 때문에 개발자는 신경안써도됨

        -> 비공유 아키텍처(맵리듀스는 태스크 간의 상호 의존성이 없음)

1. 동적 메모리 할당의 개념

프로그램 실행 중에 필요한 만큼 메모리를 확보하여 사용하는 것을 메모리 할당이라고 한다.

또 사용이 끝나면 메모리를 반납하는 것을 메모리 해제라고 한다. 

 

이렇게 메모리를 할당받는 방법에는 크게 정적과 동적의 두 가지가 있다.

1 ) 정적 메모리 할당

정적 메모리 할당은 프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당받는 것을 말한다.

프로그램 시작전에 메모리 크기를 아는 경우 사용하며 프로그램 실행 중에 크기가 변경될 수 없다.

ex )

1
2
3
4
5
6
7
#include<stdio.h>
 
int main(){
 
    int a[10];
    
    }
cs

 

 

 

2 ) 동적 메모리 할당

동적 메모리 할당은 프로그램 실행 중에 메모리를 할당받는 것을 말한다.

필요한 만큼의 메모리를 할당받아 사용할 수 있으며 사용이 끝나면 메모리를 반납해야된다.

-> 매우 효율적

 

 

동적 메모리 할당과 해제를 하기위해 사용하는 함수는 크게 3개다.

malloc(int size) : 메모리 할당

free(void *ptr) : 메모리 할당 해제 

sizeof(var) : 변수난 타입의 크기 반환

 

ex)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<malloc.h>
 
int main(){
    int *ipt;
    int i;
    
    ipt = (int *)malloc(sizeof(int));
    *ipt = 123;
    
    printf("*ipt = %d, %u \n"*ipt, ipt);
    free(ipt);
    
    ipt = (int *)malloc(sizeof(int)*5);
    for(i=0;i<5;i++){
        ipt[i] = i+1;
        printf("ipt + %d = %u, %d\n", i, ipt+i, ipt[i]);
        }
        free(ipt);
    }
cs

 

 

 

 

'컴퓨터 과학 > 자료구조' 카테고리의 다른 글

[컴퓨터 과학 총론] 컴퓨터 과학 총론  (0) 2021.03.12
[자료구조] 5.포인터  (1) 2018.12.12
[자료구조] 4.구조체  (0) 2018.12.11
[자료구조] 3.배열  (0) 2018.12.11
[자료구조] 2. 순환  (1) 2018.11.29

1. 포인터의 개념


- 포인터 변수 : 다른 변수의 주소를 가지고 있는 변수

 

- 포인터의 연산자

    포인터의 연산자에는 번지연산자 ( & ), 간접연산자 ( * )가 있다.

     ( 번지연산자와 간접연산자는 단항 연산자이기 때문에 연산우선순위도 단항 연산자와 같다. ) 

      ex ) &충북대  = 123 (번지)

            *123 = 충북대

 

- 포인터 변수를 사용하는 이유

 컴퓨터는 모든 값을 번지로 변환하여 처리한다.

 예를 들어 a = 3 + b ; 를 처리할때

 컴퓨터는 *100 = 3 + *104 ; 이렇게 변환하여 처리하기 때문에

 명칭이 아닌 번지를 직접 사용하면 효율적인 프로그램을 만들 수 있다.

 

- 포인터 사용

다음은 간단하게 포인터 변수를 사용하여 출력하는 소스이다. 

1
2
3
4
5
6
7
8
#include<stdio.h>
 
int main(){
    int a = 100, b = 200;
    int *p;
    p = &a;
    printf("*p = %d \n"*p);
}
cs


 

2. 배열과 포인터

배열의 이름이 배열의 시작 부분을 가리키는 포인터이다.

 

3. 구조와 포인터

구조체의 멤버에 접근하는 표기법은 "->"이다.

 

4. 포인터의 포인터

포인터도 변수이기 때문에 포인터의 포인터 선언도 가능하다.

1
2
3
4
5
6
7
8
9
#include<stdio.h>
 
int main(){
    int a;
    int *p;
    int *pp;
    p = &a;
    pp = &p;
    }
cs

 

'컴퓨터 과학 > 자료구조' 카테고리의 다른 글

[컴퓨터 과학 총론] 컴퓨터 과학 총론  (0) 2021.03.12
[자료구조] 6. 동적 메모리 할당  (3) 2018.12.12
[자료구조] 4.구조체  (0) 2018.12.11
[자료구조] 3.배열  (0) 2018.12.11
[자료구조] 2. 순환  (1) 2018.11.29

1. 구조체의 개념

구조체 : 타입이 다른 데이터를 묶는 방법

( 배열은 타입이 같고 구조체는 타입이 다르다 )



2. 구조체의 대입과 비교

아래 소스와 같이 C언어는 구조체 변수를 다른 구조체 변수로 대입 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
 
typedef struct person{
    char name[100];
    int age;
}person;
 
int main(){
    persion a, b;
    b = a;
}
 
cs


하지만 구조체 변수끼리 비교하는 것은 불가능하여 비교하려면 직접 함수를 만들어 사용해야 된다.

'컴퓨터 과학 > 자료구조' 카테고리의 다른 글

[자료구조] 6. 동적 메모리 할당  (3) 2018.12.12
[자료구조] 5.포인터  (1) 2018.12.12
[자료구조] 3.배열  (0) 2018.12.11
[자료구조] 2. 순환  (1) 2018.11.29
[자료구조] 1.자료구조의 개념  (1) 2018.11.29

1. 배열의 개념


배열 : 같은 자료형을 가진 연속된 메모리 공간




2. 배열의 응용 - 다항식


다항식을 배열로 표현하는 방법에는 두 가지 방법이 있다.


1 ) 모든 계수를 순서대로 배열에 저장하는 방법

   ex) 5X^2 + 4X + 1 

5

 1

 -> 덧셈 방법 (두 번째 방법보다는 간단)

#include
#define MAX(a,b) ((a>b)?a:b)
#define MAX_DEGREE 100
typedef struct{
   int degree;    //차수 
   int coef[MAX_DEGREE]; //계수 
}polynomial;
polynomial poly_add(polynomial A, polynomial B){
 
 polynomial C;
 int A_index=0, B_index=0, C_index=0;
 int A_degree=A.degree;
 int B_degree=B.degree;
 C.degree = MAX(A.degree, B.degree);
 
 while(A_index<=A.degree && B_index <=B.degree){
  
  if(A_degree > B_degree){
   C.coef[C_index++] = A.coef[A_index++];
      A_degree--;
      
     } else if(A_degree == B_degree){
      C.coef[C_index++]=A.coef[A_index++]+B.coef[B_index++];
      A_degree--;
      B_degree--;
      
     }else{
      C.coef[C_index++] = B.coef[B_index++];
      B_degree--;
    }
 }
 return C;
 
}
int main(){
 polynomial a = { 4, {1,2,3,4,5}};
 polynomial b = { 3, {1,2,3,4}};
 
 polynomial c = poly_add(a,b);
 
 printf("%d %d %d %d %d",c.coef[0], c.coef[1], c.coef[2], c.coef[3], c.coef[4]);
 
 }
 





2) 0이 아닌 계수들을 (계수, 차수)의 형식으로 구조체 배열에 저장하는 방법

  ex) 5X^3 + 4X + 1 

5

3



다항식에 따라서 첫 번째 방법이 공간을 많이 차지할 수도 있고 두 번째 방법이 공간을 많이 차지할 수도 있다.





3. 배열의 응용 - 희소행렬


희소 행렬이란 행렬의 값이 대부분 0인 경우를 말한다. 

이러한 행렬을 배열로 표현하는 방법에는 두 가지가 있다.


1) 2차원 배열을 사용하여 모든 항을 표현하는 방법

   ex)  A = 1  2  0  

               0  0  6

               7  0  0

1

2

 0 

 0

0

6

 7

0

0

 -> 덧셈 방법 (두 번째 방법보다는 간단)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
#define ROWS 3
#define COLS 3
 
void matrix_add(int A[ROWS][COLS], int B[ROWS][COLS], int C[ROWS][COLS]){
    int r,c;
    for(r=0;r<ROWS;r++){
        for(c=0;c<COLS;c++){
            C[r][c] = A[r][c] + B[r][c];
        }
    }
}
 
int main(){
    int array1[ROWS][COLS] = {{1,2,0},{0,0,6},{7,0,0}};
    int array2[ROWS][COLS] = {{0,2,1},{6,0,0},{0,0,7}};
    int array3[ROWS][COLS];
    matrix_add(array1, array2, array3);
    
    printf("%d  %d  %d\n", array3[0][0], array3[0][1], array3[0][2]);
    printf("%d  %d  %d\n", array3[1][0], array3[1][1], array3[1][2]);
    printf("%d  %d  %d\n", array3[2][0], array3[2][1], array3[2][2]);
    
}
cs





2) 항이 0이 아닌 요소들만을 (행, 열, 값)으로 표현하는 방법

   ex)  A = 1  2  0  

               0  0  6

               7  0  0

0

0

 1 

0

1

 2 

2

 3 

 6 

3

 0 

7


'컴퓨터 과학 > 자료구조' 카테고리의 다른 글

[자료구조] 6. 동적 메모리 할당  (3) 2018.12.12
[자료구조] 5.포인터  (1) 2018.12.12
[자료구조] 4.구조체  (0) 2018.12.11
[자료구조] 2. 순환  (1) 2018.11.29
[자료구조] 1.자료구조의 개념  (1) 2018.11.29

1. 순환의 개념


순환이란 어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다.

 ex) 팩토리얼 함수, 피보나치 함수, 이항 계수 계산, 각종 이진트리, 이진탐색, 하노이탑 등.. 


다음은 간단한 팩토리얼 예제다.

int factorial(int n){
	printf("factorial(%d)\n",n);
	if(n<2) 
		return(1);
	else 
		return (n*factorial(n-1));
}


2. 순환과 반복 

순환 : 자기 자신을 다시 호출하여 작업을 수행하는 방식

반복 : 반복시키는 문장을 작성하는 것


순환의 대표적인 예로는 하노이탑이 있다.

다음은 하노이탑 프로그램이다.

void hanoi(int n, char from, char tmp, char to){
    if (n == 1) printf("원판 1을 %c에서 %c으로 옮긴다.\n", from, to);
    else{
        hanoi(n-1, from, to, tmp);  
        printf("원판 %d을 %c에서 %c으로 옮긴다.\n",n, from, to);
        hanoi(n-1, tmp, from, to);  
    }
}

int main(){
    hanoi(4, 'A', 'B', 'C');
}


'컴퓨터 과학 > 자료구조' 카테고리의 다른 글

[자료구조] 6. 동적 메모리 할당  (3) 2018.12.12
[자료구조] 5.포인터  (1) 2018.12.12
[자료구조] 4.구조체  (0) 2018.12.11
[자료구조] 3.배열  (0) 2018.12.11
[자료구조] 1.자료구조의 개념  (1) 2018.11.29

+ Recent posts