강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Neo님의 프로필 이미지
Neo

작성한 질문수

공공데이터로 파이썬 데이터 분석 시작하기

[13/20] scatterplot, regplot, lmplot, swarmplot 의 차이를 분양가 데이터 시각화로 이해하기

lmplot 연도 표시 문제

해결된 질문

작성

·

540

1

안녕하세요? lmplot에서 아래와 같이 연도가 강의에서 보다 여러 개의 나뉘어 나옵니다. 이 문제를 해결했으면 합니다. 감사합니다. 

답변 5

1

Neo님의 프로필 이미지
Neo
질문자

네. 감사합니다. 조언대로 해 보니 잘 됩니다. 

1

Neo님의 프로필 이미지
Neo
질문자

답변 감사합니다. 그런데 아직 해결이 되지 않아 다시 질문 합니다. 아래 info결과에 의하면 연도는 int64입니다. 학습을 위한 소스코드에도 lmplot 결과가 같습니다. 이 문제를 해결할 수 있는 코드를 주시면 좋겠습니다. 감사합니다.  

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4335 entries, 0 to 4334
Data columns (total 6 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   지역명     4335 non-null   object 
 1   연도      4335 non-null   int64  
 2   월       4335 non-null   int64  
 3   분양가격    3957 non-null   float64
 4   평당분양가격  3957 non-null   float64
 5   전용면적    4335 non-null   object 
dtypes: float64(2), int64(2), object(2)
memory usage: 203.3+ KB

0

박조은님의 프로필 이미지
박조은
지식공유자

감사합니다 :)

0

박조은님의 프로필 이미지
박조은
지식공유자

안녕하세요.

영상을 제작했던 버전과 다른 버전의 seaborn 을 설치해서 사용해 봤는데요.

이전과 다르게 올려주신 것처럼 int 형식임에도 소숫점으로 연도가 표기되는것을 확인할 수 있었어요.

버전이 변경되면서 내부 옵션이 변경된 것 같은데요.

lmplot 의 내부는 scatterplot, regplot 으로 되어 있어요.

scatterplot  은 수치vs수치데이터를 표현하는 것을 기본으로 하고요. regplot은 수치vs수치 데이터에 대한 회귀선을 그려줍니다.

lmplot은  regplot의 서브플롯을 그려주는 역할을 하게 됩니다.

그래서 lmplot을 그릴 때 기본 가정은 x, y축이 모두 수치데이터입니다.

하지만 여기에서 "연도"는 숫자로 되어 있지만 "범주형(카테고리)" 형태에 가깝습니다.

그래서 이렇게 범주형 데이터의 scatterplot을 그릴 때는 해당 실습 아래에 있는 swarmplot을 사용합니다.

여기에서 x 축 값에 소숫점이 들어가는 이유는 버전이 변경되면서 x축에 표기되는 값이 변경되었는데요.

소스코드 내부를 보면 x_bins 와 x_estimator 라는 옵션이 있습니다.

x_estimator 옵션을 보면 np.mean으로 label 값을 표현할 때 평균값을 구해서 표현을 하게 되어 있어요.

그런데 평균을 구하다보면 소숫점이 발생하기 때문에 x축에 소숫점이 표현이 된 것이고요.

여기에서 소숫점을 제외하고 그리고자 한다면 가장 간단한 방법은 x_jitter 옵션을 사용하시는 겁니다.

lmplot을 그리게 되면 x 축 값이 같기 때문에 하나의 point 에 여러 점이 찍히게 되는데 그러면 여기에 중복이 되어 점이 찍히기 때문에 점의 갯수가 많은지 적은지 확인이 어렵습니다. 그래서 이걸 조금 흩어지게 그리면 빈도수를 함께 표현할 수 있는게 x_jitter 입니다.

해당 값을 조정해 보시면 몰려있는 값을 흩어지게 표현해서 빈도수를 좀 더 자세히 표현해 보실 수 있습니다.

0

박조은님의 프로필 이미지
박조은
지식공유자

안녕하세요.

강의에서 보면 연도가 int 형식으로 나오는데 올려주신 스크린샷은 float 형식으로 나오고 있어요. 

해당 내용에 대한 질문이 맞다면 연도의 데이터 타입을 변경해 주시면 아래와 같은 형태로 보실 수 있어요.

df_last["연도"].astype(int) <= 이렇게 연도를 변경하실 수 있는데 int가 float 형태로 보여질 때는 보통 결측치가 있는 경우가 많아요.

결측치는 np.nan 으로  type(np.nan) 을 출력해 보면 float 으로 타입이 나옵니다.

그래서 다른 데이터에서 실습을 하실 때도 소숫점이 없어서 int  타입으로 변경하고자 하는데 변경이 안 된다면 결측치가 섰여있을 수 있어요.

결측치가 없다면 위와 같이 df_last["연도"].astype(int) 로 타입 변경시에 소숫점이 없게 표기가 됩니다.

Neo님의 프로필 이미지
Neo

작성한 질문수

질문하기