中国城镇污水处理厂数据可视化
食用指南
Warning / 注意
本页不能兼容全部移动端设备!请尽量使用桌面版或或者大屏设备访问!
GitHub链接:Data-Visualization-of-WWTPs-in-China,个人博客访问地址:亚灿网志。
数据介绍:中国各地区在1961\~2014期间建立的污水处理厂的信息,具体信息包括:污水处理厂名称、地理位置、设计规模,现运行规模、处理工艺,以及建厂日期。
数据来源:某政府网站公开数据。
数据前期处理
PDF转Excel
采用Abode Acrobat
即可将PDF
转换为Excel
文件。
Excel转JSON
利用Python
的openpyxl
和json
模块完成数据的读取、转化、保存。
代码:
# -*- coding:utf-8 -*-
# Author: Man Yacan
# Email: myxc@live.cn
# Website: https://www.manyacan.com
# Datetime: 2020/9/6 11:10
# Software: PyCharm
import json # 导入json模块
from openpyxl import load_workbook # 加载Excel处理模块
wb = load_workbook(filename='originalInfo/info.xlsx') # 打开Excel文件
worksheet = wb['sheet_01'] # 选择工作表
table_header = worksheet['1'] # 得到json数据的keys
project_list = list(worksheet.rows) # 得到所有行
del project_list[0] # 去掉标题行(第一行)
json_file = open('Info.json', 'a', encoding='utf-8') # 设置打开格式,防止保存后乱码
for project in project_list: # 遍历所有行
temp_dict = {}
for index, cell in enumerate(project):
key = table_header[index].value # 得到json数据的key值
temp_dict[key] = cell.value # 得到json数据的value
json_data = json.dumps(temp_dict, ensure_ascii=False) + ',\n' # json格式化
json_file.write(json_data) # 写入json数据
json_file.close() # 关闭json文件
转为json
文件后的数据结构为:
[
{
"id": 1,
"province": "北京",
"city": "朝阳区",
"name": "高碑店污水处理厂",
"method": "活性污泥法",
"startTime": "1993年12月",
"capability": 100,
"averageAbility": 93.02
},
....
....
....
]
注意:污水处理厂的设计能力capability
和平均运行能力averageAbility
的单位都是万立方米/天
。
数据可视化
全国树状图展示
时间变化
各省份现有污水处理厂对比
# -*- coding:utf-8 -*-
# Author: Man Yacan
# Email: myxc@live.cn
# Website: https://www.manyacan.com
# Datetime: 2020/9/6 11:46
# Software: PyCharm
from pyecharts import charts, options, globals # 可视化处理模块
import json # 处理json文件模块
with open("originalInfo/Info.json", "r", encoding="utf-8") as f:
all_info_list = json.load(f) # 将读取的json文件以list的形式传递进本程序
all_city = [item.get("province") for item in all_info_list] # 获取所有城市名
# 创建一个数组,用于保存本次数据可视化的数据
# 格式为:[('天津‘, 200), (’河南‘, 300), ('省份名称',污水处理厂数量) ...]
city_data = []
for city in set(all_city):
city_data.append((city, all_city.count(city)))
# 计算全国省份污水处理厂的平均数量
# average_num = sum([item[1] for item in city_data]) / len(city_data)
bar = charts.Bar(init_opts=options.InitOpts( # 创建条形统计图类
width='100%', # 设置图形宽度
theme=globals.ThemeType.LIGHT, # 设置图形主题
animation_opts=options.AnimationOpts( # 设置图形动画
animation_delay=1000, animation_easing="elasticOut"
)
)) # 创建一个柱形图对象并在创建时启用一个主题
bar.add_xaxis([item[0] for item in city_data]) # 给柱形图设置X列
bar.add_yaxis(
"中国城镇污水处理厂",
[item[1] for item in city_data],
category_gap=2 # 设置图之间的分隔距离
) # 给柱形图设置Y列
bar.set_global_opts(
title_opts=options.TitleOpts(title="中国污水处理厂数据可视化", subtitle="各省份污水处理厂对比"), # 设置图名
yaxis_opts=options.AxisOpts(name="污水处理厂数量/座"), # 设置Y轴名称
xaxis_opts=options.AxisOpts(
name="省份", # 设置X轴名称
axislabel_opts=options.LabelOpts( # x轴标签的设置
font_size=10,
rotate=45,
horizontal_align='center',
margin=20
)
),
datazoom_opts=options.DataZoomOpts(orient="vertical"), # 设置缩放
toolbox_opts=options.ToolboxOpts() # 设置工具条可见
) # 给柱形图设置标题
bar.set_series_opts( # 额外的一些设置
label_opts=options.LabelOpts(is_show=False), # 设置条状图上的数据不显示
markline_opts=options.MarkLineOpts( # 设置标记线
data=[
options.MarkLineItem(type_="min", name="最小值"),
options.MarkLineItem(type_="max", name="最大值"),
options.MarkLineItem(type_="average", name="平均值")
]
),
)
bar.render("bar-chart.html") # 保存为html文件
地图分布
from pyecharts import options as opts
from pyecharts.charts import Geo
import json # 处理json文件模块
with open("originalInfo/Info.json", "r", encoding="utf-8") as f:
all_info_list = json.load(f) # 将读取的json文件以list的形式传递进本程序
all_city = [item.get("city") for item in all_info_list] # 获取所有城市名
# 创建一个数组,用于保存本次数据可视化的数据
# 格式为:[('天津‘, 200), (’河南‘, 300), ('省份名称',污水处理厂数量) ...]
city_data = []
for city in set(all_city):
city_data.append((city, all_city.count(city)))
undefined_name = ['兵团', '伊犁州', '黔东南州', '北部新区', '延边州', '农垦总局', '农十师', '农六师', '黔西南州', '农八师', '农十三师', '长白山管委会', '黔南州',
'克孜勒苏州', '农一师', '湘西州', '克孜勒苏州'] # 过滤删除不兼容的地名
for index, item in enumerate(city_data):
if item[0] in undefined_name:
del city_data[index]
c = (
Geo()
.add_schema(maptype="china")
.add(
"中国各省份污水处理厂分布",
city_data,
type_='effectScatter',
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="中国污水处理厂数据可视化")
)
.render("geo_china.html")
)
历年增长
随着我国经济实力(GDP)的增长,污水处理会越来越受到国家和人民的关注。
# -*- coding:utf-8 -*-
# Author: Man Yacan
# Email: myxc@live.cn
# Website: https://www.manyacan.com
# Datetime: 2020/9/6 14:52
# Software: PyCharm
from pyecharts import charts, options, globals # 可视化处理模块
import json # 处理json文件模块
import re # 导入正则处理模块
with open("originalInfo/Info.json", "r", encoding="utf-8") as f:
all_info_list = json.load(f) # 将读取的json文件以list的形式传递进本程序
temp_year = [item.get("startTime") for item in all_info_list] # 获取所有时间
for index, year in enumerate(temp_year): # 处具体的时间中提取年份
temp_year[index] = re.match('\d{4}', year).group()
gdp = [1232.34, 5373.35, 6020.92, 7278.5, 9098.95, 10376.15, 12174.59, 15180.39, 12174.59, 15180.39, 17179.74, 18872.87,
22005.63, 27194.53, 35673.23, 48637.45, 61339.89, 71813.63, 79715.04, 85195.51, 90564.38, 100280.14, 110863.12,
121717.42, 187318.9, 219438.47, 270092.32, 319244.61, 348517.74, 412119.26, 487940.18, 538579.95, 592963.23,
641280.57] # GDP数据
year_data = []
for year in set(temp_year):
year_data.append((int(year), temp_year.count(year)))
year_data.sort() # 对年份排序
# print(year_data)
colors = ["#1abc9c", "#3498db", "#d68910"] # 定义一个颜色list
# 不知道为啥?折线图中的x轴数据只能为字符串类型,其他类型不显示
x_data = [str(item[0]) for item in year_data]
y_data = [item[1] for item in year_data]
bar = charts.Bar(init_opts=options.InitOpts( # 创建条形统计图类
width='100%', # 设置图形宽度
theme=globals.ThemeType.LIGHT, # 设置图形主题
animation_opts=options.AnimationOpts( # 设置图形动画
animation_delay=1000, animation_easing="elasticOut"
)
)) # 创建一个柱形图对象并在创建时启用一个主题
bar.add_xaxis(xaxis_data=x_data) # 添加X轴数据
bar.add_yaxis(
series_name='污水处理厂数量/座',
y_axis=y_data,
color=colors[1],
label_opts=options.LabelOpts(is_show=False),
) # 给柱形图设置Y列
bar.extend_axis( # 给统计图添加一个额外的列用来作为GDP的Y列
yaxis=options.AxisOpts(
name="GDP(亿元)",
type_="value",
# axislabel_opts=options.LabelOpts(formatter="{value}亿元"),
)
)
bar.set_global_opts(
title_opts=options.TitleOpts(title="中国污水处理厂数据可视化", subtitle="历年增长数据"), # 设置图名
yaxis_opts=options.AxisOpts(
name="污水处理厂数量/座",
type_="value",
name_location='center',
name_rotate=90,
name_gap=40,
axistick_opts=options.AxisTickOpts(is_show=True),
splitline_opts=options.SplitLineOpts(is_show=True),
# axislabel_opts=options.LabelOpts(formatter="{value} 座"),
), # 设置Y轴名称
xaxis_opts=options.AxisOpts(
name="年份", # 设置X轴名称
type_="category",
name_location='center',
name_gap=40,
axislabel_opts=options.LabelOpts( # x轴标签的设置
font_size=10,
rotate=45,
horizontal_align='center',
margin=20
),
axispointer_opts=options.AxisPointerOpts(is_show=True, type_="shadow")
),
tooltip_opts=options.TooltipOpts( # 提示工具
is_show=True, trigger="axis", axis_pointer_type="cross"
),
datazoom_opts=options.DataZoomOpts(pos_bottom='0px'), # 设置缩放
# toolbox_opts=options.ToolboxOpts() # 设置工具条可见
) # 给柱形图设置标题
bar.set_series_opts( # 额外的一些设置
markline_opts=options.MarkLineOpts( # 设置标记线
data=[options.MarkLineItem(type_="average", name="平均值")]
),
)
# 绘制GDP折线图
line = charts.Line()
line.add_xaxis(xaxis_data=x_data)
line.add_yaxis(
series_name="历年GDP",
yaxis_index=1, # 使用坐标轴的哪个Y轴
y_axis=gdp,
label_opts=options.LabelOpts(is_show=False),
is_smooth=True,
linestyle_opts=options.LineStyleOpts(
width=5,
type_='dotted',
color=colors[2]
),
)
bar.overlap(line).render("bar_02.html")
处理工艺
不难看出,氧化沟、SBR、A2/O是我国污水处理的主流工艺。
# -*- coding:utf-8 -*-
# Author: Man Yacan
# Email: myxc@live.cn
# Website: https://www.manyacan.com
# Datetime: 2020/9/6 18:07
# Software: PyCharm
import json
from pyecharts import options as opts
from pyecharts.charts import WordCloud
with open("originalInfo/Info.json", "r", encoding="utf-8") as f:
all_info_list = json.load(f) # 将读取的json文件以list的形式传递进本程序
all_method = []
for item in all_info_list:
all_method.append(item['method'])
method_data = []
for item in set(all_method):
method_data.append((item, all_method.count(item)))
# print(method_data)
wordcloud = WordCloud()
wordcloud.add(
"",
method_data,
word_size_range=[20, 100],
# shape='diamond',
textstyle_opts=opts.TextStyleOpts(font_family="cursive"),
)
wordcloud.set_global_opts(
title_opts=opts.TitleOpts(
title="中国污水处理厂数据可视化",
title_textstyle_opts=opts.TextStyleOpts(font_size=23),
subtitle="处理工艺"), # 设置图名
tooltip_opts=opts.TooltipOpts(is_show=True)
)
wordcloud.render("wordcloud.html")
图片浏览
[photos]
[/photos]
[photos]
[/photos]