Seaborn을 사용한 데이터 시각화에 대한 포괄적 인 소개 : 분포도

Python을 사용한 COVID-19 발생 데이터 시각화

여러분, Seaborn 소개에 오신 것을 환영합니다. 다음 시리즈에서는 Seaborn 라이브러리의 핵심 개념, 장점 및 사용 방법과시기를 살펴 보겠습니다.

Unsplash에 Clay Banks의 사진

전체 시리즈는 전 세계의 다양한 코로나 바이러스 데이터 세트를 기반으로합니다. 시계열 데이터, 인구 통계, 코로나가 다양한 산업에 미치는 영향의 경제성 등을 살펴 보겠습니다! 모든 데이터 세트는 공개적으로 사용할 수 있습니다. 우리는 그것들을 하나씩 탐구하고 개별 변수 간의 관계를 탐구하는 방법에 대해 다른 방법에 익숙해 질 것입니다.

Seaborn

Python의 라이브러리 환경은 풍부하며 종종 서로 겹칩니다. 그래서 우리는 지금 어디에 있습니까? Seaborn은 Matplotlib 위에 구축되었으며 시각적으로 데이터를 탐색 할 때 함께 잘 작동합니다. 이 패키지는 통계 그래픽을 지향하며 신뢰 구간 또는 KDE로 알려진 커널 밀도 추정으로 시작하는 많은 기능을 제공합니다. 이 용어는 나중에 설명하겠습니다. 이 외에도 Seaborn은 Pandas와 잘 작동하며 DataFrame 구조입니다.

Seaborn은 Matplotlib의 통계적 확장이라고 말할 수 있습니다. 라이브러리에는 데이터를 더 잘 이해하는 데 도움이되는 많은 기능이 있습니다. 라이브러리는 시각화 및 데이터 탐색을 데이터 분석의 중심에두고 있습니다. 패키지를 특별하게 만드는 요소 중 하나는 여러 변수 간의 관계를 분석하는 데 사용할 수있는 광범위한 플롯입니다. Seaborn은 범주 형 변수와도 잘 작동하며 집계 된 통계 및 개수 플롯을 표시합니다.
다른 멋진 기능으로는 이변 량 그래프와 다중 플롯 그리드가 있습니다. 이러한 도구는 표 형식 데이터에 표시되지 않는 기본 관계를 이해할 수있게 해주는 훌륭한 도구입니다. 여러 변수 간의 상관 관계를 즉시 확인할 수 있습니다.
언급 할 가치가있는 것은 스타일링과 분석 된 데이터 세트의 전체적인 모습입니다. 다양한 배경 스타일, 색상 팔레트 및 기타 사용자 정의 기능은 청중의 데이터 이해도를 향상시킵니다. 통찰력을 높이려면 결과를 정확하고 적절하게 전달해야합니다. Seaborn은이를 지원하는 실용적인 도구를 가지고 있습니다.

Seaborn & Pandas

Seaborn은 Pandas Dataframe과 잘 작동하도록 설계되었습니다. 언급해야 할 중요한 점은 Pandas 용 데이터 세트가 구성되거나 깔끔해야한다는 것입니다. 깔끔한 데이터 세트에서 각 행은 관찰을 나타내며 각 열은 변수이며 종종 특성이라고도합니다. 라이브러리가 제대로 작동하기를 원한다면 데이터를 먼저보고 이해하는 것이 중요합니다. 데이터 세트가 깔끔한 지 확인하려면 .head () 및 .tail () 메서드를 사용해보십시오.

Seaborn 대 Matplotlib

Python 코드에서 약어 SNS를 본 적이 있다면 Seaborn을 의미합니다. 가져 오기는 다른 파이썬 라이브러리와 마찬가지로 간단합니다. seaborn과 함께 Matplotlib lib Pyplot을 가져와 두 가지의 시너지를 활용해야합니다. 대부분의 작업은 seaborn이 수행 할 수 있지만 Matplotlib는 기능의 일부를 추가합니다.

라이브러리 가져 오기 :

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

기본 데이터 소스는 Kaggle에서 사용할 수 있습니다.

전 세계 정보 코로나 바이러스 개별 사례가 포함 된 'COVID19_open_line_list.csv'로 시작하겠습니다.

#loading the data
df = pd.read_csv("novel-corona-virus-2019-dataset 2/COVID19_open_line_list.csv")

#checking the structure
df.head()

#checking the shape
df.shape

(14126, 45)

#checking the columns
df.columns

Index(['ID', 'age', 'sex', 'city', 'province', 'country',
       'wuhan(0)_not_wuhan(1)', 'latitude', 'longitude',     'geo_resolution',
       'date_onset_symptoms', 'date_admission_hospital', 'date_confirmation',
       'symptoms', 'lives_in_Wuhan', 'travel_history_dates',
       'travel_history_location', 'reported_market_exposure',
       'additional_information', 'chronic_disease_binary', 'chronic_disease',
       'source', 'sequence_available', 'outcome', 'date_death_or_discharge',
       'notes_for_discussion', 'location', 'admin3', 'admin2', 'admin1',
       'country_new', 'admin_id', 'data_moderator_initials', 'Unnamed: 33',
       'Unnamed: 34', 'Unnamed: 35', 'Unnamed: 36', 'Unnamed: 37',
       'Unnamed: 38', 'Unnamed: 39', 'Unnamed: 40', 'Unnamed: 41',
       'Unnamed: 42', 'Unnamed: 43', 'Unnamed: 44'],
      dtype='object')

중요한 것은 seaborn의 데이터 세트가 깔끔해야한다는 것입니다. 따라서 우리는 기본적인 데이터 변환을 수행합니다. 연령에 대한 nan 값을 제거하고 범위와 모든 비 숫자 값을 제거합니다.

#keeping only numeric, not nan values and casting to integer type
df_age = df[df['age'].notna()]
df_age = df_age[df_age['age'].str.isnumeric()]
df_age['age'] = df_age['age'].astype(str).astype(int)

Seaborn을 사용한 분포도

데이터 세트를 분석 할 때 한 번에 하나의 변수로 시작합니다. 데이터가 어떻게 분포되어 있는지 확인하는 것은 일 변량 분석의 일부입니다. 이를 위해 분포도, 산점도 또는 히스토그램이 있습니다.

첫 번째 분포도를 플로팅하거나, distplot () of age라는 Seaborn에서와 같이 플로팅합니다.

sns.distplot(df_age['age'])
plt.show()

Seaborn과 Matplotlib를 비교하기 위해 동일한 그래프를 플로팅 해 보겠습니다.

#plot the same histogram with matplotlib
df_age['age'].plot.hist()
#show the plot
plt.show()

첫눈에 Seaborn과 Matplolib의 차이점을 발견 할 수 있습니다. 색상이 음소거됩니다. Seaborn에서 x 축과 좀 더 유기적으로 정의 된 빈에 레이블을 지정했습니다. 그 위에 커널 밀도 추정 (KDE)이라는 분포를 설명하는 줄을 참조하세요.

통계에서 커널 밀도 추정 ( KDE )은 랜덤 변수의 확률 밀도 함수를 추정하는 비모수 적 방법입니다. 커널 밀도 추정은 유한 데이터 샘플을 기반으로 모집단에 대한 추론이 이루어지는 기본적인 데이터 평활화 문제입니다.

출처: https://en.wikipedia.org/wiki/Kernel_density_estimation

시각화를 기반으로 확인 된 사례의 대부분이 35 ~ 55 년 사이라고 말할 수 있습니다.

Seaborn의 플롯에 언제든지 몇 가지 사용자 정의를 추가 할 수 있습니다.

  • 스타일 설정
  • kde = False로 KDE 플롯 제거
  • 또는 색상 변경

#set sns style as sns.set()
sns.set()
#create distplot without kde:
sns.distplot(df_age[‘age’], kde=False, color = 'y')
#show the plot()
plt.show()

#create vertical ditplot
sns.distplot(df_age['age'], kde = False, vertical=True, color="y")
#show the plot()
plt.show()

다른 관점에서 분포를보고 싶다면 Seaborn은 각 관찰을 나타내는 작은 수직선을 그리는 문지름 플롯도 제공합니다.

#create ditplot with rugplot and 
sns.distplot(df_age['age'], rug=True, color="g")
#show the plot()
plt.show()

두 변수 간의 분포를 이해하는 가장 일반적인 차트는 다음과 같습니다.

  • 선 플롯
  • 산점도
  • 또는 쌍 플롯

일부 데이터 변환 단계 후에는 다음과 같은 DataFrame이 있습니다.

df_cases_a.head()

앞서 언급 한 것처럼 그래프를 그리는 방법은 더 많이 있습니다. 대부분의 경우 .relplot ()으로 작업합니다.

이 함수는 하위 집합의 의미 매핑을 사용하여 두 변수 간의 관계를 보여주는 여러 축 수준 함수에 대한 액세스를 제공합니다. 이 kind매개 변수는 사용할 기본 축 수준 함수를 선택합니다.

  • scatterplot()(사용 kind="scatter"; 기본값)
  • lineplot()(와 함께 kind="line")

선 그림부터 시작하겠습니다. 선 그림은 직선으로 연결된 점 형태로 정보를 표시합니다. 꺾은 선형 차트는 시계열 시각화 또는 연속 변수의 추세를 표시하는 데 자주 사용됩니다. 여기에 하나를 플로팅 해 보겠습니다.

#create lineplot of ’day_since_first_confirmed’ and ’Confirmed’
sns.relplot(x=’day_since_first_confirmed’, y=’Confirmed’,kind = ‘line’, data=df_cases_a)

여기에 보이는 것은 첫 번째 환자가 전 세계적으로 COVID-19로 진단 된 이후 매일 확인 된 사례 수를 연결하는 선입니다. 음영 영역은 각 관측치에 대한 데이터를 집계 할 때 그려지는 신뢰 구간의 크기입니다. 기본적으로 평균이지만 estimator = 'std'를 설정하는 표준 편차로 대체 될 수 있습니다.

#change estimator parameter to std
sns.relplot(x=’day_since_first_confirmed’, y=’Confirmed’,kind = ‘line’, data=df_cases_a, estimator = ‘std’)
#show the plot
plt.show()

시각화에 더 많은 값을 표시하려는 경우가 종종 있습니다. 언제든지 색상, 마커 및 기타 매개 변수의 형태로 치수를 추가 할 수 있습니다.

#set hue=‘continent’ parameter and set ci=None
sns.relplot(x=’day_since_first_confirmed’, y=’Confirmed’,kind = ‘line’, data=df_cases_a, hue=’continent’, ci = None)
#show the plot()
plt.show()

#set hue=‘continent’ parameter and set ci=None
sns.relplot(x=’day_since_first_confirmed’, y=’Confirmed’,kind = ‘line’, data=df_cases_a, hue=’continent’, ci = None)
#show the plot()
plt.show()

플롯을 사용자 정의하려면 언제든지 마커를 추가 할 수 있습니다.

#set marker='o'.
sns.relplot(x='day_since_first_confirmed', y='Confirmed',kind = 'line', data=df_cases_a, hue='continent', marker='o', ci = None)
#show the plot
plt.show()

차트에서 더 잘 탐색 할 수 있도록 마커도 배치하는 것이 유용한 경우가 많습니다. 이 경우 차트의 가시성과 방향은 극단적 인 값으로 인해 문제가됩니다. 이러한 상황을 피하기 위해 로그 함수를 사용하고 대륙의 각 값에 대해 다른 마커를 추가 할 수 있습니다. marker = True 및 style = 'continent'를 설정합니다.

#add log_value of confirmed cases for all 3 variables
df_cases_a['log_value_confirmed'] = np.log(df_cases_a['Confirmed'])
df_cases_a['log_value_deaths'] = np.log(df_cases_a['Deaths'])
df_cases_a['log_value_recovered'] = np.log(df_cases_a['Recovered'])
#set parameter markers to True and style='continent'
sns.relplot(x='day_since_first_confirmed', y='log_value_confirmed',kind = 'line', data=df_cases_a, hue='continent', style = 'continent', ci = None, markers = True)
#show the plot
plt.show()

대륙 변수의 각 값은 마커를 얻었으며 확인 된 사례의 척도는 이제 서로 비교 가능합니다. 로그 변환은 분포 가 심하게 치우친 경우에 적용됩니다 . 패턴을 찾거나 데이터를 더 잘 해석 할 수있게 만드는 것은 예측 모델링에서 중요한 역할을합니다.

산점도

두 변수 간의 관계를 살펴 보겠습니다. 두 변수와 그 분포를 비교하는 편리한 방법은 산점도를 사용하는 것입니다. 각 점은 관찰을 나타냅니다. 가장 많은 50 개국에서 확진, 사망, 회복 된 사례의 최대 값을 살펴 보겠습니다. 산점도를 표시하려면 kind = 'scatter'를 설정합니다.

#plot a scatterplot with 'Confirmed' on x and 'Deaths' on y-axis
sns.relplot(x = 'Confirmed', y= 'Deaths', kind='scatter', data=df_cases_scatter)
#show the plot()
plt.show()

로그 변환 외에도 차원을 추가해 보겠습니다. 'col'매개 변수를 사용하면 변수 값을 개별적으로 표시 할 수 있습니다. col = 'continent'및 col_wrap = 3을 설정하여 행당 3 개의 플롯 만 갖도록합니다.

#plot a scatterplot with 'Confirmed' on x and 'Deaths' on y-axis
sns.relplot(x = 'log_value_confirmed', y= 'log_value_deaths', kind='scatter', 
            data=df_cases_scatter, col='continent', col_wrap=3)
#show the plot()
plt.show()

분석에 차원을 포함하면 데이터를 포괄적으로 이해하는 데 도움이됩니다. 오세아니아의 수가 왜 그렇게 낮은 지, 왜 미국과 유럽이 그렇게 큰 영향을 받는지 등을 가정 할 수 있습니다.

hue = 'continent', size = 'log_value_recovered'를 설정하거나 markers = True 및 style = 'continent'를 설정하면 한 번에 더 많은 차원이 포함 된 단순하지만 더 많은 정보가 풍부한 플롯에 도달 할 수 있습니다.

#assign 'continent' to hue and log_value_recovered to size
sns.relplot(x = 'log_value_confirmed', y= 'log_value_deaths', kind='scatter', 
            data=df_cases_scatter, hue ='continent', size = 'log_value_recovered')
#show the plot
plt.show()

또한 더 나은 해석 성을 위해 마커 = True, style = 'continent'및 alpha = 0.8 (80 %) 설정 :

그룹 관찰에 다른 색상이나 마커를 적용하여 더 자세한 정보를 제공하는 것이 일반적입니다. 특정 값을 기준으로 각 점 크기를 지정하고 거품 형 차트를 만들 수도 있습니다.

합동 플롯

Seaborn 라이브러리는 또한 다음 단계의 분포도 인 공동 플롯을 제공합니다. 공동 플롯. Seaborn의 조인트 플롯은 두 변수와 공통 및 개별 분포 사이의 관계를 보여줍니다. 한 번 생성하려면 .joinplot ()을 사용하십시오.

#jointplot of log_value_confirmed and log_value_deaths
sns.jointplot(x=’log_value_confirmed’,y=’log_value_deaths’,
data=df_cases_scatter)
#show the plot
plt.show()

다음과 같은 여러 가지 조인트 플롯 차트 스타일이 있습니다.

  • reg 플롯
  • 16 진 플롯
  • KDE 플롯

#jointplot of log_value_confirmed and log_value_deaths, regression
sns.jointplot(x=’log_value_confirmed’,y=’log_value_deaths’,data=df_cases_scatter, kind=’reg’, color=’y’)
#show the plot
plt.show()
#jointplot of log_value_confirmed and log_value_deaths, hex sns.jointplot(x=’log_value_confirmed’,y=’log_value_deaths’,data=df_cases_scatter, kind=’hex’, color=’b’) #show the plot plt.show()
#jointplot of log_value_confirmed and log_value_deaths, kde sns.jointplot(x=’log_value_confirmed’,y=’log_value_deaths’,data=df_cases_scatter, kind=’kde’, color=’g’) #show the plot plt.show()

편집자 참고 : Towards Data Science 는 주로 데이터 과학 및 기계 학습 연구를 기반으로하는 Medium 간행물입니다. 우리는 건강 전문가 나 역학자가 아니며이 기사의 의견을 전문적인 조언으로 해석해서는 안됩니다. 코로나 바이러스 전염병에 대해 자세히 알아 보려면 여기 를 클릭 하십시오 .

LinkedIn에서 나를 따르라

및 트위터 :

출처 :

Suggested posts

베이지안 확산 모델링을 사용한 고급 예측

베이지안 확산 모델링을 사용한 고급 예측

데이터 과학의 모든 영역에서 동적 현상을 예측하고 설명하기위한 혁신적인 모델링 솔루션에 대한 수요가 많습니다. 모델링 및 동적 현상 예측의 높은 프로필 사용 사례는 다음과 같습니다. 오픈 소스 데이터 세트에 적용된 베이지안 확산 모델링을 보여주는 종단 간 예제가 제공됩니다.

비용이 많이 드는 앱은 무료 앱보다 높은 평가를 받습니까?

비용이 많이 드는 앱은 무료 앱보다 높은 평가를 받습니까?

애플리케이션의 평균 사용자 평점은 사용자가 앱을 즐기는 지 여부와 앱의 성공 수준을 결정하는 데 도움이되는 훌륭한 지표입니다. 사용자가 응용 프로그램을 구입해야하는 경우 응용 프로그램에 대한 표준이 무료 응용 프로그램에 비해 높습니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.