Blair  - Soul Eater [파이썬 예제] Numpy 4- 특정 초등학교 학생수와 교사수 비교하기

• programming language/python

[파이썬 예제] Numpy 4- 특정 초등학교 학생수와 교사수 비교하기

oujin 2022. 7. 29. 20:27
728x90

CSV예제 파일을 다운받아 주세요

**입력하는 코드가 있는 파일과 같은 폴더에 위치해 있어야 합니다**

 

 

[파이썬 예제] Numpy 1- 최대 학급수/학생수/교사수 찾기

●CSV예제 파일을 다운받아 주세요 **입력하는 코드가 있는 파일과 같은 폴더에 위치해 있어야 합니다** import csv f = open('school_2019.csv', 'r', encoding='utf-8') #school_2019.csv 파일을 열어서..

oujin.tistory.com

 

 

import csv
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
rc('font', family='Malgun Gothic')

f = open('school_2019.csv','r',encoding='utf-8')
lines = csv.reader(f)

header = next(lines)
#['지역', '학교명', '학급수', '학생수', '교사수']


schools = {}

for line in lines:
    if ('광주' in line[0]) and ('마재' in line[1]) :
        schools.update({'마재':[line[2], line[3], line[4]]})

#line[0]은 지역이고 line[1]은 학교명이다. 지역에 광주가 들어가고 학교명에 마재가 들어가면

#schools 딕셔너리에 키로는 마재를 값으로는 [line[2], line[3], line[4]]를 입력
    if ('울산' in line[0]) and ('약사' in line[1]) :
        schools.update({'약사':[line[2], line[3], line[4]]})
    if ('용인' in line[0]) and ('정평' in line[1]) :
        schools.update({'정평':[line[2], line[3], line[4]]})        
    if ('제주' in line[0]) and ('도평' in line[1]) :
        schools.update({'도평':[line[2], line[3], line[4]]})

print(schools)

data = np.zeros((4,3), dtype='int32')

#0으로 초기화된 4행3열의 ndarray 배열 data를 만든다

school = list(schools.values())
#딕셔너리 schools의 값을 요소로한 리스트 school생성


for i in range(len(schools)) :
    for j in range(3) :
        data[i][j] = school[i][j]
#학급수,학생수,교사수 값이 들어있는 school의 각 요소의 값을 data의 해당 요소에 저장
print(data)

data = np.insert(data, 2, 0, axis=1)

#insert() 메소드를 이용하여 행을 기준으로 2번째 인덱스에 data에 0으로된 값 입력,한 학급당 학생수를 입력할 자리 
data = np.insert(data, 4, 0, axis=1)

#insert() 메소드를 이용하여 행을 기준으로 4번째 인덱스에 data에 0으로된 값 입력,교사 1인당 학생수를 입력할 자리 

print(data)

row = data.shape[0]
#ndarray의 shape 속성은 해당 배열에 대한 차원의 튜플 값을 가진다.

#따라서 튜플의 첫 번째 요소의 값이 되며, 이것은 배열의 전체 행의 개수를 의미


for i in range(row) :
    data[i][2] = round(data[i][1]/data[i][0])

#한 학급당 학생수
    data[i][4] = round(data[i][1]/data[i][3])

#교사 1인당 학생수

print(data)

xdata = ['마재', '약사', '정평', '도평']
# Matplotlib 패키지에서 사용되는 x축에서 사용될 데이터를 설정

#x축은 선정된 네 학교의 이름


plt.plot(xdata, data[:, 1], label='학생수', color='red', linestyle='--', marker='x')
plt.plot(xdata, data[:, 3], label='교사수', color='blue', linestyle=':', marker='d')
plt.title('마재/약사/정평/도평 초등학교 학생수와 교사수')
plt.legend(loc='best')
plt.savefig("plot0.png")

#첫 번째 선 그래프는 선정된 네 학교에 대해 학생 수와 교사 수를 비교함

plt.plot(xdata, data[:, 2], label='학급당 학생수',  color='magenta', linestyle='-.', marker='o')
plt.plot(xdata, data[:, 4], label='교사 1인당 학생수', color='green', linestyle='--', marker='x')
plt.title('마재/약사/정평/도평 초등학교 학급당 학생수 및 교사 1인당 학생수')
plt.legend(loc='best')
plt.savefig("plot1.png")

#이 그래프는 네 학교에 대해 학급당 학생 수와 교사 1인당 학생 수를 나타냄

f.close()

{'마재': ['24', '481', '28'], '약사': ['29', '685', '33'], '정평': ['36', '945', '43'], '도평': ['14', '300', '17']}
[[ 24 481  28]
 [ 29 685  33]
 [ 36 945  43]
 [ 14 300  17]]
[[ 24 481   0  28   0]
 [ 29 685   0  33   0]
 [ 36 945   0  43   0]
 [ 14 300   0  17   0]]
[[ 24 481  20  28  17]
 [ 29 685  24  33  21]
 [ 36 945  26  43  22]
 [ 14 300  21  17  18]]

 

 

 

출처: 예제 중심 파이썬 입문

궁금한 부분이 있으면 댓글 부탁드립니다^^

728x90