본문 바로가기

파이썬

11. 시각화

경고창제거, 한글폰트 사용

import warnings
# 경고창 제거
warnings.filterwarnings('ignore')
# 한글 글꼴 설정
rc('font', family='Malgun Gothic')

 

Matplotlib

import matplotlib.pyplot as plt
from matplotlib import rc
import warnings

# 경고창 제거
warnings.filterwarnings('ignore')

# 한글 글꼴 설정
rc('font', family='Malgun Gothic')

# 데이터 준비
x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]

# 그래프 그리기
plt.plot(x, y, label="한글 데이터", color='blue', marker='o')
plt.title("한글과 경고 제거 테스트")  # 그래프 제목
plt.xlabel("X축 이름")              # X축 레이블
plt.ylabel("Y축 이름")              # Y축 레이블
plt.legend()                        # 범례 표시
plt.grid(True)                      # 격자 표시
plt.show()

 

Seaborn

import seaborn as sns
import pandas as pd

# 샘플 데이터프레임 생성
data = pd.DataFrame({
    'Category': ['A', 'B', 'C', 'D'],
    'Values': [5, 7, 3, 8]
})

# 막대 그래프
sns.barplot(x='Category', y='Values', data=data)
plt.title("Bar Plot Example")
plt.show()

 

plotly

import plotly.express as px 
# 샘플 데이터 
data = px.data.gapminder() 
# 대화형 산점도 
fig = px.scatter(
   data, 
   x='gdpPercap', 
   y='lifeExp', 
   size='pop', 
   color='continent', 
   log_x=True, 
   title="Interactive Scatter Plot" 
) 
# 그래프 크기 조정 
fig.update_layout(width=800, height=500) 
fig.show()

 

Pandas plot

import pandas as pd

# 샘플 데이터프레임 생성
data = {'Year': [2020, 2021, 2022], 'Sales': [250, 300, 400]}
df = pd.DataFrame(data)

# 선 그래프
df.plot(x='Year', y='Sales', kind='line', title="Sales Over Years")
plt.show()

 

히스토그램(histogram)

import pandas as pd
import matplotlib.pyplot as plt

# 데이터 불러오기
data = pd.read_csv("datasets/heart.csv")

# 히스토그램 생성
plt.hist(
    data['age'],          # 나이 데이터를 시각화
    bins=10,              # 구간 수
    color='skyblue',      # 막대 색상
    alpha=0.7,            # 투명도
    edgecolor='black'     # 테두리 색상
)
plt.title("Age Distribution in Heart Dataset")  # 그래프 제목
plt.xlabel("Age")                               # X축 이름
plt.ylabel("Frequency")                         # Y축 이름
plt.grid(True)                                  # 격자 표시
plt.show()

 

박스플롯(Box plot)

import pandas as pd
import matplotlib.pyplot as plt

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 박스 그래프 생성
plt.boxplot(
    data['age'],          # 나이 데이터를 시각화
    vert=True,            # 그래프를 세로로 표시
    patch_artist=True,    # 박스 내부 색상 채우기
    boxprops=dict(facecolor='skyblue', color='black'),  # 박스 스타일
    medianprops=dict(color='red', linewidth=2),        # 중앙값 스타일
    whiskerprops=dict(color='black', linewidth=1.5),   # 수염 스타일
    capprops=dict(color='black', linewidth=1.5)        # 상한/하한선 스타일
)
plt.title("Age Distribution in Heart Dataset")  # 그래프 제목 설정
plt.ylabel("Age")                               # Y축 이름 설정
plt.grid(True)                                  # 격자 표시
plt.show()                                      # 그래프 출력

이변량 박스플롯(Box plot)

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

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 이변량 박스 그래프 생성
plt.figure(figsize=(8, 6))
sns.boxplot(
    x='sex',         # X축: 그룹(성별)
    y='chol',        # Y축: 콜레스테롤 값
    data=data,       # 데이터프레임
    palette='Set3'   # 색상 팔레트
)

# 그래프 꾸미기
plt.title("Cholesterol Distribution by Sex")  # 제목 설정
plt.xlabel("Sex")                             # X축 이름 설정
plt.ylabel("Cholesterol")                    # Y축 이름 설정
plt.grid(axis='y', linestyle='--')           # Y축 격자선 추가
plt.show()

 

선그래프(Line Graph, Line Chart)

import pandas as pd
import matplotlib.pyplot as plt

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 데이터 정렬 (나이에 따라 정렬)
data = data.sort_values(by="age")

# 선 그래프 생성
plt.plot(
    data['age'],           # X축: 나이
    data['chol'],          # Y축: 콜레스테롤 수치
    color='blue',          # 선 색상
    linewidth=2,           # 선 두께
    linestyle='-',         # 선 스타일 (실선)
    marker='o',            # 데이터 점 표시
    markersize=5,          # 점 크기
    label='Cholesterol'    # 범례
)

# 그래프 꾸미기
plt.title("Age vs Cholesterol")  # 그래프 제목
plt.xlabel("Age")                # X축 이름
plt.ylabel("Cholesterol")        # Y축 이름
plt.legend()                     # 범례 표시
plt.grid(True)                   # 격자 표시
plt.show()                       # 그래프 출력

 

막대그래프(Bar Graph, Bar Chart)

import pandas as pd
import matplotlib.pyplot as plt

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 데이터 준비 (카테고리별 평균 콜레스테롤 계산)
age_groups = data.groupby('age')[['chol','thalachh']].mean().reset_index()

# 막대 그래프 생성
plt.bar(
    age_groups['age'],       # X축: 나이
    age_groups['chol'],      # Y축: 평균 콜레스테롤
    color='skyblue',         # 막대 색상
    width=0.8,               # 막대 너비
    edgecolor='black'        # 테두리 색상
)

# 그래프 꾸미기
plt.title("Average Cholesterol by Age")  # 그래프 제목
plt.xlabel("Age")                        # X축 이름
plt.ylabel("Average Cholesterol")        # Y축 이름
plt.xticks(rotation=45)                  # X축 레이블 회전
plt.grid(axis='y', linestyle='--')       # Y축 격자선 추가
plt.show()                               # 그래프 출력


=============================================================================
plt.barh(
    age_groups['age'], 
    age_groups['chol'], 
    color='orange', 
    edgecolor='black'
)
plt.title("Average Cholesterol by Age (Horizontal)")
plt.xlabel("Average Cholesterol")
plt.ylabel("Age")
plt.show()

=============================================================================

import numpy as np
import warnings
# 경고창 제거
warnings.filterwarnings('ignore')
# 한글 글꼴 설정
rc('font', family='Malgun Gothic')

x = np.arange(len(age_groups['age']))
plt.bar(x - 0.2, age_groups['chol'], width=0.4, label='Cholesterol', color='blue')
plt.bar(x + 0.2, age_groups['thalachh'], width=0.4, label='Max Heart Rate', color='green')
plt.xticks(x, age_groups['age'])
plt.legend()
plt.title("Cholesterol and Max Heart Rate by Age")
plt.xlabel("Age")
plt.ylabel("Value")
plt.show()

 

파이차트(Pie Chart)

import matplotlib.pyplot as plt

# 데이터 준비
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [30, 20, 35, 15]

# 파이 그래프 생성
plt.pie(
    values,
    labels=categories,          # 항목 이름 설정
    autopct='%1.1f%%',          # 비율 표시 형식
    startangle=90,              # 시작 각도 (90도부터 시작)
    explode=(0, 0.1, 0, 0),     # 특정 항목 강조 (Category B 강조)
    colors=['skyblue', 'orange', 'green', 'red'],  # 섹션 색상
    shadow=True                 # 그림자 추가
)

# 그래프 제목 설정
plt.title("Sample Pie Chart")
plt.show()                        # 그래프 출력


=================================================================================

import matplotlib.pyplot as plt 

# 데이터 준비 
categories = ['Category A', 'Category B', 'Category C', 'Category D'] 
values = [30, 20, 35, 15] 

# 두 개의 그래프를 위한 서브플롯 생성 
fig, axs = plt.subplots(1, 2) 

# 첫 번째 파이 그래프 
axs[0].pie( 
    values, 
    labels=categories, 
    autopct='%1.1f%%', 
    colors=['skyblue', 'orange', 'green', 'red'] 
) 

# 두 번째 파이 그래프 (특정 섹션 강조) 
axs[1].pie( 
    values, 
    explode=(0, 0.2, 0, 0), 
   labels=categories, autopct='%1.1f%%' 
) 

# 그래프 표시 
plt.show()

 

산점도(Scatter plot)

import pandas as pd
import matplotlib.pyplot as plt

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 산점도 생성
plt.scatter(
    data['chol'],            # X축: 콜레스테롤 값
    data['thalachh'],         # Y축: 최대 심박수
    c=data['age'],           # 점 색상: 나이
    s=50,                    # 점 크기 (고정)
    alpha=0.7,               # 점 투명도
    cmap='viridis',          # 색상 맵
    edgecolor='black'        # 점 테두리 색상
)

# 그래프 꾸미기
plt.title("Cholesterol vs Max Heart Rate")  # 그래프 제목
plt.xlabel("Cholesterol")                   # X축 이름
plt.ylabel("Max Heart Rate")                # Y축 이름
plt.colorbar(label="Age")                   # 색상 범례 추가
plt.grid(True)                              # 격자 표시
plt.show()                                  # 그래프 출력

히트맵(Heat Map)

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

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 상관관계 계산
correlation_matrix = data.corr()

# 히트맵 생성
plt.figure(figsize=(10, 8))  # 그래프 크기 설정
sns.heatmap(
    correlation_matrix,        # 상관계수 행렬
    annot=True,                # 각 셀에 상관계수 표시
    fmt=".2f",                 # 표시 형식: 소수점 두 자리
    cmap="coolwarm",           # 색상 맵
    linewidths=0.5,            # 셀 간 경계선 두께
    cbar=True                  # 컬러바 표시
)

# 그래프 꾸미기
plt.title("Correlation Heatmap")  # 제목 설정
plt.show()                        # 그래프 출력

===================================================================

import seaborn as sns
import numpy as np

# 샘플 데이터
data = np.random.rand(5,5)
sns.heatmap(data, annot=True, cmap="coolwarm")
plt.show()

 

모자이크 차트(Mosaic Chart)

import seaborn as sns
import pandas as pd
from statsmodels.graphics.mosaicplot import mosaic
import matplotlib.pyplot as plt

# 샘플 데이터
data = {'sex': ['male', 'female', 'male', 'female'], 'product': ['A', 'A', 'B', 'B'], 'sales': [50, 30, 20, 40]}
df = pd.DataFrame(data)

# 모자이크 차트
mosaic(df, ['sex', 'product'], title="Mosaic Chart")
plt.show()

 

트리맵(Tree Map)

import squarify
import matplotlib.pyplot as plt

sizes = [50, 25, 12, 8, 5]  # 크기 비율
labels = ['A', 'B', 'C', 'D', 'E']

plt.figure(figsize=(6,4))
squarify.plot(sizes=sizes, label=labels, alpha=0.7)
plt.axis('off')
plt.show()


===================================================

!pip install squarify -q
import pandas as pd
import squarify  # 트리맵 생성 라이브러리
import matplotlib.pyplot as plt

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 데이터 준비 (콜레스테롤의 합계를 그룹별 계산)
grouped_data = data.groupby('age')['chol'].sum().reset_index()

# 트리맵 생성
plt.figure(figsize=(8, 6))
squarify.plot(
    sizes=grouped_data['chol'],         # 크기 값
    label=grouped_data['age'],          # 레이블 (성별)
    color=['blue', 'orange','green','skyblue'
          ],        # 색상
    alpha=0.8
)
plt.title("Treemap of Cholesterol by Sex")
plt.axis('off')  # 축 숨기기
plt.show()

 

레이더차트(Radar Chart)

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

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 데이터 준비 (변수별 평균값 계산)
categories = ['age', 'chol', 'thalachh']
values = [
    data['age'].mean(),       # 나이의 평균값
    data['chol'].mean(),      # 콜레스테롤 평균값
    data['thalachh'].mean()   # 최대 심박수 평균값
]

# 레이더 차트를 위해 시작점과 끝점 연결
values += values[:1]
angles = np.linspace(0, 2 * np.pi, len(categories) + 1)

# 레이더 차트 생성
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
ax.plot(angles, values, label='Average Values', color='blue')
ax.fill(angles, values, color='skyblue', alpha=0.3)

# 축 설정
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
ax.set_title("Radar Chart")
ax.legend()
plt.show()

 

스트림차트(Stream Chart)

import pandas as pd
import matplotlib.pyplot as plt

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 데이터 준비 (각 열의 값 중 샘플 데이터 선택)
stream_data = data[['age', 'chol', 'thalachh']].head(10)  # 앞 10개 데이터 사용
stream_data = stream_data.T  # 전치(transpose)하여 행을 열로 변환

# 스트림 차트 생성
plt.stackplot(
    range(len(stream_data.columns)),  # X축 값
    stream_data.values,              # 데이터 값
    labels=stream_data.index,        # 레이블 (행 이름)
    alpha=0.8
)
plt.title("Stream Chart")
plt.xlabel("Samples")
plt.ylabel("Values")
plt.legend(loc='upper left')
plt.show()

 

버블차트(Bubble Chart)

import pandas as pd
import matplotlib.pyplot as plt

# CSV 데이터 읽기
data = pd.read_csv("datasets/heart.csv")

# 데이터 준비
x = data['age']         # X축: 나이
y = data['chol']        # Y축: 콜레스테롤
sizes = data['thalachh'] * 5  # 버블 크기: 최대 심박수 * 2
colors = data['sex']    # 버블 색상: 성별

# 버블 차트 생성
plt.figure(figsize=(10, 6))
plt.scatter(x, y, s=sizes, c=colors, cmap='viridis', alpha=0.6, edgecolors='black')
plt.title("Bubble Chart of Age vs Cholesterol")
plt.xlabel("Age")
plt.ylabel("Cholesterol")
plt.colorbar(label="Sex")
plt.grid(True)
plt.show()

 

Joint Plot(조인트플롯)

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

# 샘플 데이터 생성
np.random.seed(42)
df = pd.DataFrame({
    "X값": np.random.normal(50, 10, 100),  # 평균 50, 표준편차 10
    "Y값": np.random.normal(30, 5, 100)   # 평균 30, 표준편차 5
})

# Joint Plot (산점도 + 분포)
sns.jointplot(data=df, x="X값", y="Y값", kind="scatter", marginal_kws=dict(bins=20))
plt.show()

 

워드클라우드(word cloud)

from wordcloud import WordCloud
import matplotlib.pyplot as plt
from nltk.corpus import gutenberg  # 내장 텍스트 데이터
import nltk

# NLTK 데이터 다운로드
nltk.download('gutenberg')

# 텍스트 데이터 로드 (제인 오스틴 "엠마")
text = gutenberg.raw("austen-emma.txt")

# 워드 클라우드 생성
wordcloud = WordCloud(
    width=800, 
    height=400, 
    background_color='white', 
    colormap='viridis'
).generate(text)

# 그래프 출력
plt.figure(figsize=(10, 6))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')  # 축 숨기기
plt.title("Word Cloud: Jane Austen's Emma", fontsize=16)
plt.show()

 

카운터플롯(countplot)

# Seaborn을 이용한 Counter Plot (막대 그래프)

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

# 데이터 불러오기
data = pd.read_csv("datasets/heart.csv")

# 카테고리형 변수(범주형 데이터) 개수 시각화 (예: 'target' 컬럼)
sns.countplot(data=data, x="target")

# 그래프 제목 및 라벨 설정
plt.title("Target Distribution")
plt.xlabel("Target")
plt.ylabel("Count")

# 그래프 출력
plt.show()

'파이썬' 카테고리의 다른 글

12-1 데이터분할(분할, k-fold)  (0) 2025.03.18
12-2. 머신러닝 지도학습  (0) 2025.03.18
10. 탐색적 데이터 분석  (0) 2025.03.18
9. Feature Engieneering (특성공학, 변수파생)  (0) 2025.03.18
8. 데이터 병합과 추가  (0) 2025.03.18