본문 바로가기
데이터 분석

melt()를 활용한 데이터 변환과 플롯 시각화

by goemgoem-i 2025. 2. 5.
반응형

요즘 급 영논문 작성 때문에 지하철 혼잡도를 시각화하고 있는데

거기서 melt()라는 함수가 헷갈려서 한 번 정리해볼 까 한다

 

 

 

 

1. melt()란? 

 

melt()는 Pandas 라이브러리에서 제공하는 함수로, **wide-format(넓은 형식)**의 데이터를 **long-format(긴 형식)**으로 변환하는 데 사용

기본적으로 여러 개의 컬럼이 개별적인 정보를 나타내는 경우, 이를 하나의 컬럼으로 변환하여 데이터를 더 직관적이고 분석하기 쉽게 만드는 역할

 

 

 

- 기본 사용

pd.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value')

 

  •  frame: 변환할 데이터프레임
  •  id_vars: 그대로 유지할 컬럼 (예: 기준 변수)
  •  value_vars: 변환할 컬럼 목록
  •  var_name: 컬럼명을 나타낼 변수 이름
  •  value_name: 값이 들어갈 컬럼 이름

 

 

 

2. melt()가 필요한 이유

 

Pandas에서 melt()를 사용하는 이유는 주로 wide-format(넓은 형식) 데이터를 long-format(긴 형식)으로 변환하여 데이터 분석 및 시각화를 용이하게 하기 위함

 

 

- melt()를 사용하지 않은 경우

변환 전 데이터 (wide-format) | 평균혼잡도 | 문화공간여부 | 휠체어리프트여부 | 만남의장소여부 | 환승주차장여부 | 자전거보관소여부 | ... |---|---|---|---|---|---| | 32 | 1 | 0 | 1 | 1 | 0 | | 27 | 0 | 0 | 1 | 0 | 0 | | 45 | 1 | 1 | 0 | 1 | 1 |

-> 이 상태에서 박스 플롯을 그리면 문제가 발생

sns.boxplot(x=facility_cols, y='평균혼잡도', data=df)

 

 

 

 

3. melt() 적용 전과 후의 데이터 비교

facility_cols = ['문화공간여부', '휠체어리프트여부', '만남의장소여부', '환승주차장여부', '자전거보관소여부',
                 '엘리베이터여부', '기차예매역여부', '무인민원발급기여부', '환전키오스크여부', '수유실여부']

facility_melted = df.melt(id_vars=['평균혼잡도'], value_vars=facility_cols,
                          var_name='편의시설', value_name='유무')

print(facility_melted.head())

 

 

 

 

 

 

4. melt()를 활용한 박스 플롯 시각화

plt.figure(figsize=(12, 6))
sns.boxplot(x='편의시설', y='평균혼잡도', hue='유무', data=facility_melted, palette='coolwarm')

plt.xticks(rotation=45)
plt.title('편의시설 유무에 따른 평균 혼잡도 비교 (박스 플롯)')
plt.xlabel('편의시설 종류')
plt.ylabel('평균 혼잡도')
plt.legend(title='편의시설 유무', loc='upper right')

plt.show()

이렇게 melt를 활용하여 

 

 

아래와 같은 박스플롯을 생성할 수 있엇음

 

반응형