1편에 이어 matplotlib으로 그래프 만들기 2편 시작해 보도록 하겠습니다!
1편은 아래의 링크를 참고해주세요:)
데이터준비
1편에서 사용한 csv데이터를 준비해 주세요:)
또는 아래의 링크에서 다운받아 주세요.
https://www.kaggle.com/imakash3011/customer-personality-analysis
다변량 그래프 그리기
다변량 그래프는 변수가 여러 개 있는 그래프입니다.
이번 포스팅에는 변수를 4개를 추가하여 그래프를 그리는 방법을 알아보도록 하겠습니다.
- x축: MntMeatProducts(육류구매량)
- y축: MntWines(와인구매량)
- 색구분: Edu_level(학력)
- 사이즈구분: NumWebPurchases(웹사이트구매횟수)
이렇게 4개의 변수를 그래프로 표현해 보겠습니다.
기존 csv를 불러온 df에서 null 값이 있으면 0으로 일괄대체를 해준 후 나머지 과정을 진행합니다.
먼저 학력별로 색 구분을 하려면 str데이터인 학력을 문자에서 숫자로 변환하는 작업이 필요합니다.
이 작업을 아래의 함수를 써서 학력을 숫자로 바꾼 후,
바꾼 숫자들을 'Edu_level'이라는 학력 컬럼을 새로 만들어 입력 하겠습니다.
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager,rc
# 한글 폰트 설정
font_location = 'C:/Windows/Fonts/MALGUNSL.TTF' #맑은고딕
font_name = font_manager.FontProperties(fname=font_location).get_name()
rc('font',family=font_name)
#데이터 셋 불러오기
df = pd.read_csv('marketing_campaign.csv',sep='\t')
# null값 0으로 대체
df = df.fillna(0)
########## 다변량 그래프 그리기 ###########
#다변량 그래프(3개 이상의 변수 사용)
# 학력부분 숫자로 바꾸기
def recode_edu(education_level):
if education_level == 'Basic':
return 0
elif education_level == 'Graduation':
return 1
elif education_level == '2nCycle':
return 2
elif education_level == 'Master':
return 3
else:
return 4
df['Edu_level'] = df['Education'].apply(recode_edu)
print(df.head())
출력:
맨 끝 컬럼에 Edu_level이 잘 추가되었음을 확인할 수 있습니다.
그 후 다변량 그래프를 그려주도록 합니다.
c = color(색)을, s = size(사이즈)를 의미합니다.
# x축: MntMeatProducts(육류구매량)
# y축: MntWines(와인구매량)
# c(컬러): Edu_level(학력)
# s(사이즈): NumWebPurchases(웹사이트구매횟수)
#그래프틀생성
scatter_plot = plt.figure()
axes1 = scatter_plot.add_subplot(1,1,1)
#산점도 다변량 그래프 그리기
axes1.scatter(
x=df['MntMeatProducts'],
y=df['MntWines'],
c=df['Edu_level'],
s=df['NumWebPurchases']*10,
alpha=0.5
) #alpha는 투명도 조절
axes1.set_title('다변량 그래프(학력별 다른색상, 웹사이트구매횟수는 사이즈별')
axes1.set_xlabel('육류구매량')
axes1.set_ylabel('와인구매량')
plt.show()
이렇게 4개의 변수를 그래프로 시각화하였습니다.
밀집도 그래프
이번에는 'NumStorePurchases'(매장구매량)컬럼을 밀집도 그래프로 나타내 보겠습니다.
밀집도 그래프는 plot.kde()를 이용하여 생성할 수 있습니다.
####밀집도 그래프#####
ax1 = plt.subplot()
ax1 = df['NumStorePurchases'].plot.kde() #매장구매량
plt.show()
육각형 그래프
마지막으로, 육각형 그래프를 그려보도록 하겠습니다.
plot.hexbin을 사용하여 육각 그래프를 그릴 수 있고, gridsize 파라미터로 그래프 육각형의 크기를 조절할 수 있습니다.
x축은 'Income'(수입) 컬럼으로, y축은 'MntWines'(와인구매량) 컬럼으로 하여 육각형 그래프를 만들어 보겠습니다.
####육각형 그래프#####
fig2,ax2 = plt.subplots()
ax2 = df.plot.hexbin(x='Income',y='MntWines',ax=ax2,gridsize=10) #gridsize: 육각형크기조절
plt.show()
위와 같이 벌집모양의 육각형 그래프가 만들어졌습니다.
전체 코드
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager,rc
# 한글 폰트 설정
font_location = 'C:/Windows/Fonts/MALGUNSL.TTF' #맑은고딕
font_name = font_manager.FontProperties(fname=font_location).get_name()
rc('font',family=font_name)
#데이터 셋 불러오기
df = pd.read_csv('marketing_campaign.csv',sep='\t')
# null값 0으로 대체
df = df.fillna(0)
########## 다변량 그래프 그리기 ###########
#다변량 그래프(3개 이상의 변수 사용)
# 학력부분 숫자로 바꾸기
def recode_edu(education_level):
if education_level == 'Basic':
return 0
elif education_level == 'Graduation':
return 1
elif education_level == '2nCycle':
return 2
elif education_level == 'Master':
return 3
else:
return 4
df['Edu_level'] = df['Education'].apply(recode_edu)
print(df.head())
# x축: MntMeatProducts(육류구매량)
# y축: MntWines(와인구매량)
# c(컬러): Edu_level(학력)
# s(사이즈): NumWebPurchases(웹사이트구매횟수)
#그래프틀생성
scatter_plot = plt.figure()
axes1 = scatter_plot.add_subplot(1,1,1)
#산점도 다변량 그래프 그리기
axes1.scatter(
x=df['MntMeatProducts'],
y=df['MntWines'],
c=df['Edu_level'],
s=df['NumWebPurchases']*10,
alpha=0.5
) #alpha는 투명도 조절
axes1.set_title('다변량 그래프(학력별 다른색상, 웹사이트구매횟수는 사이즈별')
axes1.set_xlabel('육류구매량')
axes1.set_ylabel('와인구매량')
plt.show()
####밀집도 그래프#####
ax1 = plt.subplot()
ax1 = df['NumStorePurchases'].plot.kde() #매장구매량
plt.show()
####육각형 그래프#####
fig2,ax2 = plt.subplots()
ax2 = df.plot.hexbin(x='Income',y='MntWines',ax=ax2,gridsize=10) #gridsize: 육각형크기조절
plt.show()
코드 파일
참고 자료
- 책 Do it! 데이터 분석을 위한 판다스 입문 - 이지스퍼블리싱
마무리
저번 편에 이어 matplotlib으로 그릴 수 있는 다른 그래프들을 더 알아보았습니다.
데이터 분석 시 시각화가 필요한 그래프가 있으면 위의 내용들을 활용하여 분석을 진행하면
데이터 인사이트를 얻기에도 쉬우리라 생각됩니다. ヾ(^▽^*)))
++3D 그래프 추가버전 및 기타설정은 아래에서 확인하실 수 있습니다.
https://wonhwa1.blogspot.com/2022/11/python-matplotlib-3d.html
'시각화(Visualization)' 카테고리의 다른 글
[python/시각화] Manim을 활용한 애니메이션 시각화(1) - 설치 (0) | 2022.01.21 |
---|---|
[python/시각화] seaborn으로 그래프 그리기 (0) | 2021.12.20 |
[python/시각화] matplotlib으로 그래프 만들기- 히스토그램, 산점도, 박스그래프 (0) | 2021.12.15 |
[python] CCTV,가로등 위치를 folium을 사용하여 clustering 시각화하기 (4) | 2021.11.17 |
[python] folium을 이용하여 CCTV 위치 시각화하기 (3) | 2021.11.15 |