推薦一款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項目,而且可以做到可視化的動態效果。

  1. 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 是一個全新的版本。

  1. 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(詞雲圖)

  1. Pyecharts安裝
    1、pip 安裝

 安裝 v1 以上版本

$ pip install pyecharts -U

 如果需要安裝 0.5.11 版本的開發者,可以使用

 pip install pyecharts==0.5.11

2、源碼安裝

 v1 以上版本

$ git clone https://github.com/pyecharts/pyecharts.git

 如果需要安裝 0.5.11 版本,請使用 git clone https://github.com/pyecharts/pyecharts.git -b v05x

$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install
在使用pip安裝庫時,由於牆的原因,下載時可能會出現斷線和速度過慢的問題導致下載失敗,所以建議通過豆瓣源或清華鏡像來進行下載:

 豆瓣源下載

pip install -i https://pypi.douban.com/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

  1. 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")

  1. 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示例介紹可見:代碼示例

原文地址https://www.cnblogs.com/jinjiangongzuoshi/p/12842381.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章