넘파이를 사용한 산점도 이해하기: 같은 크기의 X와 Y 배열 보장하기
Published on
Python에서 데이터 시각화의 핵심은 산점도를 만드는 것입니다. 특히 K-Means와 같은 머신 러닝 알고리즘을 다룰 때는 더욱 중요합니다. 그러나 이러한 그래프를 그릴 때 다른 크기의 넘파이 배열로 인해 문제가 발생하는 경우가 많습니다. 이 글에서는 X와 Y 넘파이 배열의 크기를 맞추는 방법에 대해 자세히 설명합니다.
배경: 문제점
18개와 19개 원소로 구분된 두 개의 배열인 X와 Y가 있는 37개의 넘파이 배열을 상상해보세요. matplotlib의 scatter
함수를 사용하여 이러한 값을 그릴 경우 "x와 y는 동일한 크기여야 합니다"라는 ValueError가 발생합니다. 이는 scatter
함수가 X와 Y 배열 모두에 동일한 수의 데이터 포인트가 필요하기 때문입니다.
핵심 문제
matplotlib의 강력한 도구인 scatter
함수는 두 변수를 서로 대조하여 그립니다. X와 Y 배열에 동일한 수의 데이터 포인트가 필요합니다. 이러한 배열이 크기가 다를 경우 오류가 발생하고, 위에서 말한 것처럼 X는 18개, Y는 19개의 열을 가지는 경우가 있습니다.
실패한 시도
X에서 두 개의 열을 묶어 크기를 동일하게 만드는 방법도 생각해 볼 수 있습니다. 그러나 이 경우 다른 열과 마찬가지로 부동소수점이 아닌 넘파이 배열이 됩니다. 그 결과 "setting an array element with a sequence"과 같은 ValueError가 발생합니다.
해결책: 모든 요소를 그리기
해결책은 산점도가 기본적으로 두 차원적으로 만들어지기 때문에 37개의 배열을 직접 산점도로 표시하는 것은 불가능하다는 것을 이해하는 것입니다.
그러나 K-Means 알고리즘을 적용하기 전에 데이터를 시각화하려면 seaborn 라이브러리에서 제공하는 pairplot을 사용할 수 있습니다. 이렇게 하면 37개 배열 중 각 쌍의 관계와 분포를 검사할 수 있습니다.
import seaborn as sns
import pandas as pd
# f1, f2, ..., f37이 1D 넘파이 배열임을 가정합니다.
df = pd.DataFrame(list(zip(f1, f2, f3, ..., f37)), columns=['f1', 'f2', 'f3', ..., 'f37'])
sns.pairplot(df)
위 코드는 데이터 세트에서 각 변수가 행당 열을 공유하도록 설정하여 Axes 그리드를 생성합니다.
교훈
요지는 산점도는 두 가지 차원으로 제한된다는 것입니다. 모든 데이터 포인트를 동시에 볼 수 있는 유혹이 있지만, 이는 혼란과 잘못된 결과를 낳을 수 있습니다. 대신 pairplot을 선택하거나, 고차원 데이터를 다룰 때는 PCA와 같은 기술로 차원을 축소해야 합니다.
기억하세요. 성공적인 데이터 시각화의 핵심은 복잡한 그림이 아니라 명확성과 인사이트입니다.