当前位置 : 主页 > 编程语言 > java >

【Python+Flask+Echarts】可视化练习题 ---- 餐饮数据柱状图

来源:互联网 收集:自由互联 发布时间:2022-08-15
文章目录 ​​数据集​​ ​​案例​​ ​​① 需求​​ ​​② 代码实现​​ ​​▶ 读取数据集整体浏览​​ ​​▶ 统计每个区不同餐饮类型销售表现​​ ​​▶ 获取每个地区的




文章目录

  • ​​数据集​​
  • ​​案例​​
  • ​​① 需求​​
  • ​​② 代码实现​​
  • ​​▶ 读取数据集整体浏览​​
  • ​​▶ 统计每个区不同餐饮类型销售表现​​
  • ​​▶ 获取每个地区的分类合并数据 ---- 二次优化版​​
  • ​​▶ 获取每种餐饮类型的信息​​
  • ​​▶ 可视化​​
  • ​​③ 效果展示​​


数据集

本篇的数据来源 ​​https://www.kaggle.com/datasets​​

【Python+Flask+Echarts】可视化练习题 ---- 餐饮数据柱状图_python


该数据集是关于可以向北京居民提供外卖服务的餐馆信息,包括北京的哪个地区,餐馆的食品类别,餐馆的品牌,餐馆的地址以及外卖的联系电话,通过一些简单的数据清洗处理绘制简单的图像

☆ミ(o*・ω・)ノ

​​返回顶部​​


案例

① 需求

通过上一篇的热力图处理的数据集,接下去看看能否绘制条形图来展现不同区域的订餐类型统计情况~

  • 基本布局如下:
  • 【Python+Flask+Echarts】可视化练习题 ---- 餐饮数据柱状图_数据集_02

  • 分析:与热力图不同的是,柱状图每绘制一次,所对应的信息是一种餐饮类型,而不像热力图一样只需通过坐标对应到区域、类型一次绘制。所以,在数据集处理这块需要重新提取出每个餐饮类型对应的区域、统计信息。

​​返回顶部​​


② 代码实现

▶ 读取数据集整体浏览

# 读取数据集
data = pd.read_csv("G:\Projects\pycharmeProject-C\Flask\dataset\TakeAway.csv",index_col=0)
print(data.isnull().sum())
print(data.loc[data.duplicated()])
print(data.columns)

大致浏览一下数据集,需求涉及的​​所在区县​​、​​分类​​字段并没有大量的缺失值(空值),并且数据集整体也没有重复记录,基本可以直接使用。

【Python+Flask+Echarts】可视化练习题 ---- 餐饮数据柱状图_返回顶部_03

​​返回顶部​​


▶ 统计每个区不同餐饮类型销售表现

# 统计每个区不同餐饮类型销售表现
data_area_time = data[['所在区县','分类']].groupby(['所在区县','分类']).agg(count=('分类','count')).reset_index()

通过分组聚合统计出不同地区,不同餐饮类型数据集。观察后发现每个地区的记录有多有少,并且在不同程度上缺失。对后续的热力图数据集传输,对应到坐标点难以操作。

【Python+Flask+Echarts】可视化练习题 ---- 餐饮数据柱状图_可视化_04


​​返回顶部​​


▶ 获取每个地区的分类合并数据 ---- 二次优化版

# 归并所有区域信息
def city_info():
city_info = []
for city in citys:
# 遍历聚合某一区域的信息
each_city = data.loc[data['所在区县'] == city].groupby(['所在区县', '分类']).agg(
count=('分类', 'count')).reset_index().values.tolist()
# 补全餐饮类型信息
# 提取当前有的 --- 采取列表推导式
curr_types = [x[1] for x in each_city]
# 与全部区域信息比对填补
for classification in classifications:
if classification not in curr_types:
each_city.append([city, classification, 0])
# print(sorted(each_city,key=lambda x: x[1]))
city_info.append(sorted(each_city,key=lambda x: x[1]))
return city_info
city_infos = city_info()

【Python+Flask+Echarts】可视化练习题 ---- 餐饮数据柱状图_返回顶部_05

​​返回顶部​​


▶ 获取每种餐饮类型的信息

# 提取每种餐饮类型的数据
df = pd.DataFrame(city_infos)
data1 = df[0].values.tolist()
data2 = df[1].values.tolist()
data3 = df[2].values.tolist()
data4 = df[3].values.tolist()
data5 = df[4].values.tolist()
data6 = df[5].values.tolist()
data7 = df[6].values.tolist()
all_data = [data1,data2,data3,data4,data5,data6,data7]
  • 将合并的总数据集转为DataFrame后发现,对应的每一列数据集就是每一种类型的餐饮信息,进一步提取。
  • 【Python+Flask+Echarts】可视化练习题 ---- 餐饮数据柱状图_python_06


  • 【Python+Flask+Echarts】可视化练习题 ---- 餐饮数据柱状图_html_07

​​返回顶部​​


▶ 可视化

Flask

# 视图
app = Flask(__name__)
@app.route("/")
def index():
list = city_infos
l = all_data
return render_template("TakeAway_02.html",list=list,data = l)
if __name__ == '__main__':
app.run(debug=True)

HTML

<!DOCTYPE html>
<html lang="en" style="height:95%">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body style="height:95%">
<div style="height:100%" id="container"></div>
<script type="text/javascript" src="../static/echarts.min.js"></script>
<script type="text/javascript">var dom = document.getElementById("container");
var myecharts = echarts.init(dom);

var x = [{% for item in list %}'{{ item.0.0 }}',{% endfor %}];
var legend = [{% for item in list.0 %}'{{ item.1 }}',{% endfor %}];
var data1 = [{% for item in data.0 %}{{ item.2 }},{% endfor %}];
var data2 = [{% for item in data.1 %}{{ item.2 }},{% endfor %}];
var data3 = [{% for item in data.2 %}{{ item.2 }},{% endfor %}];
var data4 = [{% for item in data.3 %}{{ item.2 }},{% endfor %}];
var data5 = [{% for item in data.4 %}{{ item.2 }},{% endfor %}];
var data6 = [{% for item in data.5 %}{{ item.2 }},{% endfor %}];
var data7 = [{% for item in data.6 %}{{ item.2 }},{% endfor %}];

var option = null;
option = {
title:{
text:'北京各区不同订餐类型对比柱状图'
},
tooltip:{
trigger:'axis',
axisPointer:{
type:'cross'
}
},
legend:{
right:'10%',
show:true,
data:legend
},
grid:{
top:'5%',
bottom:'0%',
right:'10%',
left:'5%',
containLabel:true
},
xAxis:{
type:'category',
data:x,
axisPointer: {
type: 'shadow'
},
boundaryGap:true,
axisTick:{
alignWithLabel:false
},
axisLabel:{
interval:0,
rotate:0
}
},
yAxis:{
type:'value',
},
series:[
{
name:'快餐',
type:'bar',
data:data1
},{
name: '快餐+火锅',
type:'bar',
data:data2
},{
name:'快餐+西餐',
type:'bar',
data:data3
},{
name:'正餐',
type:'bar',
data:data4
},{
name:'火锅',
type:'bar',
data:data5
},{
name:'西餐',
type:'bar',
data:data6
},{
name:'饮品',
type:'bar',
data:data7
},
]
};
if (option && typeof option=='object'){
myecharts.setOption(option);
}</script>
</body>
</html>

​​返回顶部​​


③ 效果展示

【Python+Flask+Echarts】可视化练习题 ---- 餐饮数据柱状图_返回顶部_08


​​返回顶部​​​           ​​​​



【文章转自:防御服务器 http://www.558idc.com/aqt.html提供,感恩】
网友评论