推薦一款python數(shù)據(jù)可視化神器

1、前言

在日常工作中或衡,為了更直觀的發(fā)現(xiàn)數(shù)據(jù)中隱藏的規(guī)律哆姻,察覺到變量之間的互動(dòng)關(guān)系宣增,人們常常借助可視化幫助我們更好的給他人解釋現(xiàn)象,做到一圖勝千文的說明效果矛缨。

在Python中爹脾,常見的數(shù)據(jù)可視化庫有:

  • matplotlib 是最常見的2維庫,可以算作可視化的必備技能庫箕昭,由于matplotlib是比較底層的庫灵妨,api很多,代碼學(xué)起來不太容易落竹。
  • seaborn 是建構(gòu)于matplotlib基礎(chǔ)上泌霍,能滿足絕大多數(shù)可視化需求。更特殊的需求還是需要學(xué)習(xí)matplotlib述召。

上述兩個(gè)庫都是靜態(tài)的可視化庫朱转,大多數(shù)做過前端Web開發(fā)的同學(xué)都用到過Echarts.js庫,它是一款前端可視化的JS庫积暖、功能非常之強(qiáng)大肋拔。在使用之前,需要導(dǎo)入js庫到項(xiàng)目中呀酸。對于平時(shí)用Python較多的同學(xué)而言凉蜂,如果每次實(shí)現(xiàn)可視化功能(特別是一些小需求),都需要引用js庫顯然不太方便,于是就在想有沒有Python與Echarts結(jié)合的輪子窿吩。答案是肯定的茎杂,在Github中就有一個(gè)國人開發(fā)的一個(gè)Echarts與Python結(jié)合的輪子:Pyecharts,它不僅很好的兼容了web項(xiàng)目纫雁,而且可以做到可視化的動(dòng)態(tài)效果煌往。

2、pyecharts介紹

Pyecharts 是一個(gè)用于生成 Echarts 圖表的類庫轧邪。常規(guī)的Echarts 是由百度開源的一個(gè)數(shù)據(jù)可視化 JS 庫刽脖,主要用于數(shù)據(jù)可視化。簡單來說忌愚,Pyecharts是一款將python與echarts結(jié)合的強(qiáng)大的數(shù)據(jù)可視化工具曲管。

使用 Pyecharts 可以生成獨(dú)立的網(wǎng)頁,也可以在 flask , Django 中集成使用硕糊。
項(xiàng)目介紹:

http://pyecharts.herokuapp.com/

項(xiàng)目源碼:

https://github.com/pyecharts/pyecharts

從項(xiàng)目文檔介紹可知院水, pyecharts目前分為兩個(gè)大的系列版本:0.5.x 和v1.x.x。

V0.5.x

支持Python2.7,3.4+
0.5.x版本將不再進(jìn)行維護(hù)简十,文檔位于05x-docs.pyecharts.org檬某。

V1

僅支持Python3.6+

新版本系列將從v1.0.0開始,文檔位于pyecharts.org螟蝙;示例位于 gallery.pyecharts.org

PS: v0.5.x 和 V1 間不兼容恢恼,V1 是一個(gè)全新的版本。

3. Pyecharts支持30+種可視化圖表

得益于Echarts 項(xiàng)目胰默,目前Pyecharts支持 30+ 種常見圖表厅瞎,如下所示:

  • Bar(柱狀圖/條形圖)
  • Bar3D(3D 柱狀圖)
  • Boxplot(箱形圖)
  • EffectScatter(散點(diǎn)圖)
  • Funnel(漏斗圖)
  • Gauge(儀表盤)
  • Geo(地理坐標(biāo)系)
  • Graph(關(guān)系圖)
  • HeatMap(熱力圖)
  • Kline(K線圖)
  • Line(折線/面積圖)
  • Line3D(3D 折線圖)
  • Liquid(水球圖)
  • Map(地圖)
  • Parallel(平行坐標(biāo)系)
  • Pie(餅圖)
  • Polar(極坐標(biāo)系)
  • Radar(雷達(dá)圖)
  • Sankey(桑基圖)
  • Scatter(散點(diǎn)圖)
  • Scatter3D(3D 散點(diǎn)圖)
  • ThemeRiver(主題河流圖)
  • WordCloud(詞云圖)


    image.png

4. Pyecharts安裝

4.1 pip 安裝
# 安裝 v1 以上版本
$ pip install pyecharts -U

# 如果需要安裝 0.5.11 版本的開發(fā)者初坠,可以使用
# pip install pyecharts==0.5.11
4.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安裝庫時(shí)彭雾,由于墻的原因碟刺,下載時(shí)可能會(huì)出現(xiàn)斷線和速度過慢的問題導(dǎo)致下載失敗,所以建議通過豆瓣源或清華鏡像來進(jìn)行下載:

# 豆瓣源下載
pip install -i https://pypi.douban.com/simple pyecharts

# 清華鏡像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts

PS: 這里要專門說明一下薯酝,自從 0.3.2 開始半沽,為了縮減項(xiàng)目本身的體積以及維持 pyecharts 項(xiàng)目的輕量化運(yùn)行,pyecharts 將不再自帶地圖 js 文件吴菠。如用戶需要用到地圖圖表(Geo者填、Map),可自行安裝對應(yīng)的地圖文件包做葵。

# 通過pip命令進(jìn)行安裝
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg

5. Pyecharts官方示例實(shí)戰(zhàn)

現(xiàn)在我們來開始正式使用pycharts占哟,這里我們先直接使用官方的數(shù)據(jù),感受一下可視化展示效果。

from pyecharts.charts import Bar
from pyecharts import options as opts

# V1 版本開始支持鏈?zhǔn)秸{(diào)用
bar = (
    Bar()
    .add_xaxis(["襯衫", "毛衣", "領(lǐng)帶", "褲子", "風(fēng)衣", "高跟鞋", "襪子"])
    .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上可以直接調(diào)用實(shí)例(例如上方直接調(diào)用bar.render_notebook())就可以將圖表直接展示出來,非常方便蜜暑。

如果腳本在非jupyter環(huán)境運(yùn)行铐姚,圖表渲染方法需改為:

bar.render()

默認(rèn)情況下,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(["襯衫", "毛衣", "領(lǐng)帶", "褲子", "風(fēng)衣", "高跟鞋", "襪子"])
        .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幾種高頻使用的可視化圖表

在上面官方示例中的柱狀圖表我們已經(jīng)能感受到pycharts可視化功能的強(qiáng)大,最后再介始幾種日常工作中常用的可視化圖表及對應(yīng)示例拙毫。
#######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-設(shè)置顏色"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="依许: {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"),
    ("供氣質(zhì)量", "777"),
    ("生活用水管理", "688"),
    ("一次供水問題", "588"),
    ("交通運(yùn)輸", "516"),
    ("城市交通", "515"),
    ("環(huán)境保護(hù)", "483"),
    ("房地產(chǎn)管理", "462"),
    ("城鄉(xiāng)建設(shè)", "449"),
    ("社會(huì)保障與福利", "429"),
    ("社會(huì)保障", "407"),
    ("文體與教育管理", "406"),
    ("公共安全", "406"),
    ("公交運(yùn)輸管理", "386"),
    ("出租車運(yùn)營管理", "385"),
    ("供熱管理", "375"),
    ("市容環(huán)衛(wèi)", "355"),
    ("自然資源管理", "355"),
    ("粉塵污染", "335"),
    ("噪聲污染", "324"),
    ("土地資源管理", "304"),
    ("物業(yè)服務(wù)與管理", "304"),
    ("醫(yī)療衛(wèi)生", "284"),
    ("粉煤灰污染", "284"),
    ("占道", "284"),
    ("供熱發(fā)展", "254"),
    ("農(nóng)村土地規(guī)劃管理", "254"),
    ("生活噪音", "253"),
    ("供熱單位影響", "253"),
    ("城市供電", "223"),
    ("房屋質(zhì)量與安全", "223"),
    ("大氣污染", "223"),
    ("房屋安全", "223"),
    ("文化活動(dòng)", "223"),
    ("拆遷管理", "223"),
    ("公共設(shè)施", "223"),
    ("供氣質(zhì)量", "223"),
    ("供電管理", "223"),
    ("燃?xì)夤芾?, "152"),
    ("教育管理", "152"),
    ("醫(yī)療糾紛", "152"),
    ("執(zhí)法監(jiān)督", "152"),
    ("設(shè)備安全", "152"),
    ("政務(wù)建設(shè)", "152"),
    ("縣區(qū)、開發(fā)區(qū)", "152"),
    ("宏觀經(jīng)濟(jì)", "152"),
    ("教育管理", "112"),
    ("社會(huì)保障", "112"),
    ("生活用水管理", "112"),
    ("物業(yè)服務(wù)與管理", "112"),
    ("分類列表", "112"),
    ("農(nóng)業(yè)生產(chǎn)", "112"),
    ("二次供水問題", "112"),
    ("城市公共設(shè)施", "92"),
    ("拆遷政策咨詢", "92"),
    ("物業(yè)服務(wù)", "92"),
    ("物業(yè)管理", "92"),
    ("社會(huì)保障保險(xiǎn)管理", "92"),
    ("低保管理", "92"),
    ("文娛市場管理", "72"),
    ("城市交通秩序管理", "72"),
    ("執(zhí)法爭議", "72"),
    ("商業(yè)煙塵污染", "72"),
    ("占道堆放", "71"),
    ("地上設(shè)施", "71"),
    ("水質(zhì)", "71"),
    ("無水", "71"),
    ("供熱單位影響", "71"),
    ("人行道管理", "71"),
    ("主網(wǎng)原因", "71"),
    ("集中供熱", "71"),
    ("客運(yùn)管理", "71"),
    ("國有公交(大巴)管理", "71"),
    ("工業(yè)粉塵污染", "71"),
    ("治安案件", "71"),
    ("壓力容器安全", "71"),
    ("身份證管理", "71"),
    ("群眾健身", "41"),
    ("工業(yè)排放污染", "41"),
    ("破壞森林資源", "41"),
    ("市場收費(fèi)", "41"),
    ("生產(chǎn)資金", "41"),
    ("生產(chǎn)噪聲", "41"),
    ("農(nóng)村低保", "41"),
    ("勞動(dòng)爭議", "41"),
    ("勞動(dòng)合同爭議", "41"),
    ("勞動(dòng)報(bào)酬與福利", "41"),
    ("醫(yī)療事故", "21"),
    ("停供", "21"),
    ("基礎(chǔ)教育", "21"),
    ("職業(yè)教育", "21"),
    ("物業(yè)資質(zhì)管理", "21"),
    ("拆遷補(bǔ)償", "21"),
    ("設(shè)施維護(hù)", "21"),
    ("市場外溢", "11"),
    ("占道經(jīng)營", "11"),
    ("樹木管理", "11"),
    ("農(nóng)村基礎(chǔ)設(shè)施", "11"),
    ("無水", "11"),
    ("供氣質(zhì)量", "11"),
    ("停氣", "11"),
    ("燃?xì)夤芾?, "11"),
    ("市容環(huán)衛(wèi)", "11"),
    ("新聞傳媒", "11"),
    ("人才招聘", "11"),
    ("市場環(huán)境", "11"),
    ("行政事業(yè)收費(fèi)", "11"),
    ("食品安全與衛(wèi)生", "11"),
    ("城市交通", "11"),
    ("房地產(chǎn)開發(fā)", "11"),
    ("房屋配套問題", "11"),
    ("物業(yè)服務(wù)", "11"),
    ("物業(yè)管理", "11"),
    ("占道", "11"),
    ("園林綠化", "11"),
    ("戶籍管理及身份證", "11"),
    ("公交運(yùn)輸管理", "11"),
    ("公路(水路)交通", "11"),
    ("房屋與圖紙不符", "11"),
    ("有線電視", "11"),
    ("社會(huì)治安", "11"),
    ("林業(yè)資源", "11"),
    ("其他行政事業(yè)收費(fèi)", "11"),
    ("經(jīng)營性收費(fèi)", "11"),
    ("食品安全與衛(wèi)生", "11"),
    ("體育活動(dòng)", "11"),
    ("有線電視安裝及調(diào)試維護(hù)", "11"),
    ("低保管理", "11"),
    ("勞動(dòng)爭議", "11"),
    ("社會(huì)福利及事務(wù)", "11"),
    ("一次供水問題", "11"),
]


c=(
    WordCloud()
    .add(series_name="熱點(diǎn)分析", data_pair=data, word_size_range=[6, 66])
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="熱點(diǎn)分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True),
    )

)
c.render_notebook()

上述示例僅供參考恬偷,讀者們結(jié)合日常工作應(yīng)用悍手,學(xué)會(huì)舉一反三才是關(guān)健,更多Pychart示例介紹可見:代碼示例

轉(zhuǎn)載自:狂師 推薦一款Python數(shù)據(jù)可視化神器

轉(zhuǎn)載請注明出處袍患,謝謝

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坦康,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诡延,更是在濱河造成了極大的恐慌滞欠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肆良,死亡現(xiàn)場離奇詭異筛璧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惹恃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門夭谤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人巫糙,你說我怎么就攤上這事朗儒。” “怎么了参淹?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵醉锄,是天一觀的道長。 經(jīng)常有香客問我浙值,道長恳不,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任开呐,我火速辦了婚禮烟勋,結(jié)果婚禮上规求,老公的妹妹穿的比我還像新娘。我一直安慰自己神妹,他們只是感情好颓哮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸵荠,像睡著了一般冕茅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛹找,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天姨伤,我揣著相機(jī)與錄音,去河邊找鬼庸疾。 笑死乍楚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的届慈。 我是一名探鬼主播徒溪,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼金顿!你這毒婦竟也來了臊泌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤揍拆,失蹤者是張志新(化名)和其女友劉穎渠概,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫂拴,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡播揪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筒狠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猪狈。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辩恼,靈堂內(nèi)的尸體忽然破棺而出雇庙,到底是詐尸還是另有隱情,我是刑警寧澤运挫,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站套耕,受9級特大地震影響谁帕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冯袍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一匈挖、第九天 我趴在偏房一處隱蔽的房頂上張望碾牌。 院中可真熱鬧,春花似錦儡循、人聲如沸舶吗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽誓琼。三九已至,卻和暖如春肴捉,著一層夾襖步出監(jiān)牢的瞬間腹侣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工齿穗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傲隶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓窃页,卻偏偏與公主長得像跺株,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子脖卖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354