基于django的数据可视化展现

今天给大家简单分享一下一个基于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] = 1else: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.hqwc.cn/news/14489.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像处理-比特平面分层和重构

一、比特平面分层 像素是由比特组成的数字。例如在256级灰度图像中&#xff0c;每个像素的灰度是由8比特&#xff08;一个字节&#xff09;组成。如下图所示&#xff0c;一幅8比特图像由8个1比特平面组成&#xff0c;其中平面1包含图像中所有像素的最低阶比特&#xff0c;而平…

SpringBoot项目多模块打包部署Docker实战

前言 我们好多程序员都只关注功能代码的编写&#xff0c;在一些运维工作上则显得略有不足。这篇文章通过介绍最常见的Maven管理的Spring Boot项目多模块打包部署Docker来介绍一下项目部署过程中操作流程和几个需要注意的点。文章假设读者有前面提到的技术点的前置知识&#xf…

3D建模软件、Creo 3D 、Creo8安装、下载教程

PTC Creo 8.0 是一款三维 CAD 软件&#xff0c;适用于多个行业和应用场景&#xff0c;包括机械设计、工业设计、电子设计等等。以下是 PTC Creo 8.0 的功能介绍和安装条件&#xff1a; 功能介绍&#xff1a; 三维建模&#xff1a;可以使用多种工具进行三维建模&#xff0c;包…

ModaHub魔搭社区:RESTful API 的方式访问全球领先的向量数据库Milvus

目录 Insert CreateIndex and Load Search or Query 作为全球领先的开源向量数据库,Milvus 一直致力于满足不同用户的场景和需求,聆听社区的声音。 最近, 我们发现,很多用户的数据中 常常包含各种不确定类型的数据,也有用户提出希望以 RESTful API 的方式访问 Milvus。…

Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘

Python 有趣的模块之pynupt ——通过pynput控制鼠标和键盘 文章目录 Python 有趣的模块之pynupt ——通过pynput控制鼠标和键盘1️⃣简介2️⃣鼠标控制与移动3️⃣键盘控制与输入4️⃣结语&#x1f4e2; 1️⃣简介 &#x1f680;&#x1f680;&#x1f680;学会控制鼠标和键盘是…

基于Unity2017版本的2D3D Infinite Runner Engine 1.5.1二维三维跑酷游戏模板

基于Unity2017版本的2D3D Infinite Runner Engine 1.5.1二维三维跑酷游戏模板 有多种游戏模式 还有个竖屏的玩法 工程地址&#xff1a;https://download.csdn.net/download/Highning0007/88020755

axure可视化大屏模板200例 •axure模板 大屏可视化 •axure数据可视化原型 •axure可视化组件 •axure

可视化axure原型可视化大屏模板200例&#xff0c;带动画效果&#xff0c;可直接复用 axure可视化大屏模板200例 axure可视化大屏模板200例数据可视化原型可视化组件下载—无极低码 axure模板 大屏可视化axure数据可视化原型axure可视化组件axure原型演示axure绘制界面原型图…

IDEA中配置Java反编译工具javap -c

IDEA中配置Java反编译工具javap -c 一、前置条件二、新建外部工具三、使用方式 欢迎访问我的个人博客&#xff1a;https://wk-blog.vip 一、前置条件 确保 IDEA 已经开启了编译 javac 。默认 IDEA 是开启的。 二、新建外部工具 首先进入 Settings ---> Tools ---> Ext…

基于“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用

查看原文>>>基于“SRP模型”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用 本文集成云端、桌面端等环境&#xff0c;结合遥感云计算、GIS空间分析&#xff0c;R语言统计分析的优势&#xff0c;以分析生态环境脆弱性…

Spring MVC教程

Spring MVC属于SpringFrameWork的后续产品&#xff0c;已经融合在Spring Web Flow里面。 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。 使用 Spring 可插入的 MVC 架构&#xff0c;从而在使用Spring进行WEB开发时&#xff0c;可以选择使用Spring的Spring MVC框架或集…

【C语言】你知道浮点数是怎么存储的吗?

前言 &#x1f388;大家好&#xff0c;我是何小侠&#x1f388; &#x1f343;大家可以叫我小何或者小侠&#x1f343; &#x1f490;希望能通过写博客加深自己对于学习内容的理解&#x1f490; &#x1f338;也能帮助更多人理解和学习&#x1f338; 积学以储宝&#xff0c;酌…

1.Git使用技巧-基础原理

Git 使用技巧 文章目录 Git 使用技巧前言一、Git 安装二、搭建服务端仓库三、搭建客户端1. git 通信2. git支持的通信协议本地拉取代码3. 配置用户名和密码查看配置 查看git 帮助Git 工作流程总结参考 前言 Git 是一个开源的分布式代码版本控制系统&#xff0c;用于敏捷高效地…