-
Python 데이터분석 기초 23 - Django에서의 DataFrame, crosstab, 시각화Python 데이터 분석 2022. 11. 3. 11:32
models.py
from django.db import models # Create your models here. class Jikwon(models.Model): jikwon_no = models.IntegerField(primary_key=True) jikwon_name = models.CharField(max_length=10) buser_num = models.IntegerField() jikwon_jik = models.CharField(max_length=10, blank=True, null=True) jikwon_pay = models.IntegerField(blank=True, null=True) jikwon_ibsail = models.DateField(blank=True, null=True) jikwon_gen = models.CharField(max_length=4, blank=True, null=True) jikwon_rating = models.CharField(max_length=3, blank=True, null=True) class Meta: managed = False db_table = 'jikwon'
maria DB에 있는 데이터를 aa.py라는 파일에 넣고 그것을 models.py로 넣는다.
migrations, migrate를 적용시킨다.
urls.py
from django.contrib import admin from django.urls import path from mypandas import views urlpatterns = [ path("admin/", admin.site.urls), path("", views.mainFunc), path("showjikwon", views.showFunc) ]
views.py
from django.shortcuts import render import pandas as pd import numpy as np import matplotlib.pyplot as plt from mypandas.models import Jikwon plt.rc('font', family = 'malgun gothic') # Create your views here. def mainFunc(request): return render(request, 'main.html') def showFunc(request): jikwons = Jikwon.objects.all().values() # print(Jikwons) df = pd.DataFrame.from_records(data = jikwons) df.columns = ['사번', '직원명', '부서', '직급', '연봉', '입사', '성별', '평점'] # print(df.head(2)) # 직급별 연봉합/평균 jik_group = df['연봉'].groupby(df['직급']) # print(jik_group.sum()) jik_group_detail = {'sum':jik_group.sum(), 'avg':jik_group.mean()} df2 = pd.DataFrame(jik_group_detail) # dict 타입으로 합과 평균 함수를 적용하고 DataFrame으로 표로 작성 # print(df2) # crosstab ctab = pd.crosstab(df['직급'],df.성별) # df['직급'],df.성별 둘 다 같은 방법 # print(ctab) # 시각화 jik_result = jik_group.agg(['sum','mean']) # 열 컬럼 변경 print(jik_result) jik_result.plot(kind = 'barh') # DataFrame으로 시각화를 진행(가로막대) plt.title('직급 별 연봉 합/평균') plt.xlabel('연봉') plt.ylabel('직급') fig = plt.gcf() fig.savefig('django12_pandas/mypandas/static/images/jik.png') # 무조건 절대 주소를 적어야 된다(프로젝트 명부터). return render(request, 'list.html', # html 형식(테이블)으로 넘어간다. {'datas':df.to_html(index = False, border = 1), 'jik_group' : jik_group, # 'jik_group2' : jik_group.to_html() # to_html 함수를 쓰지 않으면 넘길 수 없다. 'jik_group_detail':df2.to_html(), 'ctab':ctab.to_html() })
DataFrame 방식, crosstab 방식, 시각화를 이곳에서 작성하였다.
시각화 이미지를 저장할 때는 무조건 절대 경로로 설정해야된다. 프로젝트 명부터 적으면 된다.
main.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <p>홈페이지</p> <a href="showjikwon">직원자료 출력</a> </body> </html>
list.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h2>직원 자료</h2> {% if datas %} {{datas|safe}} {% endif %} <hr> 직급별 연봉 합:<br /> 과장 : {{jik_group.sum.과장}} <br /> 대리 : {{jik_group.sum.대리}} <br /> 사원 : {{jik_group.sum.사원}} <br /> <hr> {{jik_group_detail | safe}} <!-- |safe를 넣지 않으면 태그까지 나온다. --> <hr> 직급별 성별 인원수 : <br /> {{ctab|safe}} <br /> <img src="/static/images/jik.png"/> </body> </html>
pandas의 DataFrame(to_html())을 사용하면 table을 만들지 않아도 알아서 만들어진다. |safe는 꼭 사용!
사용하지 않으면 table 형식이 아닌 태그까지 나오게 된다.
'Python 데이터 분석' 카테고리의 다른 글
Python 데이터분석 기초 24 - # 한글 형태소 분석(지원 라이브러리 konlpy를 사용) (0) 2022.11.03 konlpy 설치 (0) 2022.11.03 DB 데이터 불러와서 시각화 예제 (0) 2022.11.02 Python 데이터분석 기초 22 - 원격 DB와 연동 후 DataFrame으로 처리, 시각 (0) 2022.11.02 Python 데이터분석 기초 21 - local DB와 pandas(sqlite에 DataFrame 넣기) (0) 2022.11.02