🌈 캠핑장 데이터 분석·시각화 실습 정리

2025. 6. 9. 20:25Python(AI)

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 요약

  1. CSV 로드 → read_csv
  2. 결측치 진단 → isnull, missingno 시각화
  3. 불필요 열 제거 / 보간 → drop, loc 할당
  4. 주소 파싱 → str.split, 새 컬럼 생성
  5. EDA
    • 단변량 분포 : histplot, distplot
    • 이변량(위도·경도) : scatterplot
    • 구간화 : pd.cut
  6. 텍스트 전처리 → re, join, split
  7. 워드클라우드 → 빈도 시각화 후 plt.imshow

4. 용어 Glossary

용어의미
DataFrame 행·열(2차원) 구조의 표 형식 데이터(pandas 핵심 객체)
Series 단일 열(1차원) 자료구조, 인덱스+값 보유
결측치(Missing Value) 측정·수집되지 않아 비어 있는 값(NaN)
정규표현식(Regex) 문자열 패턴 매칭·치환을 위한 식(예: \\d+)
히스토그램 연속형 데이터 분포를 구간별 막대로 시각화
산점도(Scatter Plot) 두 변수의 관계를 점으로 표시한 그래프
워드클라우드 단어 빈도를 글자 크기로 표현한 구름형 이미지