본문 바로가기

데이터 기본

데이터 구조: 배열, 목록 및 테이블

출처: Unsplash

 

 데이터 구조는 컴퓨터 프로그램에서 데이터를 저장, 구성 및 액세스 할 때 데이터를 구성하는 방식을 의미한다. 데이터 분석 업무를 하다 보면, 다양한 데이터 구조를 사용하여 대규모 데이터 세트를 저장, 처리 및 분석하게 되며, 상황에 맞게 적절한 데이터 구조를 선택해야 한다. 그래야 최적화된 속도와 결과를 얻을 수 있다. 

 이번 글에서는 일반적으로 사용되는 세 가지 데이터 구조(배열, 목록 및 테이블)를 살펴보고 데이터 분석의 맥락에서 각각의 차이점과 예시에 대해서 알아보려 한다. 또한, 아직 다른 글에서 다루지 않은 R 과 Python의 코딩들도 예시로 보여주려 하니, 대략적인 감을 잡는 참조용으로만 보길 바란다. 각 언어별로 데이터 구조에 대한 용어가 약간 상이할 수 있으며, 코딩 방법도 다른데, 구체적인 내용은 각 언어별 카테고리에서 다시 다루기로 하겠다.

배열 (Array)

배열은 동일한 데이터 유형의 값들이 연속된 메모리 위치에 저장되어 있는 것이다. 배열의 각 요소(element)는 0부터 시작하는 인덱스를 통해 호출되거나 저장될 수 있다. 데이터 분석에서 배열을 사용하면 각 요소에 대한 빠른 액세스가 가능하며, 이로 인해 대용량 데이터 세트를 효율적으로 저장하고 처리할 수 있게 된다.

예시

  • 시간 경과에 따른 회사의 주가를 배열에 저장하고, 시계열 분석(Time Series)을 수행함.
  • 설문 조사에 참여한 개인의 직업인 범주형 데이터를 배열에 저장하고 통계 분석을 수행함.

 

R 예시 코드

#R로 배열 생성 예시
array1 <- c(1, 2, 3, 4, 5)
array2 <- c("a", "b", "c", "d")

# 배열의 각 요소 확인
array1[3] # returns 3
array2[2] # returns "b"

Python 예시 코드

#Python으로 배열 생성 예시
import numpy as np
array1 = np.array([1, 2, 3, 4, 5])
array2 = np.array(["a", "b", "c", "d"])

# 배열의 각 요소 확인
array1[2] # returns 3
array2[1] # returns "b"

 

리스트 (List)

리스트는 같거나 다른 데이터 유형의 데이터들이 연속 저장되어 있는 데이터 집합이다. 배열과 달리 서로 다른 유형의 데이터도 저장할 수 있다. 또 다른 차이점으로 리스트는 크기가 동적으로 증가하거나 축소될 수 있다. 데이터 분석에서 리스트를 사용하면, 각 요소에 대한 빠른 액세스가 가능해, 대규모 데이터 세트를 저장하고 처리하는 데 사용될 수 있으며 중첩된 리스트(nested list)와 같은 복잡한 데이터 구조도 저장할 수 있다.

예시

  • 시간에 따른 여러 도시의 온도를 리스트에 저장하고 시계열 분석(Time Series)을 수행함.
  • 각 지원의 정보를 개별 리스트로 저장하고 모든 직원이 있는 마스터 리스트를 만드는 중첩 리스트(nested list)를 구축하면 직원 정보를 효율적으로 관리함.

R 예시코드

#R로 리스트 생성 예시
list1 <- list(1, "a", 2, "b")
list2 <- list(c(1, 2, 3), c("a", "b", "c"))

# 리스트의 각 요소 확인
list1[[1]] # returns 1
list2[[2]] # returns c("a", "b", "c")

Python 예시코드

#Python으로 리스트 생성
list1 = [1, "a", 2, "b"]
list2 = [[1, 2, 3], ["a", "b", "c"]]

# 리스트의 각 요소 확인
list1[0] # returns 1
list2[1] # returns ["a", "b", "c"]

R 예시코드 - 중첩리스트 (Nested List)

# 중첩 리스트 생성
nested_list <- list(c(1, 2, 3), c("A", "B", "C"), c(TRUE, FALSE, TRUE))

# 중첩 리스트의 각 요소 확인
nested_list[[1]][2] # Output: 2
nested_list[[2]][3] # Output: "C"
nested_list[[3]][2] # Output: FALSE

Python 예시코드 - 중첩리스트 (Nested List)

# 중첩리스트 생성
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix)

# 중첩리스트의 각 요소 확인
print("Element at (0, 2):", matrix[0][2])

 

테이블 (Table)

테이블은 행과 열로 구성된 2차원 데이터 구조이다. 각 열은 데이터의 다른 속성 또는 기능을 나타내고 각 행은 다른 인스턴스(Instance) 또는 Observatoin을 나타낸다. 리스트와 마찬가지로 각 요소에 대한 빠른 액세스가 가능하며, 열과 행에 대한 작업이 가능해 대규모 데이터 세트를 다룰 때 용이하다. 데이터 프레임(Data Frame)이라고 부르기도 한다.

예시

  • 다양한 제품 범주의 판매 데이터를 테이블에 저장하여 분석을 수행함.

R 예시코드

#R로 테이블 생성 예시
table1 <- data.frame(
  Name = c("John", "Jane", "Jim"),
  Age = c(30, 29, 32),
  Occupation = c("Teacher", "Doctor", "Engineer")
)

# 테이블의 요소 확인
table1[2,] # returns the second row of the table
table1[,1] # returns the first

Python 예시코드

# Python으로 테이블 생성 예시
import pandas as pd

# 'Name', 'Age', 'City'열을 갖는 테이블 생성
table = pd.DataFrame({'Name': ['John', 'Jane', 'Jim', 'Joan'],
                      'Age': [32, 45, 28, 51],
                      'City': ['New York', 'London', 'Paris', 'Berlin']})

# 테이블 확인
print(table)