에이블스쿨 6기 DX 트랙/일일 복습

DAY 07. 데이터프레임 탐색

d061120 2024. 9. 18. 22:10

2. 데이터프레임 탐색

# 라이브러리 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 데이터 읽어오기
path = 'csv파일 url'
tip = pd.read_csv(path)

# 확인
tip.head()

예시)

 

[참고] 익숙해져야 할 기능 목록

  • head(): 상위 데이터 확인
  • tail(): 하위 데이터 확인
  • shape: 데이터프레임 크기
  • index: 인덱스 정보 확인
  • values: 값 정보 확인
  • columns: 열 정보 확인
  • dtypes: 열 자료형 확인
  • info(): 열에 대한 상세한 정보 확인
  • describe(): 기술통계정보 확인

2.1. 앞, 뒤 일부 데이터, 크기 확인

  • head(n), tail(n) 메서드를 사용해 앞 뒤 데이터 확인
  • 개수를 지정하지 않으면 기본적으로 5개 행이 조회된다.

1) 상위 데이터 확인

# 상위 3개 행 데이터
tip.head(3)

예시)

 

2) 하위 데이터 확인

# 하위 3개 행 데이터
tip.tail(3)

예시)

 

3) 크기 확인

  • (rows, cols) 값을 갖는 튜플 형태로 확인이 가능합니다.
  • 데이터를 분석할 때 처리할 데이터 양을 확인하는 목적으로 많이 사용한다.
# 행 수와 열 수 확인
tip.shape
---
# 출력
# (244, 7)

 

2.2. 열, 행 정보 보기

1) 인덱스 확인

# 인덱스 확인
tip.index
---
# 출력
# RangeIndex(start=0, stop=244, step=1)

 

2) 값 확인

  • values 속성 조회 결과는 Array(배열)이다.
# 값 확인
tip.values
---
# 출력
# array([[16.99, 1.01, 'Female', ..., 'Sun', 'Dinner', 2],
#        [10.34, 1.66, 'Male', ..., 'Sun', 'Dinner', 3],
#        [21.01, 3.5, 'Male', ..., 'Sun', 'Dinner', 3],
#        ...,
#        [22.67, 2.0, 'Male', ..., 'Sat', 'Dinner', 2],
#        [17.82, 1.75, 'Male', ..., 'Sat', 'Dinner', 2],
#        [18.78, 3.0, 'Female', ..., 'Thur', 'Dinner', 2]], dtype=object)

※ pandas 에서의 자료형 object는 str(문자열)이다.

 

3) 열 확인

# 열 확인
tip.columns
---
# 출력
# Index(['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size'], dtype='object')

 

4) 자료형 확인

  • int64: 정수형 데이터(int)
  • float64: 실수형 데이터(float)
  • object: 문자열 데이터(string)
# 열 자료형 확인
tip.dtypes
---
# 출력
# total_bill    float64
# tip           float64
# sex            object
# smoker         object
# day            object
# time           object
# size            int64
# dtype: object
# 열 자료형, 값 개수 확인
tip.info()  # 자주 사용되니 기억할 것

 

5) 기술 통계 확인

  • 기술 통계(Descriptive Statistics): 데이터의 정리, 요약, 해석, 표현 등을 통해 데이터가 갖는 특성을 나타내는 정보
  • describe() 메서드는 데이터에 대한 많은 정보를 제공하는 매우 중요한 메서드
  • 개수(count), 평균(mean), 표준편차(std), 최솟값(min), 사분위값(25%, 50%, 75%), 최댓값(max)을 표시함
# 기술 통계
tip.describe()
# tip.describe(include='all')  # 이렇게 하면 결측치를 포함한 모든 값을 확인

예시)

# 전치행렬로 표시(행과 열의 위치 바뀜)
tip.describe().T

예시)

  • 일부 열에 대해서만 기술 통계를 확인할 수 있다.
# 기술 통계
tip[['tip']].describe()

예시)

 

2.3. 정렬해서 보기

  • 인덱스를 기준으로 정렬하는 방법과 특정 열을 기준으로 정렬하는 방법이 있습니다.
  • sort_values() 메서드로 특정 열을 기준으로 정렬합니다.
  • ascending 옵션을 설정해 오름차순, 내림차순을 설정할 수 있습니다.
    • ascending=True: 오름차순 정렬(기본값)
    • ascending=False: 내림차순 정렬
# 단일 열 정렬
tip.sort_values('total_bill').head(5)

예시)

 

# 복합 열('total_bill', 'tip') 정렬
## total_bill은 내림차순, tip은 오름차순으로 정렬
tip.sort_values(['total_bill', 'tip'], ascending=[False, True])

예시)

 

2.4. 기본 집계

2.4.1. 고윳값 확인

  • 범주형 열(열이 가진 값이 일정한 값인 경우, 성별, 등급 등)인지 확인할 때 사용

1) 고윳값 확인

  • unique() 메서드로 고윳값을 확인하며, 결괏값은 배열 형태가 된다.
# day 열 고윳값 확인
tip['day'].unique()  # 자료 타입: 시리즈
# tip[['day']]  # 이렇게 하면 데이터프레임 형태로 볼 수 있다.
---
# 출력
# array(['Sun', 'Sat', 'Thur', 'Fri'], dtype=object)

 

2) 고윳값과 개수 확인

  • value_counts() 메서드로 고윳값과 그 개수를 확인하며, 결괏값은 시리즈 형태가 된다.
  • dropna 옵션을 생략하거나 dropna=True로 지정하면 NaN 값은 대상에서 제외한다.
# day 열 고윳값 개수 확인
tip['day'].value_counts().plot(kind='bar')
# 여기서 Sat이 최빈값이 된다.

예시)

 

# smoker 열 고윳값 개수 확인
tip['smoker'].value_counts()
---
# 출력
# smoker
# No     151
# Yes     93
# Name: count, dtype: int64
# 비율 확인하는 법
tip['smoker'].value_counts(normalize=True)
---
# 출력
# smoker
# No     0.618852
# Yes    0.381148
# Name: proportion, dtype: float64
# normalize 사용하지 않고 확인하는 법
tip['smoker'].value_counts() / len(tip)
---
# 출력
# smoker
# No     0.618852
# Yes    0.381148
# Name: count, dtype: float64

 

2.4.2. 최빈값 확인

  • 최빈값: 가장 많이 관측되는 수, 즉 주어진 값 중에서 가장 자주 나오는 값
  • 예) {1, 3, 6, 6, 6, 7, 7, 12, 12, 17}의 최빈값은 6
  • 최빈값은 산술 평균과 달리 유일한 값이 아닐 수도 있다.
  • mode() 메서드로 최빈값을 확인할 수 있다.
  • 최빈값이 여렷인 경우 행으로 구분되어 표시된다.
# day 열 최빈값 확인
tip['day'].mode()
---
# 출력
# 0    Sat
# Name: day, dtype: object
# 최빈값만 얻기
tip['day'].mode()[0]
---
# 출력
# 'Sat'

 

2.4.3. 기본 통계 메서드 사용

# 리스트 만들기
stock = [[94500, 92100, 92200, 92300],
         [96500, 93200, 95900, 94300],
         [93400, 91900, 93400, 92100],
         [94200, 92100, 94100, 92400],
         [94500, 92500, 94300, 92600]]
dates = ['2019-02-15', '2019-02-16', '2019-02-17', '2019-02-18', '2019-02-19']
names = ['High', 'Low', 'Open', 'Close']

# 데이터프레임 만들기
df = pd.DataFrame(stock, index=dates, columns=names)

# 확인
df.head()

 

  • df.sum(): df.sum(axis=0) 과 같으며 전체 열 기준으로 합을 집계한다.
  • 전체 행 기준으로 집계를 하려면 df.sum(axis=1) 형태로 axis=1을 지정한다.
# 전체 열 기준 합(행 더하기)
df.sum(axis=0)  # 대부분 열 기준 합을 사용하게 될 것이다.
---
# 출력
# High     473100
# Low      461800
# Open     469900
# Close    463700
# dtype: int64
# 전체 행 기준 합(열 더하기)
df.sum(axis=1)  # 거의 사용할 일 없다.
---
# 출력
# 2019-02-15    371100
# 2019-02-16    379900
# 2019-02-17    370800
# 2019-02-18    372800
# 2019-02-19    373900
# dtype: int64

 

  • tip 데이터프레임에 대한 집계
# 전체 열 기준 합
tip.sum(numeric_only=True, axis=0)  # numeric_only: 숫자값만 보고싶을때 사용
# 또는
# tip.sum()
---
# 출력
# total_bill    4827.77
# tip            731.58
# size           627.00
# dtype: float64
# total_bill 열 합계 조회
tip['total_bill'].sum()
---
# 출력
# 4827.77
# tip 열 최댓값 조회
tip['tip'].max()
---
# 출력
# 10.0
# total_bill, tip 열 평균값 확인
tip[['total_bill', 'tip']].mean()
---
# 출력
# total_bill    19.785943
# tip            2.998279
# dtype: float64
# total_bill, tip 열 중앙값 확인
tip[['total_bill', 'tip']].median()
---
# 출력
# total_bill    17.795
# tip            2.900
# dtype: float64

'에이블스쿨 6기 DX 트랙 > 일일 복습' 카테고리의 다른 글

데이터 분석 - 이변량: 범주 vs 숫자  (0) 2024.10.04
DAY 08. 데이터프레임 조회  (0) 2024.09.20
DAY 07. 데이터프레임 생성  (3) 2024.09.18
DAY 07. 넘파이 기초  (1) 2024.09.18
DAY 05. 함수  (1) 2024.09.12