<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制作可視化報表,這也太快了!

          共 14936字,需瀏覽 30分鐘

           ·

          2022-03-04 14:32

          ↑ 關(guān)注 + 星標 ,每天學(xué)Python新技能

          后臺回復(fù)【大禮包】送你Python自學(xué)大禮包



          在數(shù)據(jù)展示中使用圖表來分享自己的見解,是個非常常見的方法。


          這也是Tableau、Power BI這類商業(yè)智能儀表盤持續(xù)流行的原因之一,這些工具為數(shù)據(jù)提供了精美的圖形解釋。


          當(dāng)然了,這些工具也有著不少缺點,比如不夠靈活,無法讓你自己創(chuàng)建設(shè)計。


          當(dāng)你對圖表展示要求定制化時,編程也許就比較適合你,比如Echarts、D3.js。


          今天小F給大家介紹一個用Python制作可視化報表的案例,主要是使用到Dash+Tailwindcss。


          可視化報表效果如下,水果銷售情況一覽~



          Dash是基于Plotly搭建的Dashbord框架,支持Python、R和Julia。使用Dash,你可以創(chuàng)建自定義響應(yīng)式儀表板。



          相關(guān)文檔

          說明:https://dash.plotly.com/introduction

          案例:https://dash.gallery/Portal/

          源碼:https://github.com/plotly/dash-sample-apps/


          Tailwindcss則是一個實用程序優(yōu)先的CSS框架,用于快速構(gòu)建自定義界面。



          “這種框架只適用于那種只會實現(xiàn)頁面布局美化元素而不關(guān)心實現(xiàn)業(yè)務(wù)邏輯的前端”。


          看看別人對它的評價,對于無交互的圖表,完全足夠了。


          相關(guān)文檔

          說明:https://www.tailwindcss.cn/docs

          GitHub:https://github.com/tailwindlabs/tailwindcss


          下面就給大家講解下如何通過Dash+Tailwindcss搭建可視化報表~


          首先安裝相關(guān)的Python庫,然后導(dǎo)入。


          import dash
          import pandas as pd
          import plotly.express as px
          from dash import dcc, html


          使用到了Pandas、Plotly、dash這三個Python庫。


          我們需要把Tailwindcss的CDN作為external_script,并將其傳遞給我們的應(yīng)用程序?qū)嵗?,這樣我們才可以成功使用Tailwindcss。


          # 導(dǎo)入tailwindcss的CDN
          external_script = ["https://tailwindcss.com/", {"src""https://cdn.tailwindcss.com"}]

          # 創(chuàng)建Dash實例
          app = dash.Dash(
              __name__,
              external_scripts=external_script,
          )
          app.scripts.config.serve_locally = True


          使用Pandas創(chuàng)建水果銷售數(shù)據(jù),隨便虛構(gòu)了一個。


          # 創(chuàng)建數(shù)據(jù)
          df = pd.DataFrame(
              {
                  "Fruit": ["蘋果""橙子""香蕉""蘋果""橙子""香蕉"],
                  "Amount": [4.21.02.12.324.205.0],
                  "City": ["北京""北京""北京""上海""上海""上海"],
              }
          )

          print(df)


          結(jié)果如下,3列6行,包含水果、銷售額、城市列。



          處理一下相關(guān)的數(shù)據(jù),水果單數(shù)、銷售總額、城市單數(shù)、變量數(shù)。


          # 水果單數(shù)
          fruit_count = df.Fruit.count()
          # 銷售總額
          total_amt = df.Amount.sum()
          # 城市單數(shù)
          city_count = df.City.count()
          # 變量數(shù)
          variables = df.shape[1]


          創(chuàng)建圖表實例,一個柱狀圖、一個箱型圖。


          # 柱狀圖1, 不同水果不同城市的銷售額
          fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")

          # 箱型圖1, 不同城市的銷售額分布情況
          fig1 = px.box(df, x="City", y="Amount", color="City")


          效果如下。



          剩下就是文字模塊啦,文字+CSS樣式。


          其中排版布局美化,通過Tailwindcss來實現(xiàn)。


          app.layout = html.Div(
              html.Div(
                  children=[
                      html.Div(
                          children=[
                              html.H1(children="水果銷售--可視化報表", className=" py-3 text-5xl font-bold text-gray-800"),
                              html.Div(
                                  children="""Python with Dash = ?? .""",
                                  className="text-left prose prose-lg text-2xl  py-3 text-gray-600",
                              ),
                          ],
                          className="w-full mx-14 px-16 shadow-lg bg-white -mt-14 px-6 container my-3 ",
                      ),
                      html.Div(
                          html.Div(
                              children=[
                                  html.Div(
                                      children=[
                                          f"¥{total_amt}",
                                          html.Br(),
                                          html.Span("總銷售額", className="text-lg font-bold ml-4"),
                                      ],
                                      className=" shadow-xl py-4 px-14 text-5xl bg-[#76c893] text-white  font-bold text-gray-800",
                                  ),
                                  html.Div(
                                      children=[
                                          fruit_count,
                                          html.Br(),
                                          html.Span("水果數(shù)量", className="text-lg font-bold ml-4"),
                                      ],
                                      className=" shadow-xl py-4 px-24 text-5xl bg-[#1d3557] text-white  font-bold text-gray-800",
                                  ),
                                  html.Div(
                                      children=[
                                          variables,
                                          html.Br(),
                                          html.Span("變量", className="inline-flex items-center text-lg font-bold ml-4"),
                                      ],
                                      className=" shadow-xl py-4 px-24 text-5xl bg-[#646ffa] text-white  font-bold text-gray-800",
                                  ),
                                  html.Div(
                                      children=[
                                          city_count,
                                          html.Br(),
                                          html.Span("城市數(shù)量", className="text-lg font-bold ml-4"),
                                      ],
                                      className="w-full shadow-xl py-4 px-24 text-5xl bg-[#ef553b] text-white  font-bold text-gray-800",
                                  ),
                              ],
                              className="my-4 w-full grid grid-flow-rows grid-cols-1 lg:grid-cols-4 gap-y-4 lg:gap-[60px]",
                          ),
                          className="flex max-w-full justify-between items-center ",
                      ),
                      html.Div(
                          children=[
                              html.Div(
                                  children=[
                                      dcc.Graph(id="example-graph", figure=fig),
                                  ],
                                  className="shadow-xl w-full border-3 rounded-sm",
                              ),
                              html.Div(
                                  children=[
                                      dcc.Graph(id="example-graph1", figure=fig1),
                                  ],
                                  className="w-full shadow-2xl rounded-sm",
                              ),
                          ],
                          className="grid grid-cols-1 lg:grid-cols-2 gap-4",
                      ),
                  ],
                  className="bg-[#ebeaee]  flex py-14 flex-col items-center justify-center ",
              ),
              className="bg-[#ebeaee] container mx-auto px-14 py-4",
          )


          效果如下。



          最后啟動程序代碼。


          if __name__ == '__main__':
              # debug模式, 端口7777
              app.run_server(debug=True, threaded=True, port=7777)
              # 正常模式, 網(wǎng)頁右下角的調(diào)試按鈕將不會出現(xiàn)
              # app.run_server(port=7777)


          這樣就能在本地看到可視化大屏頁面,瀏覽器打開如下地址。

          http://127.0.0.1:7777


          以后制作的圖表不僅能在線展示,還能實時更新,屬實不錯~


          好了,今天的分享到此結(jié)束,大家可以自行去動手練習(xí)。


          推薦閱讀

          1. 北航博士,研究所月入兩萬,是一種什么體驗?

          2. Python最新學(xué)習(xí)神器來了

          3. 新一代 Python 包管理工具來了!

          4. 第一次!用Python接私活賺了1k

          您看此文用   分  秒,轉(zhuǎn)發(fā)只需1秒哦

          瀏覽 71
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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.欧美黄 | 99久久99久久精品免费看蜜桃 | 一区二区男女无码 | 国产三级片网站在线观看 |