뮤트 개발일지

AIFFEL 아이펠 5일차 본문

AIFFEL

AIFFEL 아이펠 5일차

박뮤트 2021. 12. 31. 18:13

평균

표준편차

xi는 입력받은 숫자들, n은 입력받은 샘플의 개수, x(위에 바)는 평균

입력받은 숫자들을 저장할 리스트가 필요하다. 이 때, 파이썬은 동적배열로 몇 개의 원소가 들어가는지 미리 정하지 않아도 괜찮다.

 

list와 arrya의 차이점

- list와 달리 array는 import가 필요하다.

- list는 서로 다른 타입의 자료형이 허용되지만, array는 처음에 유형을 지정해서 생성하기 때문에 다른 타입의 element 추가는 허용되지 않는다.

 

리스트를 활용한 시그마 표현

total = 0.0
for i in range(len(X)):
    total = total + X[i]
mean = total / len(X)

print('sum of X: ', total)

중앙값

중앙값median: 주어진 숫자를 크기 순서대로 배치할 때 가장 중앙에 위치하는 숫자

def median(nums):  		        # nums : 리스트를 지정하는 매개변수
    nums.sort()					# sort()로 리스트를 순서대로 정렬
    size = len(nums)
    p = size // 2
    if size % 2 == 0:		    # 리스트의 개수가 짝수일때 
        pr = p                         # 4번째 값
        pl = p-1                       # 3번째 값
        mid= float((nums[pl]+nums[pr])/2)    
    else:							   # 리스트의 개수가 홀수일때
        mid = nums[p]
    return mid

print('X :', X)
median(X)						# 매개변수의 값으로 X를 사용함

표준편차와 평균

평균

def means(nums):
    total = 0.0
    for i in range(len(nums)):
        total = total + nums[i]
    return total / len(nums)

means(X)

표준편차

def means(nums):
    total = 0.0
    for i in range(len(nums)):
        total = total + nums[i]
    return total / len(nums)

means(X)

NumPy

1) ndarray

numpy.adarray도 모든 element의 타입이 동일해야 하는데, 모든 숫자를 문자열로 바꿀 수 있다. 숫자만 있던 ndarray에 문자열이 들어가면 모든 숫자를 문자열을 해석해서 array의 요건을 맞춘다.

 

2) 개념

size: 행렬 내 원소의 개수

shape: 행렬의 모양

ndim: 행렬의 축axis의 개수

reshape(): 행렬의 모양을 바꿈

 

3) type

numpy.array.dtype: ndarray '원소'의 데이터타입 반환

type(A): 행렬A의 자료형 반환

 

deprecate: error가 아닌 warning 문구로 경고를 하는 것. 기능을 못쓰는 것은 아니지만 관리를 하지 않아 오류가 날 확률이 높다는 뜻. 어떻게 코드를 수정해야 하는지 알려준다. 

 

np.eye(): 단위행렬

np.zeros(): 0행렬

np.ones(): 1행렬

broadcast: ndarray와 상수, 혹은 크기가 다른 ndarray끼리 산술연산이 가능한 기능

 

np.random.randint(): 정수형 난수 1개를 생성

np.random.choice(): 리스트에 주어진 값 중 하나를 랜덤하게 생성

np.random.permutation(): 무작위로 섞인 배열 생성

np.random.normal(): 어떤 분포를 따르는 변수를 임의로 표본추출함

np.random.uniform(): 균등분포를 따름

 

전치행렬

arr.T: 행과 열 맞바꾸기

np.transpose: 축을 기준으로 행렬의 행과 열 바꾸기

 

numpy 기본 계산 함수

sum(): 합

mean(): 평균

std(): 표준편차

median(): 중앙값


http://jalammar.github.io/visual-numpy/

 

A Visual Intro to NumPy and Data Representation

Discussions: Hacker News (366 points, 21 comments), Reddit r/MachineLearning (256 points, 18 comments) Translations: Chinese 1, Chinese 2, Japanese, Korean The NumPy package is the workhorse of data analysis, machine learning, and scientific computing in t

jalammar.github.io

소리 데이터를 numpy로 표현하기

1차원 array로 표현. CD음원파일의 경우, 44.1kHz의 샘플링 레이트로 -32767 ~ 32768의 정수 값을 가진다.

 

흑백 이미지 numpy로 표현하기

이미지 사이즈의 세로 * 가로 형태의 행렬(2차원 ndarray)로 나타내고, 각 원소는 픽셀별로 명도(grayscale)를 0 ~ 255의 숫자로 환상하여 표시한다. 0은 검정, 255는 흰색

 

컬러 이미지 Numpy로 표현하기

이미지 사이즈의 세로 * 가로 * 3 형태의 3차원 행렬. 3은 red, green, blue 계열의 3색을 의미

 

자연어 numpy로 표현하기

임베딩embedding이라는 과정을 거쳐 ndarray로 표현한다. 토큰화 과정: 예) 71,290개의 단어가 들어있는 데이터셋이 있을 때, 이를 단업려로 나누고 0 - 71,289로 넘버링함 이 토큰을 50차원의 word2vec embedding을 통해 [batch_size, sequence_length, embedding_size]의 ndarray로 표현할 수 있다.

 

픽셀과 이미지

- 이미지는 픽셀(수많은 점들)로 구성됨

- 각각의 픽셀은 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)

- 흑백: Gray 스케일로 나타냄. 0~255 범위의 숫자 1개의 튜플 값

- 컬러: 투명도를 표함하는 A(alpah)를 포함해 RGBA 4개로 표시하기도 함

- image 좌표는 왼쪽 위를 (0, 0)으로 표시, 오른쪽과 아래로 내려갈 수록 좌표 증가

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

- matplotibl

- PIL

: 이미지 파일 열기, 자르기, 복사하기, RGB 색상 값 가져오기 등 이미지 파일과 관련된 작업 수행. 이렇게 처리한 파일을 numpy를 이용해 행렬로 빠르게 연산해서 이미지를 빠르게 작업함

 

이미지 조작에 필요한 매소드

- 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().conver('L')

 

행렬로 이미지 변환하기

import numpy as np
img_arr = np.array(img)

- getcolor(): 각 색상이 RGB값으로 어떻게 표현되는지 반환


해시 hash: 어떤 데이터의 값을 찾을 때 인덱스가 아닌 키key를 사용해 데이터에 접근하는 데이터 구조. key와 value로 구성되어 있는 자료구조로 2개의 '열'만 갖지만 수많은 '행'을 가지는 구조체

 

구조화된 데이터: 데이터 내부에 자체적인 서브 구조를 가지는 데이터. 테이블table 형태로 전개됨


pandas

: 구조화된 데이터를 효과적으로 표현하기 위해 pandas는 Series와 DataFrame이라는 자료 구조를 제공한다.

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

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

- 다양하게 인덱싱하여 데이터를 다룰 수 있음

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

- 누락된 데이터 처리 기능

- 데이터베이스처럼 데이터를 합치고 관련 연산을 수행

(무슨 말인지 하나도 모르겠다..)

 

Series

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

Series에는 index와 value가 존재

Series 객체의 values를 호출하면 array 형태로 반환

ser.values

인덱스는 RangeIndex가 반환

ser.index

인덱스 설정: Series의 인자로 넣어주는 법

ser2 = pd.Series(['a', 'b', 'c', 3], index=['i','j','k','h'])
ser2

인덱스 설정: 할당 연산자

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

여기서 index를 조회하면 위의 RangeIndex가 아닌 Index 타입의 객체가 표시된다.

==> Series에서 인덱스는 기본적으로 정수 형태로 설정되고, 사용자가 원하면 값을 할당할 수 있다.

또한 파이썬 딕셔너리를 사용하면 index의 기본값으로 키가 들어간다.

 

Series의 Name 속성

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

Series 객체와 인덱스의 이름을 설정함

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

head(): 데이터 셋의 처음 5개 행을 보여줌. 인자로 보여줄 행의 갯수를 지정할 수 있다.

tail(): 마지막 5개 행을 보여줌

columns: 데이터셋에 있는 컬럼 명을 확인할 수 있다.

info(): 각 columns 별로 Null값과 데이터 타입을 알려준다.

describe(): 개수count, 평균mean, 표준편차std, 최솟값min, 4분위수(25%, 50%, 75%), 최댓값max를 보여준다.

isnull().sum(): missing 데이터를 isnull로 확인, sum으로 missing 데이터 개수의 총합을 구할 수 있다.

value_counts(): 각 범주case or category 별로 값이 몇 개 있는지 구할 수 있다.

value_counts().sum(): 칼럼별 통계 수치의 합을 구할 수 있다.

sum(): 해당 컬럼의 총합을 구할 수 있다.

data.sum(): DataFrame 전체의 각 컬럼별로 합을 구할 수 있다.

corr(): dara.corr()을 통해 모든 컬럼이 다른 컬럼 사이에 가지는 상관관계를 확인할 수 있다. 

drop(): 컬럼 삭제

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

describe(): 요약 통계 계산

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

sum(): 합을 계산

mean(): 평균 계산

median(): 중앙값 계산

var(): 분산 계산

std(): 표준편차 계산

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

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

cumsum(): 누적 합 계산

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

 

https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html

 

10 minutes to pandas — pandas 1.3.5 documentation

Note While standard Python / NumPy expressions for selecting and setting are intuitive and come in handy for interactive work, for production code, we recommend the optimized pandas data access methods, .at, .iat, .loc and .iloc.

pandas.pydata.org

'AIFFEL' 카테고리의 다른 글

AIFFEL 아이펠 6일차  (0) 2022.01.03
AIFFEL 아이펠 파이썬으로 코딩 시작하기  (0) 2022.01.03
AIFFEL 아이펠 4일차  (0) 2021.12.30
AIFFEL 아이펠 3일차  (0) 2021.12.29
AIFFEL 아이펠 2일차 배운 것 정리 및 느낀 점  (0) 2021.12.28