【python】数据可视化开发

折线图

json数据格式

  • 一种轻量级的数据交互模式,可以按照JSON指定的格式去组织和封装数据
  • JSON本质上是一种带有特定格式的字符串
  • 负责不同编程语言中的数据传递和交互

python数据和json数据的相互转换

# 导入json模块

# 准备符合json格式要求的python数据
data=[{"name":"张三","age":16},{"name":"李四","age":20}]
# 通过json.dumps(data)方法把python数据转化为json数据
data=json.dumps(data,ensure_ascii=False)	# 不使用ASCII码确保中文可以正常转换
# 通过json.loads(data)方法把json数据转化为python数据
data=json.loads(data)

pyecharts模块

  • 做出数据可视化效果图
  • Echarts是由百度开源的数据可视化
  • 官方示例https://gallery.pecharts.org/#/README
pip install pyecharts

构建基础折线图

# 导包,导入Line功能构建折线图对象
from pyecharts.chart import Line

# 得到折线图对象
line=Line()
# 添加x轴数据
line.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
line.add_yaxis("GDP",[30, 20, 10])
# 生成图表
line.render()

全局配置选项

set_global_opts方法

全局配置选项可以通过set_global_opts方法来进行配置(标题、图例、工具箱)。

line.set_global_opts(
	title_opts=TitleOpts("测试",pos_left="center",pos_bottom="1%"),	# 标题
	legend_opts=LegendOpts(is_show=True),	# 图例
	toolbox_opts=ToolboxOpts(is_show=True),	# 工具箱
	visualmap_opts=VisualMapOpts(is_show=True),	# 视觉映射
	tooltip_opts=TooltipOpts(is_show=True),
)

数据处理

通过json模块对数据进行处理

# 处理数据
f_us=open("D:/美国.txt","r",encoding="UTF-8")
us_data=f_us.read()
# 去掉不符合JSON规范的开头
us_data=us_data.replace("jsonp_1629344292311_69436(","")
# 去掉不符合JSON规范的结尾
us_data=us_data[:-2]
# JSON转python字典
us_dict=json.loads(us_data)
# 获取trend key
trend_data=us+dict['data'][0]['trend']
# 获取日期数据,用于x轴
x_data=trend_data['updateDate'][:314]
# 获取确诊数据,用于y轴
y_data=trend_data['list'][0]['data'][:314]
# 生成图表

完成折线图

from pyecharts.charts import Line
# 生成图表
line=Line()	#构建折线图对象
# 添加x轴数据
line.add_xaxis(us_x_data)
# 添加y轴数据
line.add_yaxis("美国确诊人数",us_y_data)
line.add_yaxis("日本确诊人数",jp_y_data)
line.add_yaxis("印度确诊人数",in_y_data)
line.render()
# 关闭文件
f_us.close()
f_jp.close()
f_in.close()

地图

# 地图可视化的基本使用
from pyecharts.charts import Map
# 准备地图对象
map=Map()
# 准备数据
data=[
	("北京",99),
	("上海",199),
	("湖南",299),
	("台湾",399)]
# 添加数据
map.add("测试地图",data,"Chiana")
# 绘图
map.render()

全国疫情可视化地图开发

import json
from pyecharts.charts import Map
from pyecharts.options import *
# 读取数据文件
f=open("D:/疫情.txt","r",encoding="UTF-8")
data=f.read()
f.close()
# 取各省数据
# 将字符串json转换为python字典
data_dict=json.loads(data)
# 从字典中取出省份的数据
province_data_list=data_dict=["areaTree"][0]["children"]
# 组装每个省份和确诊人数为元组,并各个省的数据都封装入列表内
data_list=[]
for province_data in province_data_list:
	province_name=province_data["name"]
	province_confirm=province_data["total"]["confirm"]
	data_list.append((province_name,province_confirm))
# 创建地图对象
map=Map()
# 添加数据
map.add("各省份确诊人数",data_list,"china")
# 设置全局配置,定制分段的视觉映射
map.set_global_opts(
	title_opts=TitleOpts(title="全国疫情地图"),
	visualmap_opts=VisualMapOpts(
		is_show=True,
		is_piecewise=True,
		pieces=[
			{"min":1,"max":99,"label":"1~99","color":"#CCFFFF"},
			{"min":100,"max":999,"label":"100~999","color":"#FFFF99"},
			{"min":1000,"max":4999,"label":"1000~4999","color":"#FF9966"},
			{"min":5000,"max":9999,"label":"5000~9999","color":"#FF6666"},
			{"min":10000,"max":99999,"label":"10000~99999","color":"#CC3333"},
			{"min":100000,"label":"100000+","color":"#990033"},
		]
	)
)
# 绘图
map.render("全国疫情地图.html")

柱状图

基础柱状图

from pyecharts.charts import Bar
# 构建柱状图对象
bar=Bar()
# 添加x轴数据
bar.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
bar.add_yaxis("GDP",[30,20,10])
# 反转x轴和y轴
bar.reversal_axis()
# 绘图
bar.render("基础柱状图.html")

基础时间线柱状图

Timeline()时间线

from pyecharts.charts import Bar,Timeline
from pyecharts.options import *

bar1=Bar()
bar1.add_xaxis(["中国","美国","英国"])
bar1.add_yaxis("GDP",[30,20,10],label_opts=LabelOpts(position="right"))
bar1.reversal_axis()

bar2=Bar()
bar2.add_xaxis(["中国","美国","英国"])
bar2.add_yaxis("GDP",[50,30,20],label_opts=LabelOpts(position="right"))
bar2.reversal_axis()

# 创建时间线对象
timeline=Timeline()
# timeline对象添加bar柱状图
timeline.add(bar1,"2021年GDP")
timeline.add(bar2,"2022年GDP")
# 通过时间线绘图而不是bar对象
timeline.render("基础柱状图-时间线.html")

动态柱状图绘制

列表的sort方法

sorted函数可以对数据容器进行排序

列表.sort(key=选择排序依据的函数,reverse=True|False)
  • 参数key,要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据
  • 参数reverse,是否反转排序结果
带名函数形式
# 嵌套列表要求对外层列表进行排序,依据内层列表第二个元素数字
# 无法使用sorted函数,可以使用列表的sort方法
my_list=[["a",33],["b",55],["c",11]]
# 定义排序方法
def choose_sort_key(element):
	return element[1]

my_list.sort(key=choose_sort_key,reverse=True)
print(my_list)
匿名lambda形式
my_list=[["a",33],["b",55],["c",11]]
my_list.sort(key=lambda element:element[1],reverse=True)
print(my_list)

数据处理

from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType
# 读取数据
f=open("D:/1960-2019全球GDP数据.csv","r",encoding="GB2312")
data_lines=f.readlines()
f.close()
# 删除第一个
data_lines.pop(0)
# 将数据转换为字典格式
data_dict={}
for line in data_lines:
	year=int(line.split(",")[0])
	country=line.split(",")[1]
	gdp=float(line.split(",")[2])
	try:	# 判断字典里有没有指定key
		data_dict[year].append([country,gdp])
	except KeyError:
		data_dict[year].append([country,gdp])

GDP动态图表绘制

# 创建时间线对象
timeline=Timeline({"theme":ThemeType.LIGHT})
# 排序年份
sorted_year_list=sorted(data.dict.keys())
for year in sorted_year_list:
	data_dict[year].sort(key=lambda element:element[1],reverse=True)
	# 取本年前8的国家
	year_data=data_dict[year][0:8]
	x_data=[]
	y_data=[]
	for country_gdp in year_data:
		x_data.append(country_gdp[0])
		y_data.append(country_gdp[1]/100000000)
	bar=Bar()
	x_data.reverse()
	y_data.reverse()
	bar.add_xaxis(x_data)
	bar.add_yaxis("GDP(亿)",y_data,label_opts=LabelOpts(position="right"))
	bar.reversal_axis()
	# 设置每一年的图表的标题
	bar.set_global_opts(
		title_opts=TitleOpts(title=f"{year}年全球前8GDP数据")
	timeline.add(bar,str(year))

# for循环每年的数据,创建每年bar对象
# 将每年bar对象添加到时间线中
# 设置时间线自动播放
timeline.add_schema(
	play_interval=1000,
	is_timeline_show=True,
	is_auto_play=True,
	is_loop_play=False)
timeline.render("1960~2019全球GDP前8国家.html")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶雨莳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值