python数据可视化使用pyecharts绘制简单的数据动态展示图
最终效果前言
大家好,我是PYTHON爱好者二狗.今天向各位领导汇报的题目是:使用pyecharts绘制简单的数据动态展示图. 编程环境
1.文中电脑操作系统:win10
2.文中所使用的python模块:
(1).pandas (第三方模块,需要pip安装)
安装命令:pip install -i https: / / pypi.tuna.tsinghua.edu.cn/simple pandas
官方文档 :https: //pandas.pydata.org/pandas-docs/stable/
(2).pyecharts (第三方模块,需要pip安装)
安装命令:pip install -i https: / / pypi.tuna.tsinghua.edu.cn/simple pyecharts
官方文档 :https ://pyecharts.org/#/zh-cn/intro
3.文中数据源文件:二手车数据.csv (如果需要,请后台私信)
4.pyecharts版本: 1.9.1
5.文中所使用的IDE: VSCODE(安装Jupyter插件)
查看pyecharts版本数据动态展示图及数据结构剖析
数据动态展示图剖析
数据源表格文件
文中绘制的动态图表分为:①时间线轮播图,②柱状图,③饼图,④词云图,⑤树图
接下来,二狗向各位领导汇报绘制过程及注意事项. 代码拆检import pandas as pd # 导入pandas模块 df = pd.read_csv("二手车数据.csv",index_col=0) # 读取数据表格 df["car_year"] = df.car_year.agg(lambda x : x.split("-")[0]) # 切割表格中的car_year列的所有值 取出年份 df = df[(df.car_city=="昆明") | (df.car_city=="贵阳") |(df.car_city=="南宁") | (df.car_city=="成都") | (df.car_city=="重庆") |(df.car_city=="拉萨")] # 筛选出表格中car_city列中的昆明,贵阳,南宁,成都,重庆,拉萨的数据 tb = df.pivot_table(values=["car_price(万元)",],index=["car_year","car_city"]) # 把筛选出的城市数据聚合分类计算出每年每个城市的二手车均值
每年每个城市的二手车均值
注:pivot_table()方法,不指定 aggfunc参数时, 默认 aggfunc="mean"计算均值. year_list = [i[0] for i in tb.index] # 生成一个装有年份的列表 city_list = [i[1] for i in tb.index] # 生成一个装有城市名称的列表 price_list = [round(i,ndigits=2) for i in tb["car_price(万元)"]] # 生成一个装有每个城市均值的列表,对列表里的每个元素四舍五入,保留2位小数 time_data = {} #创建一个空字典 for k,v1,v2 in zip(year_list,city_list,price_list): #遍历 year_list city_list price_list 组装一个数据格式为{年份:{城市:价格...}}的字典 if k not in time_data: time_data[k] = {v1:v2} else: time_data[k].update({v1:v2})
组装好的字典结构import pyecharts.options as opt from pyecharts.commons.utils import JsCode from pyecharts.charts import Pie, Bar,Timeline,Grid,TreeMap,WordCloud from pyecharts.globals import ThemeType #导入绘图模块 tl = Timeline( init_opts=opt.InitOpts( theme=ThemeType.DARK, animation_opts=opt.AnimationOpts( animation_duration=3000, animation_delay_update = 10, ) ))# 绘制时间线轮播图 for year,city_price_dict in time_data.items(): #分别遍历字典的键和值 values_list = list(sorted(city_price_dict.items(), key=lambda value : value[1], reverse=True)) # 把字典的值 转换为降序排列(从大到小)的列表 [(城市1,价格1),(城市2,价格2)...] values_data = (sorted(city_price_dict.items(), key=lambda value : value[1], reverse=False)) # 把字典的值 转换为升序排列(从小到大)的列表 [(城市1,价格1),(城市2,价格2)...]
values_data结果
values_list结果import pyecharts.options as opt from pyecharts.commons.utils import JsCode from pyecharts.charts import Pie, Bar,Timeline,Grid,TreeMap,WordCloud from pyecharts.globals import ThemeType #导入绘图模块 tl = Timeline( init_opts=opt.InitOpts( theme=ThemeType.DARK, animation_opts=opt.AnimationOpts( animation_duration=3000, animation_delay_update = 10, ) ))# 绘制时间线轮播图 for year,city_price_dict in time_data.items(): #分别遍历字典的键和值 values_list = list(sorted(city_price_dict.items(), key=lambda value : value[1], reverse=True)) # 把字典的值 转换为降序排列(从大到小)的列表 [(城市1,价格1),(城市2,价格2)...] values_data = (sorted(city_price_dict.items(), key=lambda value : value[1], reverse=False)) # 把字典的值 转换为升序排列(从小到大)的列表 [(城市1,价格1),(城市2,价格2)...] pie = (#绘制饼图 Pie() .add( series_name=" 单位:万元", data_pair = values_data, radius= ["50%","60%"], center = ["70%","50%"], rosetype= "radius" ) .set_global_opts( title_opts=opt.TitleOpts( title= f"{year}年西南地区二手车均价" ) ) ) charts = WordCloud() charts.add( #绘制词云图 series_name = "均价(万元)", data_pair= values_data, textstyle_opts=opt.TextStyleOpts(font_family="serif"), shape = "diamond", word_size_range= [10, 50], pos_left = "35%", pos_top = "12%", ) charts.set_global_opts( title_opts = opt.TitleOpts( ), ) bar = (#绘制柱状图 Bar() .add_xaxis([i[0] for i in values_data]) .add_yaxis( "单位万元", [i[1] for i in values_data], bar_width=30, category_gap=0 ) .reversal_axis() .set_global_opts( legend_opts=opt.LegendOpts(is_show=False), yaxis_opts=opt.AxisOpts(is_show=True,), xaxis_opts=opt.AxisOpts(is_show=True), ) .set_series_opts( label_opts=opt.LabelOpts(position="right"), itemstyle_opts={ "normal": { "color": JsCode( """new echarts.graphic.LinearGradient(0, 0, 0, 1, [{offset: 0,color: "rgba(0, 244, 255, 1)"}, {offset: 1,color: "rgba(0, 77, 167, 1)"}], false)""" ), "barBorderRadius": [30, 30, 30, 30],"shadowColor": "rgb(0, 160, 221)", } } ) ) tree = ( #绘制树图 TreeMap() .add( series_name=year, data=[{"value":i[1],"name":i[0]} for i in values_data], visual_min=30, leaf_depth=1, # 标签居中为 position = "inside" width= "12%", height= "53%", pos_left = "88%", pos_top = "47%", label_opts=opt.LabelOpts(position="inside"), breadcrumb_opts=opt.TreeMapBreadcrumbOpts( is_show=False, pos_left= "left", height=50, ), roam=False, ) .set_global_opts( legend_opts=opt.LegendOpts(is_show=False), title_opts=opt.TitleOpts( ), ) ) grid_chart =( #把绘制好的图形组合在一起 Grid() .add( bar, grid_opts=opt.GridOpts( width= 300, height= 320 ), ) .add( tree, grid_opts=opt.GridOpts( ), ) .add( charts, grid_opts=opt.GridOpts( ), ) .add( pie, grid_opts=opt.GridOpts( ), ) ) tl.add( #把组合好的图形,添加进时间线轮播图里 chart=grid_chart, time_point= f"{year}年", ) tl.add_schema( is_auto_play= True, is_timeline_show=True, orient="horizontal", pos_left="left", symbol_size=[8,5] ) tl.render("时间线图.html")#生成绘制好的图形html文件 tl.render_notebook() # 在notebook里渲染出来绘制好的图形
PS:绘图过程就是调整各图形的对应的参数,各位领导请 详阅 官方文档: https ://pyecharts.org/#/zh-cn/intro 完整代码import pandas as pd import pyecharts.options as opt from pyecharts.commons.utils import JsCode from pyecharts.charts import Pie, Bar,Timeline,Grid,TreeMap,WordCloud from pyecharts.globals import ThemeType time_data = {} tl = Timeline( init_opts=opt.InitOpts( theme=ThemeType.DARK, animation_opts=opt.AnimationOpts( animation_duration=3000, animation_delay_update = 10, ) )) df = pd.read_csv("二手车数据.csv",index_col=0) df["car_year"] = df.car_year.agg(lambda x : x.split("-")[0]) df = df[(df.car_city=="昆明") | (df.car_city=="贵阳") |(df.car_city=="南宁") | (df.car_city=="成都") | (df.car_city=="重庆")| (df.car_city=="拉萨")] tb = df.pivot_table(values=["car_price(万元)",],index=["car_year","car_city"]) year_list = [i[0] for i in tb.index] city_list = [i[1] for i in tb.index] price_list = [round(i,ndigits=2) for i in tb["car_price(万元)"]] for k,v1,v2 in zip(year_list,city_list,price_list): if k not in time_data: time_data[k] = {v1:v2} else: time_data[k].update({v1:v2}) for year,city_price_dict in time_data.items(): values_list = list(sorted(city_price_dict.items(), key=lambda value : value[1], reverse=True)) values_data = (sorted(city_price_dict.items(), key=lambda value : value[1], reverse=False)) pie = ( Pie() .add( series_name=" 单位:万元", data_pair = values_data, radius= ["50%","60%"], center = ["70%","50%"], rosetype= "radius" ) .set_global_opts( title_opts=opt.TitleOpts( title= f"{year}年西南地区二手车均价" ) ) ) charts = WordCloud() charts.add( series_name = "均价(万元)", data_pair= values_data, textstyle_opts=opt.TextStyleOpts(font_family="serif"), shape = "diamond", word_size_range= [10, 50], pos_left = "35%", pos_top = "12%", ) charts.set_global_opts( title_opts = opt.TitleOpts( ), ) bar = ( Bar() .add_xaxis([i[0] for i in values_data]) .add_yaxis( "单位万元", [i[1] for i in values_data], bar_width=30, category_gap=0 ) .reversal_axis() .set_global_opts( legend_opts=opt.LegendOpts(is_show=False), yaxis_opts=opt.AxisOpts(is_show=True,), xaxis_opts=opt.AxisOpts(is_show=True), ) .set_series_opts( label_opts=opt.LabelOpts(position="right"), itemstyle_opts={ "normal": { "color": JsCode( """new echarts.graphic.LinearGradient(0, 0, 0, 1, [{offset: 0,color: "rgba(0, 244, 255, 1)"}, {offset: 1,color: "rgba(0, 77, 167, 1)"}], false)""" ), "barBorderRadius": [30, 30, 30, 30],"shadowColor": "rgb(0, 160, 221)", } } ) ) tree = ( TreeMap() .add( series_name=year, data=[{"value":i[1],"name":i[0]} for i in values_data], visual_min=30, leaf_depth=1, # 标签居中为 position = "inside" width= "12%", height= "53%", pos_left = "88%", pos_top = "47%", label_opts=opt.LabelOpts(position="inside"), breadcrumb_opts=opt.TreeMapBreadcrumbOpts( is_show=False, pos_left= "left", height=50, ), roam=False, ) .set_global_opts( legend_opts=opt.LegendOpts(is_show=False), title_opts=opt.TitleOpts( ), ) ) grid_chart =( Grid() .add( bar, grid_opts=opt.GridOpts( width= 300, height= 320 ), ) .add( tree, grid_opts=opt.GridOpts( ), ) .add( charts, grid_opts=opt.GridOpts( ), ) .add( pie, grid_opts=opt.GridOpts( ), ) ) tl.add( chart=grid_chart, time_point= f"{year}年", ) tl.add_schema( is_auto_play= True, is_timeline_show=True, orient="horizontal", pos_left="left", symbol_size=[8,5] ) tl.render("时间线图.html") tl.render_notebook()结语
以上汇报完毕,下篇文章再见.(如需文中数据资料请后台私信 )
止损,止损,止损在期货投机市场中,止损都是放在第一位的,否则就是妥妥的韭菜。下面就来谈谈止损的方法1。最大止损法最大止损法能让你最大程度保住本金。也就是说,你能容忍自己一天损失多少钱。如果损失到了
现在值100万的房子,10年后会剩下多少钱?来看看懂行人的分析当下我国的老百姓为什么那么关注房价的变化?为什么聊天的话题还是离不开房子?其实还是房子已经和我们的生活离不开了,我国房地产经过近30年的发展,其中有20多年房价都是一直在上涨,让大
云顶之弈国服前十上分思路,学会轻松上大分前言大家好,我是小嗨。12。17热补丁之后各个阵容都开始发生了强度梯度的变化,当然只要熟悉了这几套阵容上分还是非常简单的。一神龙努努神龙敖兴(版本T0)阵容解析在12。17b的版本
拳皇叫错一辈子的人物,出了官方名字玩家也不依不饶人物的名字要怎么叫才算是正确的呢?游戏厅时期我们叫的是绰号,多年后大家在我网上交流的时候发现每个地方的方言不同,绰号不同,好在叫出来之后都秒懂。后期为了方便交流,玩家们都以港漫中的
狭路相逢勇者胜,只要夺下这片阵地,胜利就是我们YZG的作为决赛圈内的观众,最好看的除了他人的大混战,那就是两尊大佛互殴了。对自己没有威胁,还能看到某个大佛飞来飞去,这难道不是天大的好消息?不过大佛之间的博弈,波及的永远是离他们最近的人
灾难类题材游戏和电影,可能都怕卫星通信不管是在游戏圈还是影视圈,最近似乎都流行起了灾难类题材。比如趁着龙之家族火爆上映之时,HBO发布了顽皮狗知名游戏最后的生还者电视剧版预告,并宣布会在2023年上映。在游戏过程中想要
格莉斯的旅程隐藏结尾触发方法介绍格莉斯的旅程在游戏中,玩家会有很多可以触发的结局。其中玩家满足一定的条件就可以到达隐藏的结局。有些玩家可能不知道隐藏的结局是什么,怎么结束。下面给大家简单介绍一下具体的触发方式。让
寒露时节以后,这些事情不要做寒露以后,气温的不断下降我们在日常中可以注意以下几个方面一穿衣不露脚,出门泡个脚这里是说的泡热水脚。常言道寒露脚不露。寒露节气前后凉鞋基本可以收起来了,以防寒从足生,用热水泡脚能使
体内有结石的人,若是管不住嘴,结石会越长越大,能忍住就是赢结石,就是在身体里取出的一个个小石头,有的比较大,有的则比较小,取出的数量也是不同的,有一些患者可从体内取出百余个结石。可能有的人会说太夸张了,但事实上真的有此种情况,却比较少见,
秋季如何预防胃肠疾病入秋以后,气候变化较大,昼夜温差悬殊。人体受到冷空气刺激后,胃酸分泌大量增加,刺激胃黏膜,胃肠发生痉挛性收缩,抵抗力随之减弱。再加上不规律饮食及熬夜等不良生活习惯,就造成了秋季胃肠
血虚发燥气虚无力阴虚发热阳虚怕冷,送你4味药,补血补气补阴阳大家好,我是刘医生。现在很多人的免疫力都很差,经常生病。老是感觉身上哪哪都不得劲。在中医上讲这是因为正气不足,引起的虚症。身体过于虚弱,导致抗病能力下降。今天,刘医生就将4种常见的