본문 바로가기
python

Django로 회원가입/로그인 페이지 만들기 (Python) - 5탄

by 포 키 2023. 8. 2.
728x90

아래 링크까지 구현이 된 상태에서 진행을 해야한다.

2023.08.02 - [python] - Django로 회원가입/로그인 페이지 만들기 (Python) - 4탄

 

Django로 회원가입/로그인 페이지 만들기 (Python) - 4탄

파이썬 웹 개발로 장고를 사용하는 것을 배우면서 웹 개발 쪽으로 점차 관심이 가기 시작한다. 원래는 파이썬으로 웹 개발을 많이 하는 추세는 아니다보니 기대를 한 것도 아니었고, 빅데이터

forky-develop.tistory.com

 

엑셀파일을 업로드해서 데이터를 읽어올 수 있도록 해야한다.


data.xlsx
0.01MB

 

 

1. html 수정하기

 

 

<div class="content">
            <div class="fileInputDiv">
                <form action="calculate/" method="POST" enctype="multipart/form-data">{% csrf_token %}
                    <div class="input-group">
                        하단 버튼을 통해 파일을 업로드 해주세요.(.xls 확장자의 파일만 가능합니다.)<br>
                        <input id="fileInput" name="fileInput" type="file" class="form-control">
                        <input type="submit" class="btn btn-success btn-lg" value="파일 제출">
                    </div>
                </form>
            </div>
        </div>

 

2. urls 파일 확인하기

우리는 앞전에 미리 경로를 지정했기 때문에 굳이 건드릴 필요는 없다.

 

 

3. views 파일 수정하기

from django.shortcuts import render
from django.http import HttpResponse
import pandas as pd

# Create your views here.
def calculate(request):
    file = request.FILES['fileInput']
    print("# 사용자가 등록한 파일의 이름 : ", file)
    df = pd.read_excel(file, sheet_name="Sheet1", header=0)
    print(df.head())

    # grade 별 value 리스트 만들기
    grade_dic = {} # 빈 딕셔너리 생성
    total_row_num = len(df.index)
    # print(total_row_num)

    for i in range(total_row_num):
        data = df.loc[i, :]
        # print(data)
        # print("")
        # print("")
        if not data['grade'] in grade_dic.keys():
            grade_dic[data.grade] = [data.value]
        else:
            grade_dic[data.grade].append(data.value)

    print(grade_dic)

    grade_calculate_dic = {}
    for key in grade_dic.keys():
        grade_calculate_dic[key] = {}
        grade_calculate_dic[key]['min'] = min(grade_dic[key])
        grade_calculate_dic[key]['max'] = max(grade_dic[key])
        grade_calculate_dic[key]['avg'] = float(sum(grade_dic[key])) / len(grade_dic[key])

    print(grade_calculate_dic)

    # 결과 출력
    grade_list = list(grade_calculate_dic.keys())
    print("")
    print(grade_list)
    grade_list.sort()
    for key in grade_list:
        print("# grade: ", key)
        print("min:", grade_calculate_dic[key]['min'], end="")
        print("/ max:", grade_calculate_dic[key]['max'], end="")
        print("/ avg:", grade_calculate_dic[key]['avg'], end="\n\n")

    # 이메일 주소 도메인별 인원 구하기
    email_domain_dic = {}
    for i in range(total_row_num):
        data = df.loc[i, :]
        print(data.email)
        email_domain = data['email'].split("@")[1]
        if not email_domain in email_domain_dic.keys():
            email_domain_dic[email_domain] = 1
        else:
            email_domain_dic[email_domain] += 1
    
    print("## Email 도메인별 사용 인원")
    for key in email_domain_dic.keys():
        print("#", key, ": ", email_domain_dic[key], "명")
    
    # pandas 문법으로 변환해서 2개 Tasks 완료하기

    return HttpResponse("calculate, calculate function!")

 

위의 코드를 이용해서 예제를 완성해보자.

터미널에 뜨는 것의 일부를 가져와보면 아래처럼 뜰 것이다.

 

 

여기서 추가로 우리는 pandas 를 활용해 데이터 표를 만들어 보는 것을 해보자

 

4. pandas 이용하기

이 부분은 교재 내용은 아니었고, 혼자서 해보는 거였는데 난 진짜 하나도 모르겠었다....

1시간이나 되는 시간을 줬는데 아무리 찾아봐도 모르겠어서 나랑 데이터 분석이 정말 안맞는건가 하는 자괴감까지 들었다.

애초에 numpy 부분부터 데이터 분석과 관련된 코드라 기초지식이 없는게 당연했지만,

따로 공부를 제대로 하지 않은 내 탓이 가장 크다.

얼른 데이터 시각화 부분에 대한 공부를 더 해야겠다!!

 

정답 코드이고, 다른 코드를 사용해도 결과만 같으면 전혀 상관없다.

 

728x90