乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      基于Pyecharts v1.x 的數(shù)據(jù)可視化

       CDA數(shù)據(jù)分析師 2019-08-26
      作者 | CDA數(shù)據(jù)分析師

      1、Pyecharts 簡介

      Echarts是一個(gè)由百度開源的數(shù)據(jù)可視化工具,憑借著良好的交互性,精巧的圖表設(shè)計(jì),得到了眾多開發(fā)者的認(rèn)可。而 Python 是一門富有表達(dá)力的語言,很適合用于數(shù)據(jù)處理。當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時(shí),Pyecharts誕生了。

      Pyecharts最早只適用于工程領(lǐng)域的可視化開發(fā),但是隨著其對Jupyter notebook、Jupyter lab等交互式開發(fā)工具的支持不斷加強(qiáng),現(xiàn)在也開始被許多數(shù)據(jù)分析師應(yīng)用到數(shù)據(jù)探索中。

      1.1 Pyecharts各個(gè)版本與Python的對應(yīng)關(guān)系

      pyecharts 分為 v0.5.x 和 v1.x 兩個(gè)大版本,v0.5.x 和 v1.x 間不兼容,v1.x 是一個(gè)全新的版本。

      Pyecharts各版本與python的對應(yīng)關(guān)系見下表

      注:經(jīng)Pyecharts開發(fā)團(tuán)隊(duì)決定,0.5.x 版本將不再進(jìn)行維護(hù)

      1.2 Pyecharts v1系列的新特性

      • 全面擁抱 Python3 和 TypeHint

      pyecharts v1.0.0 停止對 Python2.7,3.4~3.5 版本的支持和維護(hù),僅支持 Python3.6+。如果還不知道什么是 TypeHint 的同學(xué),勸你盡早入坑,官方入坑指南 typing — Support for type hints

      在編程界,早已流傳著 動(dòng)態(tài)一時(shí)爽,重構(gòu)火葬場 這樣的真知灼見,動(dòng)態(tài)語言類型檢查已經(jīng)成為了一種趨勢,Javascript 已經(jīng)有了 Typescript,Python 也在力推 TypeHint,雖然 Python 的 TypeHint 實(shí)際上對于程序的運(yùn)行并沒有任何影響......,但它配合 IDE 和 mypy,或者 pyright 這樣的工具可以在開發(fā)階段趁早發(fā)現(xiàn)問題。

      • 棄用插件機(jī)制

      pyecharts v1.0.0 廢除原有的插件機(jī)制,包括地圖包插件主題插件,插件的本質(zhì)是提供 pyecharts 運(yùn)行所需要的靜態(tài)資源文件(基本都是 .js 文件),所以現(xiàn)在開放了兩種模式提供靜態(tài)資源文件。

      online 模式,使用 pyecharts 官方提供的 assets host,或者部署自己的 remote host。

      local 模式,使用自己本地開啟的文件服務(wù)提供 assets host(離線模式)。

      • 支持 JupyterLab

      對 JupyterLab 的支持一直是很多開發(fā)者關(guān)心的功能,畢竟 JupyterLab 號(hào)稱是下一代的 Notebook。pyecharts 1.0.0 開始支持在 JupyterLab 中渲染圖表啦!

      #使用JupytrLab需添加如下代碼
      from pyecharts.globals import CurrentConfig,NotebookType
      CurrentConfig,NOTEBOOK_TYPE=NotebookType.JUPYTER_LAB
      #除了以上代碼,還需在渲染之前執(zhí)行加載JavaScript腳本的代碼,這里以柱狀圖對象bar為例
      bar.load_javascript()
      #然后再渲染即可
      bar.render_notebook()

      • 代碼風(fēng)格重構(gòu)

      所有配置項(xiàng)均 OOP,在新版本的 pyecharts 中,一切皆 Options。配置項(xiàng)種類更多,可操作性更強(qiáng),可以畫出更豐富的圖表,pyecharts 官方畫廊 pyecharts/pyecharts-gallery。

      0.5.X 版本寫法

      from pyecharts import Bar

      attr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]
      v1 = [5, 20, 36, 10, 75, 90]
      v2 = [10, 25, 8, 60, 20, 80]
      bar = Bar("柱狀圖數(shù)據(jù)堆疊示例")
      bar.add("商家A", attr, v1, is_stack=True)
      bar.add("商家B", attr, v2, is_stack=True)
      bar.render()

      1.0.0 版本寫法,支持鏈?zhǔn)秸{(diào)用

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

      attr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]
      v1 = [5, 20, 36, 10, 75, 90]
      v2 = [10, 25, 8, 60, 20, 80]


      bar = (
      Bar()
      .add_xaxis(attr)
      .add_yaxis("商家A", v1, stack="stack1")
      .add_yaxis("商家B", v2, stack="stack1")
      .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
      .set_global_opts(title_opts=opts.TitleOpts(title="柱狀圖數(shù)據(jù)堆疊示例"))
      )

      bar.render()

      • 支持 selenium/phantomjs 渲染圖片

      pyecharts 1.0.0 提供兩種模式渲染圖片,selenium 和 phantomjs,分別需要安裝 snapshot-selenium 和 snapshot-phantomjs。

      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])
      .set_global_opts(title_opts=opts.TitleOpts(title="Bar-測試渲染圖片"))
      )
      return c


      def render_chart_by_selenium():
      from snapshot_selenium import snapshot
      make_snapshot(snapshot, bar_chart().render(), "bar0.png")


      def render_chart_by_phantomjs():
      from snapshot_phantomjs import snapshot
      make_snapshot(snapshot, bar_chart().render(), "bar1.png")

      看到新版的種種優(yōu)勢,小伙伴們是不是躍躍欲試了?接下來我們安裝并通過一系列代碼體驗(yàn)Pyecharts。

      1.3 安裝 Pyecharts

      v1系列版本的Pyecharts僅支持python3.6+ ,即如果你的python是3.6+,則默認(rèn)會(huì)下載最新版的pyecharts。

      pip install -i https://pypi.douban.com/simple pyecharts -U #使用國內(nèi)軟件源下載速度會(huì)快很多

      安裝pyecharts v0.5系列版本:

      pip install -i https://pypi.douban.com/simple pyecharts==0.5.11

      2、Pyecharts繪圖

      繪圖前需要導(dǎo)入相關(guān)模塊,根據(jù)繪制的圖形不同,導(dǎo)入的模塊會(huì)有些許差異

      from pyecharts import options as opts #引入配置項(xiàng)入口
      from pyecharts.charts import Bar,Line #導(dǎo)入相關(guān)圖形的構(gòu)造方法

      2.1 pyecharts繪圖步驟

      pyecharts繪圖大致是按以下五個(gè)步驟來的

      這里以繪制柱形圖為例

      #1、構(gòu)造柱形圖對象
      bar = Bar()
      #2、添加x軸數(shù)據(jù)
      bar.add_xaxis(xaxis_data=x_data)
      # 添加y軸數(shù)據(jù)
      bar.add_yaxis( "系列名稱", #設(shè)置系列名稱
      yaxis_data=y_data, #設(shè)置y軸系列數(shù)據(jù)
      ...... #更多參數(shù)可以查看官網(wǎng)
      )
      #3、對系列進(jìn)行配置
      bar.set_series_opts( #主要是對圖元、文字、
      ...... #標(biāo)簽、線型、標(biāo)記點(diǎn)、標(biāo)記線 等內(nèi)容進(jìn)行配置 
      )
      #4、對全局進(jìn)行配置
      bar.set_global_opts( #可配置內(nèi)容包括:x、y坐標(biāo)軸;初始化配置;
      ...... #工具箱配置;標(biāo)題;區(qū)域縮放;圖例;
      #提示框等參數(shù)配置

      #5、渲染圖片
      bar.render(path) #將圖片渲染為html文件
      bar.render_notebook() #直接在jupytr notebook中渲染

      基于分類/時(shí)間的數(shù)據(jù)對比,通常需用到比較型圖表。用戶通過圖表輕松識(shí)別最大/最小值,查看當(dāng)前和過去的數(shù)據(jù)變動(dòng)情況。

      常見場景:哪個(gè)地區(qū)的收件量最多?今年的收入和去年相比如何?商品的銷量在不同地區(qū)、時(shí)間維度上的差異……

      2.2 柱狀圖的繪制

      當(dāng)數(shù)據(jù)量少的時(shí)候我們使用柱狀圖就可以了。pyecharts繪制柱狀圖表灰常簡單咯,啥也不說了,上代碼。

      from example.commons import Faker #調(diào)用官方提供的測試數(shù)據(jù)
      from pyecharts import options as opts #配置入口模塊
      from pyecharts.charts import Bar #柱狀圖構(gòu)造方法

      bar = Bar()#構(gòu)造bar對象
      bar.add_xaxis(Faker.choose()) #添加x軸數(shù)據(jù) 
      bar.add_yaxis("商家A", Faker.values()) #添加一個(gè)系列數(shù)據(jù),這里是A商家的數(shù)據(jù)
      bar.add_yaxis("商家B", Faker.values()) #添加另一個(gè)系列數(shù)據(jù)
      bar.set_global_opts(title_opts=opts.TitleOpts(
      title="Bar-基本示例", #設(shè)置主標(biāo)題
      subtitle="我是副標(biāo)題" #設(shè)置副標(biāo)題
      ))
      bar.render_notebook() #在jupyter notebook中渲染

      效果圖如下:

      2.3 條形圖

      當(dāng)條目較多,如大于12條,移動(dòng)端上的柱狀圖會(huì)顯得擁擠不堪,更適合用條形圖。一般數(shù)據(jù)條目不超過30條,否則易帶來視覺和記憶負(fù)擔(dān)。

      bar = Bar().add_xaxis(Faker.choose()+Faker.choose()+Faker.choose()) #將數(shù)據(jù)生成三份 
      bar.add_yaxis("", Faker.values()+Faker.values()+Faker.values()) #數(shù)據(jù)生成三份
      bar.set_global_opts(title_opts=opts.TitleOpts(title="條形圖"))
      bar.reversal_axis() #翻轉(zhuǎn)XY軸,將柱狀圖轉(zhuǎn)換為條形圖
      bar.render_notebook()

      2.4 折線圖

      當(dāng)數(shù)據(jù)X軸為連續(xù)數(shù)值(如時(shí)間)且我們比較注重觀察數(shù)據(jù)變化趨勢時(shí),折線圖是非常好的選擇。

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

      line=Line()
      line.add_xaxis(["201{}年/{}季度".format(y,z) 
      for y in range(4) 
      for z in range(1,5)]) #設(shè)置x軸數(shù)據(jù)
      line.add_yaxis(
      "電視機(jī)銷量", 
      [4.80,4.10,6.00,6.50,5.80,5.20,6.80,7.40,
      6.00,5.60,7.50,7.80,6.30,5.90,8.00,8.40]
      )#設(shè)置y軸數(shù)據(jù)
      line.set_global_opts(
      xaxis_opts=opts.AxisOpts(
      axislabel_opts=opts.LabelOpts(rotate=-40),
      ),#設(shè)置x軸標(biāo)簽旋轉(zhuǎn)角度
      yaxis_opts=opts.AxisOpts(name="銷量(單位/千臺(tái))"),#設(shè)置y軸名稱
      title_opts=opts.TitleOpts(title="折線圖")) #設(shè)置圖表標(biāo)題

      line.render_notebook() #渲染圖表

      2.5 南丁格爾-玫瑰圖

      當(dāng)對比差異不是很明顯的數(shù)據(jù)時(shí),可以使用南丁格爾玫瑰圖,其原理為:扇形的半徑和面積是平方的關(guān)系,南丁格爾玫瑰圖會(huì)將數(shù)值之間的差異放大,適合對比大小相近的數(shù)值。它不適合對比差異較大的數(shù)值。

      此外,因?yàn)閳A有周期性,玫瑰圖也適于表示周期/時(shí)間概念,比如星期、月份。依然建議數(shù)據(jù)量不超過30條,超出可考慮條形圖。

      def pie_rosetype():
      from pyecharts.charts import Pie
      c = (
      Pie()
      .add(
      "",
      [list(z) for z in zip(["201{}年/{}季度".format(y,z)
      for y in range(2) 
      for z in range(1,3)], [4.80,4.10,5.80,5.20])],
      radius=["0%", "75%"], #設(shè)置內(nèi)徑外徑
      rosetype="radius", #玫瑰圖有兩種類型
      label_opts=opts.LabelOpts(is_show=True),
      )
      .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰圖示例"))
      )
      return c
      pie_rosetype().render_notebook()

      2.6 雷達(dá)圖

      對于一些多維的性能數(shù)據(jù),如王者榮耀等游戲中的玩家戰(zhàn)力信息,常用雷達(dá)圖表示。指標(biāo)得分接近圓心,說明處于較差狀態(tài),應(yīng)分析改進(jìn);指標(biāo)得分接近外邊線,說明處于理想狀態(tài)。

      from pyecharts import options as opts
      from pyecharts.charts import Page, Radar

      v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
      v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]

      def radar_base() -> Radar:
      c = (
      Radar()
      .add_schema(
      schema=[
      opts.RadarIndicatorItem(name="KDA", max_=6500),
      opts.RadarIndicatorItem(name="輸出", max_=16000),
      opts.RadarIndicatorItem(name="經(jīng)濟(jì)", max_=30000),
      opts.RadarIndicatorItem(name="生存", max_=38000),
      opts.RadarIndicatorItem(name="推進(jìn)", max_=52000),
      opts.RadarIndicatorItem(name="打野", max_=25000),
      ]
      )
      .add("魯班", v1, #添加系列名稱及數(shù)據(jù)
      color="red", #設(shè)置邊框線的顏色
      areastyle_opts = opts.AreaStyleOpts(#設(shè)置填充的屬性
      opacity = 0.5, #透明度
      color="red" #填充顏色
      ),)
      .add("后裔", v2,color="blue",
      areastyle_opts = opts.AreaStyleOpts(
      opacity = 0.5,#透明度
      color="blue"
      ),)
      .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
      .set_global_opts(title_opts=opts.TitleOpts(title="英雄成長對比"))
      )
      return c
      radar_base().render_notebook()

      2.7 餅圖

      部分相較于整體,一個(gè)整體被分成幾個(gè)部分。這類情況會(huì)用到構(gòu)成型圖表,如五大產(chǎn)品的收件量占比、公司利潤的來源構(gòu)成等。

      對于參與構(gòu)成研究的數(shù)據(jù)不超過9個(gè)時(shí),可以使用餅圖來繪制,如果超過了建議使用條形圖來展示。

      def pie_base():
      from pyecharts import options as opts
      from pyecharts.charts import Page, Pie
      v1=["啤酒","可樂","雪碧","咖啡","奶茶"]
      v2=[30,19,21,12,18]

      c = (
      Pie()
      .add("", [list(z) for z in zip(v1,v2)])
      .set_global_opts(title_opts=opts.TitleOpts(title="銷售收入占比"))
      .set_series_opts(label_opts=opts.LabelOpts(formatter=": {c}%"))#格式化標(biāo)簽輸出內(nèi)容
      )
      return c
      pie_base().render_notebook()

      2.8 pyecharts繪制散點(diǎn)圖

      通過分布&聯(lián)系型圖表能看到數(shù)據(jù)的分布情況,進(jìn)而找到某些聯(lián)系,如相關(guān)性、異常值和數(shù)據(jù)集群。

      常見使用場景:客戶的分布與哪些因素相關(guān)、身高與體重的相關(guān)性分析等

      查看兩個(gè)變量的關(guān)系使用散點(diǎn)圖,以貸款業(yè)務(wù)為例,查看年齡與信用的關(guān)系

      代碼:

      def scatter_render():
      from pyecharts.charts import Scatter
      from pyecharts import options as opts
      from pyecharts.commons.utils import JsCode
      import pandas as pd
      df = pd.DataFrame({"年齡":[32,28,23,24,21],
      "信用分":[771,751,738,726,725],
      "姓名":['小明','小花','小麗','小剛','小紅']})
      df.sort_values("年齡",inplace=True,ascending=True)# 按年齡對數(shù)據(jù)做升序排序
      c = (
      Scatter()
      .add_xaxis(df.年齡.values.tolist())
      .add_yaxis(
      "信用分",
      df[["信用分","姓名"]].values.tolist(),#傳入信用分與姓名組合,方便js回調(diào)函數(shù)顯示標(biāo)簽
      label_opts=opts.LabelOpts(
      formatter=JsCode(
      "function(params){return params.value[2];}" #通過定義JavaScript回調(diào)函數(shù)自定義標(biāo)簽
      )
      )
      )
      .set_global_opts(
      title_opts=opts.TitleOpts(title="Scatter-多維度數(shù)據(jù)"),
      xaxis_opts = opts.AxisOpts(
      type_="value",#x軸數(shù)據(jù)類型是連續(xù)型的
      min_=20 #x軸范圍最小為20
      ),
      yaxis_opts = opts.AxisOpts(
      min_=700 #y軸范圍最小為700
      )
      )
      )

      return c

      scatter_render().render_notebook()

      我們可以看出,信用分與年齡在圖形所顯示范圍內(nèi)大致是成正比的。

      2.9 繪制組合圖

      組合圖就是將兩種不同的圖形繪制到同一圖表中,我們以數(shù)據(jù)分析中常常用到的帕累托圖為例,展示pyecharts如何繪制組合圖。

      帕累托法則又稱為二八法則,即百分之八十的問題是百分之二十的原因造成的。

      帕累托圖(Pareto chart)又叫排列圖、主次圖,是按照發(fā)生頻率大小順序繪制的直方圖,表示有多少結(jié)果是由已確認(rèn)類型或范疇的原因所造成。

      帕累托圖在項(xiàng)目管理中主要用來找出產(chǎn)生大多數(shù)問題的關(guān)鍵原因來解決大多數(shù)問題,是將出現(xiàn)的質(zhì)量問題按照重要程度依次排列的一種圖表,從而可以直觀地得出影響質(zhì)量問題的主要因素。

      主要特點(diǎn):

      1、柱形圖的數(shù)據(jù)按數(shù)值的降序排列,折線圖上的數(shù)據(jù)有累積百分比數(shù)據(jù),并在次坐標(biāo)軸顯示;

      2、折線圖的起點(diǎn)數(shù)值為0%,并且位于柱形圖第一個(gè)柱子的最左下角;

      3、折線圖的第二個(gè)點(diǎn)位于柱形圖第一個(gè)柱子的最右上角 ;

      4、折線圖最后一個(gè)點(diǎn)數(shù)值為100%,位于整張圖形的最右上角

      數(shù)據(jù):

      代碼:

      def bar_overlap_line():
      from pyecharts import options as opts #引入配置項(xiàng)
      from pyecharts.charts import Bar,Line


      x_data1 = ["產(chǎn)品價(jià)格優(yōu)勢不突出","渠道經(jīng)理服務(wù)不到位",
      "營銷活動(dòng)頻次不夠","區(qū)域消費(fèi)市場不景氣","其他"]
      x_data2 = [*range(6)]
      y_data1 = [115,99,59,33,23]
      y_data2 = [0,35,65,83,93,100] 

      #######################################################################
      bar = Bar()
      #添加x軸數(shù)據(jù)
      bar.add_xaxis(xaxis_data=x_data1)
      bar.set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")) #設(shè)置x軸系列 
      bar.add_yaxis( "問題數(shù)量(頻數(shù))", #設(shè)置y軸系列名稱
      yaxis_data=y_data1, #設(shè)置y軸系列數(shù)據(jù)
      category_gap=0, #設(shè)置柱的間距
      color="blue", #設(shè)置柱形的填充顏色
      )

      bar.extend_axis(
      xaxis=opts.AxisOpts( #設(shè)置x軸的參數(shù)
      is_show=False,
      position="top",



      bar.extend_axis(
      yaxis=opts.AxisOpts(

      axistick_opts=opts.AxisTickOpts( #刻度
      is_inside=True,
      ),
      axislabel_opts=opts.LabelOpts(formatter="{value}%", #格式化刻度輸出
      position="right")
      )

      bar.set_global_opts(
      xaxis_opts=opts.AxisOpts( #設(shè)置x軸的參數(shù)
      is_show=True, #是否顯示坐標(biāo)軸
      ),
      yaxis_opts=opts.AxisOpts( #設(shè)置y軸最大取值范圍
      max_=320,
      ),
      title_opts=opts.TitleOpts(title="帕累托圖")

      ########################################################################## 
      line =Line()
      #添加x軸數(shù)據(jù)
      line.add_xaxis(x_data2)
      #添加y軸數(shù)據(jù) 
      line.add_yaxis("累計(jì)百分比",
      y_data2,
      xaxis_index=1, #使用次x坐標(biāo)軸
      yaxis_index=1, #使用次y坐標(biāo)軸
      label_opts=opts.LabelOpts(is_show=False),
      is_smooth=True,


      bar.overlap(line) #組合柱狀圖與折線圖
      return bar
      bar_overlap_line().render_notebook()

      最終效果圖如下所示:

      以上就是數(shù)據(jù)分析常用可視化圖表的pyecharts實(shí)現(xiàn)方法。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請遵守用戶 評(píng)論公約

        類似文章 更多