본문 바로가기

배우기/복습노트[R과 분석]

[복습] R(programming language) 의 자료구조(벡터, 데이터 프레임) + 복습후기(20231121)

728x90
반응형

R의 자료구조에는,

0. 스칼라

1. 벡터

2. 리스트

3. 행렬

4.배열

5. 데이터 프레임

 

이 있다. 오늘은 벡터와 데이터 프레임에 대하여 배웠다.

 

이와 비교하여 먼저 스칼라란, 하나의 상수로 자료의 구조를 선택할 필요가 없다. 자료의 구조를 그릇이라고 가정했을 때 하나의 상수는 하나의 그릇에 굳이 담을 필요가 없는 것으로 이해하면 되겠다.

 

1. 벡터

벡터는 1차원(나열형)이다. 1차원은 단방향으로 축이 진행되는 것이다.

여러 개의 데이터를 담는 것이 목적이며, 단 하나의 데이터타입만 정의가 가능하다.

Line 1 처럼 벡터는 c함수로 묶어서 선언하여야 하며, 단 하나의 데이터 타입으로만 정의가 가능하다.

Line 3처럼 4를 문자로 묶어서 전달하게 되면, 모든 숫자들이 문자가 되어 전체 문자로 출력이 된다.

 

다음은 중요한 벡터의 색인이다.

색인이란 자료구조에서 데이터를 선택하는 방식이다.

1차원 자료구조이기 때문에 v1[3] 이렇게 출력하면 [3]에 위치한 값이 추출된다.

 

참고로 2차원 자료구조는  v1[행위치, 컬럼위치]로, v1[3,4] 라고 하면 3번째 행의 4번째 열을 전달한다.

3차원 자료구조는 v1[행위치, 컬럼위치, 층위치]로 나타낸다.

그렇기 때문에 벡터구조에서는 대괄호 안에 콤마가 들어갈 수 없다.

 

 

Line 1 은 위치 색인으로 첫 번째 원소를 추출한다.

Line 2 은 벡터 색인이며, 첫 번째 원소와 세 번째원소를 추출한다.

Line 3 은 슬라이스 색인이라고 하며 연속적인 범위를 출력한다.

Line 4 은 조건 색인으로 3보다 큰 원소를 추출한다.

조건 색인에서 대괄호 없이 그냥 v1>3 으로만 쓰게되면 아래와 같이 True, False만 출력하게 된다.

Line 5 은 색인에 이름을 지정하는 작업이다.

그렇게 해서 Line 6처럼 색인 이름 c를 호출하면 c의 이름을 가진 데이터 3이 추출이 된다. 이 방법을 이름 색인이라고 한다.

여기서 True를 불러와서 전달하는 것이 Where절에서 조건을 전달하는 것과 같은 것이다.

 

슬라이스 색인은 이름색인으로 불러올 경우에는 불가하며, 날짜도 슬라이스 색인이 불가하다. 오로지 숫자만 슬라이스 색인이 가능하다.

 

이렇게 하는 것을 벡터 인덱싱이라고 한다.

 

아래와 같이 마이너스를 달면 어떻게 추출되는지 확인하여보자.

여기서 마이너스는 '제외' 라는 의미를 가지게 되어서 첫 번째 원소를 제외한 나머지 원소들이 추출된다.

그래서 Line 1은 2, 3, 4 가 출력이 되고

Line 2는 1에서 3까지를 제외하여 4만 출력하게 하며 이는 Line 3으로도 나타낼 수 있다.

그러나 Line 4 처럼 작성 하는 것은 R에서 알아듣지 못한다.

Line 5처럼 출력하게 되면 결과가 뒤집어져 출력하게 되는데 이를 reverse indexing이라고 한다. 재배치의 효과가 있다.

 

아까 위에서 식료품 컬럼을 가져온 것도, 한 열을 선택하여 가져온 것이므로 벡터 자료 구조라고 할 수 있다.

 

728x90

 

5. 데이터 프레임

다음은 데이터 프레임이다.

데이터 프레임은 2차원 자료구조로 행과 열의 자료로 구성된다.

DBMS의 Table과 다른 점은 key - value 구조라는 것이다(key = column).

위에서 식료품 컬럼을 가져올 때 card$식료품 으로 식료품 컬럼을 추출한 것이 key-value 인덱싱이라는 것이다.

 RDBMS(oracle)의 경우 행별로 자료를 찾는다. row는 서로 다른 데이터 타입이 들어가는데 column은 서로 같은 데이터 타입이 들어가므로 column 베이스로 저장한 자료를 검색하고 추출하는 데이터의 색인이 빠르다.

여기서 OLTP(Online Realtime Transaction Processing)성 업무로 특화된 DB는 RDBMS이며 개개인의 데이터를 조회하여야 하므로 속도가 느리다. 예를 들자면 늘 우리가 찾아보던 EMP 테이블에서 SCOTT의 모든 정보를 추출하려면 행을 읽어야 하기 때문이다. 이와 반대되는 개념이 데이터웨어하우스(Data Warehouse)이다. DW용 DB는 NoSQL인데, 비정형자료는 row 베이스로 저장하는 것이 어렵기 때문이다. 데이터웨어하우스로 저장된 자료는 key 색인이 용이하여 데이터를 저장하거나 선택하는 것이 빠르다. key 색인이 용이한 이유는 key - value 구조를 갖추었기 때문이다.

이게 머릿속으로는 이해했는데 손가락으로 잘 나오지 않는다. 주말에 날 잡고 정리해서 올려야겠다.

 

어쨌든, EMP 테이블을 읽어와서 key 하나를 전체 출력하여보겠다.

Line 2로 추출한 것이 key 베이스이므로 key 하나가 전체 출력된다. 즉 컬럼을 선택한 것이다. 그러나 Line 2처럼은 가급적 쓰지 말아야 한다. 너무 가독성이 떨어지는 방식이다. 위에서 배운 벡터와 표현이 같기 때문이다.

Line 3처럼 컬럼은 이렇게 추출하여야 한다.

Line 4처럼 행을 선택하면 첫 행이 추출되게 된다.

 

가장 좋은 컬럼 선택 방식은 emp$EMPNO 이다.

 

 

SCOTT과 FORD를 추출하여보자.

행 위치에서 SCOTT라인인 8과 FORD라인인 13을 넣고 모든 열을 추출하기 때문에 콤마 뒤는 비워뒀다.

 

 

이번엔 사번과 이름, 급여를 함께 추출하여 보자.

컬럼도 순서를 인덱싱하여 추출하였다.

 

 

다음 문제를 풀어보자.

급여가 3000 이상인 직원의 이름, 급여를 출력하여라

Line 1의 경우 SQL에서 WHERE절처럼 행을 선택하는 행위와 같고

Line 2는 SQL에서 SELECT처럼 열을 선택하는 행위와 같다.

 

 

10번 부서원의 이름, 입사일, 부서번호를 출력하여라.

 

 

 

복습후기

여기까지가 R의 자료구조.... 는 아니구나. 리스트, 행렬, 배열 등등 남았네

간신히 따라잡은 것 같다.

쉽게 정리하자면 나열형 자료를 가지는 것(sec(1,100))은 벡터이며, 

행과 열을 가지는 자료(emp.csv)는 프레임이라고 생각하면 되겠다.

선생님께 행렬과의 차이를 여쭤봤는데 행렬은 숫자로만 이루어져있다고 생각하면 된다고 하셨다.

내일 배우겠지.

728x90
반응형