배열 ◼️같은 자료형인 데이터를 메모리에 물리적으로 연속 할당하여 인덱스로 데이터에 접근 ◼️ 중간에 새로운 데이터가 삽입되면 해당 자리에 있던 데이터가 뒤로 밀리면서 연쇄적으로 이동해야 함 ◼️ 데이터를 중간에 삽입하거나 메모리를 추가로 할당하기 어려움
리스트 ◼️ 데이터를 멀리 떨어진 메모리 주소에 각각 할당했더라도 다음요소가 저장된 메모리 주소를 가리켜 연결하는 방식 ◼️ 접근과 탐색이 비교적 오래 걸리지만 데이터 수정이 편리
배열의 차원
차원(Dimension): 관측하고자 하는 데이터의 속성의 수 또는 측정 항목의 수
차원의 종류 1. 스칼라(Scalar) ◼️ 0차원 배열 ◼️ 값을 표현하는 가장 기본 단위이며, 스칼라에는 하나의 실수(Real number)를 담을 수 있음 ◼️ E.g. 현재 서울의 기온 2. 벡터(Vector) ◼️ 1차원 배열 ◼️ 스칼라(값) 여러 개를 나열한 튜플(Tuple)을 떠올리면 됨 ◼️ E.g. 위도별 기온 3. 행렬(Matrix) ◼️ 2차원 배열 ◼️ 1차원 배열을 여러개 묶은 배열 ◼️ E.g. 위도, 경도별(지도 내 격자) 기온 4. 텐서(Tensor) ◼️ 3차원 이상의 배열 ◼️ 2차원 행렬의 집합 ◼️ 텐서는 행렬보다 넓은 개념이어서 1차원 배열이나 2차원 배열도 텐서라고 할 수 있음 ◼️ E.g. 위도, 경도별(지도 내 격자) 기온
랭크(Rank): 차원 수
모양(Shape): 배열의 차원과 크기 ◼️ E.g. 행이 3개이고 열이 4개인 2차원 배열 → 랭크: 2 / 모양: (3,4)
ndarray: 넘파이의 다차원 배열(N-dimensional array) ◼️ 자료형이 모두 같은 데이터를 담은 다차원 배열 ◼️ 정수 또는 실수(부동 소수점 수)를 저장 ◼️ 배열 데이터에도 순서가 있으므로 인덱싱과 슬라이싱이 가능
넘파이 배열의 인덱싱과 축
배열을 정수나 다른 배열, 논리값, 음이 아닌 정수의 튜플(Tuple)로 인덱싱할 수 있음
배열의 요소에 접근할 때 리스트이 인덱싱과 마찬가지로 대괄호 사용
인덱스는 파이썬의 튜플이나 리스트와 마찬가지로 0부터 시작
인덱스 증가하는 방향이 배열의 축 ◼️ E.g. 2차원 배열(행렬)의 인덱싱: 0번 축→행, 1번 축→열 ◼️ E.g. 3차원 배열(텐서)의 인덱싱: 0번 축→면(층), 1번 축→행, 2번 축→열
넘파이 배열의 슬라이싱
슬라이싱(Slicing): 배열에서 연속한 일부분을 잘라 선택하는 것
슬라이스(Slice): 선택된 배열 조각
튜플이나 리스트의 슬라이싱과 동일하게 인덱스와 콜론(:)을 사용함
배열이 2차원 이상일 시 인덱스를 주의해야 함(행인지 열인지)
Pandas
판다스 특징
데이터프레임 자료구조를 제공하여 데이터 분석을 돕는 파이썬의 핵심 패키지
핵심 객체는 시리즈와 데이터프레임
시리즈(Series)
인덱스와 값이 한 쌍을 이루는 1차원 자료구조 객체
리스트는 값만 있고 인덱스가 0부터 자동 생성되지만, 시리즈는 인덱스를 정할 수 있으므로 시리즈는 리스트보다 딕셔너리와 성격이 유사함
데이터프레임(Dataframe)
판다스의 기본 구조인 자료구조 객체(행 인덱스, 열 이름 or 인덱스, 값)
시리즈 여러 개를 묶어서 데이터프레임을 만들 수 있으므로 데이터프레임의 형태는 2차원 배열과 비슷함
각 시리즈는 데이터프레임의 열(Column)이 됨
모든 열은 같은 길이이며, 각 열은 서로 다른 자료형이어도 됨
넘파이와 판다스 정리
넘파이 특징 요약
다차원 배열 객체 ◼️객체 ndarray를 사용하여 다차원 배열을 생성하고 관리하는 기능이 넘파이의 핵심
정교한 브로드캐스팅 ◼️ 로드캐스팅이란 넘파이에서 모양(Shape)이 서로 다른 배열끼리 연산하는 방식임 ◼️ 넘파이에서 배열의 브로드캐스팅을 활용하여 코드를 간결하게 작성할 수 있음
C, C++, 포트란 코드를 통합 ◼️ 넘파이 내부의 복잡한 알고리즘이나 고성능이 필요한 부분은 C언어나 C++, 포트란(Fortran) 코드로 구현되어 있음 ◼️ 파이썬은 사용하기에 간편한 대신 실행이 비교적 느리다는 단점이 있는데 넘파이에서는 다른 프로그래밍 언어를 함께 사용하여 이러한 한계를 극복했음
수학적 알고리즘 제공 ◼️ 넘파이에서는 선형대수의 함수, 푸리에 변환, 난수 기능 등 수학의 다양한 알고리즘을 제공함 ◼️ 넘파이의 수학 알고리즘을 활용하여 머신러닝 모형을 만들 수 있음
판다스 특징 요약
대용량 데이터 처리 ◼️ 판다스를 활용하면 시리즈와 데이터프레임 자료구조로 대용량 데이터를 빠르게 처리하여 데이터 분석 성능을 높일 수 있음
시각적으로 알아보기 편리한 표 형태 ◼️ 데이터 구조가 표 형태이기 떄문에 사용자가 데이터를 알아보기에 편리함
데이터 분석도구 제공 ◼️ 판다스에서 제공하는 기능 중 데이터 분석에 자주 사용하는 기능은 결측치 처리, 관계 연산, 시계열임
판다스의 데이터프레임과 넘파이의 다차원 배열은 서로 변환할 수 있음
머신러닝/딥러닝 모형의 학습 과정
판다스로 데이터를 기본 분석
효율적인 학습을 위해 데이터프레임을 배열로 변환하여 연산
눈으로 데이터를 확인하기 쉽게 다시 데이터프레임으로 변환하여 결과 확인
Matplotlib
맷플롯립 특징
Python의 대표적인 데이터 시각화 라이브러리로, 다양한 차트와 그래프를 그릴 수 있음
주피터 노트북에서 실행할 시, 새 창에서 그래프 열지 않기 위해서는 코드 가장 위에 %matplotlib inline을 선언해야 함
주요 시각화 기법
기본차트
맷플롯립의 하위 패키지인 파이플롯(Pyplot)을 사용함
꺾은선 그래프(Line chart): 시간 데이터를 x축에 두고 연속형 변수의 추세를 살펴볼 때 사용함
다중 그래프(Multi graph): 축이 여러 개인 그래프
산점도(Scatter plot): 두 연속형 변수 값의 분포 또는 상관관계를 알 수 있음
히스토그램(Histogram): 연속형 변수의 구간별 분포 표현
상자그래프(Box plot) ◼️ 연속형 변수의 분포 살펴볼 수 있음 ◼️ 최댓값, 최솟값, 중앙값, 사분위수 표시함 ◼️ 특히 데이터가 비대칭적으로 분포할 때 극단값의 개수, 비대칭 여부 등을 확인 가능함 ◼️ 상자그래프 그리는 순서 1. 제1사분위수(Q1)와 제3사분위수(Q3)를 양 끝으로 하는 상자를 그림 - 제1사분위수는 정렬한 데이터를 수로 4등분했을 떄 하위 25%에 해당하는 값 - 제3사분위수는 정렬한 데이터를 수로 4등분했을 때 상위 25%에 해당하는 값 - 즉, 상자 그래프의 상자 범위 안에 전체 데이터의 50%가 있음 2. 상자 안에는 중앙값을 수평선으로 표시함 3. 상자의 길이, 즉 Q1에서 Q3까지의 범위를 사분범위(IQR, Inter-quartile Range)라고 하며 이 상자 길이의 1.5배 안에 있는 데이터를 기준으로 수염을 표시함 - 수염 위쪽 끝을 최댓값, 수염 아래쪽 끝을 최솟값이라고 함 4. 수염 바깥에 있는 데이터는 작은 원으로 표시하며, 이상치(Outliers)로 간주함
막대 그래프(Bar chart): 범주형 변수끼리 연속형 값을 비교할 수 있음
파이 차트(Pie chart): 범주형 변수끼리 연속형 값의 비율을 비교할 수 있음
워드클라우드(WordCloud)
데이터의 빈도를 단어(Word)의 구름(Cloud)로 표현하는 시각화 도구
소셜미디어의 게시물, 뉴스기사, 고객 리뷰와 같은 대량의 텍스트 데이터를 탐색하여 시각화 하는 데 많이 사용됨
영어 텍스트는 워드클라우드 라이브러리로 워드클라우드를 생성할 수 있지만, 한국어 텍스트는 한국어 형태소를 분석하는 패키지를 추가로 사용해야함 ◼️ 영어 분석 시 사용하는 패키지: openNLP, RKEA, Snowball ◼️ 한국어 분석 시 사용하는 패키지: KoNLPy
워드클라우드 생성하는 과정
텍스트 데이터를 사전 처리하여 영어의 the, and, of와 같은 일반적인 단어를 제거함
남은 단어들의 빈도수를 계산함
빈도수에 비례하는 크기로 단어를 표시하여 구름 모양으로 나타냄
워드클라우드의 마스크, 단어 크기와 글꼴, 색을 설정하여 시각화 효과를 높임
네트워크X(NetworkX)
파이썬으로 작성된 오픈소스 라이브러리이며, 복잡한 네트워크 구조를 다루는 데 특화되어 있음
사람들 사이의 관계, 데이터의 흐름, 개체 간 유사성이나 지역 간 거리처럼 개체와 그 개체 사이의 관계에 대한 데이터를 표현
네트워크 그래프는 항목의 쌍 관계를 노드와 선으로 구성하여 나타냄
노드(Node)는 각 개체를 의미하며 노드 A와 B 사이에 관계가 있을 때 선(Link, Line, Edge)으로 연결