Study Web Development

3월 31일

이전으로

Python

시각화

Matplotlib

선 그래프
  1. 새 파일 s06_mat6.py 생성
import matplotlib.pyplot as plt

# range()를 이용하여 0~29까지의 수를 지정하고 list()를 이용하여 리스트 생성
xdata = list(range(30))

# ydata는 xdata의 각 요소에 2를 곱한 값을 갖도록 연산
ydata = []
for x in xdata:
    y = 2*x
    ydata.append(y)
# ydata2 = (2*numpy.array(xdata)).tolist()

# 선 그래프
plt.plot(xdata,ydata,label='y=2x')

# 범례의 위치 지정
plt.legend(loc='best')

# x축의 범위를 0~35로 지정
plt.xlim(0,35)

# y축의 범위를 0~70으로 지정
plt.ylim(0,70)

# x축과 y축 눈금 값 표시
plt.xticks(list(range(0,35,2)))
plt.yticks(list(range(0,70,5)))

# 그리드 표시
plt.grid(True)

# 화면에 출력
plt.show()
파이 차트
  1. 새 파일 s07_mat7.py 생성
import matplotlib.pyplot as plt
from matplotlib import rc

# 한글이 표시될 수 있도록 폰트 지정
rc('font',family='Malgun Gothic')

# 레이블
pets = ['개','고양이','기타','기르지 않음']
# 데이터
portion = [18,3.4,3.1,75.5]

# 파이 그래프
plt.pie(portion,explode=(0,0.1,0,0),labels=pets,autopct='%.1f%%',shadow=True,startangle=90)
# 제목 표시
plt.title('총 가구 대비 반려동물을 기르는 비율(2018)')
# 화면에 출력
plt.show()
산포도
  1. 새 파일 s08_mat8.py 생성
import matplotlib.pyplot as plt
from matplotlib import rc

# 한글이 표시될 수 있도록 폰트 지정
rc('font',family='Malgun Gothic')

# 데이터
x = ['월','화','수','목','금','토','일']
y = [6.5,5.7,5.5,6.7,6.3,7.5,8.3]

# 제목 표시
plt.title('연간 요일별 평균 수면 시간')
# 산포 그래프
plt.scatter(x,y)
# 레이블 표시
plt.ylabel('수면 시간')
# 화면에 출력
plt.show()

공공 데이터

.csv

연령별 인구 현황
  1. 새 파일 s09_age.py
import matplotlib.pyplot as plt
from usecsv import opencsv

data = opencsv('age.csv', 'cp949')
result = []
name = input('인구 구조를 조회할 지역의 이름(읍면동 단위)을 입력하세요: ')
full_name = name

for row in data:
    if name in row[0]: # 입력한 지역과 일치하는 행에 대해서만
        if len(result)>0: # 신촌동처럼 동 이름이 같은 행정구역이 여럿인 경우 처음으로 등장하는 지역에 대해서만 처리
            break
        else:
            for i in row[3:]: # 행정구역과 총계 열들을 제외하고
                result.append(int(i.replace(',',''))) # 쉼표를 제거하고 정수로 변환
        full_name = row[0].split('(')[0]
print(full_name,result[:5]) # 제대로 변환되었는지 미리보기

if result:
    plt.style.use('ggplot')
    plt.rc('font', family='Malgun Gothic') # 한글 지원 폰트 설정
    plt.title(full_name + ' 지역의 인구 구조') # 제목 표시
    plt.plot(result) # 선 그래프
    plt.show() # 화면에 출력
else:
    print('데이터가 없습니다.')
  1. 새 파일 s10_age2.py 생성
# 지정한 동네의 인구 구조를 막대 그래프로 표현
import matplotlib.pyplot as plt
from usecsv import opencsv

data = opencsv('age.csv', 'cp949')
result = []
name = '대흥동'

for row in data:
    if name in row[0]:
        if len(result)>0:
            break
        else:
            for i in row[3:]:
                result.append(int(i.replace(',','')))
        name = row[0].split('(')[0]
print(name)

if result:
    # 0세부터 100세 이상까지 101개의 구간
    # plt.bar(range(101),result) # 수직 막대 그래프
    plt.barh(range(101),result) # 수평 막대 그래프
    plt.show() # 화면에 출력
else:
    print('데이터가 없습니다.')

다음으로