프로그래밍/파이썬

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

매 석 2023. 7. 7. 18:17
반응형

- 과거내용

 

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

과거 내용 Dataframe - 객체 간 연산 데이터를 원하는 데로 다룰 수 있어야 더 좋은 분석을 할 수 있다. ...

blog.naver.com

 

- DataFrame - 객채 내 연산

#원본 데이터
data=[[1.25,2.23],[3.21,4.56]]
col=['col1','col2']
row=['row1','row2']
df = pd.DataFrame(data=data, index=row, columns=col)

출력 
      col1  col2
row4  1.25  2.23
row5  3.21  4.56

 

1. 반올림

#반올림
df.round(0)
df.round(1)

출력
      col1  col2
row4   1.0   2.0
row5   3.0   5.0
      col1  col2
row1   1.2   2.2
row2   3.2   4.6

 

0은 일의자리까지 반올림, n은 소수n번째 자리까지 반올림이다.

2. 합계

#행의 합
print(df.sum(axis=1))

출력
row1    3.48
row2    7.77
dtype: float64

#열의 합
print(df.sum(axis=0))

출력
col1    4.46
col2    6.79
dtype: float64

 

 

추가로 skipna라는 옵션이 있는데, false인 경우 계산에 NaN을 포함하여

결과가 NaN이 나올 수 있다.

3. 곱

곱셈도 합과 똑같다. 명령어는 prod를 사용한다.

df.prod(axis=0, skipna=True)

 

 

이렇게 하면 열을 곱하는데, NaN값은 제외하고 곱한다.

하지만 min_count라는 옵션이 있는데 이는 계산에 필요한 최소의 숫자를 의미한다.

에시로 3인데 3개의 값중 1개가 NaN이라 2개의 값의 곱만 가능한 경우라면

skipna를 True로 설정해도 결과값이 NaN이 나올 수 있다.

4. 절대값

df.abs()

 

​이렇게 입력하면 df 전체가 절대값을 사용한 결과가 나온다.

 

5. 전치

전치라는 개념도 인공지능수학에서 배웠던 개념이다.

대각선을 중심으로 행과 열을 뒤집는 것을 의미한다.

#원본 데이터
      col1  col2
row4  1.25  2.23
row5  3.21  4.56

#전치
df.transpose()

출력
      row1  row2
col1  1.25  3.21
col2  2.23  4.56

여기서는 copy라는 옵션이 있는데 값을 반환할 지 설정하는 것이다.

6. 순위(rank)

#원본 데이터
  Value
A     5
B     5
C  <NA>
D     1
E  -3.1
F     6
G   0.1
H    -3
I     3

#작은 순으로 순위
df['min']=df['Value'].rank(method='min')

출력
  Value  min
A     5  6.0
B     5  6.0
C  <NA>  NaN
D     1  4.0
E  -3.1  1.0
F     6  8.0
G   0.1  3.0
H    -3  2.0
I     3  5.0

 

결과를 보면 순위가 6등 6등으로 같은 것을 볼 수 있다.

이외에도 method에는 max, average, first, dense 등의 옵션이 있다.

추가로 na_option, ascending 등의 옵션도 있다.

7. 차이(이산)

 

#원본 데이터
   col1  col2  col3
0     1     8     1
1     2     7     2
2     3     6     4
3     4     5     8
4     5     4    16
5     6     3    32
6     7     2    64
7     8     1   128

#차이 - 행과 행 혹은 열과 열의 차이
df=df.diff(axis=0)

출력
   col1  col2  col3
0   NaN   NaN   NaN
1   1.0  -1.0   1.0
2   1.0  -1.0   2.0
3   1.0  -1.0   4.0
4   1.0  -1.0   8.0
5   1.0  -1.0  16.0
6   1.0  -1.0  32.0
7   1.0  -1.0  64.0

 

​추가로 periods를 사용하여 2,3으로 변경하여 2칸, 3칸 거리의 차이로 바꿀 수 있다.

 

8. 차이(백분율)

#원본 데이터
   col1  col2  col3
0     1     8     1
1     2     7     2
2     3     6     4
3     4     5     8
4     5     4    16
5     6     3    32
6     7     2    64
7     8     1   128

#차이(백분율) - (다음행-현재행) / 현재행
df=df.pct_change()

출력
       col1      col2  col3
0       NaN       NaN   NaN
1  1.000000 -0.125000   1.0
2  0.500000 -0.142857   1.0
3  0.333333 -0.166667   1.0
4  0.250000 -0.200000   1.0
5  0.200000 -0.250000   1.0
6  0.166667 -0.333333   1.0
7  0.142857 -0.500000   1.0

 

이것도 periods를 사용하여 다른 행과의 백분율로 나타낼 수 있다.

추가로 fill_method를 사용하여 ffill bfill을 사용하여 각각 위, 아래 값으로 결측치를 대체할 수 있다.

9. 누적계산

#원본 데이터
   col1  col2  col3
0     1     8     1
1     2     7     2
2     3     6     4
3     4     5     8
4     5     4    16
5     6     3    32
6     7     2    64
7     8     1   128

#누적합
df=df.expanding().sum()

출력
   col1  col2   col3
0   1.0   8.0    1.0
1   3.0  15.0    3.0
2   6.0  21.0    7.0
3  10.0  26.0   15.0
4  15.0  30.0   31.0
5  21.0  33.0   63.0
6  28.0  35.0  127.0
7  36.0  36.0  255.0

 

​이외에도 min_periods, axis, method, center 등의 옵션이 있다.

 

10. 기간이동 계산

rolling을 사용하여 현재 열에 대하여 특정 추가 메서드를 지정하여 연산하게 한다.

#원본 데이터
   col1  col2  col3
0     1     8     1
1     2     7     2
2     3     6     4
3     4     5     8
4     5     4    16
5     6     3    32
6     7     2    64
7     8     1   128

#현재 열 포함 3개의 열의 합
df=df.rolling(window=3).sum()

출력
   col1  col2   col3
0   NaN   NaN    NaN
1   NaN   NaN    NaN
2   6.0  21.0    7.0
3   9.0  18.0   14.0
4  12.0  15.0   28.0
5  15.0  12.0   56.0
6  18.0   9.0  112.0
7  21.0   6.0  224.0

 

 

​이외에도 closed, win_type, on 등의 옵션이 있다.

 

11. 그룹화계산

#원본 데이터
  index  col1  col2  col3
0     A     0     5     6
1     A     8     1     8
2     B     1     5     1
3     B     6     8     5
4     C     6     3     0
5     C     0     3     5
6     D     0     4     5
7     D     7     0     4
8     E     6     3     6
9     E     6     4     4

#인덱스 별 평균
df=df.groupby('index').mean()

출력
       col1  col2  col3
index
A       8.0   5.0   1.5
B       6.5   7.5   3.5
C       7.0   3.5   2.5
D       4.0   1.5   1.0
E       6.0   4.0   2.5

 

​mean 외에도 count, agg, apply 등을 사용할 수 있다.