'Python, R 분석과 프로그래밍/데이터 시각화'에 해당되는 글 3건

  1. 2024.01.06 [python] gapminder 데이터 셋으로 여러가지 그래프 그리기 2
  2. 2024.01.05 [python] 버블차트 그리기 2
  3. 2024.01.04 [python] 박스 플롯 그리기
반응형

Gapminder 데이터셋은 세계 각 국가에 대한 시간에 따른 다양한 경제 지표 및 사회 지표를 수집한 데이터입니다. 이 데이터셋은 Gapminder Foundation에서 수집하고 제공하며, 세계의 국가들에 대한 주요 지표들의 시계열 데이터를 담고 있습니다. Gapminder 데이터셋에 포함된 주요 변수들로는 국내총생산(Gross Domestic Product, GDP), 인구, 기대수명, 출생률, 사망률, 대륙 등이 있습니다. 이 데이터셋은 연도별로 국가들의 상황을 기록하고 있어, 다양한 시각화 및 데이터 분석에 활용됩니다.

 

 

 

(1) 데이터 불러오기

# 라이브러리 불러오기
import pandas as pd
from gapminder import gapminder

# 데이터 불러오기
data = gapminder.copy()

# 데이터 크기 확인
data.shape

 

[결과값]

(1704, 6)

 

(2) 데이터 살펴보기

#데이터 정보 요약
data.info()

 

[결과값]

전체 행의 수는 1704이고, 총 6개의 열을 가지고 있습니다. 데이터 타입은 문자열(object), 정수(int64), 실수(float64)로 구성되어 있고 누락된 값은 없습니다.

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1704 entries, 0 to 1703
Data columns (total 6 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   country    1704 non-null   object 
 1   continent  1704 non-null   object 
 2   year       1704 non-null   int64  
 3   lifeExp    1704 non-null   float64
 4   pop        1704 non-null   int64  
 5   gdpPercap  1704 non-null   float64
dtypes: float64(2), int64(2), object(2)
memory usage: 80.0+ KB

 

(3) 여러가지 그래프를 그려보자

# 미국의 GDP 시계열 데이터
usa_data = data[data['country'] == 'United States']
plt.figure(figsize=(12, 6))
plt.plot(usa_data['year'], usa_data['gdpPercap'], marker='o')
plt.title('GDP per Capita Over Time (United States)')
plt.xlabel('Year')
plt.ylabel('GDP per Capita')
plt.show()

 

이 그래프를 통해 미국의 GDP per Capita가 연도에 따라 어떻게 변화했는지를 시각적으로 확인할 수 있습니다. 경제 성장이나 감소, 특정 시기의 변동성 등을 파악할 수 있습니다.

  1. X 축 (Year): 그래프의 x 축은 연도를 나타냅니다. 1952년부터 2007년까지의 미국의 GDP per Capita 변화를 보여줍니다.
  2. Y 축 (GDP per Capita): 그래프의 y 축은 GDP per Capita를 나타냅니다. 이 값은 해당 연도의 미국의 GDP를 인구 수로 나눈 값으로, 1인 당 평균 GDP를 의미합니다.
  3. 그래프의 형태: 그래프는 각 연도별로 미국의 GDP per Capita를 나타내는 점(line plot)으로 표현되어 있습니다. 각 점은 해당 연도의 GDP per Capita를 나타냅니다.
  4. Marker='o': 각 데이터 포인트는 동그라미(o)로 표시되어 있습니다.
  5. 그래프 제목: "GDP per Capita Over Time (United States)"라는 제목을 추가하였습니다.
  6. X 축 레이블 (Year): X 축에는 "Year"라는 레이블이 붙어 있어, X 축이 연도를 나타내는 것을 알려줍니다.
  7. Y 축 레이블 (GDP per Capita): Y 축에는 "GDP per Capita"라는 레이블이 붙어 있어, Y 축이 GDP per Capita를 나타내는 것을 알려줍니다.

 

 

# Top 10국가의 1인당 GDP 시각화
plt.figure(figsize=(14, 8))
sns.barplot(x='gdpPercap', y='country', data=top_gdp_countries, palette='viridis')
plt.title('Top 10 Countries by GDP per Capita (2007)')
plt.xlabel('GDP per Capita')
plt.ylabel('Country')
plt.show()

 

 

위 코드는 2007년 기준으로 상위 10개 국가의 1인당 GDP를 막대 그래프로 시각화하여 1인당 GDP가 높은 국가들을 한 눈에 볼 수 있는 장점이 있습니다.

 

 

#기대수명 vs. 1인당 GDP 산점도 그래프
plt.figure(figsize=(12, 8))
sns.scatterplot(x='gdpPercap', y='lifeExp', data=data_2007, hue='continent', palette='Set2', size='pop', sizes=(20, 2000))
plt.title('Life Expectancy vs. GDP per Capita (2007)')
plt.xlabel('GDP per Capita')
plt.ylabel('Life Expectancy')
plt.legend(title='Continent', loc='upper left')
plt.show()

 

  1. plt.figure(figsize=(12, 8)): 새로운 그림(figure)을 생성하고, 그림의 크기를 설정합니다. 이 경우에는 가로 12인치, 세로 8인치의 크기로 설정했습니다.
  2. sns.scatterplot(x='gdpPercap', y='lifeExp', data=data_2007, hue='continent', palette='Set2', size='pop', sizes=(20, 2000)): seaborn 라이브러리의 scatterplot 함수를 사용하여 산점도 그래프를 생성합니다. 
    • x='gdpPercap': x 축에는 1인당 GDP를 사용합니다.
    • y='lifeExp': y 축에는 기대수명을 사용합니다.
    • data=data_2007: 그래프에 사용할 데이터는 2007년의 데이터로 한정됩니다.
    • hue='continent': 대륙별로 데이터를 구분하여 다른 색상으로 표시합니다.
    • palette='Set2': 그래프에 사용할 색상 팔레트를 'Set2'로 지정합니다.
    • size='pop': 각 점의 크기는 해당 국가의 인구 크기로 나타냅니다.
    • sizes=(20, 2000): 인구 크기에 따라 표시되는 점의 크기 범위를 설정합니다.
  3. plt.legend(title='Continent', loc='upper left'): 대륙별로 다른 색상으로 표시된 점들에 대한 범례(legend)를 설정합니다. 범례의 위치는 왼쪽 상단으로 설정되어 있습니다.
  4. plt.show(): 그래프를 표시합니다.
# 상자 그림 (Box Plot) - 대륙 별 기대수명 (2007)
sns.boxplot(data=data[data['year'] == 2007], x='continent', y='lifeExp', palette='Set2')
plt.title('Box Plot - Life Expectancy by Continent (2007)')
plt.show()

 

위 코드는 2007년 기준으로 대륙별 기대수명에 대한 상자 그림(Box Plot)을 생성하는 코드입니다. 이 그래프를 통해 대륙별로 기대수명의 분포를 시각적으로 확인할 수 있습니다. 각 대륙의 중앙값, 사분위수, 이상치 등이 상자 그림으로 표현되어 있습니다.

반응형
Posted by 마르띤
,
반응형

Google에서 bubble chart로 검색을 해 보았다.

 

A bubble chart is a type of chart that displays three dimensions of data. Each entity with its triplet (v1, v2, v3) of associated data is plotted as a disk that expresses two of the vi values through the disk's xy location and the third through its size.

 

해석을 하자면 버블 차트는 데이터의 세 가지 차원을 표현하는 차트 중 하나입니다. 각 엔터티는 연관된 데이터의 세 값 (v1, v2, v3)을 가지며, 이를 디스크로 표현하여 디스크의 xy 위치로 두 개의 vi 값과 크기로 세 번째 값을 나타냅니다.

 

개념과 그래프의 예시는 아래 위키피디아 링크를 가보면 된다.

https://en.wikipedia.org/wiki/Bubble_chart

 

Bubble chart - Wikipedia

From Wikipedia, the free encyclopedia Type of chart Bubble chart displaying the relationship between poverty and violent and property crime rates by state. Larger bubbles indicate higher percentage of state residents at or below the poverty level. Trend su

en.wikipedia.org

 

seaborn 패키지와 함께 그릴 수 있는 예제도 검색하면 쉽게 찾아볼 수 있다. 

https://python-graph-gallery.com/bubble-plot-with-seaborn/

 

Bubble Plot with Seaborn | The Python Graph Gallery

How to draw a bubble plot using the scatterplot function of seaborn library

python-graph-gallery.com

 위 링크의 예시를 하나 가져와보자. gapminder 데이터 패키지를 설치하면 쉽게 그려볼 수 있다. gapminder는 국가별 경제 수준과 의료 수준 동향을 정리한 DataSet으로 분석에 다양하게 쓰인다. 

 

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns
from gapminder import gapminder # import data set 

# 사이즈 크기 설정
plt.rcParams['figure.figsize'] = [8, 8]

# 데이터 가져오기
data = gapminder.loc[gapminder.year == 2007]
 
# 버블차트를 그리기
sns.scatterplot(data=data, x="gdpPercap", y="lifeExp", size="pop", legend=False, sizes=(20, 2000))

# 그래프 출력
plt.show()

 

[결과값]

파이썬 공부를 해 본 사람이라면 한번씩은 봤을 그 그래프다!

(1) 버블차트를 그리는 방법은 다양하다.

import matplotlib.pyplot as plt
import numpy as np

# 데이터 생성
num_points = 30
x = np.random.rand(num_points)
y = np.random.rand(num_points)
sizes = np.random.rand(num_points) * 100  # 크기 정보

# 버블 차트 그리기
plt.scatter(x, y, s=sizes, alpha=0.5)

# 그래프 설정
plt.title('Bubble Chart Example')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.grid(True)

# 그래프 표시
plt.show()

 

[결과값]

버블 차트(Bubble Chart)는 산점도(Scatter Plot)와 유사하지만, 각 데이터 포인트에 크기 정보를 추가한 그래프입니다. 각각의 데이터 포인트는 x축, y축으로 위치가 지정되고, 동시에 해당 데이터 포인트의 크기가 버블의 크기로 표현됩니다. 파이썬에서 버블 차트를 그리기 위해 주로 matplotlib 라이브러리를 사용합니다. 이 코드에서는 plt.scatter 함수를 사용하여 각 데이터 포인트를 표현하고, s 인자를 통해 크기 정보를 전달합니다. alpha 인자는 투명도를 나타내며, 0에서 1 사이의 값을 가집니다. num_points 변수를 통해 데이터 포인트의 개수를 조절하고, sizes 배열을 통해 각 데이터 포인트의 크기를 랜덤하게 생성합니다. 그 결과로 더 많은 버블이 표현된 그래프가 나타납니다. 데이터의 특성에 따라서 원하는 개수나 크기로 조절하실 수 있습니다.

 

(2) 버블차트의 색상을 다양하게 그려보자

import matplotlib.pyplot as plt
import numpy as np

# 데이터 생성
num_points = 30
x = np.random.rand(num_points)
y = np.random.rand(num_points)
sizes = np.random.rand(num_points) * 100  # 크기 정보
colors = np.random.rand(num_points)  # 색상 정보

# 버블 차트 그리기
plt.scatter(x, y, s=sizes, c=colors, cmap='viridis', alpha=0.5)

# 컬러바 추가
plt.colorbar()

# 그래프 설정
plt.title('Colored Bubble Chart Example')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.grid(True)

# 그래프 표시
plt.show()

 

[결과값]

위 코드에서는 c 매개변수를 통해 각 데이터 포인트의 색상을 설정하고, cmap 매개변수로는 사용할 컬러 맵을 지정합니다. 여기서는 'viridis' 컬러 맵을 사용하였습니다. 그리고 plt.colorbar() 함수를 사용하여 컬러바를 추가하였습니다. 컬러 맵은 matplotlib에서 제공하는 여러 가지 컬러 스키마 중에서 선택할 수 있습니다. 

 

반응형
Posted by 마르띤
,
반응형

(1) boxplot은 왜 쓸까?

박스 플롯(Box Plot)은 통계적 데이터의 요약된 시각화 도구로, 데이터의 중앙 경향, 분포, 이상치를 효과적으로 보여주는 차트입니다. 다른 이름으로는 상자 수염 그림(Box-and-Whisker Plot)이라고도 불립니다. 박스 플롯은 다음과 같은 주요 구성 요소로 이루어져 있습니다:

 

1. 상자 (Box):

- 상자의 하단 변은 데이터의 1사분위수(Q1)를 나타냅니다.

- 상자의 상단 변은 데이터의 3사분위수(Q3)를 나타냅니다.

- 상자의 중앙에 수평선은 데이터의 중앙값(median)을 나타냅니다.

 

2. 수염 (Whiskers):

- 수염은 데이터의 최솟값과 최댓값을 나타냅니다. 일반적으로 1.5배의 사분위 범위(IQR)를 벗어나는 값은 이상치로 간주됩니다.

 

3. 이상치 (Outliers):

- 수염 부분을 벗어나는 점은 이상치로 간주됩니다.

 

박스 플롯은 데이터의 분포를 쉽게 이해하고, 여러 그룹 간의 비교를 통해 통계적 특성을 시각적으로 비교할 수 있는 강력한 도구입니다. 특히, 중앙값과 사분위수를 통해 데이터의 중심 경향과 분포를 한눈에 파악할 수 있어 다양한 분야에서 널리 사용되고 있습니다.

 

(2) boxplot 한 개를 그려보자

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import numpy as np

# 예제 데이터 생성
np.random.seed(10) # 난수 생성 시드 설정
data = np.random.normal(0, 1, 100) # 평균이 0이고 표준 편차가 1인 정규 분포에서 100개의 데이터 생성

# 그래프 사이즈 조정
fig = plt.figure(figsize =(10, 7))

# 박스 플롯 그리기
plt.boxplot(data)

# 그래프 표시
plt.show()

 

[결과값]

위 코드를 실행하면 평균이 0이고 표준 편차가 1인 정규 분포에서 생성된 데이터에 대한 박스 플롯이 그려진 그래프 창이 표시됩니다. 

 

(3) boxplot 여러 개를 그려보자

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import numpy as np

# 예제 데이터 생성
np.random.seed(10)

data_1 = np.random.normal(10, 5, 100)
data_2 = np.random.normal(9, 10, 100)
data_3 = np.random.normal(8, 15, 100)
data_4 = np.random.normal(7, 20, 100)
data = [data_1, data_2, data_3, data_4]

# 그래프 사이즈 및 간격 조정
fig = plt.figure(figsize =(10, 7))
ax = fig.add_axes([0, 0, 1, 1])

# 박스 플롯 그리기
bp = ax.boxplot(data)

# 그래프 표시
plt.show()

 

[결과값]

네 개의 상자 플롯이 그려져 있으며, 각각의 상자 플롯은 다른 그룹에 해당합니다. 각 그룹의 중심 경향과 분포를 나타내기 위해 상자의 위치와 크기가 다릅니다. 그래프 상단의 표시는 각 그룹의 중앙값(median)을 나타냅니다. 수염은 각 그룹의 데이터의 전체 분포를 나타냅니다. 이상치가 몇몇 그룹에 존재합니다.

 

이번 포스팅이 파이썬 공부에 작은 도움이 되었기를 바랍니다.

반응형
Posted by 마르띤
,