데이터분석/Python matplotlib

<Matplotlib> 산점도 그리기

창조적생각 2021. 8. 28. 16:41

<목차>

 

1. 기본적 산점도 그리기

 

2. 점 모양, x,y 축의 이름 지정

 

3. log - scale

 

4. 색과 다른 정보 추가

 

 

matplotlib을 통해서 산점도를 그리는 방법에 대해서 알아보겠습니다.

*사용한 자료는 제 블로그의 adsense 한달 간의 노출RPM과 노출수의 상관관계를 파악해 보겠습니다.

**그리고 추가로 노출가능한 active_view의 퍼센테이지 역시 어떤 상관관계를 가지고 있는지 알아보겠습니다.

 

1.기본적인 산점도 그리기

산점도는 plt.scatter(x,y)를 통해서 그릴 수 있습니다.

저의 x는 노출수, y는 노출rpm으로 지정했습니다.

 

plt.scatter(노출수,노출rpm)

 

을 사용하면 바로 산점도가 나타납니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import pandas as pd
from matplotlib import pyplot as plt
 
data = pd.read_csv("adsensetotal.csv",index_col =0)
 
노출수 = data['노출수']
노출rpm = data['노출rpm($)']
 
 
plt.scatter(노출수,노출rpm)
 
plt.tight_layout()
plt.show()
cs

이렇게 나온 산점도는 아무것도 알아낼 수 있는 인사이트가 없습니다. 

그렇다면 여기에 몇가지를 더 추가해보겠습니다.

 

2. 점의 모양 꾸미기, x,y 축 label 추가하기

자세한 것은 matplotlib 문서를 찾아보면 나오지만

저는 점의 edgecolor를 검은색으로 하고, x축과 y축의 이름을 추가해 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pandas as pd
from matplotlib import pyplot as plt
 
data = pd.read_csv("adsensetotal.csv",index_col =0)
 
노출수 = data['노출수']
노출rpm = data['노출rpm($)']
 
 
plt.scatter(노출수,노출rpm,edgecolor = 'black', linewidth = 1,alpha=0.75)
 
plt.xlabel('노출수')
plt.ylabel('노출RPM')
 
plt.tight_layout()
plt.show()
cs

아까보다는 보기에 좋아졌지만 여전히 무엇인가를 알아내기에는 부족합니다.

그렇기에 x,y의 자료를 log scale을 이용해서 풀어줘야 합니다.

 

3. log-scale 적용하기

 

log 스캐일을 적용하기 위해서는

 

plt.xscale('log')

plt.yscale('log')

 

사용해주시면 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import pandas as pd
from matplotlib import pyplot as plt
#plt.style.use('fivethirtyeight')
data = pd.read_csv("adsensetotal.csv",index_col =0)
 
노출수 = data['노출수']
노출rpm = data['노출rpm($)']
 
 
plt.scatter(노출수,노출rpm,edgecolor = 'black', linewidth = 1,alpha=0.75)
 
plt.xlabel('노출수')
plt.ylabel('노출RPM')
 
plt.xscale('log')
plt.yscale('log')
 
plt.tight_layout()
plt.show()
cs

 

4. 색을 이용하여 다른 정보와의 상관관계 살펴보기

노출가능 Active_view(%)를 색으로 나타냅니다.

c = 노출가능 Active_view를 이용하여 추가할 수 있습니다.

그리고 

plt.colorbar()를 이용하여 수치에 따른 색의 변화를 보여줄 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pandas as pd
from matplotlib import pyplot as plt
#plt.style.use('fivethirtyeight')
data = pd.read_csv("adsensetotal.csv",index_col =0)
 
노출수 = data['노출수']
노출rpm = data['노출rpm($)']
조회가능Active_view= data['조회가능Active_view(%)']
 
plt.scatter(노출수,노출rpm,c=조회가능Active_view,cmap='summer',edgecolor = 'black', linewidth = 1,alpha=0.75)
cbar = plt.colorbar()
cbar.set_label('노출가능Active_view(%)')
plt.xlabel('노출수')
plt.ylabel('노출RPM')
plt.xscale('log')
plt.yscale('log')
plt.tight_layout()
plt.show()
cs

 

완성된 산점도를 통해서 보았을 때, 노출수와 노출RPM의 관계는 당연하게도 양의 상관관계를 가지고 있기는 한데 그 강도가 생각보다 약하다는 것을 알 수 있습니다.

 

노출 RPM을 산정하는데는 노출수 외의 다른 요소가 들어간다는 것을 알 수 있습니다.

 

조금이라도 이 글을 읽으신 분께 도움이 되셨기를 바라며 이상으로 마치겠습니다.

728x90