现有97年到15年全国各省CO2排放量数据
一、代码共实现了以下可视化图表:
- 柱形图 97 年和 15 年全国各省 CO2 总排放量对比
- 染色地图 97 年和 15 年全国各省 CO2 总排放量分布图
- 折线图 :各省在 97 年到 15 年的 CO2 排放量总量趋势图
- 由于将 31 个省的折线图画在同一张图中太密集,同时为了分析不同省份之间趋势的相
似性,对各省的排放趋势做 KMean 聚类 ,分为 3 类,并将不同类的省份画在不同的图
中分析。 - 饼图 :以北京市和福建省为例,分析 2015 年时 CO2 的排放组成。
实现过程
导入所需的包,读取EXEL 表数据,以字典和 dataframe
的格式返回 97 到 15 年各省的 CO2排放总量
import numpy as np
import matplotlib.pyplot as plt
import xlrd
import pandas as pd
import pyecharts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
from pyecharts.charts import Line
from pyecharts import options as opts
from sklearn.cluster import KMeans
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
province=['北京','天津','河北','山西','内蒙古','辽宁','吉林','黑龙江','上海','江苏','浙江','安徽','福建','江西','山东','河南','湖北','湖南','广东','广西','海南','重庆','四川','贵州','云南','陕西','甘肃','青海','宁夏','新疆']
1、 柱形图: 97 年和 15 年全国各省 CO2 总排放量对比
# 初始年份和结束年份的全国CO2排放量
def nation_bar(data_sum):
bar = (
pyecharts.charts.Bar()
.add_xaxis(province)
.add_yaxis('1997年CO2排放量', data_sum[1997][:30])
.add_yaxis('2015年CO2排放量', data_sum[2015][:30])
.set_global_opts(title_opts=opts.TitleOpts(title='97年和15年各省CO2排放量对比'))
)
bar.render('97年和15年各省CO2排放量对比.html')
2、染色地图: 97 年和 15 年全国各省 CO2 总排放量分布图
def nation_map(data_sum):
map_97 = pyecharts.charts.Map()
map_97.add('1997年全国C02分布图', [list(z) for z in zip(province, data_sum[1997][:30])], maptype='china')
map_97.set_global_opts(title_opts=opts.TitleOpts(title='97年CO2排放量'),visualmap_opts=opts.VisualMapOpts(max_=max(data_sum[2015][:30]),min_=min(data_sum[2015][:30])))
map_97.render('97年CO2全国分布图.html')
# 2015年
map_15 = pyecharts.charts.Map()
map_15.add('2015年全国C02分布图', [list(z) for z in zip(province, data_sum[2015][:30])], maptype='china')
map_15.set_global_opts(title_opts=opts.TitleOpts(title='15年CO2排放量'),visualmap_opts=opts.VisualMapOpts(max_=max(data_sum[2015][:30]),min_=min(data_sum[2015][:30])))
map_15.render('15年CO2全国分布图.html')
3、 折线图:各省在 97 年到 15 年的 C O2 排放量总量趋势图
def lines(df):
plt.figure(figsize=(15,20))
for i in range(len(df)):
plt.plot(df.iloc[i,:],label=df.index[i])
plt.legend(fontsize=6,loc='upper left')
plt.show()
4、聚类,分别画图
def cluster(df):
matrix = df.to_numpy()
k = 4
kmeans = KMeans(n_clusters=k)
kmeans.fit(matrix)
provinces = np.array(province)
provinces = provinces.reshape(len(provinces),1)
for i in range(k):
member = kmeans.labels_ == i
city = matrix[member]
label_province = provinces[member]
for j in range(len(city)):
plt.plot(range(1997,2016),city[j],label=label_province[j][0])
plt.legend(fontsize=8,loc='upper left')
plt.show()
6. 饼图:以北京市和福建省为例,分析 2015 年时 CO2 的排放组成。
def pie():
file_path = r'co2_demo\Province sectoral CO2 emissions 2015.xlsx'
readbook = xlrd.open_workbook(file_path)
table = readbook.sheet_by_name('Sum')
composition = table.row_values(0)[2:]
beijing = table.row_values(1)[2:]
fujian = table.row_values(13)[2:]
pie = (
Pie()
.add('', [list(z) for z in zip(composition,beijing)],center=["50%", "60%"])
.set_global_opts(title_opts=opts.TitleOpts(title='北京市CO2组成'),legend_opts=opts.LegendOpts(pos_left="20%"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}"))
)
pie.render('北京市饼图.html')
pie = (
Pie()
.add('', [list(z) for z in zip(composition,fujian)],center=["50%", "60%"])
.set_global_opts(title_opts=opts.TitleOpts(title='福建省CO2组成'),legend_opts=opts.LegendOpts(pos_left="20%"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}"))
)
pie.render('福建省饼图.html')