<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python自動化辦公-玩轉(zhuǎn)圖表

          共 9277字,需瀏覽 19分鐘

           ·

          2021-07-28 10:34

          提起圖表,你一定會想到 Excel 和 PPT 中的條形圖、餅狀圖、柱狀圖,除此之外,還有很多其他種類的圖表,比如折線圖、熱力圖等等。但是,不管你通過哪一種圖表,它們都是為了讓你能夠更直觀、更簡潔地表達自己的想法,也能讓我們更好地從一堆雜亂無章的數(shù)字中找出規(guī)律。

          雖然圖表比直接展示數(shù)據(jù)多了這么多優(yōu)勢,但是也存在一個問題,那就是使用 Excel 制作一張精美的圖表,需要消耗大量的時間。而且這些精美的圖表,如果因為臨時需要再加載新的數(shù)據(jù),又要重復花費時間來制作。

          別擔心,這些問題都可以通過 Python 中的 seaborn 或者 echarts 庫來解決。

          使用 seaborn

          今天,我們用 seaborn 來實現(xiàn)這樣一種圖表,拋磚引玉,帶你認識 seaborn 的強大:

          先看一組數(shù)據(jù):


             sepal_length  sepal_width  petal_length  petal_width    species
          0             5.1          3.5           1.4          0.2     setosa
          1             4.9          3.0           1.4          0.2     setosa
          2             4.7          3.2           1.3          0.2     setosa
          3             4.6          3.1           1.5          0.2     setosa
          4             5.0          3.6           1.4          0.2     setosa
          ..            ...          ...           ...          ...        ...
          145           6.7          3.0           5.2          2.3  virginica
          146           6.3          2.5           5.0          1.9  virginica
          147           6.5          3.0           5.2          2.0  virginica
          148           6.2          3.4           5.4          2.3  virginica
          149           5.9          3.0           5.1          1.8  virginica

          為你解釋一下示例數(shù)據(jù)。它是由五列組成的,分別表示鳶尾花的花萼長度、寬度,鳶尾花的花瓣長度、寬度(你可以通過百度來搜索鳶尾花的圖片,來了解什么是花萼的長寬,什么是花瓣的長寬),以及三種鳶尾花品種(setosa 山鳶尾,versicolor 雜色鳶尾,virginica 維吉尼亞鳶尾)。

          通過散點圖的方式采用不同維度展示花的特性,讓你能根據(jù)顏色把三種花區(qū)分出來,我們來看一下代碼:


          import seaborn as sns
          import ssl
          import matplotlib.pyplot as plt

          ssl._create_default_https_context = ssl._create_unverified_context  # 不校驗ssl

          # 設(shè)置背景
          sns.set(style="darkgrid", color_codes=True)
          # 使用示例數(shù)據(jù)
          iris = sns.load_dataset('iris',data_home='seaborn-data',cache=True)
          # 加載數(shù)據(jù),使用散點圖,設(shè)置點的顏色和樣式
          sns.pairplot(iris,
          kind = 'scatter'#散點圖
          diag_kind = 'hist'#直方圖
          hue = 'species'#按照某一字段進行分類
          palette = 'husl'#設(shè)置調(diào)色板
          markers = ['o''s''D'], #設(shè)置不同系列的點樣式
          height = 2 #圖標大小
          )
          plt.show()

          代碼的邏輯:

          第一部分,sns.load_dataset 加載數(shù)據(jù)源,數(shù)據(jù)源可以由二維元組組成類似 Excel 一樣的多行多列的數(shù)據(jù),數(shù)據(jù)中的第一行和第一列會作為標題,被 seaborn 自動處理。我在代碼中使用了示例數(shù)據(jù)“鳶尾花分類”來為你展示數(shù)據(jù)的加載。

          第二部分,sns.pairplot 是指定圖表類型,它是由“kind = 'scatter'”參數(shù)指定的。因為 pairplot() 函數(shù)支持散點圖和回歸圖 (kind='reg'),我們需要關(guān)注分布情況,所以使用了散點圖的方式來展示數(shù)據(jù)。

          第三部分是點的樣式。繪制的散點圖中的每個點,也可以單獨設(shè)置它們的樣式。例如我指定了每個點的大小“height=2”,以及指定了色彩樣式“palette='husl'”,并為每個列指定不同的顏色“hue = 'species'”。

          最后一步是繪制圖形,由于 seaborn 基于 matplotlib 實現(xiàn)圖形,因此需要使用 plt.show() 函數(shù)進行圖形的繪制,那么鳶尾花數(shù)據(jù)的散點圖繪制結(jié)果如下:

          在截圖中,基于花的四個屬性,我采用了不同的維度進行繪圖。同時你會發(fā)現(xiàn),在某一維度下,其中一種顏色和其他顏色有明顯的分界,非常容易把其中一種和另外兩種花區(qū)分開。通過觀察散點圖,你會得到這樣一個結(jié)論,使用合理的圖形,能夠幫你更好地解釋某個晦澀難懂的概念,也能更容易從數(shù)據(jù)中發(fā)現(xiàn)規(guī)律。

          如何選擇合適的圖表

          由于 seaborn 支持的圖表非常豐富,我們也不可能會逐個嘗試。學會根據(jù)圖表的應用場景來選擇適合的種類,再通過適合的種類再細化到圖表的具體樣式就可以了。

          具體來說有可以通過參考圖例和參考分類來選擇合適的圖表。

          第一種解決辦法是參考圖例,在 seaborn 的官方文檔中,列舉了各種圖例,它的地址和截圖如下:

          第二種解決辦法是參考分類,這時候,你就要根據(jù)你的業(yè)務(wù)場景,分析出它都對應了以下四個分類中的哪一類,再按照分類通過官方文檔 API 頁面找到具體的圖表函數(shù)。四個分類如下:

          • 關(guān)系類,用于展示數(shù)據(jù)集中多個變量之間的關(guān)系,relplot()、scatterplot()、lineplot() 都屬于關(guān)系類。
          • 分布類,用于展示數(shù)據(jù)集中多個變量的分布情況,displot()、kdeplot() 是這一類經(jīng)常使用的圖表類型。
          • 線性關(guān)系類,是把多個變量聯(lián)系起來,觀察每個采樣的線性變化趨勢。regplot() 和 lmplot() 經(jīng)常用于表示線性關(guān)系。
          • 結(jié)構(gòu)化多圖,用于把多種方式的分析數(shù)據(jù)放在一起進行展示。例如我們分析鳶尾花就使用了散點圖 + 柱狀圖的方式,但是散點圖更能體現(xiàn)出它的各種屬性之間的關(guān)系。

          使用 echarts

          pyecharts 是 Python 和 Echarts 的結(jié)合體,Echarts 是由百度開源的交互式可視化圖表工具,基于 JavaScript 腳本實現(xiàn)。

          pyecharts 的數(shù)據(jù)格式,要基于不同的圖形類型,使用不同的格式。但是一般情況下,是多行多列組成的類似 Excel 表格的格式,這種格式在 Python 中一般使用嵌套元組的形式進行保存。

          和我們學習 seaborn 類似,你可以參考圖例,也可以參考分類來學習 pyecharts 支持的動態(tài)圖表。與 seaborn 不同的是,pyecharts 的官方文檔沒有圖例,不過不要忘了,pyecharts 是基于 Echarts 編寫的,因此圖例可以參考 Echarts 的 官方網(wǎng)站。

          那針對老手的圖表分類和 API 可以參考 這個地址。以最常用的圖表,折線圖為例,你可以打開地址,其中會包括圖表的完整調(diào)用代碼、測試數(shù)據(jù)和圖例,通過參考示例可以讓你掌握更多類型的圖表。

          現(xiàn)在,我們來制作一個疫情地圖。

          由于我們需要繪制中國地圖,因此直接使用 pyecharts 庫的 Map() 類,它是繪制動態(tài)地圖的類。它的官方網(wǎng)站鏈接:https://gallery.pyecharts.org/#/Map/map_base


          import requests
          import json
          from pyecharts.charts import Map
          from pyecharts import options as opts

          url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
          data = requests.get(url)
          alldata = json.loads(data.json()['data'])

          chinadata = []
          for province in alldata['areaTree'][0]['children']:
              provincedata = (
                  province['name'],
                  province['total']['nowConfirm']
              )
              chinadata.append(provincedata)

          map_chart = Map()
          map_chart.add(
                  "全國確診病例分布圖",
                  tuple(chinadata),
                  "china",
                  is_map_symbol_show=False
              )

          map_chart.set_global_opts(
              title_opts=opts.TitleOpts(
                  title=f"全國疫情地圖( {alldata['lastUpdateTime']} )"),
                  visualmap_opts=opts.VisualMapOpts(
                      is_piecewise=True,
                      pieces=[
                          {"min"1"max"9"label""1-9人""color""#FFE6BE"},
                          {"min"10"max"99"label""10-99人""color""#FFB769"},
                          {"min"100"max"499"label""100-499人""color""#FF8F66"},
                          {"min"500"max"999"label""500-999人""color""#ED514E"},
                          {"min"1000"max"9999"label""1000-9999人""color""#CA0D11"},
                          {"min"10000"max"100000"label""10000人以上""color""#A52A2A"}
                      ]))

          map_chart.render('covid19_map.html')

          執(zhí)行代碼后,會在同一路徑下生成一個 covid19_map.html 的文件,用瀏覽器打開后,如下所示:

          最后的話

          學習一個工具,最重要的不是死記代碼細節(jié),而是學會使用官方文檔,復制其樣例代碼,修改后為我所用,實現(xiàn)目標即可。自動化辦公領(lǐng)域其實并不需要深入學習編程的細節(jié),會調(diào)用各工具 API 就夠了。

          關(guān)注我,每周學習一個 Python 小技巧。



          瀏覽 65
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品五月天 | 亚洲欧美一级二级三级 | 澳门性爱视频 | 亚洲日韩一级 | www.17c亚洲蜜桃 |