[데이터 분석] 파이 차트, 산점도

2024. 2. 7. 22:07·데이터 분석

 pie() 함수 

pie() 함수는 전체 데이터 중 특정 데이터의 비율을 보기 쉽게 표현함

import matplotlib.pyplot as plt
plt.pie([10, 20])
plt.show()

 

axis() 함수: 파이 차트를 동그란 원으로 표현

 

  • 레이블 추가하기
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
plt.pie([1000, 1300, 800, 1500], labels=['A형', 'B형', 'AB형', 'O형'])
plt.axis('equal')
plt.show()

 

  • 비율 및 범례 표시하기

pie() 함수의 autopct 속성을 이용해 각 항목의 비율 표시

legend() 함수로 범례 추가

%.1f%% : 소수점 아래 첫 번째 소수점까지 표현하겠다는 의미

import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
size = [2000, 2000, 1000, 1200]
label=['A형', 'B형', 'AB형', 'O형']
plt.pie(size, labels=label, autopct='%.1f%%')
plt.legend()
plt.show()

  • 색 및 돌출 효과 정하기

colors 속성 : 색 설정

explode 속성 : 돌출 효과 설정 ( 0은 돌출되지 않음을 의미 / 숫자 크기와 돌출 효과 정도 비례)

import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
size = [2000, 2000, 1000, 1200]
label=['A형', 'B형', 'AB형', 'O형']
color = ['darkmagenta', 'deeppink', 'hotpink', 'pink']
plt.pie(size, labels=label, autopct='%.1f%%', colors = color, explode=(0,0,0.1,0))
plt.legend()
plt.show()

 


  제주도 성별 인구 비율 표현하기  

import csv
import matplotlib.pyplot as plt

f=open('gender.csv')
data = csv.reader(f)
size=[]
name = input('찾고 싶은 지역의 이름: ')
for row in data:
    if name in row[0]:
        m=0
        f=0
        for i in range(101):
            m+=int(row[i+3])
            f+=int(row [i+106])
        break

size.append(m)
size.append(f)

plt.rc("font", family = "Malgun Gothic")
color = ["cornflowerblue", "violet"]
plt.axis("equal")
plt.pie(size, labels = ["남", "여"], autopct = "%.1f%%", colors = color, startangle = 90)
plt.title(region + " 남녀 성별 비율")
plt.show()

 


 산점도로 나타내기 

scatter() 함수로 산점도 표현 가능

다음 코드에서 입력된 데이터를 순서쌍으로 표현하면 (1, 10), (2, 30), (3, 20), (4, 40) , 해당 좌표에 점이 찍힌 산점도가 그려짐

import matplotlib.pyplot as plt
plt.scatter([1,2,3,4], [10,30,20,40])
plt.show()

 

- 버블 차트로 표현하기

scatter() 함수는 버블 차트를 그릴 때도 사용 가능함

기존 코드에서 size를 의미하는 s 속성을 추가하고 원하는 크기를 입력

c 속성으로 각 점의 색상도 정할 수 있음

import matplotlib.pyplot as plt
plt.scatter([1,2,3,4], [10,30,20,40], s=[100,200,250,300],  c=['red','blue','green','gold'])
plt.show()

 

colorbar() 함수: 그래프 옆에 컬러바를 추가

scatter() 함수에 c 속성을 추가하여 표현하고 싶은 색상의 개수를 설정하면 각 데이터에 해당하는 컬러바의 색으로 정해짐

여기서는 4개의 점을 각각 다른 색으로 표현하기 위해 c=range(4)를 추가

cmap이라는 컬러맵 속성을 사용해 컬러바에 사용될 색상의 종류도 정할 수 있음

import matplotlib.pyplot as plt
plt.scatter([1,2,3,4], [10,30,20,40], s=[30,60,90,120], c=range(4))
plt.colorbar()
plt.show()

 

- 임의의 데이터 100개 산점도로 나타내기

import matplotlib.pyplot as plt
import random
x=[]
y=[]
size=[]
for i in range(100):
    x.append(random.randint(50, 100))
    y.append(random.randint(50, 100))
    size.append(random.randint(10, 100))
plt.scatter(x, y, s=size)
plt.show()

 

 

plt.scatter(x, y, s=size, c=size, cmap='jet') 수정 시 크기에 따라 다른 색 표현 가능

이렇게 표현하면 작은 점이 큰 점에 가려지는 문제 발생

→ alpha 속성으로 투명도 조절 (범위는 0~1, 0에 가까울수록 투명, 1에 가까울수록 불투명)

 

 

plt.scatter(x, y, s=size, c=size, cmap='jet', alpha=0.6) 수정 ↓

 

 


제주도의 연령대별 성별 비율 산점도로 표현하기

 

남성 인구수 중 가장 큰 값을 기준으로 y=x형태의 직선, 즉 추세선을 그려 한눈에 들어오도록 함

import matplotlib.pyplot as plt
plt.scatter(m, f, c= range(101), alpha=0.5, cmap='jet') # 컬러맵 적용
plt.colorbar()
plt.plot(range(max(m)),range(max(m)), 'g') # 추세선 추가
plt.show()

 

 

math 라이브러리에 있는 제곱근 함수인 sqrt()를 사용하여 점의 크기를 적절히 조절하고 x, y축의 이름을 xlabel(), ylabel() 함수로 정함

 

전체 코드

import csv
import math
f = open('gender.csv')
data = csv.reader(f)
m = []
f = []
size = []
name = input('궁금한 동네를 입력해주세요 : ')
for row in data :
    if name in row[0] :
        for i in range(3,104) :
            m.append(int(row[i]))
            f.append(int(row[i+103]))
            size.append(math.sqrt(int(row[i])+int(row[i+103])))
        break
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.rc('font',family='Malgun Gothic')
plt.figure(figsize=(10,5), dpi=300) # 그래프 크기 조절, dpi: 해상도
plt.title(name+' 지역의 성별 인구 그래프')
plt.scatter(m, f, s=size, c=range(101), alpha=0.5, cmap='jet')
plt.colorbar()
plt.plot(range(max(m)),range(max(m)), 'g')
plt.xlabel('남성 인구수')
plt.ylabel('여성 인구수')
plt.show()

 

 

 

참고서적

 

'데이터 분석' 카테고리의 다른 글

[데이터 분석] 영화 관객수 예측  (0) 2024.03.07
One-hot Encoding / get_dummies  (1) 2024.03.07
[데이터 분석] 다양한 형태로 시각화하기 (막대 그래프, 항아리 그래프)  (0) 2024.01.31
[데이터 분석] 우리 동네 인구 구조 시각화하기  (2) 2024.01.29
[데이터 분석] A열의 한글이 깨져 보일 때 해결 방법  (1) 2024.01.29
'데이터 분석' 카테고리의 다른 글
  • [데이터 분석] 영화 관객수 예측
  • One-hot Encoding / get_dummies
  • [데이터 분석] 다양한 형태로 시각화하기 (막대 그래프, 항아리 그래프)
  • [데이터 분석] 우리 동네 인구 구조 시각화하기
seulll
seulll
개인 공부 / 정리 블로그입니다
  • seulll
    seulll
    seulll
  • 전체
    오늘
    어제
    • 분류 전체보기 (328) N
      • 코딩테스트 (224)
        • programmers (python) (156)
        • 백준 (python) (66)
      • 자료구조 | 알고리즘 (14)
      • 개발 | 프로젝트 (40) N
        • Python (4)
        • Java | Spring (7)
        • Android (4) N
        • Unity (3)
        • API (4) N
      • CS (15)
        • Network (5)
        • SQL (2)
        • OS (4)
      • 데이터 분석 (14)
      • 기타 (12)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 설정
  • 링크

    • GitHub
  • 인기 글

  • 태그

    야근 지수
    kakao map api
    티스토리챌린지
    박스플롯
    백엔드 개발자
    Greedy
    API
    오차행렬
    2 x n 타일링
    바다코끼리
    카카오맵
    백엔드
    카카오맵 api
    confusion matrix
    train_test_split
    코딩테스트
    그리디 알고리즘
    데이터분석
    Python
    프로그래머스
    Boxplot
    프렌즈4블록
    파이썬
    백엔드 개발자 역량
    오블완
    모델 성능 평가
    solving environment
    asterisk
    대입 표현식
    웹크롤링
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
seulll
[데이터 분석] 파이 차트, 산점도
상단으로

티스토리툴바