반응형

04. NumPy 기본: 배열과 벡터 연산

4.6 난수

random 함수를 보강하여 다양한 종류의 확률분포로부터 효과적으로 표본값을 생성하는 데 주로 사용된다.

normal 을 사용하여 표준정규분포로 부터 4x4 크기의 표본을 생성할 수 있다.

np.random.normal(size = (4,4))

random모듈은 한 번에 하나의 값만 생성할 수 있다. 

numpy.random은 매우 큰 표본을 생성하는데 파이썬 내장 모듈보다 수십 배 이상 빠르다.

 

유사난수

난수 생성기의 시드값에 따라 정해진 난수를 알고리즘으로 생성하기 떄문이다.

np.random.seed

 

numpy.random에서 제공하는 데이터를 생성할 수 있는 함수들은 전역 난수 시드값을 이용한다.

numpy.random.RandomState를 이용해서 다른 난수 생성기로부터 격리된 난수 생성기를 만들 수 있다.

 

4.7 계단 오르내리기 예제

계단 오르내리기 예제는 배열 연산의 활용을 보여줄 수 있는 간단한 애플리케이션이다.

import random

import matplotlib.pyplot as plt

position = 0

walk = [pisition]

steps = 1000

for i in range(steps):

  step = 1 if random.randint(0,1else -1

  position += step

  walk.append(position)

 

plt.plot(walk[:100])

nsteps = 1000

draws = np.random.randint(0,2, size = nsteps)

steps = np.where(draws >0 , 1-1)

walk = steps.cumsum()

 

print(walk.min())

print(walk.max())

(np.abs(walk) >= 10).argmax()

argmax는 배열 전체를 모두 확인하기 때문에 효과적인 방법은 아니다.

True가 최댓값임을 이미 알고 있었다.

 

4.7.1 한 번에 시뮬레이션

시뮬레이션

np.random함수

nwalks = 5000

nsteps = 1000

draws = np.random.randint(0,2, size = (nwalks,nsteps))

steps = np.where(draws >0 , 1-1)

walk = steps.cumsum(1)

print(walk)

 

print(walk.min())

print(walk.max())

 

hist30 = (np.abs(walk) >= 30).any(1)

print(hist30)

 

print(hist30.sum())

 

crossing_times = (np.abs(walk) >= 30).argmax(1)

print(crossing_times.mean())

 

05. pandas 시작하기

고수준의 자료구조와 파이썬에서 빠르고 쉽게 사용할 수 있는 데이터 분석 도구

pandas는 다른 산술 계산 도구인 Numpy와 Scipy, 분석 라이브러리인 statsmodels와 scikit-learn, 시각화 도구인 matplotlib와 함께 사용하는 경우가 흔하다.

pandas는 for문을 사용하지 않고 데이터를 처리한다거나 배열기반의 함수를 제공하는 등 Numpy 의 배열 기반 계산 스타일을 많이 차용했다.

pandas는 표 형식의 데이터나 다양한 형태의 데이터를 다루는 데 초점을 맞춰 설계

Numpy는 단일 산술 배열 데이터를 다루는데 특화되어 있다.

import pandas as pd

from pandas import Series, DataFrame

 

5.1 pandas 자료구조 소개

Series, DataFrame

 

5.1.1 Series

Series는 일련의 객체를 담을 수 있는 1차원 배열 같은 자료구조다.

index 이라고 하는 배열의 데이터와 연관된 이름을 가지고 있다. 

obj = pd.Series([4,7,-5,3])

print(obj)

print(obj.values)

print(obj.index)

obj2 = pd.Series([4,7,-5,3], index=['d','b','a','c'])

print(obj2)

print(obj2.index)

print(obj2['a'])

obj2['d'] = 6

print(obj2[['c','a','d']])

obj2[obj2 >0 ]

obj2 *2

np.exp(obj2)

'b' in obj2

'e' in obj2

 

Series 객체의 색인에는 사전의 키값이 순서데로 들어간다.

색인을 직접 지정하고 싶다면 원하는 순서대로 색인을 직접 넘겨줄 수도 있다.

 

NaN not a number NA 값으로 취급된다.

'NA'를 누락된 데이터를 지칭하는데 사용하도록 하겠다

pandas 의 isnull 과 notnull함수는 누락된 데이터를 찾을 때 사용된다.

 

5.1.2 DataFrame

DataFrame은 표 같은 스프레드시트 형식의 자료구조이고 여러 개의 컬럼이 있는데 각 컬럼은 서로 다른 종류의 값을 담을 수 있다.

DataFrame은 Series 와 같은 방식으로 자동으로 대입되며 컬럼은 정렬되어 저장된다.

DataFrame 객체는 브라우저에서 좀 더 보기 편하도록 html표 형식으로 출력될 것이다.

head()

loc[] :로우는 위치나 

 

존재하지 않는 컬럼을 대입하면 새로운 컬럼을 생성한다.

columns

del 예약어를 사용해서 컬럼을 삭제 할 수 있다.

data = {

    'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],

    'year':[2000,2001,2002,2001,2002,2003],

    'pop':[1.5,1.7,3.6,2.4,2.9,3.2]

}

frame = pd.DataFrame(data)

print(frame)

print(frame.head())

pd.DataFrame(data, columns = ['year','state','pop'])

frame2 = pd.DataFrame(data, columns = ['year','state','pop','debt'],

                      index=['one','two','three','four','five','six'])

print(frame2)

print(frame2.columns)

print(frame2['state'])

print(frame2.year)

print(frame2.loc['three'])

frame2['debt'] = 16.5

print(frame2)

frame2['debt'] = np.arange(6.)

print(frame2)

val = pd.Series([-1.2,-1.5,-1.7], index=['two','four','five'])

frame2['debt'] = val

frame2

frame2['eastern'] = frame2.state =='Ohio'

frame2

del frame2['eastern']

frame2.columns

Numpy 배열과 유사한 문법으로 데이터를 전치(컬럼과 로우를 뒤집음)할 수 있다.

frame3.index.name =''

frame3.columns.name = 

frame3.values

5.1.3 색인 객체

pandas의 색인 객체는 표 형식의 데이터에서 각 로우와 컬럼에 대한 이름과 다른 메타데이터(축의 이름 등)를 저장하는 객체다.

.index 사용

 

색인 객체는 변경이 불가능하다.

 

pd.Index(np.arange(3))

 

5.2 핵심 기능

Series, DataFrame 에 저장된 데이터를 다루는 기본적인 방법을 설명

pandas 라이브러리

반응형

+ Recent posts