프로그래밍/파이썬

EDA - 1단계 : 데이터 다루기 - 객체 간 연산

매 석 2023. 7. 7. 16:25
반응형

- 과거 내용

 

데이터 분석 - EDA(탐색적 데이터 분석) 개념

EDA 쉽게 말하면 초기 데이터를 조사하고 주요 특징을 찾아 어떻게 분석해나갈지 찾아가는 데이터 분석...

blog.naver.com

 

 

- Dataframe - 객체 간 연산

 

데이터를 원하는 데로 다룰 수 있어야 더 좋은 분석을 할 수 있다.

그렇기에 지금부터 Dataframe을 다루는 연습을 할 것이다.

- 원본 데이터

data=[[1,2],[3,4],[5,6]]
col=['col1','col2']
row=['row4','row5','row6']
df = pd.DataFrame(data=data, index=row, columns=col)

출력
      col1  col2
row4     1     2
row5     3     4
row6     5     6

 

1. 더하기

#스칼라 값 더하기
df=df.add(1)

출력
      col1  col2
row4     2     3
row5     4     5
row6     6     7

#데이터프레임 더하기
df2=pd.DataFrame(data=[[1],[2],[3]],index=['row4','row5','row6'],columns=['col1'])
df=df.add(df2)

출력
      col1  col2
row4     2   NaN
row5     5   NaN
row6     8   NaN

#NaN값 없애기 - df=df.add(df2) 대신 아래 코드 작성
df=df.add(df2,fill_value=0) 

출력
      col1  col2
row4     2   2.0
row5     5   4.0
row6     8   6.0

 

 

2. 빼기

빼기는 더하기와 완전히 같다.

명령어만 add에서 sub를 사용해주면 된다.

3. 곱셈

#스칼라 곱
df=df.mul(2)

출력
      col1  col2
row4     2     4
row5     6     8
row6    10    12

#객체 곱하기
df2=pd.DataFrame(data=[[1],[3],[5]],index=['row4','row5','row6'],columns=['col1'])
df=df.mul(df2,fill_value=0)

출력
      col1  col2
row4     1   0.0
row5     9   0.0
row6    25   0.0

4. 나눗셈

나눗셈도 곱셈과 같다.

대신 명령어는 div를 사용한다.

참고로 나눗셈은 NaN 대신 inf라는 에러가 발생한다.

0으로 나눈 경우에도 inf가 발생해, 아래와 같이 해결한다.

#1로 채워넣어 0으로 나누지 않게 해 inf 에러를 없앰
df = df.div(df2,fill_value=1)

 

5. 나머지

#스칼라 값 나머지
df=df.mod(2)

출력
      col1  col2
row4     1     0
row5     1     0
row6     1     0

#객체 간 나머지
df2=pd.DataFrame(data=[[2],[2],[2]],index=['row4','row5','row6'],columns=['col1'])
df=df.mod(df2,fill_value=1)

출력
      col1  col2
row4     1   0.0
row5     1   0.0
row6     1   0.0

6. 거듭제곱

거듭제곱도 나머지와 똑같다.

다만 명령어는 pow를 사용한다.

df.pow(df2,fill_value=0)

 

이 경우에는 빈 값을 0으로 채워넣어

x^0이 되게 만들어 결과값을 1이 되게 한다.

7. 행렬곱

행렬의 곱을 pandas로 구현한다.

#데이터2개
df1=pd.DataFrame(data=[[1,2],[3,4]])
df2=pd.DataFrame(data=[[5,6],[7,8]])

출력 
   0  1
0  1  2
1  3  4

   0  1
0  5  6
1  7  8

#두 행렬의 곱
df=df1.dot(df2)

출력
    0   1
0  19  22
1  43  50

 

나도 행렬이 고등학교 교육과정에서 빠졌기에

이번에 인공지능수학 과목을 수강하면서 처음 배웠다.

위의 결과값은

(1*5+2*7) (1*6+2*8)

(3*5+4*7) (3*6+4*8) 와 같은 과정을 통해 구해진다.