데이터분석

[혼자 공부하는 데이터 분석 with 파이썬] - 데이터 정제, 데이터 요약

주니빙 2023. 9. 14. 21:53

03 데이터 정제

열 삭제하기

drop() 메서드란?

데이터프레임이나 시리즈에서 행 또는 열을 삭제할 때 사용된다.

axis 매개변수란?

ns_book = ns_df.drop('Unnamed: 13', axis=1)
ns_book.head()

삭제하려는 열 이름은 Unnamed: 13이고 axis=1은 열을 삭제하겠다는 것을 의미한다.

drop() 메서드에서 axis 매개변수는 삭제할 행 또는 열을 지정한다. axis=0은 행을 삭제하고 axis=1은 열을 삭제한다.

 

inplace 매개변수란?

원본 DataFrame을 수정할 것인지 아니면 새로운 DataFrame을 생성할 것인지를 지정하는 데 사용된다. inplace=True인 경우 DataFrame은 그 자리에서 수정되며 메소드는 None을 반환한다. inplace=False(기본값)인 경우 수정이 적용된 새 DataFrame이 반환된다.

 

ns_book.drop('주제분류번호', axis=1, inplace=True)
ns_book.head()

‘주제분류번호’ 열이 삭제된다.

 

dropna() 메서드란?

데이터프레임이나 시리즈에서 결측치(NaM)가 있는 행 또는 열을 삭제할 때 사용된다.

ns_book = ns_df.dropna(axis=1)
ns_book.head()

ns_df 데이터프레임에서 NaN이 포함된 열이 삭제된다.

 

how 매개변수란?

dropna() 메서드에서 사용되며, 결측치를 어떻게 처리할 것인지를 지정한다. 기본값은 how='any'이며, 해당 행 또는 열에 하나 이상의 결측치가 있으면 삭제한다. how='all'인 경우 해당 행 또는 열의 모든 값이 결측치인 경우에만 삭제한다.

ns_book = ns_df.dropna(axis=1, how='all')
ns_book.head()

모든 값이 NaN인 열을 삭제한다.

 

행 삭제하기

ns_book2 = ns_book.drop([0,1])
ns_book2.head()

인덱스 0부터 1까지 2개의 행을 삭제한다.

 

[ ] 연산자란?

[] 연산자는 파이썬에서 리스트, 튜플, 문자열 등의 객체에서 인덱싱을 할 때 사용된다.

 

슬라이싱이란?

리스트(list), 튜플(tuple), 문자열(string) 등의 시퀀스(sequence) 객체에서 일부를 잘라내는 연산이다. 콜론(:)을 사용하여 범위를 지정한다.

 

불리언 배열이란?

불리언 배열(Boolean array)은 True와 False로 구성된 1차원 배열이다.

 

ns_book2 = ns_book[2:]
ns_book2.head()

슬라이싱을 사용하여 인덱스가 0, 1인 행을 제외한 모든 행을 선택

 

selected_rows = ns_df['출판사'] == '한빛미디어'
ns_book2 = ns_book[selected_rows]
ns_book2.head()

불리언 배열을 사용하여 출판사가 ‘한빛미디어’인 행만 True인 불리언 배열을 만든다.

 

중복된 행 찾기

duplicated() 메서드란?

duplicated() 메서드는 데이터프레임에서 중복된 행을 찾는 데 사용된다. 기본적으로 모든 열이 일치하는 경우 중복된 것으로 판단한다. keep 매개변수를 사용하여 중복된 행 중 어느 것을 유지할 것인지를 지정할 수 있다. 기본값은 'first'이며, 첫 번째로 발견된 중복된 행을 유지한다. 'last'를 지정하면 마지막에 발견된 중복된 행을 유지하고, False를 지정하면 중복된 행을 모두 제거한다.

 

subbed 매개변수란?

subset 매개변수는 데이터프레임에서 특정 열 또는 행을 선택하는 데 사용된다. 이 매개변수를 사용하여 원하는 행 또는 열을 지정하고 데이터프레임을 필터링할 수 있다.

ns_book = ns_df.dropna(subset=['출판사'])
ns_book.head()

위 예시에서 subset=['출판사']는 '출판사' 열에서 결측치가 있는 행을 제외하고 나머지 행을 선택한다는 의미이다.

 

그룹별로 모으기

groupby() 메서드란?

groupby() 메서드는 데이터프레임이나 시리즈를 특정 열의 값에 따라 그룹화하는 데 사용됩니다. 이를 통해 그룹별로 데이터를 분류하고 집계할 수 있습니다.

 

by 매개변수란?

by 매개변수는 groupby() 메서드에서 사용되며, 그룹화할 기준이 되는 열 또는 열의 리스트를 지정한다. 이를 통해 데이터를 해당 기준에 따라 그룹화할 수 있다.

 

sum() 메서드란?

sum() 메서드는 데이터프레임이나 시리즈의 합계를 계산하는 데 사용된다. 기본적으로 열(axis=0)을 따라 각 열의 합계를 계산하며, 행(axis=1)을 따라 각 행의 합계를 계산할 수도 있다.

 

dropna 매개변수란?

dropna() 메서드에서 사용되는 subset 매개변수는 데이터프레임에서 특정 열 또는 행을 선택하는 데 사용된다. 이 매개변수를 사용하여 원하는 행 또는 열을 지정하고 데이터프레임을 필터링할 수 있다.

group_df = count_df.groupby(by=['도서명','저자','ISBN','권'], dropna=False)
loan_count = group_df.sum()

dropna=False는 NaN이 포함되어 있는 행을 삭제하지 않고 연산에 포함한다는 의미이다.

 

데이터프레임 정보 요약 확인하기

info() 메서드란?

info() 메서드는 데이터프레임의 요약 정보를 확인하는 데 사용된다. 이를 통해 데이터프레임의 열 수, 열 이름, 데이터 타입, 결측치 유무 등을 확인할 수 있다.

ns_df.info()

위 예시에서 ns_df 데이터프레임의 요약 정보를 출력한다.

 

누락된 값 처리하기

isna() 메서드란?

isna() 메서드는 데이터프레임 또는 시리즈에서 각 요소가 결측값(NaN)인지를 확인하는 데 사용된다. 각 요소가 결측값인 경우 True를 반환하고, 그렇지 않은 경우 False를 반환한다.

ns_book.isna()

위 예시에서 ns_book 데이터프레임의 각 요소가 결측값인지를 확인한다.

 

ns_book4.loc[0, '도서권수'] = None
ns_book4['도서권수'].isna().sum()

정수를 저장하는 열에 파이썬의 None을 입력하면 누락된 값으로 인식한다.

 

astype() 메서드란?

astype() 메서드는 데이터프레임 또는 시리즈의 데이터 타입을 변경하는 데 사용된다. 이를 통해 특정 열의 데이터 타입을 원하는 형식으로 변환할 수 있다.

ns_book4['도서권수'] = ns_book4['도서권수'].astype(float)

위 예시에서 ns_book4 데이터프레임의 '도서권수' 열의 데이터 타입을 float으로 변환한다.

 

fillna() 메서드란?

fillna() 메서드는 데이터프레임이나 시리즈에서 결측치(NaN)를 다른 값으로 대체하는 데 사용된다. 이를 통해 결측치를 처리하고 데이터의 완전성을 유지할 수 있다.

ns_book4['도서권수'].fillna(0, inplace=True)
ns_book4['도서권수'].head()

위 예시에서 ns_book4 데이터프레임의 '도서권수' 열의 결측치(NaN)를 0으로 대체한다.

 

replace() 메서드란?

replace() 메서드는 데이터프레임이나 시리즈에서 특정 값을 다른 값으로 대체하는 데 사용된다. 이를 통해 데이터의 특정 값을 원하는 값으로 변경할 수 있다.

ns_book.replace('주제분류번호', '분류번호', inplace=True)
ns_book.head()

위 예시에서 ns_book 데이터프레임의 '주제분류번호' 열의 '주제분류번호' 값을 '분류번호'로 대체한다.

 

잘못된 값 바꾸기

na 매개변수란?

na 매개변수는 replace() 메서드에서 사용되며, 대체할 값으로 None, NaN 또는 다른 결측치 값을 지정할 수 있다. 이 매개변수를 사용하여 데이터프레임이나 시리즈에서 결측치를 다른 값으로 대체할 수 있다.

ns_book.replace('주제분류번호', '분류번호', na='결측치', inplace=True)
ns_book.head()

위 예시에서 ns_book 데이터프레임의 '주제분류번호' 열의 '주제분류번호' 값을 '분류번호'로 대체하고, 결측치를 '결측치'로 대체한다.

 

gt() 메서드란?

gt() 메서드는 데이터프레임이나 시리즈의 요소와 지정한 값과 비교하여 크기를 비교하는 데 사용된다. 요소가 지정한 값보다 큰 경우 True를 반환하고, 그렇지 않은 경우 False를 반환한다.

ns_book5['발행년도'].gt(4000).sum()

연도가 4000년이 넘는 행의 전체 개수를 확인할 수 있다.


04 데이터 요약

기술통계 구하기

  • count : 누락된 값을 제외한 데이터 개수를 나타낸다.
  • mean : 평균을 구한다. : mean() 메서드
  • std : 표준편차를 구한다.
  • min : 최솟값을 구한다. : min() 메서드
  • 50% : 중앙값을 구한다. : median() 메서드
  • 25%와 75% : 순서대로 늘어 놓았을 때 25% 지점과 75% 지점에 놓인 값이다.
  • max : 최댓값을 구한다. : max() 메서드

 

describe() 메서드란?

describe() 메서드는 데이터프레임 또는 시리즈의 기술통계를 계산하는 데 사용된다. 이를 통해 데이터의 개수, 평균, 표준편차, 최솟값, 최댓값, 중앙값 등의 정보를 확인할 수 있다.

percentiles 매개변수란?

percentiles 매개변수는 describe() 메서드에서 사용되며, 계산할 백분위수를 지정하는 데 사용됩니다. 기본적으로 25%, 50%, 75%의 백분위수를 계산한다. 이를 통해 데이터의 분포를 더 자세히 알 수 있다.

ns_book.describe(percentiles=[0.3, 0.6, 0.9])

위 예시에서 ns_book 데이터프레임의 30%, 60%, 90% 백분위수를 계산한다.

 

include 매개변수란?

include 매개변수는 describe() 메서드에서 요약 통계에 포함할 열의 유형을 지정하는 데 사용된다. 기본적으로 숫자 열만 포함된다.

객체나 범주형 열과 같은 다른 유형의 열을 포함하려면 include 매개변수를 'all'로 설정할 수 있다.

ns_book.describe(include='all')

위의 예제에서 describe() 메서드는 요약 통계에 숫자 열 외에도 모든 열을 포함한다.

 

평균 구하기

range() 함수란?

range() 함수는 파이썬에서 연속된 숫자들의 시퀀스를 생성하는 데 사용된다. 이 함수는 시작 값, 끝 값 및 증가 값을 인자로 받아서 해당 범위의 숫자들을 반환한다. 시작 값부터 끝 값 직전까지의 숫자들을 생성하며, 기본적으로 1씩 증가한다.

예를 들어, range(1, 10)은 1부터 9까지의 숫자들을 생성한다. range() 함수는 for 루프와 함께 자주 사용되며, 반복 횟수를 지정하는 데 유용하다.

for i in range(5):
    print(i)

위의 예시는 0부터 4까지의 숫자를 출력한다.

 

분위수 구하기

quantile() 메서드란?

quantile() 메서드는 데이터프레임 또는 시리즈에서 지정한 분위수에 해당하는 값을 반환하는 데 사용된다. 이를 통해 데이터의 분포를 파악하고 특정 분위수에 해당하는 값을 확인할 수 있다.

ns_book['도서권수'].quantile(0.25)

위 예시에서 ns_book 데이터프레임의 '도서권수' 열에서 25% 분위수에 해당하는 값을 반환한다.

 

interpolation 매개변수란?

interpolation 매개변수는 quantile() 메서드에서 사용되며, 분위수 값을 추정하기 위해 사용되는 보간 방법을 지정하는 데 사용된다. 기본적으로 'linear' 보간 방법이 사용된다. 보간은 두 지점 사이에 놓인 특정 위치의 값을 추정하는 방법이다.

 

var() 메서드란?

var() 메서드는 데이터프레임 또는 시리즈의 분산을 계산하는 데 사용된다. 분산은 데이터의 흩어진 정도를 나타내는 통계적 측도로, 값들이 평균으로부터 얼마나 멀리 퍼져 있는지를 나타낸다.

 

표준편차 구하기

std() 메서드란?

std() 메서드는 데이터프레임 또는 시리즈의 표준편차를 계산하는 데 사용된다. 표준편차는 데이터가 평균으로부터 얼마나 퍼져 있는지를 나타내는 통계적 측도이다.

 

최빈값 구하기

mode() 메서드란?

mode() 메서드는 데이터프레임 또는 시리즈의 최빈값을 계산하는 데 사용되며, 가장 자주 나타나는 값을 반환한다. 최빈값은 데이터에서 가장 빈번하게 나타나는 값이다.

 

산점도 그리기

산점도란?

두 변수 간의 관계를 표현하는 그래프 중 하나로, 두 개의 연속형 변수를 가지고 각각 x축, y축으로 사용하여 데이터를 좌표평면 상에 점으로 나타낸 그림이다.

맷플롯립이란?

파이썬에서 데이터를 시각화하는 데 사용되는 패키지 중 하나이다.

데이터를 준비 후 맷플로립 패키지를 임포트한다.

import matplotlib.pyplot as plt

matplotlib.pyplot 패키지란?

파이썬에서 데이터 시각화를 위해 사용되는 패키지 중 하나이다.

plt.scatter([1,2,3,4,], [1,2,3,4,])
plt.show()

scatter() 함수란?

scatter() 함수는 맷플롯립(matplotlib)에서 산점도를 그리는 함수이다. 두 개의 연속형 변수를 가지고 각각 x축, y축으로 사용하여 데이터를 좌표평면 상에 점으로 나타낸다.

 

plt.scatter(x, y)

x, y는 각각 x축, y축에 해당하는 값을 전달한다.

‘번호’ 열의 값을 x축에, ‘대출건수’ 열의 값을 y축에 넣은 것에 해당한다.

alpha 매개변수란?

산점도에서 점의 투명도를 조절하는 데 사용된다. 값이 작을수록 투명도가 높아지며(0=완전 투명), 값이 클수록 불투명해진다(1=완전 불투명).

 

히스토그램 그리기

히스토그램이란?

수치형 특성의 값을 일정구간으로 나누어 구간 안에 포함된 데이터 개수를 막대 그래프로 그린 것이다. 데이터의 분포 상태를 한눈에 파악할 수 있다. 구간 안에 속한 데이터 개수를 도수라고 부른다.

 

hist() 함수란?

matplotlib에서 히스토그램을 그리는 데 사용된다.

 

bins 매개변수란?

hist() 함수에서 bins 매개변수는 몇 개의 구간으로 데이터를 나눌 것인지를 지정한다. 기본값은 10이며, 값을 늘리면 구간의 수가 늘어나고, 값을 줄이면 구간의 수가 줄어든다.

주어진 데이터의 최솟값은 0이고 최댓값은 13이다. 데이터를 5개의 구간으로 나누었다.

 

histogram_bin_edges() 함수란?

넘파이에서 제공하는 함수로서, 히스토그램의 구간을 정확하게 확인할 수 있다.

이 함수를 통하여 위에 히스토그램의 구간을 정확하게 확인할 수 있다.

 

rand() 함수란?

넘파이에서 제공하는 함수 중 하나이다. 이 함수는 0과 1 사이의 균일 분포에서 무작위로 추출된 난수를 반환한다.

 

seed() 함수란?

seed() 함수는 난수 발생 패턴을 정함으로써 난수 발생을 조작할 수 있게 해주는 함수이다. 난수 발생 패턴을 고정하면 여러번 실행해도 항상 같은 결과가 나온다.

np.random.seed(42)
random_samples = np.random.randn(1000)

랜덤한 실수를 1000개 생성한 것이다.

 

구간 조정하기

yscale() 함수란?

Matplotlib에서 y-축의 스케일을 설정하는 데 사용되는 메서드이다. 이를 사용하여 y-축을 압축하거나 확장하여 데이터를 더 잘 맞출 수 있다.

y축은 밑이 10인 로그 함수로 변환

xscale() 함수란?

Matplotlib에서 x-축의 스케일을 설정하는 데 사용되는 메서드이다. 이를 사용하여 x-축을 압축하거나 확장하여 데이터를 더 잘 맞출 수 있다.

 

상자 수염 그림 그리기

상자 수염 그림이란?

데이터의 분포와 이상치(outlier)를 확인하는 데 사용되는 그래프이다. 상자 수염 그림은 데이터의 최솟값, 제1사분위수, 중앙값, 제3사분위수, 최댓값으로 구성되며, 이상치는 점으로 나타난다.

 

사분위수란?

사분위수는 데이터를 크기순으로 정렬했을 때, 4등분한 지점을 말한다. 즉, 제1사분위수(Q1), 제2사분위수(Q2, 혹은 중앙값), 제3사분위수(Q3)로 나뉩니다. 이 중에서 제2사분위수는 중앙값을 의미하며, 데이터의 중간값을 나타냅니다. 제1사분위수는 데이터의 하위 25%를 나타내며, 제3사분위수는 데이터의 상위 25%를 나타낸다.

 

상자 수염 그림 그리는 법

  1. 먼저 사분위수를 계산한다. 25%와 75% 지점을 밑면과 윗면으로 하는 직사각형을 그린다.
  2. 중간값, 즉 50%에 해당하는 지점에 수평선을 긋는다.
  3. 사각형의 밑면과 윗면에서 사각형의 높이의 1.5배만큼 떨어진 거리 안에서 가장 멀리 있는 샘플까지 수직선을 긋는다.
  4. 이 수직선 밖에서 최솟값과 최댓값까지 데이터를 점으로 표시한다. 이 영역의 데이터를 이상치라고 부른다.

IQR이란?

상자 수염 그림에서 사용되는 통계적 개념으로, 제1사분위수(25% 백분위수)와 제3사분위수(75% 백분위수) 사이의 범위를 의미한다. 즉, 데이터의 중간 50% 범위를 나타낸다.

 

boxplot() 함수란?

boxplot() 함수는 Matplotlib에서 상자 수염 그림을 만드는 데 사용된다. 이 그림은 수치 데이터의 하나 이상의 그룹의 분포를 사분위수를 통해 시각화하는 데 사용된다. 상자는 사분위 범위(IQR)를 나타내며, 수염은 상자 가장자리에서 1.5 * IQR 이내의 가장 작은 값과 가장 큰 값까지 확장된다. 이 범위를 벗어나는 모든 데이터 포인트는 이상치로 간주되어 개별 포인트로 표시된다.

1번 상자(대출건수)와 2번 상자(도서권수) 데이터의 상자 수염 그림이다. 2번 상자(도서권수)는 y축을 로그 스케일로 바꾸어도 ‘도서권수’의 열의 사분위수는 모두 1이기 때문에 상자가 보이지 않는다.

 

상자 수염 그림 수평으로 그리기

vert 매개변수란?

vert 매개변수는 boxplot() 함수에서 사용되며, 상자 수염 그림의 방향을 수직 또는 수평으로 설정하는 데 사용된다. 기본값은 True(수직)이다. False로 설정하면 수평 상자 수염 그림을 그릴 수 있다.

 

수염 길이 조정하기

whis 매개변수란?

whis 매개변수는 IQR의 범위를 계산할 때 사용되는 값의 범위를 지정하는 데 사용된다. 이 값을 높게 설정하면 수염의 길이가 더 길어져서 이상치를 더 많이 보여준다. 기본값은 1.5이다.

plt.boxplot(ns_book7[['대출건수','도서권수']], whis=(0,100))
plt.yscale('log')
plt.show()

수염의 길이를 백분위로 지정할 수 있다. 위의 코드는 0%~100%로, 모든 데이터의 수염을 그릴 수 있다.

 

<통계량을 시각적으로 표현>

  1. 산점도 - 데이터를 2차원 평면에 점으로 표시
  2. 히스토그램 - 구간에 속한 데이터 개수를 막대 그래프로 표시
  3. 상자 수염 그림 - 사분위수와 최솟값, 최댓값을 사용해 그림으로 표시