? ?
? ?推荐一款Python数据可视化神器 ? ?
2020-05-07 13:05?狂师? 阅读(7536)? 评论(3)?编辑?收藏 ? ?
一款动态数据可视化神器
1. 前言
在日常工作中,为了更直观的发现数据中隐藏的规律,察觉到变量之间的互动关系,人们常常借助可视化帮助我们更好的给他人解释现象,做到一图胜千文的说明效果。
在Python中,常见的数据可视化库有:
matplotlib 是最常见的2维库,可以算作可视化的必备技能库,由于matplotlib是比较底层的库,api很多,代码学起来不太容易。
seaborn 是建构于matplotlib基础上,能满足绝大多数可视化需求。更特殊的需求还是需要学习matplotlib。
上述两个库都是静态的可视化库,大多数做过前端Web开发的同学都用到过Echarts.js库,它是一款前端可视化的JS库、功能非常之强大。在使用之前,需要导入js库到项目中。对于平时用Python较多的同学而言,如果每次实现可视化功能(特别是一些小需求),都需要引用js库显然不太方便,于是就在想有没有Python与Echarts结合的轮子。 答案是肯定的 ,在Github中就有一个国人开发的一个Echarts与Python结合的轮子:Pyecharts,它不仅很好的兼容了web项目,而且可以做到可视化的动态效果。
2. Pyecharts介绍
Pyecharts 是一个用于生成 Echarts 图表的类库。常规的Echarts 是由百度开源的一个数据可视化 JS 库,主要用于数据可视化。简单来说,Pyecharts是一款将python与echarts结合的强大的数据可视化工具。
使用 Pyecharts 可以生成独立的网页,也可以在 flask , Django 中集成使用。
项目介绍:
http://pyecharts.herokuapp测试数据/
项目源码:
https://github测试数据/pyecharts/pyecharts
从项目文档介绍可知, pyecharts目前分为两个大的系列版本:0.5.x 和v1.x.x。
V0.5.x 支持 Python2.7,3.4+0.5.x 版本将不再进行维护,文档位于 05x-docs.pyecharts.org 。
V1 仅支持 Python3.6+新版本系列将从 v1.0.0 开始,文档位于 pyecharts.org;示例位于 gallery.pyecharts.org
PS: v0.5.x 和 V1 间不兼容,V1 是一个全新的版本。
3. Pyecharts支持30+种可视化图表
得益于Echarts 项目,目前Pyecharts支持 30+ 种常见图表,如下所示:
Bar(柱状图/条形图) Bar3D(3D 柱状图) Boxplot(箱形图) EffectScatter(散点图) Funnel(漏斗图) Gauge(仪表盘) Geo(地理坐标系) Graph(关系图) HeatMap(热力图) Kline(K线图) Line(折线/面积图) Line3D(3D 折线图) Liquid(水球图) Map(地图) Parallel(平行坐标系) Pie(饼图) Polar(极坐标系) Radar(雷达图) Sankey(桑基图) Scatter(散点图) Scatter3D(3D 散点图) ThemeRiver(主题河流图) WordCloud(词云图)4. Pyecharts安装
1、pip 安装
#?安装?v1?以上版本 $?pip?install?pyecharts?-U #?如果需要安装?0.5.11?版本的开发者,可以使用 #?pip?install?pyecharts==0.5.11
2、源码安装
#?v1?以上版本 $?git?clone?https://github测试数据/pyecharts/pyecharts.git #?如果需要安装?0.5.11?版本,请使用?git?clone?https://github测试数据/pyecharts/pyecharts.git?-b?v05x $?cd?pyecharts $?pip?install?-r?requirements.txt $?python?setup.py?install
在使用pip安装库时,由于墙的原因,下载时可能会出现断线和速度过慢的问题导致下载失败,所以建议通过豆瓣源或清华镜像来进行下载:
#?豆瓣源下载 pip?install?-i?https://pypi.douban测试数据/simple?pyecharts #?清华镜像源 pip?install?-i?https://pypi.tuna.tsinghua.edu.cn/simple?pyecharts
PS: 这里要专门说明一下,自从 0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运行,pyecharts 将不再自带地图 js 文件。如用户需要用到地图图表(Geo、Map),可自行安装对应的地图文件包。
#?通过pip命令进行安装 pip?install?echarts-countries-pypkg pip?install?echarts-china-provinces-pypkg pip?install?echarts-china-cities-pypkg
5. Pyecharts官方示例实战
现在我们来开始正式使用pycharts,这里我们先直接使用官方的数据,感受一下可视化展示效果。
from?pyecharts.charts?import?Bar from?pyecharts?import?options?as?opts #?V1?版本开始支持链式调用 bar?=?( ????Bar() ????.add_xaxis(["衬衫",?"毛衣",?"领带",?"裤子",?"风衣",?"高跟鞋",?"袜子"]) ????.add_yaxis("商家A",?[114,?55,?27,?101,?125,?27,?105]) ????.add_yaxis("商家B",?[57,?134,?137,?129,?145,?60,?49]) ????.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况")) ) bar.render_notebook()
在这里顺便安利一下jupyter,pyecharts在v0.1.9.2版本开始,在jupyter上可以直接调用实例(例如上方直接调用bar.render_notebook())就可以将图表直接展示出来,非常方便。
如果脚本在非jupyter环境运行,图表渲染方法需改为:
bar.render()
默认情况下,pycharts生成图表为HTML格式,也支持生成png图片格式,如下:
from?snapshot_selenium?import?snapshot?as?driver from?pyecharts?import?options?as?opts from?pyecharts.charts?import?Bar from?pyecharts.render?import?make_snapshot def?bar_chart()?->?Bar: ????c?=?( ????????Bar() ????????.add_xaxis(["衬衫",?"毛衣",?"领带",?"裤子",?"风衣",?"高跟鞋",?"袜子"]) ????????.add_yaxis("商家A",?[114,?55,?27,?101,?125,?27,?105]) ????????.add_yaxis("商家B",?[57,?134,?137,?129,?145,?60,?49]) ????????.reversal_axis() ????????.set_series_opts(label_opts=opts.LabelOpts(position="right")) ????????.set_global_opts(title_opts=opts.TitleOpts(title="Bar-测试渲染图片")) ????) ????return?c #?需要安装?snapshot-selenium?或者?snapshot-phantomjs make_snapshot(driver,?bar_chart().render(),?"bar.png")
6. Pyecharts几种高频使用的可视化图表
在上面官方示例中的柱状图表我们已经能感受到pycharts可视化功能的强大,最后再介始几种日常工作中常用的可视化图表及对应示例。
6.1 Pie饼状图
from?pyecharts?import?options?as?opts from?pyecharts.charts?import?Pie from?pyecharts.faker?import?Faker pie?=?( ????Pie() ????.add("",?[list(z)?for?z?in?zip(Faker.choose(),?Faker.values())]) ????.set_colors(["blue",?"green",?"yellow",?"red",?"pink",?"orange",?"purple"]) ????.set_global_opts(title_opts=opts.TitleOpts(title="Pie-设置颜色")) ????.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:?{c}")) ) pie.render_notebook()
6.2 仪表盘
from?pyecharts?import?options?as?opts from?pyecharts.charts?import?Gauge g?=?( ????Gauge() ????.add("",?[("完成率",?66.6)]) ????.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-基本示例")) ) g.render_notebook()
6.3 折线图
import?pyecharts.options?as?opts from?pyecharts.charts?import?Line from?pyecharts.faker?import?Faker c?=?( ????Line() ????.add_xaxis(Faker.choose()) ????.add_yaxis("商家A",?Faker.values(),?is_smooth=True) ????.add_yaxis("商家B",?Faker.values(),?is_smooth=True) ????.set_global_opts(title_opts=opts.TitleOpts(title="Line-smooth")) ) c.render_notebook()
6.4 K线图
from?pyecharts?import?options?as?opts from?pyecharts.charts?import?Kline data?=?[ ????[2320.26,?2320.26,?2287.3,?2362.94], ????[2300,?2291.3,?2288.26,?2308.38], ????[2295.35,?2346.5,?2295.35,?2345.92], ????[2347.22,?2358.98,?2337.35,?2363.8], ????[2360.75,?2382.48,?2347.89,?2383.76], ????[2383.43,?2385.42,?2371.23,?2391.82], ????[2377.41,?2419.02,?2369.57,?2421.15], ????[2425.92,?2428.15,?2417.58,?2440.38], ????[2411,?2433.13,?2403.3,?2437.42], ????[2432.68,?2334.48,?2427.7,?2441.73], ????[2430.69,?2418.53,?2394.22,?2433.89], ????[2416.62,?2432.4,?2414.4,?2443.03], ????[2441.91,?2421.56,?2418.43,?2444.8], ????[2420.26,?2382.91,?2373.53,?2427.07], ????[2383.49,?2397.18,?2370.61,?2397.94], ????[2378.82,?2325.95,?2309.17,?2378.82], ????[2322.94,?2314.16,?2308.76,?2330.88], ????[2320.62,?2325.82,?2315.01,?2338.78], ????[2313.74,?2293.34,?2289.89,?2340.71], ????[2297.77,?2313.22,?2292.03,?2324.63], ????[2322.32,?2365.59,?2308.92,?2366.16], ????[2364.54,?2359.51,?2330.86,?2369.65], ????[2332.08,?2273.4,?2259.25,?2333.54], ????[2274.81,?2326.31,?2270.1,?2328.14], ????[2333.61,?2347.18,?2321.6,?2351.44], ????[2340.44,?2324.29,?2304.27,?2352.02], ????[2326.42,?2318.61,?2314.59,?2333.67], ????[2314.68,?2310.59,?2296.58,?2320.96], ????[2309.16,?2286.6,?2264.83,?2333.29], ????[2282.17,?2263.97,?2253.25,?2286.33], ????[2255.77,?2270.28,?2253.31,?2276.22], ] k?=?( ????Kline() ????.add_xaxis(["2017/7/{}".format(i?+?1)?for?i?in?range(31)]) ????.add_yaxis("k线图",?data) ????.set_global_opts( ????????yaxis_opts=opts.AxisOpts(is_scale=True), ????????xaxis_opts=opts.AxisOpts(is_scale=True), ????????title_opts=opts.TitleOpts(title="K线图-基本示例"), ????) ) k.render_notebook()
6.5 地图Map
from?pyecharts?import?options?as?opts from?pyecharts.charts?import?Map from?pyecharts.faker?import?Faker map?=?( ????Map() ????.add("中国地图",?[list(z)?for?z?in?zip(Faker.provinces,?Faker.values())],?"china") ????.set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例")) ) map.render_notebook()
6.6 词云图
import?pyecharts.options?as?opts from?pyecharts.charts?import?WordCloud data?=?[ ????("生活资源",?"999"), ????("供热管理",?"888"), ????("供气质量",?"777"), ????("生活用水管理",?"688"), ????("一次供水问题",?"588"), ????("交通运输",?"516"), ????("城市交通",?"515"), ????("环境保护",?"483"), ????("房地产管理",?"462"), ????("城乡建设",?"449"), ????("社会保障与福利",?"429"), ????("社会保障",?"407"), ????("文体与教育管理",?"406"), ????("公共安全",?"406"), ????("公交运输管理",?"386"), ????("出租车运营管理",?"385"), ????("供热管理",?"375"), ????("市容环卫",?"355"), ????("自然资源管理",?"355"), ????("粉尘污染",?"335"), ????("噪声污染",?"324"), ????("土地资源管理",?"304"), ????("物业服务与管理",?"304"), ????("医疗卫生",?"284"), ????("粉煤灰污染",?"284"), ????("占道",?"284"), ????("供热发展",?"254"), ????("农村土地规划管理",?"254"), ????("生活噪音",?"253"), ????("供热单位影响",?"253"), ????("城市供电",?"223"), ????("房屋质量与安全",?"223"), ????("大气污染",?"223"), ????("房屋安全",?"223"), ????("文化活动",?"223"), ????("拆迁管理",?"223"), ????("公共设施",?"223"), ????("供气质量",?"223"), ????("供电管理",?"223"), ????("燃气管理",?"152"), ????("教育管理",?"152"), ????("医疗纠纷",?"152"), ????("执法监督",?"152"), ????("设备安全",?"152"), ????("政务建设",?"152"), ????("县区、开发区",?"152"), ????("宏观经济",?"152"), ????("教育管理",?"112"), ????("社会保障",?"112"), ????("生活用水管理",?"112"), ????("物业服务与管理",?"112"), ????("分类列表",?"112"), ????("农业生产",?"112"), ????("二次供水问题",?"112"), ????("城市公共设施",?"92"), ????("拆迁政策咨询",?"92"), ????("物业服务",?"92"), ????("物业管理",?"92"), ????("社会保障保险管理",?"92"), ????("低保管理",?"92"), ????("文娱市场管理",?"72"), ????("城市交通秩序管理",?"72"), ????("执法争议",?"72"), ????("商业烟尘污染",?"72"), ????("占道堆放",?"71"), ????("地上设施",?"71"), ????("水质",?"71"), ????("无水",?"71"), ????("供热单位影响",?"71"), ????("人行道管理",?"71"), ????("主网原因",?"71"), ????("集中供热",?"71"), ????("客运管理",?"71"), ????("国有公交(大巴)管理",?"71"), ????("工业粉尘污染",?"71"), ????("治安案件",?"71"), ????("压力容器安全",?"71"), ????("身份证管理",?"71"), ????("群众健身",?"41"), ????("工业排放污染",?"41"), ????("破坏森林资源",?"41"), ????("市场收费",?"41"), ????("生产资金",?"41"), ????("生产噪声",?"41"), ????("农村低保",?"41"), ????("劳动争议",?"41"), ????("劳动合同争议",?"41"), ????("劳动报酬与福利",?"41"), ????("医疗事故",?"21"), ????("停供",?"21"), ????("基础教育",?"21"), ????("职业教育",?"21"), ????("物业资质管理",?"21"), ????("拆迁补偿",?"21"), ????("设施维护",?"21"), ????("市场外溢",?"11"), ????("占道经营",?"11"), ????("树木管理",?"11"), ????("农村基础设施",?"11"), ????("无水",?"11"), ????("供气质量",?"11"), ????("停气",?"11"), ????("燃气管理",?"11"), ????("市容环卫",?"11"), ????("新闻传媒",?"11"), ????("人才招聘",?"11"), ????("市场环境",?"11"), ????("行政事业收费",?"11"), ????("食品安全与卫生",?"11"), ????("城市交通",?"11"), ????("房地产开发",?"11"), ????("房屋配套问题",?"11"), ????("物业服务",?"11"), ????("物业管理",?"11"), ????("占道",?"11"), ????("园林绿化",?"11"), ????("户籍管理及身份证",?"11"), ????("公交运输管理",?"11"), ????("公路(水路)交通",?"11"), ????("房屋与图纸不符",?"11"), ????("有线电视",?"11"), ????("社会治安",?"11"), ????("林业资源",?"11"), ????("其他行政事业收费",?"11"), ????("经营性收费",?"11"), ????("食品安全与卫生",?"11"), ????("体育活动",?"11"), ????("有线电视安装及调试维护",?"11"), ????("低保管理",?"11"), ????("劳动争议",?"11"), ????("社会福利及事务",?"11"), ????("一次供水问题",?"11"), ] c=( ????WordCloud() ????.add(series_name="热点分析",?data_pair=data,?word_size_range=[6,?66]) ????.set_global_opts( ????????title_opts=opts.TitleOpts( ????????????title="热点分析",?title_textstyle_opts=opts.TextStyleOpts(font_size=23) ????????), ????????tooltip_opts=opts.TooltipOpts(is_show=True), ????) ) c.render_notebook()
上述示例仅供参考,读者们结合日常工作应用,学会举一反三才是关健,更多Pychart示例介绍可见:代码示例
分类 ? ? ? ? ? ?Python ?查看更多关于推荐一款Python数据可视化神器的详细内容...