FUNDAMENTAL | 07-2. 이미지 데이터 행렬 변환, 구조화된 데이터

yeonk·2021년 9월 15일
0

aiffel-ai-bootcamp

목록 보기
17/38
post-thumbnail

210915



1. 데이터 행렬 변환


numpy에서의 데이터 표현

  • 소리

    • 1차원 array로 표현
    • CD음원파일의 경우, 44.1kHz의 샘플링 레이트로 -32767 ~ 32768의 정수 값을 가짐
  • 흑백 이미지

    • 이미지 사이즈의 세로X 가로형태의 행렬(2차원 ndarray)로 표현
    • 각 원소는 픽셀별로 명도(grayscale)를 0~255 의 숫자로 환산하여 표시
    • 0은 검정, 255는 흰색
  • 컬러 이미지

    • 3차원으로 표현
    • 이미지 사이즈의 세로 X 가로형태의 행렬에 Red, Green, Blue계열의 3 색으로 행렬을 3개 만듦
  • 자연어

    • 임베딩(Embedding)이라는 과정을 거쳐 ndarray로 표현
    • 토큰화 과정

A Visual Intro to NumPy and Data Representation






2. 이미지의 행렬 변환


픽셀

  • 이미지는 픽셀들로 구성

  • 각의 픽셀은 R, G, B 값 3개 요소의 튜플로 색상이 표시

    • 흰색(W) : (255,255,255)
    • 검정색(B) : (0, 0, 0)
    • 빨간색(R) : (255, 0, 0)
    • 파란색(B) : (0, 0, 255)
    • 녹색(G) : (0, 128, 0)
    • 노란색(Y) : (255, 255, 0)
    • 보라색(P) : (128, 0, 128)
    • 회색(Gray) : (128, 128, 128)
  • Color는 투명도를 포함하는 A를 포함해 RGBA 4개로 표시

  • Image의 좌표는 보통 왼쪽 위를 (0, 0)으로 표시하고, 오른쪽과 아래로 내려갈수록 좌표가 증가

출처: AIFFEL FUNDAMENTAL_ 7. Data 어떻게 표현하면 좋을까? 배열(array)과 표(table)






이미지 관련 파이썬 라이브러리

matplotlib, PIL:
이미지파일을 열고, 자르고, 복사하고, rgb 색상값을 가져오는 등 이미지파일과 관련된 몇 가지 작업을 수행






이미지 조작

  • 메서드
    • open : Image.open()
    • size : Image.size
    • filename : Image.filename
    • crop : Image.crop((x0, y0, xt, yt))
    • resize : Image.resize((w,h))
    • save : Image.save()
    • 흑백모드: Image.open().convert('L')
    • get color(): 각 색상이 RGB값으로 어떻게 표현되는지를 반환

Pillow Modes






# size
img.size

W, H = img.size
print((W, H))

# 파일 타입, 색상 정보 알아보기
print(img.format)
print(img.mode)

# 이미지 크롭
img.crop((30,30,100,100))

# 저장
img.crop((30,30,100,100)).save(새로운 파일명)

# 행렬 변환
import numpy as np
img_arr = np.array(img)
print(type(img))
print(type(img_arr))
print(img_arr.shape)
print(img_arr.ndim)


# 흑백모드
img_g = Image.open(img_path).convert('L')


# get color: 각 색상이 RGB값으로 어떻게 표현되는지를 반환

red = ImageColor.getcolor('RED','RGB')
reda = ImageColor.getcolor('red','RGBA')
yellow = ImageColor.getcolor('yellow','RGB')
print(red)
print(reda)
print(yellow)






3. 구조화 데이터


구조화된 데이터:
데이터 내부에 자체적인 서브 구조를 가지는 데이터

  • hash: KeyValue로 구성되어 있는 자료 구조로 두 개의 열만 갖지만 수많은 행을 가지는 구조체
    • 파이썬에서는 딕셔너리(dictionary)
    • 다른 언어에서는 매핑(mapping), 연관배열(associative array)






4.pandas


파이썬 라이브러리로 Series와 DataFrame이라는 자료 구조를 제공.
이 데이터 타입을 활용하면 구조화된 데이터를 더 쉽게 다룰 수 있다.

# 설치
pip install pandas 






pandas 특징

  • NumPy기반에서 개발되어 NumPy를 사용하는 어플리케이션에서 쉽게 사용 가능

  • 축의 이름에 따라 데이터를 정렬할 수 있는 자료 구조

  • 다양한 방식으로 인덱스(index)하여 데이터를 다룰 수 있는 기능

  • 통합된 시계열 기능과 시계열 데이터와 비시계열 데이터를 함께 다룰 수 있는 통합 자료 구조

  • 누락된 데이터 처리 기능

  • 데이터베이스처럼 데이터를 합치고 관계연산을 수행하는 기능






Series

일련의 객체를 담을 수 있는, 1차원 배열과 비슷한 자료 구조.
배열형태인 리스트, 튜플을 통해서 만들거나 NumPy 자료형으로도 만들 수 있다.
index와 value를 가짐

import pandas as pd
ser = pd.Series(['a','b','c',3])






Series의 인덱스(Index)

순서를 나타낸 숫자

  • 인덱스에 다른 값을 넣을 수 있다.

  • Series 객체를 만들때 인자로 넣어주거나 할당 연산자를 이용해서 인덱스의 값을 지정할 수 있다.

# 인덱스와 값 확인
ser.index
ser.values

# 인덱스 설정 
ser2 = pd.Series(['a', 'b', 'c', 3], index=['i','j','k','h'])

ser2.index = ['Jhon', 'Steve', 'Jack', 'Bob']

# 딕셔너리 활용
Country_PhoneNumber = {'Korea': 82, 'America': 1, 'Swiss': 41, 'Italy': 39, 'Japan': 81, 'China': 86, 'Rusia': 7}
ser3 = pd.Series(Country_PhoneNumber)


# 슬라이싱
ser3['Italy':]






Series의 Name

Series 객체와 Series 인덱스는 모두 name 속성이 있다.

ser3.name = 'Country_PhoneNumber'
ser3.index.name = 'Country_Name'






DataFrame

표(table)와 같은 자료 구조.
여러 개의 칼럼을 나타낼 수 있다.

  • Index와 Column Index 설정 가능
s.index=['one','two','three','four','five']
s.columns = ['a','b','c','d']






구조화된 데이터의 표현법 정리

출처: AIFFEL FUNDAMENTAL_ 7. Data 어떻게 표현하면 좋을까? 배열(array)과 표(table)






EDA(Exploratory Data Analysis, 데이터 탐색)

  • .head(): 데이터셋의 처음 5개 행 표시
    (정수 인자를 넣어서 출력할 행의 개수를 조정)

  • .tail(): 마지막 5개 행 표시
    (정수 인자를 넣어서 출력할 행의 개수를 조정)

  • .columns: 데이터셋에 존재하는 컬럼명을 확인

  • .info(): 각 컬럼별로 Null값과 자료형을 보여주는 메소드

  • .describe(): 컬럼별로 기본 통계데이터를 보여주는 메소드

    • 개수(Count), 평균(mean), 표준편차(std), 최솟값(min), 4분위수(25%, 50% 75%), 최댓값(max)를 보여 줌
  • .isnull(): missing 데이터 확인

  • .value_counts(): 각 범주(Case, Category)별 값의 개수 구하기

  • .value_counts().sum(): 컬럼별 통계수치의 합을 확인

  • .sum(): 컬럼 값의 총합

  • .corr(): 모든 컬럼이 다른 컬럼 사이에 가지는 상관관계 확인






pandas 통계 관련 메소드

count(): NA를 제외한 수를 반환

describe(): 요약통계를 계산

min(), max(): 최소, 최댓값을 계산

sum(): 합을 계산

mean(): 평균을 계산

median(): 중앙값을 계산

var(): 분산을 계산

std(): 표준편차를 계산

argmin(), argmax(): 최소, 최댓값을 가지고 있는 값을 반환

idxmin(), idxmax(): 최소, 최댓값을 가지고 있는 인덱스를 반환

cumsum(): 누적 합을 계산

pct_change(): 퍼센트 변화율을 계산

10 minutes to pandas

0개의 댓글