본문 바로가기

파이썬 기초(2) - 데이터 분석 라이브러리 본문

Languages

파이썬 기초(2) - 데이터 분석 라이브러리

ITst 2025. 3. 20. 10:23

Numpy    NUMerical PYthon  넘파이

넘파이 특징

  • C언어로 구현된 파이썬 라이브러리로 숫자 데이터를 포함한 벡터와 행렬 연산에 유용
  • 핵심 객체는 배열

배열

  • 리스트와 비슷하게 데이터를 모아 저장하는 자료구조
  • 리스트보다 처리 속도가 빠르며 메모리를 훨씬 적게 사용함
  • 배열과 리스트의 차이
    • 배열
      ◼️  같은 자료형인 데이터를 메모리에 물리적으로 연속 할당하여 인덱스로 데이터에 접근
      ◼️  중간에 새로운 데이터가 삽입되면 해당 자리에 있던 데이터가 뒤로 밀리면서 연쇄적으로 이동해야 함
      ◼️  데이터를 중간에 삽입하거나 메모리를 추가로 할당하기 어려움
    • 리스트
      ◼️  데이터를 멀리 떨어진 메모리 주소에 각각 할당했더라도 다음요소가 저장된 메모리 주소를 가리켜 연결하는 방식
      ◼️  접근과 탐색이 비교적 오래 걸리지만 데이터 수정이 편리
  • 배열의 차원
    • 차원(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
    • 워드클라우드 생성하는 과정
      1. 텍스트 데이터를 사전 처리하여 영어의 the, and, of와 같은 일반적인 단어를 제거함
      2. 남은 단어들의 빈도수를 계산함
      3. 빈도수에 비례하는 크기로 단어를 표시하여 구름 모양으로 나타냄
      4. 워드클라우드의 마스크, 단어 크기와 글꼴, 색을 설정하여 시각화 효과를 높임
  • 네트워크X(NetworkX)
    • 파이썬으로 작성된 오픈소스 라이브러리이며, 복잡한 네트워크 구조를 다루는 데 특화되어 있음
    • 사람들 사이의 관계, 데이터의 흐름, 개체 간 유사성이나 지역 간 거리처럼 개체와 그 개체 사이의 관계에 대한 데이터를 표현
    • 네트워크 그래프는 항목의 쌍 관계를 노드와 선으로 구성하여 나타냄
    • 노드(Node)는 각 개체를 의미하며 노드 A와 B 사이에 관계가 있을 때 선(Link, Line, Edge)으로 연결
    • 소셜 네트워크 분석, 생물 정보학 및 그래프 이론 분야 등 다양한 분야에 활용됨


Seaborn

시본 특징

  • Matplotlib 기반으로 만들어진 고급 데이터 시각화 라이브러리
  •  Pandas 데이터프레임과 잘 호환됨
    • `df.plot()`과 유사한 방식으로 사용 가능
  • 통계적 데이터 시각화에 강점
    • 히트맵, KDE 플롯, 박스 플롯 등 제공
  • 기본적인 스타일링이 적용되어 Matplotlib보다 더 보기 좋은 그래프 생성 가능

주요 시각화 기법

  • Categorical plot: boxplot, violinplot
  • Distribution plot: histogram, kdeplot
  • Correlation plot: heatmap


Tensorflow

텐서플로 특징

  • Google에서 개발한 딥러닝 프레임워크
  • 텐서(tensor) 연산을 기반으로 하며, 딥러닝 모델 학습 및 배포 가능
  • CPU, GPU, TPU 등 다양한 환경에서 실행 가능
  • 자동 미분(Automatic Differentiation) 지원
  • Keras API를 포함하고 있어 쉽게 딥러닝 모델을 구축할 수 있음
  •  


Scikit-Learn

사이킷런 특징

  • 머신러닝 알고리즘을 간편하게 사용할 수 있는 라이브러리
  • 지도학습, 비지도학습, 모델 평가 및 전처리 기능 포함
  • 회귀, 분류, 군집화, 차원 축소 등의 다양한 알고리즘 제공
  • Pandas, NumPy 등과 잘 연동됨


XGBoost   
eXtreme Gradient Boosting

엑스지부스트 특징

  • Gradient Boosting 알고리즘을 최적화한 라이브러리
  • 속도가 빠르고 성능이 뛰어나 Kaggle 대회에서 많이 사용됨
  • 결측치 처리 및 특성 중요도 평가 기능 제공
  • Scikit-Learn과 비슷한 방식으로 사용 가능

'Languages' 카테고리의 다른 글

파이썬 기초(1) - 파이썬 기본 문법  (0) 2025.03.18
Comments