이상치가 없는 Seaborn Boxplot

Salman Mehmood 2024년2월15일
이상치가 없는 Seaborn Boxplot

이 기사는 상자 그림과 이상값이 무엇인지, 수정된 상자 그림을 만드는 방법, Seaborn에서 이상값을 제거하기 위해 5개 숫자 요약을 활용하는 방법을 설명하는 것을 목표로 합니다.

Seaborn에서 이상값이 없는 Boxplot 만들기

상자 그림은 기술 통계 평균, 중앙값 1사분위, 2사분위, 3사분위 및 최소-최대 값을 시각화하기 위한 통계 플롯입니다. 이상값은 나머지 데이터 그룹 외부의 숫자입니다.

필요한 패키지를 프로그램으로 가져오겠습니다.

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd

이제 Seaborn 라이브러리에 이미 사전 로드된 tips 데이터 세트에 대해 작업할 것입니다.

TIPS = sb.load_dataset("tips")
TIPS.head()

데이터 세트를 살펴보겠습니다. 이 데이터 세트는 여러 열이 있는 식당에 관한 것입니다.

팁 데이터 세트

boxplot() 메서드를 사용하여 박스 플롯을 플롯하고 데이터 세트에서 열을 전달해야 합니다.

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd

TIPS = sb.load_dataset("tips")

sb.boxplot(TIPS["total_bill"])
plot.show()

출력:

총액

이제 점으로 표시된 점이 나머지 모든 점에서 멀리 떨어져 있는 것을 볼 수 있으므로 이는 이상치 상황과 같습니다. 이 열의 통계를 계산하여 이상값을 확인하는 또 다른 방법이 있습니다.

TIPS["total_bill"].describe()

describe() 함수는 자동으로 통계를 계산하고 3사분위수는 24임을 알 수 있습니다. 최대값과 3사분위수는 많은 차이가 있음을 알 수 있습니다.

설명 함수 사용

이 상황을 처리하는 방법을 살펴보겠습니다. 이상값을 제거하는 두 가지 솔루션이 있습니다. 첫 번째 솔루션은 이 이상값을 데이터 세트에서 직접 제거하는 것이고 두 번째는 이러한 이상값 값을 적절한 값으로 대체하는 것입니다.

첫 번째 솔루션을 살펴보겠습니다. 이 솔루션에서 첫 번째 및 세 번째 사분위수에 대한 조건을 설정해야 합니다.

TIPS = TIPS[(TIPS.total_bill <= 24) & (TIPS.total_bill >= 13)]

완전한 소스 코드는 이상치 없이 여기에 있습니다.

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd

TIPS = sb.load_dataset("tips")
TIPS = TIPS[(TIPS.total_bill <= 24) & (TIPS.total_bill >= 13)]

sb.boxplot(TIPS["total_bill"])
plot.show()

이제 조건 연산자에 의해 이 이상값을 제거했기 때문에 이상값이 없음을 확인할 수 있습니다.

이상치 없음

첫 번째 솔루션은 매번 작동하지 않습니다. 이상값을 직접 제거하면 데이터 세트에서 중요한 정보를 잃게 되므로 이 이상값을 적절한 값으로 변환할 수 있습니다.

따라서 이 이상값을 적절한 값으로 변환해야 하며, 3분위 범위가 24를 벗어나면 3분위를 24로 대체할 것입니다.

TIPS["new_total_bill"] = np.where(TIPS["total_bill"] >= 24, 24, TIPS["total_bill"])

전체 소스 코드:

import seaborn as sb
import matplotlib.pyplot as plot
import numpy as np
import pandas as pd

TIPS = sb.load_dataset("tips")

TIPS["new_total_bill"] = np.where(TIPS["total_bill"] >= 24, 24, TIPS["total_bill"])
sb.boxplot(TIPS["new_total_bill"])
plot.show()

출력:

새 총 청구서

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn