728x90
반응형

728x90

안녕하세요! 오늘은 파이썬으로 하는 시각화 활용 Box plot에 대해 포스팅 하려고 합니다.

  • Box plot 이란?

데이터의 분포, 중앙값, 사분위수, 이상치를 시각적으로 표현하는 그래프 입니다.

Box plot은 분포와 대칭성을 시각적으로 파악이 쉽고, 그룹 간 비교에 적합하여 시각화에서 자주 사용합니다.

Q1~Q3 범위를 상자로 표시해주고, 데이터의 중앙값은 선으로 표시해줍니다!

극단적인 값들은 점으로 표시하여, 얼만큼 이상치가 존재하는지 한 눈에 볼 수 있도록 해줍니다.

 

저는 보통은 그룹으로 그리는 경우가 많아서, seaborn을 많이 사용하지만 matplotlib으로도 Box plot을 그릴 수 있습니다.

matplotlib으로 Box plot 그리기

먼저 matplotlib를 사용해서 간단한 그래프를 그려보겠습니다.

우선은 Box plot을 그리기 위해 간단한 예제를 가지고 왔습니다!

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

# 예제용 데이터 생성
np.random.seed(42)
group_a = np.random.normal(loc=60, scale=10, size=100)
group_b = np.random.normal(loc=70, scale=15, size=100)

# 데이터프레임으로 변환
df = pd.DataFrame({
    "점수": np.concatenate([group_a, group_b]),
    "그룹": ["A"]*100 + ["B"]*100
})

 

이제 위의 데이터를 바탕으로 Box plot을 그려보겠습니다.

굉장히 깔끔한 Box plot이 그러진 것을 보실 수 있습니다!

plt.rcParams['font.family'] = 'HYPost-Medium'

# 데이터 나누기
grouped = [df[df["그룹"] == "A"]["점수"],
           df[df["그룹"] == "B"]["점수"]]

# Box Plot 그리기
plt.figure(figsize=(10, 7))
plt.boxplot(grouped, labels=["그룹 A", "그룹 B"])
plt.title("Matplotlib Box Plot")
plt.ylabel("점수")
plt.show()

 

한글을 사용했기 때문에 깨지지 않기 위해 한글 세팅을 했는데요!

한글 세팅을 하는 방법이 궁금하신 분들은 아래 링크를 참고해주세요:)

https://yhj9855.com/entry/%EC%8B%9C%EA%B0%81%ED%99%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%9C%EA%B0%81%ED%99%94-%ED%99%9C%EC%9A%A9-%EB%B2%94%EB%A1%80-%EC%B6%95-%EC%A0%9C%EB%AA%A9-with-%ED%95%9C%EA%B8%80-%EC%A7%80%EC%A0%95

 

[시각화] 파이썬 시각화 활용 - 범례, 축, 제목 (with 한글 지정)

ㄱ안녕하세요! 오늘은 파이썬으로 하는 시각화 활용 공통 사항에 대해 포스팅 하려고 합니다. 어떤 그래프를 그려도, x축/y축/범례/제목 등은 공통적으로 지정해야 하는데요.해당 부분이 간단해

yhj9855.com

seaborn을 사용하여 단일 그래프 그리기

이번에는 동일한 데이터를 사용해서 seaborn으로 그래프를 그려보도록 하겠습니다!

import seaborn as sns

plt.figure(figsize=(10, 7))
sns.boxplot(x="그룹", y="점수", data=df)
plt.title("Seaborn Box Plot")
plt.ylabel("점수")
plt.show()

비슷하면서 다르다는 것을 쉽게 보실 수 있습니다!

그래프 커스텀 하기

사실 그래프를 그리는 것은 정말 간단합니다!

하지만 그래프를 단순히 그리는 것과 이를 커스텀해서 사용하는 것은 정말 큰 차이가 있습니다.
지금부터는 다양하게 그래프를 커스텀하는 방법에 대해 소개해드리겠습니다!

  • 색상 사용하기

제일 중요한 커스텀은 바로 그래프에 색상을 입히는 것입니다!

파이썬에서 사용할 수 있는 색상은 아래 포스팅을 참고해주세요!

https://yhj9855.com/entry/%EC%8B%9C%EA%B0%81%ED%99%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%9C%EA%B0%81%ED%99%94-%EC%83%89%EC%83%81-%EC%A0%95%EB%A6%AC-Matplotlib-Seaborn

 

[시각화] 파이썬 시각화 색상 정리 (Matplotlib, Seaborn)

안녕하세요! 오늘은 데이터 분석에서 정말 중요한 그래프 색상을 정리하는 포스팅을 진행하도록 하겠습니다. 데이터 분석에서 시각화는 정말 중요한데요.똑같이 데이터 분석을 진행했다고 해

yhj9855.com

 

plt.figure(figsize=(10, 7))
sns.boxplot(x="그룹", y="점수", data=df, palette=['deepskyblue', 'deeppink'])
plt.title("Seaborn Box Plot")
plt.ylabel("점수")
plt.show()

  • 그래프 그룹으로 나누기

다음은 seaborn에서 제공해주는 타이타닉 예제를 바탕으로 남성과 여성으로 그룹을 나누어 그래프를 그려보겠습니다.

titanic = sns.load_dataset("titanic")

# 그래프 크기 설정
plt.figure(figsize=(15, 10))

# Box Plot 그리기
sns.boxplot(x="class", y="fare", hue="sex", data=titanic, palette=["lightblue", "lightcoral"])

# 제목 및 레이블 설정
plt.title("타이타닉 - 성별에 따른 선실 등급별 요금 비교", fontsize=14)
plt.xlabel("선실 등급")
plt.ylabel("요금 (달러)")
plt.legend(title="성별")
plt.show()

위의 그래프 같은 경우 500 근처에 있는 이상치 때문에 Third의 그래프가 잘 보이지 않는데요!

이럴 경우 y축의 가장 높은 값을 지정하여 이상치를 보여주지 않을 수도 있습니다.

titanic = sns.load_dataset("titanic")

# 그래프 크기 설정
plt.figure(figsize=(15, 10))

# Box Plot 그리기
sns.boxplot(x="class", y="fare", hue="sex", data=titanic, palette=["lightblue", "lightcoral"])

# 제목 및 레이블 설정
plt.title("타이타닉 - 성별에 따른 선실 등급별 요금 비교", fontsize=14)
plt.xlabel("선실 등급")
plt.ylabel("요금 (달러)")
plt.legend(title="성별")
plt.ylim(top=300)
plt.show()

300으로 최대 값을 자르니 그래프가 훨씬 잘 보이는 걸 보실 수 있는데요.

이상치를 제거하는 것은 나름의 리스트가 있기 때문에 어떤 것을 중점으로 시각화 하냐에 따라 사용법이 다를 수 있습니다!

  • 그래프 축/제목/범례 설정

그래프 제목, x축, y축, 범례 등을 직접 지정할 수 있습니다!

축, 제목, 범례를 설정하는 방법 및 한글 설정하는 자세한 과정은 아래 포스팅을 참고해주세요.

https://yhj9855.com/entry/%EC%8B%9C%EA%B0%81%ED%99%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%9C%EA%B0%81%ED%99%94-%ED%99%9C%EC%9A%A9-%EB%B2%94%EB%A1%80-%EC%B6%95-%EC%A0%9C%EB%AA%A9-with-%ED%95%9C%EA%B8%80-%EC%A7%80%EC%A0%95

 

[시각화] 파이썬 시각화 활용 - 범례, 축, 제목 (with 한글 지정)

ㄱ안녕하세요! 오늘은 파이썬으로 하는 시각화 활용 공통 사항에 대해 포스팅 하려고 합니다. 어떤 그래프를 그려도, x축/y축/범례/제목 등은 공통적으로 지정해야 하는데요.해당 부분이 간단해

yhj9855.com

 

여기까지 Box plot 활용을 정리해보았습니다!

단순히 그래프를 그리는 것 이상으로 활용을 잘 하시면 정말 좋은 시각화를 그리실 수 있습니다:)

그래프가 잘 숙련되시면 아래 같은 그래프를 그리실 수 있습니다.


코드에 궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

★읽어주셔서 감사합니다★

728x90
반응형
728x90
반응형
728x90

 

안녕하세요! 오늘은 파이썬으로 하는 시각화 활용 Line plot에 대해 포스팅 하려고 합니다.

  • Line plot이란?

시간이나 연속적인 값을 나타낼 때 사용되는 그래프로, 일반적인 선 그래프 입니다.

보통 x축에는 연속적인 변수y축에는 수치형 데이터를 배치해서 사용하는 경우가 일반적입니다.

 

저는 보통 식을 그릴 때는 matplotlib, 데이터 프레임이 있는 경우에는 seaborn, matplotlib 두 개를 함께 사용해서 line plot을 그립니다.

matplotlib로 단일 그래프 그리기

우선 먼저 matplotlib를 사용해서 간단한 그래프를 그려보겠습니다.

아래처럼 숫자를 직접 입력하거나, 특정 식이 존재한다면 matplotlib만 사용해서 그리는 것이 간단합니다!

import matplotlib.pyplot as plt

# 왼쪽이 x 값, 오른쪽이 y 값
plt.plot([1, 2, 3, 4], [2, 3, 5, 10])
plt.show()

import numpy as np
import matplotlib.pyplot as plt

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.show()

seaborn을 함께 사용하여 단일 그래프 그리기

seaborn은 데이터 프레임과 호환성이 좋기 때문에 보통 데이터 프레임으로 사용합니다.

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

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
df = pd.DataFrame({"X": x, "Y": y})

sns.lineplot(x="X", y="Y", data=df)

그래프 커스텀 하기

사실 그래프를 그리는 것은 정말 간단합니다!

하지만 그래프를 단순히 그리는 것과 이를 커스텀해서 사용하는 것은 정말 큰 차이가 있습니다.

지금부터는 다양하게 그래프를 커스텀하는 방법에 대해 소개해드리겠습니다!

  • 색상 사용하기

그래프에 색상을 입히는 것입니다.

파이썬에서 사용할 수 있는 색상은 아래 포스팅을 참고해주세요!

https://yhj9855.com/entry/%EC%8B%9C%EA%B0%81%ED%99%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%9C%EA%B0%81%ED%99%94-%EC%83%89%EC%83%81-%EC%A0%95%EB%A6%AC-Matplotlib-Seaborn

 

[시각화] 파이썬 시각화 색상 정리 (Matplotlib, Seaborn)

안녕하세요! 오늘은 데이터 분석에서 정말 중요한 그래프 색상을 정리하는 포스팅을 진행하도록 하겠습니다. 데이터 분석에서 시각화는 정말 중요한데요.똑같이 데이터 분석을 진행했다고 해

yhj9855.com

 

# matplot
plt.plot(x, y, color='deepskyblue')

# seaborn
sns.lineplot(x="X", y="Y", data=df, color='deeppink')

  • 그래프 동시에 그리기

하나의 영역에 여러 개의 그래프를 그릴 수 있습니다.

그래프가 N개면 N개만큼 그려주면 동일 영역에 그려지는 것을 확인하실 수 있습니다.

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df = pd.DataFrame({"X": x, "Y": y})
df1 = pd.DataFrame({"X": x, "Y": y1})

# seaborn
sns.lineplot(x="X", y="Y", data=df, color='lightskyblue')
sns.lineplot(x="X", y="Y", data=df1, color='lightcoral')

# matplotlib
plt.plot(x, y, color='deepskyblue')
plt.plot(x, y1, color='deeppink')

 

seaborn에서는 하나의 데이터 프레임에서 특정 열을 기준으로 두 개의 그래프를 나눌 수 있습니다.

아래 코드를 보시면 Y열이 label을 기준으로 cos그래프와 sin그래프가 나눠져있기 때문에 이를 label로 분리하여, 그래프를 그릴 수 있습니다.

데이터 분석을 하실 때 생각보다 많이 사용되기 때문에 잘 활용하시면 좋습니다!

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df1 = pd.DataFrame({"X": x, "Y": y, "label": 'cos'})
df2 = pd.DataFrame({"X": x, "Y": y1, "label":'sin'})

# df1 밑에 df2를 붙이는 작업
df = pd.concat([df1, df2], ignore_index= True)

# 그래프 영역 크기 정하기 (가로/세로)
plt.figure(figsize=(8, 5))
sns.lineplot(x="X", y="Y", data=df, hue='label', palette=['gold', 'limegreen'])

  • 그래프 축/제목/범례 설정

그래프 제목, x축, y축, 범례 등을 직접 지정할 수 있습니다!

축, 제목, 범례를 설정하는 방법 및 한글 설정하는 자세한 과정은 아래 포스팅을 참고해주세요.

https://yhj9855.com/entry/%EC%8B%9C%EA%B0%81%ED%99%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%9C%EA%B0%81%ED%99%94-%ED%99%9C%EC%9A%A9-%EB%B2%94%EB%A1%80-%EC%B6%95-%EC%A0%9C%EB%AA%A9-with-%ED%95%9C%EA%B8%80-%EC%A7%80%EC%A0%95

 

[시각화] 파이썬 시각화 활용 - 범례, 축, 제목 (with 한글 지정)

ㄱ안녕하세요! 오늘은 파이썬으로 하는 시각화 활용 공통 사항에 대해 포스팅 하려고 합니다. 어떤 그래프를 그려도, x축/y축/범례/제목 등은 공통적으로 지정해야 하는데요.해당 부분이 간단해

yhj9855.com

 

  • 그래프 마크 설정하기

그래프 내 x 좌표마다 마크를 설정할 수 있습니다.

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df = pd.DataFrame({"X": x, "Y": y})
df1 = pd.DataFrame({"X": x, "Y": y1})

plt.figure(figsize=(8, 5))

# seaborn
sns.lineplot(x="X", y="Y", data=df, color='lightskyblue', marker='o')
sns.lineplot(x="X", y="Y", data=df1, color='lightcoral',  marker='*', markersize=9)

# matplotlib
plt.plot(x, y, color='deepskyblue', marker='o', markersize = 4)
plt.plot(x, y1, color='deeppink', marker='^',  markersize = 5)

 

하지만 이렇게 x좌표마다 마크를 설정하는 것이 아닌 특정 좌표마다 마크를 설정하고 싶으실 수도 있습니다.

그럴 때는 그래프 위에 점으로 된 그래프를 하나 더 그리는 방향으로 진행할 수 있습니다!

아래 코드는 5번째마다 그래프 위에 점을 찍는다고 보시면 됩니다.

for문 안에 있는 코드를 변경하시면 원하시는 곳에 마크 표시를 하실 수 있습니다.

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df = pd.DataFrame({"X": x, "Y": y})
df1 = pd.DataFrame({"X": x, "Y": y1})

plt.figure(figsize=(8, 5))
sns.lineplot(x="X", y="Y", data=df, color='orange')
sns.lineplot(x="X", y="Y", data=df1, color='limegreen')

for i in range(len(x)) :
    if i%5 == 0 :
        plt.scatter(x[i], y[i], color='darkorange', s=15)
        plt.scatter(x[i], y1[i], color='forestgreen', s=15)

  • 그래프 텍스트 표기하기

그래프 내 텍스트를 표기할 수도 있습니다.

텍스트 표기는 위에 마크 설정하는 것처럼 그래프 위에 텍스트를 하나 더 그리는 방향으로 진행할 수 있습니다.

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.cos(x)
y1 = np.sin(x)
df = pd.DataFrame({"X": x, "Y": y})
df1 = pd.DataFrame({"X": x, "Y": y1})

plt.figure(figsize=(8, 5))
sns.lineplot(x="X", y="Y", data=df, color='orange')
sns.lineplot(x="X", y="Y", data=df1, color='limegreen')

for i in range(len(x)) :
    if i%5 == 0 :
        plt.scatter(x[i], y[i], color='darkorange', s=15)
        plt.text(x[i]+0.02, y[i]+0.01, f'{y[i]:.1f}', color='darkorange', ha='left', va='bottom', fontsize=8, fontweight='bold')
        plt.scatter(x[i], y1[i], color='forestgreen', s=15)
        plt.text(x[i]+0.05, y1[i]+0.01, f'{y1[i]:.1f}', color='forestgreen', ha='left', va='bottom', fontsize=8, fontweight='bold')
        
plt.xlabel('')
plt.ylabel('')

여기까지 line plot 활용을 정리해보았습니다!

단순히 그래프를 그리는 것 이상으로 활용하는 부분이 정말 생각보다 많았네요ㅠㅠ

그래프가 잘 숙련되시면 아래 같은 그래프를 그리실 수 있습니다.

 

코드에 궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

★읽어주셔서 감사합니다★

728x90
반응형

+ Recent posts