반응형

1편에 이어 matplotlib으로 그래프 만들기 2편 시작해 보도록 하겠습니다!

1편은 아래의 링크를 참고해주세요:)

https://wonhwa.tistory.com/30

 

[python/시각화] matplotlib으로 그래프 만들기- 히스토그램, 산점도, 박스그래프

안녕하세요! 오늘은 파이썬 matplotlib라이브러리를 이용해 다양한 종류의 그래프를 만들어 보도록 하겠습니다. 그럼 바로 시작해 보도록 하겠습니다. 데이터 준비 오늘 시각화할 데이터는 kaggle의

wonhwa.tistory.com

 

데이터준비

1편에서 사용한 csv데이터를 준비해 주세요:)

또는 아래의 링크에서 다운받아 주세요.

https://www.kaggle.com/imakash3011/customer-personality-analysis

 

Customer Personality Analysis

Analysis of company's ideal customers

www.kaggle.com

 

다변량 그래프 그리기

다변량 그래프는 변수가 여러 개 있는 그래프입니다.

이번 포스팅에는 변수를 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()
코드 파일

ex)matplotlib(2).py
0.00MB

참고 자료
  • 책 Do it! 데이터 분석을 위한 판다스 입문 - 이지스퍼블리싱

 

마무리

저번 편에 이어 matplotlib으로 그릴 수 있는 다른 그래프들을 더 알아보았습니다.

데이터 분석 시 시각화가 필요한 그래프가 있으면 위의 내용들을 활용하여 분석을 진행하면

데이터 인사이트를 얻기에도 쉬우리라 생각됩니다. ヾ(^▽^*)))

 

++3D 그래프 추가버전 및 기타설정은 아래에서 확인하실 수 있습니다.

https://wonhwa1.blogspot.com/2022/11/python-matplotlib-3d.html

 

[python] matplotlib으로 그래프 만들기- 다변량그래프+3d, 밀집도그래프, 육각그래프, 패턴, 텍스트 설

Matplotlib 그래프 2 1편은 아래에서 확인하실 수 있습니다:) https://wonhwa1.blogspot.com/2022/11/python-matplotlib.html 데이터 준비 1편에서 사용한 csv데이터를 준비해 주세요. 또는 아래의...

wonhwa1.blogspot.com

 

반응형

+ Recent posts