基于django的数据可视化展现

news2024/11/27 22:32:18

今天给大家简单分享一下一个基于python的django的框架写的一个数据可视化的项目。

主要涉及技术:django基础,python基础,前端(html,echars)基础。

这个项目自然而然是基于python逻辑语言处理的,因为我们同学在学习python的过程中经常会到用python处理数据并对其经行数据可视化的任务章节,其实我们不借助python的web框架也可以经行数据可视化页面,我们无论使用plt或者echars也都可以基于python来实现,但是你会发现这样的话我们需要一次一次分别点击我们的文件代码或者html,略微繁琐且不美观,但是如果我们基于pythonweb的django框架来写就会发现高效美观许多,因为我们只需要启动django项目便可实现项目中含有的可视化页面来展现。

如我们拿两张图来经行简单的比较:

 如这张图:我是在pycharm编译器写的,数据我用python语言处理完毕之后用echars做的可视化,我们如果要预览页面的话需要一个一个点击打开html页面经行查看,但是我们再看下面这张使用django框架写的,如下图示:

 我们只需要启动django项目便可以使用导航栏目直达html页面预览,当然这一步也是django的处理核心(MVC模式),在url路由指定页面,在view里写入方法函数即可。

另外在此说明一下我这里(本次)写的项目是在kaggle数据拿的一个csv文件经行数据简单清洗可视化的,大家也可以用数据来练手,如果数据想和数据库sql有联系的话,那就要在models文件里声明字段类型,然后用到django的ORM架构来实现,也很容易的,细节就在不再详细说明了,本次博客旨在引导大家对django可视化的优点和了解,下次我将会具体分析讲解如何搭建django环境以及写一个简单的django项目。

接下来我把项目结构和代码贴出来:

代码(主要分享部分结构):

这是view方法类的合集,进入页面执行方法:

from django.shortcuts import render

# Create your views here.
def kaggledata1(request):
    return render(request, "kaggledata1.html")
def kaggledata2(request):
    return render(request, "kaggledata2.html")
def kaggledata3(request):
    return render(request, "kaggledata3.html")

这是url路由,进入网址执行方法: 

from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('kaggle/data1/', views.kaggledata1),
    path('kaggle/data2/', views.kaggledata2),
    path('kaggle/data3/', views.kaggledata3),


]

这时数据处理的部分代码:

# 可视化展现
# 各频道包含的节目数量占比
# 盘点最受欢迎的前10节目名称+查看受众最低的频道ID
encodings='utf-8'
import csv
import json
filename = 'kaggledata.csv'
selected_field_city = 'video_id'
selected_values_city = []
with open(filename, 'r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        selected_values_city.append(row.get(selected_field_city))
distData = {}
for job in selected_values_city:
    if distData.get(job, -1) == -1:
        distData[job] = 1
    else:
        distData[job] += 1
result = []
for k, v in distData.items():
    result.append({
        "name": k,
        'value': v
    })


data = result
json_data1 = json.dumps(data)
html_template = '''
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts Example</title>
    <!-- 引入ECharts库 -->
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.0.1/dist/echarts.min.js"></script>
</head>
<body>
    <!-- 定义一个容器来呈现图表 -->
    <div id="chart1" style="height:550px;"></div>

    <!-- 定义JavaScript代码来配置和渲染图表 -->
    <script type="text/javascript">
        // 将JSON字符串解析为JavaScript对象
        var data = JSON.parse('{}');
        // 配置图表
                option = {{
  title: {{
    left: 'center'
  }},
  tooltip: {{
    trigger: 'item'
  }},
  legend: {{
width:1000,
    bottom: 20,
    left: 20,
  }},
  series: [
    {{
      type: 'pie',
      radius: '65%',
      center: ['80%', '50%'],
      selectedMode: 'single',
      data: data,
      emphasis: {{
        itemStyle: {{
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }}
      }}
    }}
  ]
}};

        // 创建图表并呈现到容器中
        var chart = echarts.init(document.getElementById('chart1'));
        chart.setOption(option);
    </script>
</body>
</html>
'''

# 格式化HTML模板,将数据插入到JavaScript代码中
html = html_template.format(json_data1)

# 将HTML写入到文件中
with open('videoid_count.html', 'w') as f:
    f.write(html)
##############################################################################################################
# 盘点最受你欢迎的前20频道节目合集
encodings='utf-8'
import csv
import json
filename = 'kaggledata.csv'
selected_field = 'channelTitle'
selected_field_salary = 'view_count'
selected_values = []
selected_values_salary=[]
with open(filename, 'r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        selected_values.append(row.get(selected_field))
        selected_values_salary.append(row.get(selected_field_salary))
dic={}
for k,v in zip(selected_values, selected_values_salary):    # 用zip()函数打包两个列表中的元素
    dic[k] = int(v)
print(dic)
dic1={}
for k, v in sorted(dic.items(), key=lambda k: k[1], reverse=True)[:20]:
    print(f"'{k}' has a value of {v}")
    dic1[k]=v
listx=[]
listy=[]
for k,v in dic1.items():
    listx.append(k)
    listy.append(v)

data={"x":listx,"y":listy}
# 将数据转换为JSON字符串
json_data = json.dumps(data)
# 定义HTML文件模板
html_template = '''
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts Example</title>
    <!-- 引入ECharts库 -->
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.0.1/dist/echarts.min.js"></script>
</head>
<body>
    <!-- 定义一个容器来呈现图表 -->
    <div id="chart" style="width: 600px;height:400px;"></div>

    <!-- 定义JavaScript代码来配置和渲染图表 -->
    <script type="text/javascript">
        // 将JSON字符串解析为JavaScript对象
        var data = JSON.parse('{}');
        // 配置图表
        option = {{
  xAxis: {{
    type: 'category',
    data: data.x,
    axisLabel: { interval: 0, rotate: 30 }

  }},
  yAxis: {{
    type: 'value'
  }},
  series: [
    {{
      data: data.y,
      type: 'bar',
      showBackground: true,
      backgroundStyle: {{
        color: 'rgba(180, 180, 180, 0.2)'
      }}
    }}
  ]
}};
        // 创建图表并呈现到容器中
        var chart = echarts.init(document.getElementById('chart'));
        chart.setOption(option);
    </script>
</body>
</html>
'''

# 格式化HTML模板,将数据插入到JavaScript代码中
html = html_template.format(json_data)

# 将HTML写入到文件中
with open('likechannel.html', 'w') as f:
    f.write(html)
#######################################################################################################################
# 盘点最不受众的10大频道节目
selected_field = 'channelTitle'
selected_field_salary = 'view_count'
selected_values = []
selected_values_salary=[]
with open(filename, 'r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        selected_values.append(row.get(selected_field))
        selected_values_salary.append(row.get(selected_field_salary))
dic={}
for k,v in zip(selected_values, selected_values_salary):    # 用zip()函数打包两个列表中的元素
    dic[k] = int(v)
print(dic)
dic1={}
for k, v in sorted(dic.items(), key=lambda k: k[1], reverse=False)[:20]:
    print(f"'{k}' has a value of {v}")
    dic1[k]=v
print(dic1)
print("####################over")
listx=[]
listy=[]
for k,v in dic1.items():
    listx.append(k)
    listy.append(v)

data={"x":listx,"y":listy}
# 将数据转换为JSON字符串
json_data = json.dumps(data)
# 定义HTML文件模板
html_template = '''
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts Example</title>
    <!-- 引入ECharts库 -->
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.0.1/dist/echarts.min.js"></script>
</head>
<body>
    <!-- 定义一个容器来呈现图表 -->
    <div id="chart" style="width: 600px;height:400px;"></div>

    <!-- 定义JavaScript代码来配置和渲染图表 -->
    <script type="text/javascript">
        // 将JSON字符串解析为JavaScript对象
        var data = JSON.parse('{}');
        // 配置图表
        option = {{
  xAxis: {{
    type: 'category',
    data: data.x,
    axisLabel: { interval: 0, rotate: 30 }

  }},
  yAxis: {{
    type: 'value'
  }},
  series: [
    {{
      data: data.y,
      type: 'bar',
      showBackground: true,
      backgroundStyle: {{
        color: 'rgba(180, 180, 180, 0.2)'
      }}
    }}
  ]
}};
        // 创建图表并呈现到容器中
        var chart = echarts.init(document.getElementById('chart'));
        chart.setOption(option);
    </script>
</body>
</html>
'''

# 格式化HTML模板,将数据插入到JavaScript代码中
html = html_template.format(json_data)

# 将HTML写入到文件中
with open('dislikechannel.html', 'w') as f:
    f.write(html)

 

项目结构和效果图: 

 

 

 

 好啦,今天的分享就到此了,如果需要这个项目的同学可以私信我,我会把源代码文件(含csv数据)一起打包发给你,另外如果需要django可视化项目作业的同学也可以私信我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/720004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

好选客干货分享:化纤长丝找外贸客户

化纤长丝概述 化纤长丝是将聚合物材料&#xff08;如&#xff1a;聚酯、聚酰胺、聚酰胺酯等&#xff09;通过化学反应和纺丝工艺转化制成的连续的细长纤维&#xff0c;具有低成本、高强度、高弹性的优点&#xff0c;与天然纤维相比&#xff0c;其抗皱性和耐磨性也更胜一筹&…

隐秘的角落——proxychains代理工具

互联网只因你太美&#xff0c;自千禧年之后影响了数十年&#xff0c;无数的弄潮儿和狂热者为你痴迷&#xff0c;也有不尽的黑子们就安全问题而争议。直到现在&#xff0c;HTTPS、SSH、SOCKS、VPN、IPsec等技术逐渐为大众所接受&#xff0c;无法割舍。而这次&#xff0c;我将介绍…

防止网络断联,双机热备这么部署就对了

你们好&#xff0c;我的网工朋友。 防火墙的基本功能、配置案例、怎么提升网络的可靠性&#xff0c;给你说过不少。 但有小友留言说&#xff0c;双机热备的知识点&#xff0c;好像没有系统讲过&#xff0c;我去翻了翻&#xff0c;还真是。 为了保证网络的不间断传输&#xf…

浅谈有源电力滤波器及配电能效平台在污水处理厂中的应用

【摘要】为减少污水处理设备产生的各次谐波&#xff0c;通过确定主要谐波源&#xff0c;检测和计算谐波分量&#xff0c;采用有源电力滤波器进行谐波治理&#xff0c;大幅降低了电力系统中的三相电流畸变率&#xff0c;提高了电能质量&#xff1b;抑制了谐波分量&#xff0c;减…

顺序表与链表

思维导图&#xff1a; 顺序表与链表都是两种线性表&#xff0c;但是两者之间又有着许多的不同。顺序表是一种连续的空间&#xff0c;实际上就是数组。链表是不连续的空间&#xff0c;链表的空间是一块一块的开辟出来的。 两者的优点与缺点&#xff1a; 顺序表&#xff1a; 优点…

86、基于STM32的电动车 小车蓄电池锂电池充电桩系统设计(程序+原理图+PCB源文件+硬件资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

云计算——虚拟化层架构

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 前言 本章将会讲解云计算的虚拟化层架构&#xff0c;了解云计算虚拟化层都有哪些架构模式…

23. 销售额完成任务指标的商品

文章目录 题目需求存在的疑问实现一题目来源 题目需求 商家要求每个商品每个月需要售卖出一定的销售总额 假设1号商品销售总额大于21000&#xff0c;2号商品销售总额大于10000&#xff0c;其余商品没有要求 请写出SQL从订单详情表中&#xff08;order_detail&#xff09;查询连…

多元分类预测 | Matlab基于深度置信网络DBN的分类预测,多特征输入模型,DBN分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述

MySQL的match函数在sp中使用的BUG解析

一、问题发现 在一次开发中在sp中使用MySQL PREPARE以后&#xff0c;使用match AGAINST语句作为prepare stmt的参数后&#xff0c;发现执行第二遍call会导致数据库crash&#xff0c;于是开始动手调查问题发生的原因。 注&#xff1a;本次使用的 MySQL 数据库版本为最新的debug…

文件改名神器!简体中文一键翻译为繁体中文并智能保存到指定文件夹!

在这个简繁转换教程中&#xff0c;您将学习如何使用简单的方法将简体中文文件快速翻译为繁体中文&#xff0c;并将其保存至指定的文件夹中。无需复杂的翻译软件或多步操作&#xff0c;只需跟随以下步骤&#xff0c;您就能实现简繁转换的便捷保存。 首先第一步&#xff0c;我们…

机器学习一:线性回归

1 知识预警 1.1 线性代数 ( A T ) T A (A^\mathrm{T})^\mathrm{T}A (AT)TA$ ( A B ) T A T B T (AB)^\mathrm{T}A^\mathrm{T}B^\mathrm{T} (AB)TATBT ( λ A ) T λ A T (\lambda A)^\mathrm{T}\lambda A^\mathrm{T} (λA)TλAT ( A B ) T B T A T (AB)^\mathrm{T}B^…

C#加载 ToolBlock简单示例

可以用visionpro的VPPVersion.exe 工具查看文件格式。 在安装路径最后一个 官方示例文件路径 简单实例 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; …

Spark学习(二)---Spark运行架构和核心概念

1.Spark运行架构 Spark框架的核心是一个计算引擎&#xff0c;它采用了master-slave的结构。 图形中的 Driver 表示 master&#xff0c; 负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave&#xff0c;负责实际执行任务。 1.1 核心组件 由此可以得出&#xf…

接口(Interface)

接口 基本介绍 接口就是给出一些没有实现的方法&#xff0c;封装到一起&#xff0c;到某个类要使用的时候&#xff0c;再根据具体情况把这些方法写出来。 class 类名 implements 接口{自己属性;自己方法;必须实现的接口的抽象方法; // 只需要重写抽象方法即可 }接口中的方法…

硬盘接口损坏换电路板

1.有一块西数1T的蓝盘&#xff0c;SATA接口L形塑料掰断了&#xff0c;顾换块板解决接触不良问题 2.买板子&#xff0c;看好板子上印刷的版号&#xff0c;2060-771829-005 REV A&#xff0c;tb上买一片通型号的&#xff0c;十几块 3.用烙铁焊下原来烂板的8个脚的BIOS芯片&…

java.lang.noclassdeffounderror: com/fasterxml/jackson/core/util/jacksonfeature

建议直接查看我的原博 1.问题 环境&#xff1a; springboot2.3.10.RELEASE jdk1.8 elasticsearch8.8.1 根据官网&#xff0c;使用es时pom文件需要引入json工具&#xff0c;这里使用了jackson-databind&#xff1a; <dependency><groupId>co.elastic.clients…

栈(单位数计算器)

方法&#xff1a; 判断优先级 判断字符还是数字 计算方法 查看栈顶元素 思路 个位数计算器的代码&#xff1a; package calculator;public class Calculator {public static void main(String[] args) {String exp "78*9-2";Stack num new Stack(10);Stack op…

【CSS】浮动

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;HTMLCSS &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 浮动浮动的规则浮动的案例浮动的清除 浮动 float属性可以指定一个元素应沿其容器的…

Linux中配置sudo用户访问权限

文章目录 一、如何在 Linux 中配置 sudo 的访问权限1.1、添加一个Linux普通用户有 sudo 权限1.2、测试普通用户的 sudo 权限1.3、添加多个Linux普通用户有 sudo 权限1.4、验证sudo 权限 一、如何在 Linux 中配置 sudo 的访问权限 1.1、添加一个Linux普通用户有 sudo 权限 [ro…