728x90

데이터 처리 도구

 이전 포스팅에서 소개한 Numpy 와 Python 에서의 관련 내용을 살펴보자.

 

[Lang] 프로그래밍 언어란?

프로그래밍 언어(Programming Langauge) 란?: 컴퓨터(기계)에게 명령하거나 의사소통을 할 수 있게 해주는 언어이자 도구  프로그래밍 언어는 다음과 같이 구분되며 보통 컴파일러(Compiler)나 인터프리

devcrl.tistory.com

 

 Python 과 관련된 설명을 참고하면 풍부한 라이브러리와 데이터 분석, AI에 강점이 있다고 되어있다.

 Numpy는 Python의 패키지이다. 복잡한 연산의 효율적인 처리를 위해 사용한다.

 


 

리스트 (List)

 Numpy 를 들여다보기 전에 Python 에서 중요하게 생각해야할 개념은 바로 배열(Array) 자료 구조이다.

 리스트(List)는 배열(Array) 자료 구조의 특징을 갖는 컬렉션(Collection) 자료형의 일종이다.

  • 정의 : 비슷한 성질을 가진 요소(item)들의 묶음(Container)
  • 주요 특징
    • 순서 (Ordered) : item 들은 추가된 순서를 유지
    • 가변적 (Mutatble) : 생성 후에도 요소를 추가, 삭제, 수정 가능
    • 다양한 데이터 타입 (Heterogeneous) : 서로 다른 타입의 데이터 저장 가능
    • 중복 허용 : 동일한 값을 여러 번 저장 가능
    • 인덱싱 (Indexing) & 슬라이싱 (Slicing) : 특정 item에 접근하거나 리스트의 부분 추출 가능
    • 리스트 컴프리헨션 (Comprehension) : 간결하게 리스트 생성 가능
    • 다양한 메소드 제공 : append(), remove(), sort(), reverse() 등 다양한 메소드 제공

 

 이외에도 튜플(Tuple) , 딕셔너리(Dictionary), 세트(Set) 와 같은 자료형이 존재하지만 각 타입에 대한 자세한 설명은 생략하고 어떤 상황에 주로 활용되는지 살펴보자.

 

자료형 순서 유지 가변성 중복 허용 키-값 쌍 주요 사용
리스트 (List) O 가변적 O X 순서가 중요, 데이터 수정이 빈번할 때
튜플 (Tuple) O 불변적 O X 데이터가 안정적으로 유지되어야 할 때
딕셔너리 (Dictionary) X
O (Python 3.7 >)
가변적 키 중복 X O 키를 통한 빠른 값 인덱싱에 사용
세트 (Set) X 가변적 X X 중복을 제거하거나 집합 연산이 필요할 때

 

Python 튜토리얼을 마치고 오셨다면 이해하기 용이할 것입니다.

 


 

자주 사용되는 List 의 주요 기능

 Numpy 를 하기 전에 알아야할 Python List 구조에서 자주 사용되는 기능을 알고 가는게 중요합니다.

 

 

1. 리스트 생성과 초기화

: 리스트는 대괄호 [] 를 사용하여 생성하며, 다양한 방법으로 초기화 가능

# 빈 리스트 생성
empty_list = []

# 초기 값이 있는 리스트 생성
my_list = [1, 2, 3, 4, 5]

# 리스트 컴프리헨션을 사용한 생성
squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, ... , 81] 제곱 수의 리스트

 

 

2. 요소 수정

: 리스트는 가변적(mutable)이므로 요소의 추가/삭제, 수정 가능

 

요소 추가 메소드 : append(), insert(), extend()

my_list = [1, 2, 3]
my_list.append(4)  # [1, 2, 3, 4]
my_list.insert(1, 99)  # [1, 99, 2, 3, 4]
my_list.extend([5, 6])  # [1, 99, 2, 3, 4, 5, 6]

 

요소 삭제 메소드 : remove(), pop(), del

my_list = [1, 2, 3, 4, 5]
my_list.remove(3)  # [1, 2, 4, 5]
my_list.pop(1)  # [1, 4, 5]
del my_list[0]  # [4, 5]

 

 

3. 인덱싱과 슬라이싱

: 리스트는 인덱스를 통해 특정 요소에 접근하거나 부분 리스트를 추출 가능

 

인덱싱 :

my_list = [10, 20, 30, 40, 50]
print(my_list[0])  # 10 (첫 번째 요소)
print(my_list[-1])  # 50 (마지막 요소)

 

슬라이싱 : 

my_list = [10, 20, 30, 40, 50]
print(my_list[1:4])  # [20, 30, 40] (인덱스 1부터 3까지)
print(my_list[:3])  # [10, 20, 30] (처음부터 인덱스 2까지)
print(my_list[2:])  # [30, 40, 50] (인덱스 2부터 끝까지)

 

 

4. 리스트 연산

: 리스트는 +, * 와 같은 연산자를 활용하여 결합하거나 반복 가능

list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2  # [1, 2, 3, 4, 5, 6] (리스트 결합)
repeated = list1 * 2  # [1, 2, 3, 1, 2, 3] (리스트 반복)

 

 

5. 리스트 메소드

: 리스트는 다양한 메소드를 제공하여 데이터를 쉽게 처리 가능

 

주요 메소드 : sort(), reverse(), index(), count(), len(), in

my_list = [3, 1, 4, 1, 5, 9]
my_list.sort()  # [1, 1, 3, 4, 5, 9]
my_list.reverse()  # [9, 5, 4, 3, 1, 1]
print(my_list.index(4))  # 2 (값 4의 인덱스)
print(my_list.count(1))  # 2 (값 1의 개수)
print(len(my_list))  # 5 (리스트의 길이)
print(3 in my_list)  # True (요소 3이 리스트에 있는지 확인)

 

 

6. 리스트 순회

: 리스트는 반복문을 사용해서 모든 요소의 순회 가능

my_list = [1, 2, 3, 4, 5]
for item in my_list:
    print(item)
# 출력: 1 2 3 4 5

 

 

7. *** 중첩 리스트 (Nested List) ***

: 리스트는 요소로 리스트를 포함 가능, 다차원 배열의 구조를 만들 수 있음

 

Numpy 사용과 가장 밀접한 특징

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(nested_list[1][2])  # 6 (두 번째 리스트의 세 번째 요소)

 

 

8. 리스트의 복사

: 리스트를 복사할 때에는 얕은 복사(Shallow copy)깊은 복사(Deep copy)를 구분해야 함

 

얕은 복사 :

list1 = [1, 2, 3]
list2 = list1  # 얕은 복사 (동일한 객체 참조)
list2[0] = 99
print(list1)  # [99, 2, 3] (list1도 변경됨)

 list2 라는 이름으로 list1을 복사하여 수정했지만, 원본까지 수정되는 모습이다.

 

깊은 복사 : 

import copy
list1 = [1, 2, 3]
list2 = copy.deepcopy(list1)  # 깊은 복사 (새로운 객체 생성)
list2[0] = 99
print(list1)  # [1, 2, 3] (list1은 변경되지 않음)

 복사 관련 라이브러리 copy 모듈 import(가져오기)

 

 

 이렇게 8가지의 주요 특징을 알아보았다.

 Numpy는 Python의 List와 유사한 배열을 제공하지만, List보다 훨씬 빠르고 효율적이다.

 소개한 주요 특징들이 Numpy의 배열 연산과 유사한 개념으로 확장된다.

 


 

 오늘은 Numpy 에 대해 알아보기 전 Python의 List 자료형에 대해 훑어보았습니다.

 소개해드린 특징들은 Numpy 를 익히기 전 알아야 할 핵심 개념들입니다.

 다음으로는 Numpy 에 대해 다뤄보도록 하겠습니다!

728x90

'분야 > AI' 카테고리의 다른 글

[AI-2] 데이터 처리  (1) 2025.02.20
[AI-1] AI 를 학습하기 앞서  (7) 2025.01.22

+ Recent posts