快捷搜索:

推荐一款Python数据可视化神器

推荐一款Python数据可视化神器

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.com/

项目源码:

https://github.com/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(词云图)


推荐一款Python数据可视化神器

4. Pyecharts安装

1、pip 安装

#安装v1以上版本
$pipinstallpyecharts-U

#如果需要安装0.5.11版本的开发者,可以使用
#pipinstallpyecharts==0.5.11

2、源码安装

#v1以上版本
$gitclonehttps://github.com/pyecharts/pyecharts.git
#如果需要安装0.5.11版本,请使用gitclonehttps://github.com/pyecharts/pyecharts.git-bv05x
$cdpyecharts
$pipinstall-rrequirements.txt
$pythonsetup.pyinstall

在使用pip安装库时,由于墙的原因,下载时可能会出现断线和速度过慢的问题导致下载失败,所以建议通过豆瓣源或清华镜像来进行下载:

#豆瓣源下载
pipinstall-ihttps://pypi.douban.com/simplepyecharts

#清华镜像源
pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplepyecharts


PS: 这里要专门说明一下,自从 0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运行,pyecharts 将不再自带地图 js 文件。如用户需要用到地图图表(Geo、Map),可自行安装对应的地图文件包。

#通过pip命令进行安装
pipinstallecharts-countries-pypkg
pipinstallecharts-china-provinces-pypkg
pipinstallecharts-china-cities-pypkg


5. Pyecharts官方示例实战

现在我们来开始正式使用pycharts,这里我们先直接使用官方的数据,感受一下可视化展示效果。

frompyecharts.chartsimportBar
frompyechartsimportoptionsasopts

#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())就可以将图表直接展示出来,非常方便。

推荐一款Python数据可视化神器

如果脚本在非jupyter环境运行,图表渲染方法需改为:

bar.render()

默认情况下,pycharts生成图表为HTML格式,也支持生成png图片格式,如下:

fromsnapshot_seleniumimportsnapshotasdriver

frompyechartsimportoptionsasopts
frompyecharts.chartsimportBar
frompyecharts.renderimportmake_snapshot


defbar_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-测试渲染图片"))
)
returnc

#需要安装snapshot-selenium或者snapshot-phantomjs
make_snapshot(driver,bar_chart().render(),"bar.png")
推荐一款Python数据可视化神器

6. Pyecharts几种高频使用的可视化图表

在上面官方示例中的柱状图表我们已经能感受到pycharts可视化功能的强大,最后再介始几种日常工作中常用的可视化图表及对应示例。

6.1 Pie饼状图

frompyechartsimportoptionsasopts
frompyecharts.chartsimportPie
frompyecharts.fakerimportFaker

pie=(
Pie()
.add("",[list(z)forzinzip(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()


推荐一款Python数据可视化神器


6.2 仪表盘

frompyechartsimportoptionsasopts
frompyecharts.chartsimportGauge

g=(
Gauge()
.add("",[("完成率",66.6)])
.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-基本示例"))

)
g.render_notebook()
推荐一款Python数据可视化神器


6.3 折线图

importpyecharts.optionsasopts
frompyecharts.chartsimportLine
frompyecharts.fakerimportFaker

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()


推荐一款Python数据可视化神器

6.4 K线图

frompyechartsimportoptionsasopts
frompyecharts.chartsimportKline

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)foriinrange(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()


推荐一款Python数据可视化神器


6.5 地图Map

frompyechartsimportoptionsasopts
frompyecharts.chartsimportMap
frompyecharts.fakerimportFaker

map=(
Map()
.add("中国地图",[list(z)forzinzip(Faker.provinces,Faker.values())],"china")
.set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例"))
)
map.render_notebook()


推荐一款Python数据可视化神器

6.6 词云图

importpyecharts.optionsasopts
frompyecharts.chartsimportWordCloud


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()


推荐一款Python数据可视化神器


上述示例仅供参考,读者们结合日常工作应用,学会举一反三才是关健,更多Pychart示例介绍可见官方文档。


如果你觉得文章还不错,请大家点赞分享下,你的肯定是我最大的鼓励和支持。

您可能还会对下面的文章感兴趣: