1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Mac上怎么用Python實(shí)現(xiàn)疫情地圖可視化-創(chuàng)新互聯(lián)

      本篇內(nèi)容介紹了“Mac上怎么用Python實(shí)現(xiàn)疫情地圖可視化”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

      10年積累的網(wǎng)站制作、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有吉縣免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

      核心思路

      疫情圖的核心在于疫情數(shù)據(jù)整理以及疫情數(shù)據(jù)可視化。

      疫情數(shù)據(jù)整理

      本文疫情數(shù)據(jù)是由網(wǎng)易新聞的公開數(shù)據(jù)整理而成,僅用于demo 展示。數(shù)據(jù)的具體地址已在代碼中說明:此地址是一個(gè) Get 請(qǐng)求,大家可以先拷貝地址到瀏覽器中查看數(shù)據(jù)格式。請(qǐng)求成功后服務(wù)端響應(yīng)的數(shù)據(jù)格式如下(文中僅羅列出我們需要的數(shù)據(jù)

      參數(shù)類型備注
      codeint
      msgString
      dataObject

      data 里面的參數(shù)

      參數(shù)類型備注
      listList各地級(jí)市確診人數(shù)

      Object 里面的參數(shù)

      參數(shù)類型備注
      nameString地級(jí)市名(簡(jiǎn)稱)
      provinceString省份
      confirmint確診人數(shù)

      疫情數(shù)據(jù)可視化

      地圖是數(shù)據(jù)可視化的一種常用工具,我們用地圖來展示疫情的具體分布。本文采用的是開源的  pyecharts 項(xiàng)目,方便開發(fā)者用于地圖展示。其中,pyecharts 是一個(gè)幫助生成 Echarts 圖表的類庫(kù);而 Echarts 則是百度開源的數(shù)據(jù)可視化 JS 庫(kù),支持折線圖、柱狀圖、散點(diǎn)圖、K線圖、餅圖、雷達(dá)圖、和弦圖、力導(dǎo)向布局圖、地圖、儀表盤、漏斗圖、事件河流圖等12類圖表,并可以在 PC 和移動(dòng)設(shè)備上流暢地運(yùn)行,兼容當(dāng)前絕大部分瀏覽器。pyecharts 是在 Python 的基礎(chǔ)上對(duì) Echarts 所進(jìn)行的擴(kuò)展。

      原理詳解

      接下來,本文將為大家詳細(xì)說明如何搭建環(huán)境、整合數(shù)據(jù)、使用 pyecharts 來做數(shù)據(jù)可視化以及如何調(diào)試項(xiàng)目。

      環(huán)境搭建

      為了快速開發(fā)此功能并且盡可能地縮減代碼量,此 demo 選擇使用 Python 來進(jìn)行開發(fā)。為此,我們應(yīng)該準(zhǔn)備好Python 的開發(fā)環(huán)境并導(dǎo)入python 基礎(chǔ)庫(kù)。

      安裝 Python 環(huán)境

      Mac 上面自帶了 Python2.7 

      安裝 pip

      pip 是 Python 包管理工具,使用該工具可以快速地對(duì)Python 包予以查找、下載、安裝、卸載等。如果你是在 python.org上下載的最新版本的安裝包,則系統(tǒng)已經(jīng)自帶該工具。此外, Python 2.7.9 + 和 Python 3.4+ 以上版本都自帶 pip 工具。可以使用“pip –version”命令行來查看當(dāng)前 pip 的版本。

      如果本機(jī)沒有 配置Python 環(huán)境的,我們可以在線安裝,只需要在終端輸入以下 2 行命令即可

      $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py   
      $ sudo python get-pip.py

      安裝工程所需要的插件

      在代碼中大家不難發(fā)現(xiàn)我們導(dǎo)入了一些開源的庫(kù):

      import math
      import time
      from fake_useragent import UserAgent 
      from pyecharts.charts import Map
      from pyecharts import options as opts
      import requests
      import json
      import sys

      請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)需要用到的插件:

      pip install fake_useragent # 偽裝請(qǐng)求,隨機(jī)生成UserAgent
      pip install requests # HTTP請(qǐng)求庫(kù)。

      地圖展示需要用到的插件:

      pip install echarts-countries-pypkg  # 世界地圖
      pip install echarts-china-provinces-pypkg  # 中國(guó)省級(jí)地圖
      pip install echarts-china-cities-pypkg  # 中國(guó)城市地圖

      我們把上述的命令行復(fù)制到終端,逐行執(zhí)行即可。

      數(shù)據(jù)整合& 過濾

      代碼依然簡(jiǎn)潔明了,我們可以直接使用 requests 庫(kù)構(gòu)建一個(gè) GET 請(qǐng)求,服務(wù)器響應(yīng)的數(shù)據(jù)即為“ 全國(guó)所有城市的疫情情況”。

      ua = UserAgent(verify_ssl=False)
      headers = {'User-Agent': ua.random}
      url = "https://c.m.163.com/ug/api/wuhan/app/index/feiyan-data-list?t=1580469818264"
      def getEpidemicInfo(url):
          try:
              response = requests.get(url, headers=headers)
              print(response.status_code)
              if response.status_code == 200:
                  content_field = json.loads(response.text)
                  epidemicInfo = content_field['data']['list']
                  return epidemicInfo
              else:
                  print('請(qǐng)求錯(cuò)誤碼:' + response.status_code)
                  return None
          except Exception as e:
              print('此頁有問題!', e)
              return None

      請(qǐng)求地址里面的 t 代表時(shí)間戳。我們輸入上述代碼,計(jì)算機(jī)便會(huì)輸出前文所提及格式的數(shù)據(jù)。注意:拿到數(shù)據(jù)后還要進(jìn)行過濾,我們僅需獲得某個(gè)省份、自治州所包含的地級(jí)市或者是某個(gè)直轄市所包含的下屬區(qū)縣的疫情信息即可。
      通過以下代碼,我們對(duì)有關(guān)數(shù)據(jù)予以篩選:

      # 生成本省疫情列表
      def makedict(list):
          cityList = {}
          for item in list:
              for k, v in item.items():
              # 1
                  if v == sys.argv[1]:
                  #2
                      if str(item["confirm"]).isdigit():
                      # 3
                          if v == "北京" or v == "上海" or v == "天津":
                              cityList[item['name'] + '區(qū)'] = int(item["confirm"])
                          elif "自治州" in v:
                              continue
                          else:
                              cityList[item['name'] + '市'] = int(item["confirm"])
          return cityList
      1. sys.argv[1] 是一個(gè)傳參,代表我們手動(dòng)輸入的省份、自治區(qū)、直轄市或特別行政區(qū),比如浙江、新疆、北京、香港等;

      2. “confirm” 關(guān)鍵字用于匹配響應(yīng)結(jié)果的 value 值,在上文疫情數(shù)據(jù)整合里有提及,代表當(dāng)前城市的疫情人數(shù);

      3. pyecharts 是根據(jù)城市的全稱來適配的,此處需對(duì)數(shù)據(jù)格式中的地級(jí)市或者是下屬區(qū)縣進(jìn)行排查,如果有城市采用簡(jiǎn)稱的,需要進(jìn)行調(diào)試,(如接口返回的城市名是恩施,我們則需要適配成恩施土家族苗族自治州),從而防止地圖展示異常。

      舉例來講,當(dāng)我們輸入浙江時(shí),計(jì)算機(jī)最后輸出的數(shù)據(jù)格式為:

      {'湖州市': 9, '麗水市': 16, '舟山市': 7, '衢州市': 15, '金華市': 47, '嘉興市': 30, '紹興市': 33, '寧波市': 126, '臺(tái)州市': 124, '杭州市': 151, '溫州市': 396}

      數(shù)據(jù)可視化

      這是最核心的一步。makeEpidemicInfoMap方法里面的 dict 對(duì)應(yīng)我們過濾得到的數(shù)據(jù):

      def makeEpidemicInfoMap(dict):
          # 省和直轄市
          province_distribution = dict
          value = province_distribution.values()
          print(province_distribution)
          title = str(int(time.strftime("%Y%m%d")) - 1) + sys.argv[1] + "疫情地圖"
          epidemicCount = []
          for k, v in dict.items():
              epidemicCount.append(v)
          # 1
          epidemicCount.sort(reverse=True)
          maxEpidemic = handle(epidemicCount.pop(0))
          maxEpidemic = int(maxEpidemic)
          # 2
          map = Map()
          # 3
          map.set_global_opts(
              title_opts=opts.TitleOpts(title=title),
              visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True,
                                                pieces=[
                                                    {"max": 9999999, "min": maxEpidemic, "label": ">" + str(maxEpidemic),
                                                     "color": "#780707"},  # 數(shù)據(jù)范圍分段,分顏色,可以根據(jù)數(shù)據(jù)大小具體分配大小
                                                    {"max": int(maxEpidemic), "min": int(maxEpidemic / 8) * 7,
                                                     "label": str(int(maxEpidemic / 8) * 7) + "-" + str(int(maxEpidemic)),
                                                     "color": "#B40404"},
                                                    {"max": int(maxEpidemic / 8) * 7, "min": int(maxEpidemic / 8) * 4,
                                                     "label": str(int(maxEpidemic / 8) * 4) + "-" + str(
                                                         int(maxEpidemic / 8) * 7 - 1), "color": "#CD1111"},
                                                    {"max": int(maxEpidemic / 8) * 4, "min": int(maxEpidemic / 8),
                                                     "label": str(int(maxEpidemic / 8)) + "-" + str(
                                                         int(maxEpidemic / 8) * 4 - 1), "color": "#F68181"},
                                                    {"max": int(maxEpidemic / 8), "min": 1,
                                                     "label": "1-" + str(int(maxEpidemic / 8)), "color": "#F5A9A9"},
                                                    {"max": 0, "min": 0, "label": "0", "color": "#FFFFFF"},
                                                ], )  # 大數(shù)據(jù)范圍,分段
          )
          # 4
          map.add(title, data_pair=province_distribution.items(), maptype=sys.argv[1], is_roam=True)
          map.render(sys.argv[1] + '疫情地圖.html')
      1. 根據(jù)所選省份各城市的確診人數(shù)對(duì)所有城市進(jìn)行降序并得到當(dāng)前省份確診人數(shù)最多的城市名稱。maxEpidemic 是最接近該城市確診人數(shù)的高位數(shù),比如當(dāng)前省份疫情最為嚴(yán)重的城市的確診數(shù)量為“357”,則 maxEpidemic=300 ,引入此參數(shù)的目的是讓地圖呈現(xiàn)效果更加清晰直觀。

      2. 用PyEcharts繪制地圖需要對(duì)Map對(duì)象進(jìn)行初始化,以用于地理區(qū)域數(shù)據(jù)的可視化。

      3. 以建造者模式對(duì) map 進(jìn)行設(shè)值,其中,VisualMapOpts 是 PyEcharts 的視覺映射配置項(xiàng)。

          # 指定 visualMapPiecewise 組件的大值。
          max =100
          # 是否為分段型
          is_piecewise: bool = False,
       
          # 自定義的每一段的范圍,以及每一段的文字,以及每一段的特別的樣式。例如:
          # pieces: [
          #   {"min": 1500}, // 不指定 max,表示 max 為無限大(Infinity)。
          #   {"min": 900, "max": 1500},
          #   {"min": 310, "max": 1000},
          #   {"min": 200, "max": 300},
          #   {"min": 10, "max": 200, "label": '10 到 200(自定義label)'},
          #   {"value": 123, "label": '123(自定義特殊顏色)', "color": 'grey'}, //表示 value 等于 123 的情況
          #   {"max": 5}     // 不指定 min,表示 min 為無限大(-Infinity)。
          # ]

      詳細(xì)配置可以見 PyEcharts 官網(wǎng)。此處的范圍分為6 段,每一段的范圍均是根據(jù)上述計(jì)算出來的 maxEpidemic 進(jìn)行動(dòng)態(tài)調(diào)整的,目的是為了保證疫情圖的視覺效果,這里面我僅是做了非常簡(jiǎn)略的范圍模型,僅供參考
      4. 使用 PyEcharts 在當(dāng)前目錄下面生成一個(gè)網(wǎng)頁

      調(diào)試

      執(zhí)行 python map.py [省份],如:

      python /Users/xxx/map.py 浙江

      會(huì)在當(dāng)前目錄下面得到一份名字為 浙江疫情地圖.html 的文件,直接使用瀏覽器打開即可,最后的展示效果是不是很酷
      Mac上怎么用Python實(shí)現(xiàn)疫情地圖可視化

      Mac上怎么用Python實(shí)現(xiàn)疫情地圖可視化
      Mac上怎么用Python實(shí)現(xiàn)疫情地圖可視化

      “Mac上怎么用Python實(shí)現(xiàn)疫情地圖可視化”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


      名稱欄目:Mac上怎么用Python實(shí)現(xiàn)疫情地圖可視化-創(chuàng)新互聯(lián)
      分享URL:http://www.ef60e0e.cn/article/dgsoii.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        新乡县| 蕲春县| 苏州市| 东宁县| 时尚| 长海县| 邻水| 漳浦县| 平陆县| 老河口市| 江孜县| 玉树县| 高清| 通山县| 玉山县| 鄂尔多斯市| 藁城市| 合阳县| 华容县| 肃北| 柳江县| 乌兰浩特市| 莱州市| 凤山市| 玉林市| 方山县| 邯郸县| 江门市| 江口县| 涡阳县| 伊吾县| 民乐县| 定远县| 大关县| 镇赉县| 龙井市| 武邑县| 仙桃市| 元谋县| 金坛市| 苍山县|