티스토리 뷰

동아리에서 출결관리를 하기 위해 EXCEL을 사용, EXCEL을 csv로 다른이름으로 저장하면 csv파일을 통해 python과 함께 데이터를 활용해 3번 초과로 체크된 사람의 이름을 자동으로 알려주는 시스템을 만들면 좋을 것 같다는 생각을 하였고 직접 만들어보았다. 지각 2번을 결석 1번으로 취급


csv파일로 전환된 엑셀파일

 

1. csv파일 사용을 위한 코드 작성

#출석 관리 시스템

# Importing library
import os

# Getting all the arff files from the current directory
files = [arff for arff in os.listdir('.') if arff.endswith(".arff")]

# Function for converting arff list to csv list
def toCsv(text):
    data = False
    header = ""
    new_content = []
    for line in text:
        if not data:
            if "@ATTRIBUTE" in line or "@attribute" in line:
                attributes = line.split()
                if("@attribute" in line):
                    attri_case = "@attribute"
                else:
                    attri_case = "@ATTRIBUTE"
                column_name = attributes[attributes.index(attri_case) + 1]
                header = header + column_name + ","
            elif "@DATA" in line or "@data" in line:
                data = True
                header = header[:-1]
                header += '\n'
                new_content.append(header)
        else:
            new_content.append(line)
    return new_content


# Main loop for reading and writing files
for file in files:
    with open(file, "r") as inFile:
        content = inFile.readlines()
        name, ext = os.path.splitext(inFile.name)
        new = toCsv(content)
        with open(name + ".csv", "w") as outFile:
            outFile.writelines(new)

2. 데이터중 가장 위의 두줄을 next를 통해 버리고 나머지를 한줄씩 불러옴

import csv

f=open('check_f.csv','r',encoding='cp949')
#encoding방법이 맥은 utf-8 방식을 쓰고 윈도우는 cp949 방식을 사용.

rdr = csv.reader(f)
f_list =[]

next(rdr)
next(rdr)

for line in rdr:
    f_list.append(line)

f.close()

print(f_list)

3. 활동인원, 활동횟수 출력해보기

num = len(f_list)
col = len(f_list[0])

print('동아리 인원 : {}명, 동아리 진행 횟수 {}번'.format(num,col-1))

4. 이름 list와 각 사람의 결석횟수를 저장할 sum list를 생성

#활동자들 이름 name 리스트에 저장
name = []
for i in range(num):
    name.append(f_list[i][0])
print(name)

#출석관리 리스트 cnt
cnt=[]
for i in f_list:
    cnt.append(i[1:])
    
print(cnt)

#3을 넘을 경우에 oot -> 저장을 sum에 
sum = [0]*num

for i in range(len(cnt)):
    for j in cnt[i]:
        for t in j:
            if t=='X':
                sum[i]+=1
            elif t=='W':
                sum[i]+=0.5
            else:
                continue
            
print(sum)

5. 결석도 지각도 하지 않은 사람들을 제외한 사람들의 이름을 넣을 name_list와 결석 횟수를 저장할 count_list 생성

name_list=[]
count_list=[]

for i in range(0,num):
    if sum[i]!=0:
        name_list.append(f_list[i][0])
        count_list.append(sum[i])
print(name_list)
print(count_list)
        

6. name_list와 count_list를 x와 y축의 변수로 하여 그래프를 출력해 시각화

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'NanumGothic'
plt.bar(name_list,count_list,color = "green",width=0.5)
plt.show()

4/1일 OT를 제외한 첫 활동 -> 출결 데이터가 1개 밖에 없기에 3을 넘는 사람은 없었지만, 이후에 누가 넘었는지 시각적으로 한눈에 파악하기 쉽게 만들어봄.

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'NanumGothic'
plt.bar(name_list,count_list,color = "green",width=0.5)
plt.show()

*TIP) 그래프에 name_list마다 출력을 해주려면 name_list값이 한글이여서 나눔고딕 폰드를 다운로드해주고 plt.reParams['font.familiy'] = 'NanumGothic'을 입력해줘야함. 안 그러면 한글값 출력이 되지 않아 각 막대그래프가 누구의 값인지 파악할 수 없게됨.

개인정보를 위해 name은 모자이크

7. 한계값 3을 넘으면 이름이 출력됨 

out = []
for i in range(0,len(count_list)):
    if count_list[i]>3:
        out.append(name_list[i])
        print(name_list[i])
        
#3번 넘은사람의 이름이 출력되는 코드

=> csv파일을 저장하고 코드를 돌리면 바로 3번 넘은 사람의 이름이 출력되어 눈으로 파일을 보며, 손으로 세어가며 하는 과정을 없앨 수 있게 된다.

아직, OT를 제외한 활동 횟수가 한번이여서 3번을 넘은 사람은 없었음.

 


CSV파일을 활용하는 머신러닝 관련 실습을 하고나서 동아리 출결을 EXCEL로 정리하는데 CSV파일과 python을 이용한다면 데이터 처리를 통해 불편한 과정없이 관리를 할 수 있다고 생각하였고, 동아리 활동 이후 다음날 새벽에 만들어보았다!

'기획' 카테고리의 다른 글

게시판만들기(4) - flask를 활용한 기능구현  (0) 2021.06.13
게시판만들기(3) - class diagram  (0) 2021.05.31
게시판 만들기(2) - UI  (0) 2021.05.27
게시판 만들기 (1) - user story, case  (0) 2021.05.27
byeBlue-(1) 기획  (0) 2021.03.28