python excel数据框_Python处理Excel数据可视化

关键技术

FE

Ajax

Flask

Echarts

xlrd

FE 部分

此部分为基础前端知识内容,根据业务所需,自行进行页面布局。

Ajax 部分

此部分是能来进行数据请求与异步加载

Flask部分

此部分主要是为其搭建web服务,Flask相对django更轻量,也可替换为Django框架

Echarts部分

此部分主要是对接收到的数据来进行可视化展示

xlrd部分

此部分是使用Python语言处理excel的主要模块,用来读取业务数据

逻辑图

5aa79912adbb

开发逻辑图

效果图

5aa79912adbb

最终效果图

代码详解

首先参考Echarts官方文档,查看相关API调用方法

var myChart = echarts.init(document.getElementById('main'));

var option = {

title: {

text: '数据统计可视化'

},

tooltip: {},

grid:{

height:'50%',

width:'80%'

},

legend: {

data:['收入']

},

xAxis: {/*x轴*/

axisLabel:{

rotate:45

},

data: []

},

yAxis: {},/*y轴*/

series: [{

name: '收入',

type: 'bar',

barwidth:10,

data: []

}]

};

myChart.setOption(option);

}

}

}

其中Echarts需要首先进行引进 可以使用本地引进,也可使用CDN

其次,使用xlrd模块对Excel文件进行数据读取,并转存为Json格式,记为data_show.py

import xlrd

import json

def ReadFile(user,userinfo):

excel = xlrd.open_workbook("test.xlsx") # Open the file of excel

target_sheet = excel.sheet_by_index(0) # Get Sheets name By index /By Name of user's input string

for i in range(2,target_sheet.nrows):

if target_sheet.cell(i,11).value.split(' ')[0] not in user:

user.append(target_sheet.cell(i,11).value.split(' ')[0])

for k in user:

userinfo[k] = 0

for i in range(2,target_sheet.nrows):

checkUsername(target_sheet.cell(i,11).value.split(' ')[0],target_sheet.cell(i,9).value,userinfo )

def checkUsername(name,num,userinfo):

for k in userinfo:

if name in k:

userinfo[k] += int(num)

def Result(a=0):

userlist = [] #存储归属人(X坐标数据)

userinfo = {} #存储数据(Y坐标数据)

ReadFile(userlist,userinfo)

jsondata = json.dumps(userinfo,ensure_ascii=False)

return jsondata

其中Result为主要入口函数

接着,搭建Flask框架,存储至hello.py

from flask import Flask,render_template,request,Response

import data_show #引入数据处理py文件

import json

app = Flask(__name__)

@app.route('/')

def index():

return '''.....''' #此处为FE代码

@app.route('/show',methods=['POST','GET'])

def show_info():

if request.method == 'GET':

num = request.args.get('a')

Rejson = data_show.Result(num)

return Response(Rejson,content_type="application/json")

if __name__ == '__main__':

app.run(port=8888,debug=True)

通过Flask框架对数据进行读取,通过请求http://127.0.0.1:8888/show?a=来进行响应,此处的a为以后业务扩展使用,例如可以传入关键参数,季度,月份等查询

为了能够动态加载相关内容并且不影响整个页面的使用,友好性来进行处理,可以使用Ajax技术来进行动态异步请求

let xhr;

if (window.XMLHttpRequest)

{

xhr = new XMLHttpRequest()

}

else

{

xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

xhr.open("GET","http://127.0.0.1:8888/show?a=1",true);

xhr.send();

xhr.onreadystatechange = function(){

if(xhr.readyState==4 && xhr.status==200){

//EchartsAPI相关代码

let info = JSON.parse(xhr.responseText) //处理通过Flask响应的函数Json数据

let user = []

let user_info = []

for (var name in info){

user.push(name);

user_info.push(info[name]);

}

option.xAxis.data = user;

option.series[0].data = user_info;

}

}

后记

代码核心主要分为Echarts的API调用,Ajax的Json数据请求与处理,Flask框架,xlrd模块的Excel数据读取与处理。

代码可以优化有以下内容:

在Flask框架的使用可以使用temple,static等来使用模板文件和静态文件来进行处理。

在调用Echart数据时可以在未完成数据绘制前,加入loading方法,来提升友好性。

后期可结合数据库进行操作,并且对功能可以进行筛选扩展

参考资料

官方文件/文档/资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值