프로젝트 도메인 지식 탐구 ! ! !
케이블 산업/직군에 대한 도메인 수집 필요
관련 데이터 수집(내부, 외부)
전체 산업에서의 위치가 어떻게 되는지
시장 내에서 일등하는 기업의 장단점 분석 -> 우리의 기업에 어떻게 적용할것인지
데이터를 통해 어떻게 보완할 건지, 어떤 부분은 안되는지 => 모든 걸 "데이터"를 통해 ! !
결측치는 제거 => 무조건 없애는건 아님 상황 확인해보기 !
이상치는 변형? 제외해서 별도로 다루기? => 선택
과제 인식 => 관련 데이터 수집(내부, 외부, 웹크롤링) => 전처리 (결측치, 이상치, 정제, EDA) -> 분석 -> 모델 평가 -> 시각화
모니터를 추상화 한게 figure ( 액자) = 여기다가ㅏ 그림 그림 => axes 도화지

1. Figure (피겨): 전체 캔버스 또는 액자
- Figure는 그림이 그려지는 가장 바깥쪽의 전체 창(Window)
- 비유: 거실 벽에 걸린 커다란 액자 혹은 캔버스 자체
- 역할: 여러 개의 그래프를 담을 수 있는 공간을 제공하며, 전체 배경색이나 전체 제목(suptitle) 등을 관리
- 특징: Figure 하나 안에 도화지(Axes)가 한 개일 수도, 여러 개일 수도
2. Axes (엑시즈): 실제 그래프가 그려지는 도화지
- Axes는 Figure 안에 위치하며, 실제로 데이터가 시각화되는 개별 영역
- 비유: 큰 액자 안에 끼워 넣은 하나하나의 그림판(도화지)
- 역할:
- 우리가 흔히 말하는 '그래프' 그 자체
- x축, y축, 눈금(Tick), 레이블, 범례 등을 모두 포함하는 단위
- 특징: "데이터를 그려라!"라고 명령을 내리는 대상
- 코드
- ax.plot() : 데이터 그림
- ax.set_*() : 축, 제목, 레이블 제어
- fig.suptitle() : 전체 제목
fig, ax = plt.subplots()
ax.plot([1, 2, 3])
ax.set_title("제목")
ax.set_xlabel("X축")
ax.set_ylabel("Y축")
ax.grid(True)
plt.show()

- Figure (액자): 전체 캔버스, 1개 존재.
- Axes (도화지): 실제 그래프 영역, 1:N 대응 가능.
- Subplot: 하나의 Figure를 행/열로 분할하여 여러 개의 Axes를 배치하는 방식.
| 구분 | pyplot 방식 | 체지향 방식 |
| 사용법 | plt.plot() | ax.plot() |
| 대상 | 현재 활성 Axes | 명시적 Axes |
| 다중 그래프 | 불편 | 필수 |
| 시험 출제 | 낮음 | 높음 |
matplotlib
import matplotlib.pyplot as plt
1. fig, ax = plt.subplots() (객체지향 방식)
- 액자와 도화지를 각각 받아서 직접 세밀하게 제어하겠다는 방식
- 특징: fig(액자)와 ax(도화지)라는 '객체'를 변수로 할당
- 장점: * 어느 도화지에 그림을 그릴지 명확하게 지정 가능 (여러 개의 그래프를 그릴 때 필수)
- 그래프의 세부 요소(축 눈금, 눈금 레이블, 배경색 등)를 아주 정밀하게 조절하기 좋음
- 비유: 전문가가 각기 다른 도화지 여러 장을 앞에 두고, "1번 도화지에는 선을 긋고, 2번 도화지에는 제목을 쓰자"라고 지시
2. plt.plot() (Pyplot 방식)
- 지금 열려 있는 도화지에 알아서 한 번에 그려줘라는 방식
- 특징: 별도의 변수 설정 없이 plt.이라는 명령어로 모든 것을 처리
- 장점: 코드가 짧고 간결하여 빠르게 그래프를 확인하고 싶을 때 편리
- 옵션(그래프 종류, 스타일, 제목 등)만 인자로 넣어주면 Matplotlib이 내부적으로 액자와 도화지를 생성해서 그림
- 비유: 현재 내 눈앞에 있는 도화지 한 장에 "제목 쓰고 그림 그려!"라고 말하면, 캔버스를 따로 관리할 필요 없이 알아서 그려주는 것
3. subplot과 subplots차이
plt.subplot(2,2,1) # 상태 기반 (pyplot)
fig, ax = plt.subplots(2,2) # 객체지향
| 구분 | subplot | subplots |
| 방식 | pyplot | 객체지향 |
| 반환값 | 없음 | fig, axes |


• 기본 플롯: 데이터를 (x, y) 쌍으로 표현
• 배열과 필드 플롯: 데이터 Z(x, y)와 필드 U(x, y), V(x, y)의 배열을 표현


• 통계 플롯: 데이터 분포를 시각화하여 통계 분석에 적합
• 비정형 좌표: 좌표(x, y)에서의 값 z를 등고선으로 시각화
plt.title('대한민국')
plt.plot([-1,2,3,4])
plt.show()

폰트 적용
import matplotlib.font_manager as fm
path='C:/Windows/Fonts/malgun.ttf'
font_prop= fm.FontProperties(fname=path)
#plt.rc('font', family='NanumGothic')
plt.rcParams['axes.unicode_minus'] = False
plt.title('대한민국', fontproperties=font_prop, fontsize=15)
plt.plot([-1, 2, 3, 4])
plt.show()

plt.legend()
import numpy as np
plt.plot(np.random.randn(10), 'k', label='one’) #검은색 실선
plt.plot(np.random.randn(10)*3, 'r--', label='two’) #빨간색 파선
plt.plot(np.random.randn(10)*10, 'g.', label='three’) #선 없이 초록색 점
#마커로 표시
plt.legend()
plt.show()

- Label 등록: plt.plot()을 그릴 때 label='이름' 인자를 통해 각 그래프의 이름을 미리 등록
- 범례 출력: plt.legend()를 호출하면, 등록된 레이블들을 모아서 적절한 위치에 박스 형태로 보여줌
다중 그래프
plt.subplot(2, 2, 1) # 2행 2열 중 첫 번째 그래프
plt.plot(np.random.randn(10), 'b--')
plt.subplot(2, 2, 2) # 2행 2열 중 두 번째 그래프
plt.plot(np.random.randn(100), 'r', alpha=0.7)
plt.subplot(2, 2, 3) # 2행 2열 중 세 번째 그래프
plt.plot(np.random.randn(10), 'y^')
plt.subplot(2, 2, 4) # 2행 2열 중 네 번째 그래프
plt.plot(np.random.randn(10), 'g.')
plt.show()

- 다중 그래프(Multi graph)는 축이 여러 개
- plt.subplot(행, 열, 인덱스) 순서
- plt.subplot(2, 2, 1)에서 숫자의 의미는 다음과 같습니다.
- 첫 번째 숫자 (2): 전체를 몇 개의 **행(row, 가로줄)**으로 나눌 것인가?
- 두 번째 숫자 (2): 전체를 몇 개의 **열(column, 세로줄)**로 나눌 것인가?
- 세 번째 숫자 (1~4): 그중 몇 번째 칸에 그림을 그릴 것인가?
산점도 (Scatter Plot)
: 두 연속형 변수(양적 데이터) 값의 분포 또는 상관관계를 나타냄
plt.scatter(x값 리스트, y값 리스트, c=‘색상’, s=크기, marker=‘모양’)
year = [2014, 2017, 2020, 2023]
price = [25000, 31000, 53000, 63000]
plt.scatter(year, price, c='g', s=50, marker='^')
plt.show()

데이터 성격에 따른 그래프 종류
| 데이터 구분 | 세부 유형 | 대표 그래프 | 특징 및 목적 |
| 양적 데이터 | 연속형 | 히스토그램 | 데이터의 분포와 밀집도 확인 |
| 이산형 | 막대 그래프 | 수치 데이터의 크기 비교 | |
| 질적 데이터 | 명목형 | 파이 차트 | 범주별 상대적 비율 확인 |
| 순서형 | 막대/누적 막대 | 범주 간의 순위와 빈도 확인 |
히스토그램
연속형 변수의 구간별 분포를 나타냄
plt.hist(값 리스트, bins=구간의 수)
막대 그래프
범주형 변수끼리 연속형 값을 비교할 때 사용함
plt.bar(x값 리스트, y값 리스트)
| 구분 | 히스토그램(Histogram) | 막대그래프( Bar chart) |
| 데이터 유형 | 연속형 데이터 | 이산형(범주형) 데이터 |
| 목적 | 분포 형태 파악 | 범주 간 크기 비교 |
| 막대 의미 | 구간(bin)의 빈도/비율 | 범주별 값 |
| 막대 간 간격 | 없음 (연속) | 있음 (범주 분리) |
| x축 의미 | 값의 범위(구간) | 범주(카테고리) |
파이 차트
범주형 변수끼리 연속형 값의 비율을 비교할 수 있음.
plt.pie(값 리스트, labels=레이블 리스트, autopct='%.숫자f%%', colors=색상, explode=띄우는 값 리스트)
명목형 데이터는 질적 데이터이지만, 도수분포표로 정리하면 각 범주의 빈도는 이산형 양적 데이터로 취급 가능
워드클라우드
- 데이터의 빈도를 단어(Word)의 구름(Cloud)으로 표현
- 각 단어를 발생 빈도에 비례하는 크기로 나타냄
- 주요 단어는 보통 명사를 기반으로 선정됨
- 워드클라우드 생성 과정
- ① 텍스트 데이터를 사전 처리하여 영어의 the, and, of와 같은 일반적인 단어를 제거
- ② 남은 단어들의 빈도수를 계산
- ③ 빈도수에 비례하는 크기로 단어를 표시하여 구름 모양으로 나타냄
- ④ 워드클라우드의 마스크, 단어 크기와 글꼴, 색을 설정하여 시각화 효과를 높임
- 비정형 데이터를 다루는 것
문서 (docs) -> 문장들(sentences) -> 단어(띄어쓰기) ----(이 과정에서 오차 발생할 확률↑)----> 품사 태깅
import os
print(os.environ.get('JAVA_HOME'))
from konlpy.tag import Okt
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from collections import Counter
text = """
자연어 처리는 컴퓨터가 인간의 언어를 이해하고 생성하는 기술입니다.
파이썬의 KoNLPy 라이브러리를 사용하면 한국어 텍스트 분석이 매우 쉬워집니다.
명사를 추출하고 빈도를 계산하여 워드클라우드를 만들 수 있습니다.
데이터 분석에서 시각화는 매우 중요한 단계이며, 워드클라우드는 그 중 하나입니다.
"""
okt = Okt()
nouns = okt.nouns(text)
words = [n for n in nouns if len(n) > 1]
words
# 빈도 계산
count = Counter(words)
font_path = "C:/Windows/Fonts/malgun.ttf"
# 워드클라우드 생성
wc = WordCloud(
font_path=font_path,
background_color="white",
width=800,
height=400
)
wc.generate_from_frequencies(count)
# 시각화
plt.figure(figsize=(10, 5))
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()


'LG DX DATA SCHOOL' 카테고리의 다른 글
| 01/06 가설 검정 (정규 분포, t-분포) (0) | 2026.01.06 |
|---|---|
| 01/05 통계 분석의 이해 (1) | 2026.01.05 |
| 12/30 기술 통계학 + R (0) | 2025.12.30 |
| 12/29 통계 기반 데이터 분석 (넘파이/ 판다스) (0) | 2025.12.29 |
| 12/24 상속, 정규 표현식 (1) | 2025.12.24 |