import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import missingno
from wordcloud import WordCloud
import re
1. 사용한 파이썬 패키지 / 분야별 역할
분야 라이브러리 주요 기능 설명 실습에서의 사용 예시
| 데이터 조작·통계 |
numpy |
과학 계산용 배열, 난수, 선형대수 등 |
의존성 차원으로 불러옴 (직접 연산은 X) |
| |
pandas |
CSV 입출력, 결측치 처리, DataFrame 지원 |
CSV 로드, 열 삭제, 텍스트 파싱, 빈도 계산 등 |
| 시각화 |
matplotlib.pyplot |
저수준 그래프 엔진 |
한글 폰트 설정, 그림 크기, 이미지 출력 |
| |
seaborn |
고수준 통계 시각화 래퍼 |
산점도, 히스토그램, 분포 그래프 |
| |
missingno |
결측치 전용 시각화 도구 |
결측 행렬, 막대 그래프 |
| |
wordcloud.WordCloud |
워드클라우드 생성 |
편의시설 키워드 시각화 |
| 텍스트 전처리 |
re (표준 라이브러리) |
정규표현식(패턴 검색·치환) |
숫자·공백·특수문자 제거 등 |
2. 핵심 코드 & 함수 설명
2.1 환경 세팅
코드무엇을 하나?
| plt.rc('font', family='Malgun Gothic') |
그래프 한글 깨짐 방지(맑은 고딕) |
| plt.rc('axes', unicode_minus=False) |
축에 음수(−) 기호가 ☐ 로 깨지지 않도록 |
2.2 데이터 로드 & 구조 파악 (pandas)
함수 / 메서드설명
| pd.read_csv(path, encoding='euc-kr') |
CSV → DataFrame (EUC-KR 한글 파일) |
| df.head(n) |
상위 n행 미리보기(기본 5) |
| df.shape |
(행, 열) 튜플 확인 |
| df.info() |
열 이름·자료형·메모리 사용량 |
| df.isnull().sum() |
열별 결측치 개수 |
| pd.set_option('display.max_columns', None) |
모든 열 출력 옵션 |
2.3 결측치 시각화 (missingno)
함수설명
| missingno.matrix(df) |
행·열 레벨 결측 현황(화이트·블랙 그리드) |
| missingno.bar(df) |
열별 결측치 개수 막대그래프 |
2.4 열 정비 & 결측치 처리
null_cols = df.columns[df.isnull().sum() == df.shape[0]]
df.drop(null_cols, axis=1, inplace=True) # 전부 NaN 열 삭제
df.loc[df['소재지도로명주소'].isnull(), '소재지도로명주소'] = \
df.loc[df['소재지도로명주소'].isnull(), '소재지지번주소'] # 주소 보간
del df['소재지지번주소'] # 더는 불필요한 열 삭제
2.5 주소 파싱
코드설명
| df['시도명'] = df['소재지도로명주소'].str.split(' ').str[0] |
첫 단어 → 시·도 |
| df['시군구명'] = df['소재지도로명주소'].str.split().str[1] |
두 단어 → 시·군·구 |
2.6 기초 통계 & 범주화
df['야영사이트수'].plot.hist() # 기본 히스토그램
sns.histplot(data=df, x='야영사이트수') # seaborn 버전
bins = [-1, 20, 45, 85, 130, 500]
labels = ['a','b','c','d','e']
cat = pd.cut(df['야영사이트수'], bins=bins, labels=labels)
cat.value_counts().plot.bar() # 구간별 막대그래프
2.7 지리정보 시각화
plt.figure(figsize=(5,7))
sns.scatterplot(data=df, x='경도', y='위도', hue='시도명')
plt.legend(bbox_to_anchor=(1.2,1))
2.8 편의시설 텍스트 전처리 + 워드클라우드
facilities = ','.join(df['편의시설'].tolist()) # 리스트 → 1줄 문자열
facilities = (facilities.replace('+', ',')
.replace('/', ',')
.replace('.', ','))
facilities = re.sub('[\\s\\d동]', '', facilities) # 공백·숫자·'동' 제거
facilities = re.sub(',{2,}', ',', facilities) # 연속 콤마 통합
wc = WordCloud(font_path='C:\\Windows\\Fonts\\malgun.ttf',
width=1200, height=500,
background_color='white', random_state=3)
wc.generate(facilities)
plt.figure(figsize=(15,10)); plt.imshow(wc); plt.axis('off')
주요 정규표현식의미
| [\\s] |
모든 공백 문자(스페이스‧탭‧줄바꿈) |
| [\\d] |
모든 숫자(0–9) |
| \\d+ |
숫자 1개 이상(+) |
| ,{2,} |
콤마가 2개 이상 연속 |
3. 전체 분석 Flow 요약
- CSV 로드 → read_csv
- 결측치 진단 → isnull, missingno 시각화
- 불필요 열 제거 / 보간 → drop, loc 할당
- 주소 파싱 → str.split, 새 컬럼 생성
- EDA
- 단변량 분포 : histplot, distplot
- 이변량(위도·경도) : scatterplot
- 구간화 : pd.cut
- 텍스트 전처리 → re, join, split
- 워드클라우드 → 빈도 시각화 후 plt.imshow
4. 용어 Glossary
용어의미
| DataFrame |
행·열(2차원) 구조의 표 형식 데이터(pandas 핵심 객체) |
| Series |
단일 열(1차원) 자료구조, 인덱스+값 보유 |
| 결측치(Missing Value) |
측정·수집되지 않아 비어 있는 값(NaN) |
| 정규표현식(Regex) |
문자열 패턴 매칭·치환을 위한 식(예: \\d+) |
| 히스토그램 |
연속형 데이터 분포를 구간별 막대로 시각화 |
| 산점도(Scatter Plot) |
두 변수의 관계를 점으로 표시한 그래프 |
| 워드클라우드 |
단어 빈도를 글자 크기로 표현한 구름형 이미지 |