[KT AIVLE] DX트랙 데이터 다듬기(2~3주차) 복습(넘파이 연산, 판다스 데이터프레임 함수, 조회, 집계)

728x90

데이터 다듬기 복습

1. 넘파이(Numpy) 배열 확인 및 연산

# 배열 정보 확인

ndim   	# 차원 확인
shape  	# 형태(크기) 확인
dtype  	# 요소 자료형 확인

# 배열 연산

np.add(x, y)      	# 배열 더하기
np.subtract(x, y) 	# 배열 빼기
np.multiply(x, y) 	# 배열 곱하기
np.divide(x, y)   	# 배열 나누기
np.power(x, y)   	# 배열 제곱

 

2. 판다스(Pandas) 데이터 프레임 함수

head()         # 상위 데이터 확인
tail()         # 하위 데이터 확인
shape          # 데이터프레임 크기
index          # 인덱스 정보 확인
values         # 값 정보 확인
columns        # 열 정보 확인
dtypes         # 열 자료형 확인
info()         # 각 열에 대한 요약 정보 확인
describe()     # 요약 통계 확인
unique()       # 열 고유값 확인
value_counts() # 열의 각 값의 빈도수 확인

 

3. 판다스(Pandas) 데이터 프레임 조회

특정 열 조회

  • 데이터를 읽어온 후, df(데이터프레임).loc[: , [열 이름1, 열 이름2,...]] 형태로 조회할 열 이름을 리스트로 지정
  • 조회할 열이 하나면 리스트 형태가 아니어도 됨
  • 열 부분은 생략할 수 있었지만, 행 부분은 생략 불가능
    •  df[[열 이름1, 열이름2,...]] 형태로 인덱 생략이 일반적
# total_bill 열 조회
tip.loc[:, 'total_bill']

# tip, total_bill 열 조회
tip.loc[:,['tip', 'total_bill']]

 

열 범위 조회

  • 범위 조회는 df.loc[:, 열 이름1:열 이름2] 형태로 조회
  • 범위는 하나만 지정할 수 있어 리스트가 될 수 없으므로 대괄호 사용 X
  • 범위 마지막 열도 조회 대상에 포함
# sex ~ time 열 조회
tip.loc[:, 'sex':'time']

 

조건으로 조회

  • df.loc[조건] 형태로 조건을 지정해 조건에 만족하는 데이터만 조회할 수 있음
  • 우선 조건이 제대로 판단이 되는지 확인 후 그 조건을 대괄호 안에 기입

1) 단일 조건 조회

# tip 열 값이 6.0 보다 큰 행 조회
tip.loc[tip['tip'] > 6.0, :] 

# tip 열 값이 6.0 보다 큰 행 조회
cond = tip['tip'] > 6.0
tip.loc[cond]

 

2) 여러 조건 조회

  • [] 안에 조건을 여러개 연결할 때 and와 or 대신 &|를 사용해야 함
  • 그리고 각 조건들은 (조건1) & (조건2) 형태로 괄호로 묶어야 함
# and로 여러 조건 연결 (tip > 6.0 and day == sat)
tip.loc[(tip['tip'] > 6.0) & (tip['day'] == 'Sat'),:]

# or로 여러 조건 연결 (tip > 6.0 or day == sat)
tip.loc[(tip['tip'] > 6.0) | (tip['day'] == 'Sat')]

 

3) 편리한 isin(), between() 메서드

  • isin([값1, 값2, ...., 값n]): 값1 또는 값2 또는 .. 값n인 데이터만 조회
# 값 나열 (day가 Sat 또는 Sun)
tip.loc[tip['day'].isin(['Sat', 'Sun'])]

# 같은 의미의 or 조건
tip.loc[(tip['day'] == 'Sat') | (tip['day'] == 'Sun')]

 

  • between(값1, 값2): 값1 ~값2까지 범위 안의 데이터만 조회 (값1과 값2 모두 포함)
# 범위 지정 ( 1 <= size <= 3)
tip.loc[tip['size'].between(1, 3)]

# 같은 의미의 and 조건
tip.loc[(tip['size'] >= 1) & (tip['size'] <= 3)]

 

4) 조건을 만족하는 행의 일부 열 조회 

  •  df.loc[조건, ['열 이름1', '열 이름2',...]] 형태로 조회할 열을 리스트로 지정
# 조건에 맞는 하나의 열 조회
tip.loc[tip['size'] >= 5, ['tip']]

# 조건에 맞는 여러 열 조회
tip.loc[tip['size'] >= 5, ['total_bill', 'tip', 'size']]

 

인덱스 초기화

 

인덱스 초기화가 필요한 경우

  • 기존 데이터프레임에서 일부 행을 가져와 새로 만든 데이터프레임
  • 일부 행이 지워진 데이터 프레임
  • 특히 0부터 시작하는 정수형 인덱스의 경우 초기화를 하는 것이 좋음

 

  • reset_index() 메서드로 인덱스를 초기화합니다.
  • 기존 인덱스 값은 의미가 없으므로 drop=True 옵션을 지정해 제거
  • 실제 반영을 위해 inplace=True 옵션을 지정

 

4. 판다스(Pandas) 데이터 프레임 집계

 

  • 대부분은 범주값을 기준으로 연속값의 합, 평균 등을 집계
  • 가끔 범주값의 개수나 최빈값을 집계하기도 함

합 구하기 

 

1) 집계하기

  • as_index = True를 설정(기본값)하면 집계 기준이 되는 열이 인덱스 열이 됨
  • as_index = False를 설정하면 행 번호를 기반으로 한 정수 값이 인덱스로 설정됨
  • [['tip']].sum()으로 쓰면 열이 여러개라는 의미에서 결과가 데이터프레임이됨
# day별 tip 합계 --> 시리즈
tip.groupby(by = 'day', as_index = True)['tip'].sum()

# day별 tip 합계 --> 데이터프레임
tip_sum = tip.groupby(by='day', as_index=False)['tip'].sum()

 

2) 데이터프레임으로 선언

  • 집계 결과를 새로운 데이터프레임으로 선언해 사용
  • 집계된 결과를 반복해 사용하거나, 분석 대상이 되는 경우 데이터프레임으로 선언이 유익
# day별 tip 합계 조회
tip_sum = tip.groupby(by='day', as_index=False)[['tip']].sum()

# 확인
tip_sum

 

여러 열 집계 

  • [['total_bill', 'tip']].sum() 형태로 집계 대상 열을 리스트로 지정
  • sum() 메서드 앞에 아무 열도 지정하지 않으면 기준열 이외의 모든 열에 대한 집계 수행
  • numeric_only=True를 설정하면 숫자 열에 대해서만 집계
  •  by=['day', 'smoker']과 같이 집계 기준 열을 여러 개 설정할 수도 있음
# day별 total_bill, tip 합계 조회
tip_sum = tip.groupby(by='day', as_index = False)[['total_bill', 'tip']].sum()

# day별 나머지 열들 합계 조회
tip_sum = tip.groupby(by='day', as_index = False).sum(numeric_only = True)

# day + smoker별 나머지 열들 합계 조회
tip_sum = tip.groupby(by=['day','smoker'], as_index = False).sum(numeric_only = True)

 

평균, 최댓값, 최솟값, 개수 구하기

# 평균 구하기
tip_mean = tip.groupby(by='day', as_index=False)[['tip']].mean()

# 최댓값 구하기
tip_mean = tip.groupby(by='day', as_index=False)[['tip']].max()

# 최솟값 구하기
tip_mean = tip.groupby(by='day', as_index=False)[['tip']].min()

# 개수 구하기
tip_mean = tip.groupby(by='day', as_index=False)[['tip']].count()
728x90