공부/AI School 인공지능 여름캠프

파이썬 데이터 분석을 위한 함수 정리(Numpy, Pandas, Matplotlib) - [AI School]

1Seok 2021. 5. 3. 17:22

파이썬 데이터 다루기 함수 정리
Numpy
Matplotlib
Pandas
Seaborn


Numpy

수학식을 다루기 위한 기본식

  • np.zeros(), np.ones(), np.arange()
  • Array연산은 기본적으로 동일한 matrix끼리 연산이 진행된다.
  • 연산의 크기가 달라도 Broadcast란 기능으로 크기가 다른 array도 연산이 가능하다
  • Array인덱싱이 좀 많이 쓰일것 같다. 1차원은 간단하기 때문에 2차원일때 다루기로 하겠다.
    • x행의 모든 요소를꺼낼땐 data[ x - 1 , : ]
    • y열의 모든 요소를꺼낼땐 data[ : , y - 1 ]
  • 통계함수 행렬연산들 다루기
import numpy as np
import random as rm
data1 = np.array([1,2,3,4,5])
data2 = np.array([2,4,6,8,10])

np.zeros((3,5)) # 3행 5열 0값 생성
np.ones((3,5)) # 3행 5열 1값 생성
np.arange(3,10,) # 3부터 10까지 1차원 array 생성 
np.arange(3,10,3)# 3차이 나게 생성도 가능

data1 + data2 #Array연산

data4 = np.array([[1,2,3],[4,5,6]]) #Array Broadcast 연산
data3 = np.array([3,4,5])
data4 + data3 # 3,4,5를 1행과 2행에 더함

data5 = np.array([[1,2,3],[4,5,6],[7,8,9]])
data5[2,2] # 2차원 데이터의 인덱스 표현 [행,열] 로해야 한다.

data5[1,:] # 2행의 모든 요소를 나타낼때
data5[:,1] # 2열의 모든 요소를 나타낼때

data6 = np.random.randn(5,5) # 5,5행열로 기대갑이0 표준편차가 1인 가우시안 난수를 발생시키는 함수

np.abs(data6) # abs는 절댓값 구하기
np.sqrt(data6) # 성분의 제곱근 구하기
np.square(data6) #성분의 제곱값 구하기
np.exp(data6) # 자연로그 e^data6 성분으로 값을 구하기

np.sum(data6, axis = 1) # 열간의 합을 구함
np.mean(data6, axis = 1) # 열간의 평균을 계싼
np.argmax(data6) # 최대값의 인덱스를 반환
np.argmin(data6) # 반대로 최소값

np.sort(data6) # 행별로 오름차순 정리
np.sort(data1)[::-1] #내림차순으로 정렬
np.sort(data6, axis = 0) #열별로 오름차순 정리

np.transpose(data6) #전치행렬 표현
np.dot(data1,data2) #행렬곱을 나타냄
data1 * data2 # 행렬의 요소끼리의 곱
np.diagonal(data6) # 행렬의 대각행렬을 뽑아냄
np.linalg.inv(data6) # 역행렬을 배열로 나타냄

 


Pandas

Pandas는 데이터들을 분석하기위해서 데이터 표를 만드는 과정에 사용되는 함수

  • Series 에 대해서 정리
    • Series는 데이터들을 표형태로 왼쪽에 인덱스와 오른쪽의 인덱스 값으로 함수안에 수를 표편함
  • Data Frame
    • Data Frame은 Series 보다 좀더 넓고 확장되어 사용이가능함
    • 엑셀식의 표처럼 이차원으로 표현이 가능하게 되어있다
    1. Data Frame 이해하기
    2. Data Frame 데이터 추가 삭제
    3. 행 열 선택하고 조작하기
    4. Boolean 값으로 값 조작
    5. Data 분석용 함수들 https://doorbw.tistory.com/172?category=706990
import pandas as pd
import numpy as np 
import random as rn

data1 = pd.Series([4,1,2,6,7]) # 데이터를 표에 index / value 로 표현함
data1.values # 데이터1에 있는 value들을 확인
data1.index # 인덱스만 확인 

pd.Series([2,3,1,4,5], index =['a','b','c','d','f']) # 원하는 인덱스로 변경 가능 사이즈는 맞춰야하


data2 = {'firs' : ['hello','nice','moce'], # ' 열의이름', ['안에 values']로 구성
        'day' : [1,2,3],
        'point' : [1.5,3.7,4.2]}
Frame1 = pd.DataFrame(data2)
Frame1.index #인덱스 확인
Frame1.values # 값들 확인
Frame1.columns # 컬럼값들고 확인가능

pd.DataFrame(data2, columns = ['first','day','po','pena'],
                    index = ['one','two','three'])
# 기존에 있는 데이터에서 열과 행의 인덱스만 빌려 사용도 가능 이때 index의 갯수가 맞아야 값이 들어감
# 인덱스 값이 맞아야함 값이 없으면 알아서 NAN으로 들어감

Frame1.describe() # 데이터들을 정리해 요약해서 보여준다 갯수, 평균, 분산,최소값 등등 


#Data Frame indexing
Frame1['firs'] #first 열의 값만 출력
Frame1.firs #위와 같은 의미
Frame1[['firs','day']] #원하는 열을 뽑을수도 잇음

Frame1['add'] = 0.7 #add열을 추가하고 값을 대입할수 있음
Frame1['add2'] = np.random.rand(3,1) # 이렇게도 삽입이 가능 

Se = pd.Series([1,2,3], index =[0,1,2])
Frame1['add3'] = Se #이렇게 Series도 삽입가능

#그외 다양한 조건식 수식계산 대입도 가능 생략
del Frame1['add3'] #해당 열 삭제

#loc 와 iloc를 사용해서 원하는 행열을 뺄수 있음
print(Frame1)
Frame1.loc[:,['firs','day']]
Frame1.loc[0:1,'firs':'day'] #0~1행 에서 first,day 열 값 출력
Frame1.loc[4,:] =['new',3,4,1,None] # 새로운 행 삽입 loc['index이름',:]

Frame1.iloc[0]  # 행들의 데이터들을 출력한다.
Frame1.iloc[0:2,2:4] # [인덱스,열] 0,1,2 번째 행, 2,3 번째 열 출력
Frame1.iloc[[0,2],[1,2]] # 0,2 번째 index와 1,2번째 열 출력

print(Frame1) 
Frame1['point'] > 3.0 # 3.0 이상의 값으로 조건을 달수도 있음
Frame1.loc[Frame1['point'] > 3.0] #Frame1 중 point열이 3이상인 데이터를 출력
Frame1.loc[Frame1['firs'] == 'hello',['firs','day','add']] # 이렇게 원하는 값만 출력도 가능
Frame1.loc[Frame1['point'] > 3, 'add'] = 0 # 3보다큰 포인터 값에 add열을 0으로 대체
print(Frame1)

randfr = pd.DataFrame(np.random.rand(4,6))
randfr.columns = ['A','B','C','D','E','F']
randfr.index = pd.date_range('2015-05-05',periods = 4) #date_range함수를 사용
print(randfr)

Frame1.dropna(how='any') # 하나의 값이라도 null이있으면 그 행을 삭제
Frame1.fillna(value = 0.9) # nan값을 value값으로 채워넣기
Frame1.isnull() #null값인지 아닌지 확인 Df로 확인가능
 
Frame1.sum(axis = 0) # 열의 합을 나타냄
Frame1.sum(axis = 1) # 행방향으로 합을 나타냄 Nan은 배제시킨다
Frame1['day'].sum() #특정행만 삽입
Frame1.iloc[:,1].sum()

Matplotib

  • Matplotlib는 이전의 numpy와 pandas를 사용해서 자료구조를 쉽게 시각화 하기위해 사용하는 함수이다
    1. Mataplotlib 기초
    2. plot 종류
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib nbagg
import random as rn

plt1 = pd.Series(np.random.randint(0,10, size = 10),index = np.arange(0,100,10))

plt2 = pd.DataFrame(np.random.randn(10, 4).cumsum(axis=0),
                  columns=["A", "B", "C", "D"],
                  index=np.arange(0, 100, 10))

plt3 = pd.DataFrame(np.random.rand(4,6).cumsum(axis = 0)) #cumsum은 행대로 합을합침

# plt3.plot(kind='bar') #바형태로 그리기

#산점도 그리기
x1 = np.random.normal(1,1, size=(500,1))
x2 = np.random.normal(6,8,size = (500,1))
X = np.concatenate((x1,x2), axis =1)
plt.scatter(x1,x2, color = 'g') #500개 데이터  # x1 은 x축 x2는 y축

# plot(x , y) : x ,y 데이터 출력
# set_title() : 그래프 제목 설정
# set_xlabel() : x label 설정
# set_ylabel() : y lable 설정
# set_xlim() : x 범위 설정
# set_ylim() : y 범위 설정
# legend() : 그래프 범례 설정
# fig.savefig() : figure 저장

fig, AX = plt.subplots()

AX.plot(x1)
AX.plot(x2)
AX.set_title('data')
AX.set_xlabel("x1")
AX.set_ylabel("x2")
Ax.legend(
        loc='upper left',
        shadow=True,
        fancybox=True,
        borderpad=2
    )