<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畫一個中國地圖

          共 4969字,需瀏覽 10分鐘

           ·

          2020-11-22 16:14

          點擊上方Python 知識大全設為星標

          號外:
          本號免費提供 CSDN 資源下載,需要的伙伴公眾號后臺回復【CSDN】


          為什么是Python

          先來聊聊為什么做數(shù)據(jù)分析一定要用Python或R語言。編程語言這么多種,Java, PHP都很成熟,但是為什么在最近熱火的數(shù)據(jù)分析領域,很多人選擇用Python語言?
          數(shù)據(jù)分析只是一個需求,理論上來講,任何語言都可以滿足任何需求,只是麻煩與簡易之別。Python這門語言誕生也相當之早,它的第一個版本是26年前發(fā)表的,曾經(jīng)(或者說當前)也被用于web開發(fā),但是就流行程度來說,遠遠干不過Java和PHP。東方不亮西方亮,在與Java干仗失敗的這20幾年時光里,Python練就了一身獨門武藝,是Java和PHP遠遠不及的(當然以后是不是能追得上來,目前還不好說)。你要說做個博客網(wǎng)站,Python的特長不在這里,PHP和Java也是分分鐘的事情。你要說做個BBS網(wǎng)站,做個電商網(wǎng)站,PHP手到擒來。Python在這些方面和Java或者PHP競爭,基本就是作死的節(jié)奏,雖然也有django這樣的框架,但流行程度遠遠不及其他語言。但在這些年默默的失敗背后,有一幫研究人員用Python干出了一些驚天地泣鬼神的神器,使Python在數(shù)據(jù)研究領域做到了除了R語言以外基本無人能及的地步。

          Jupyter

          首先,第一神器是Jupyter。如果你是第一次使用,可能搞不清楚它的開發(fā)者做這么個鬼東西出來干什么,說它是博客系統(tǒng)也不像,說它是web服務器也不像,但它就是有用。因為我們傳統(tǒng)的web開發(fā)首先想的就是面向公眾,你做一個服務器就是要服務成千上萬瀏覽器的,當然Jupyter也可以服務眾多瀏覽器,但它更多的還是方便研究人員,對研究人員來說簡直是太方便了,你把代碼像寫文章一樣直接寫在輸入框里,然后在本頁面直接就看到了這個代碼的結果,隨時修改,隨時展現(xiàn),文碼混排,是Markdown的一個增強版,畢竟Markdown還只能顯示文字,最多再加上一些圖片,而Jupyter是可以直接運行Python代碼的。當然,也有些人試圖在Jupyter里運行PHP或Java代碼,但顯然成不了氣候。因為Python這個語言天生就是腳本語言,可能將來唯一有希望往里移植的就是Javascript,這貨也是一個腳本語言。腳本語言的好處就是不用編譯,一行一個結果。縱觀計算機語言發(fā)展歷史,就是一個從繁到簡的過程,C語言需要編譯+鏈接才能運行,Java只要javac一下,把編譯和鏈接合二為一,PHP更簡單,直接運行就行了,連編譯都省了。但是還不夠直接,因為還要編寫一個.php文件存盤,然后才能運行,到了Python以及其它腳本語言這里,可以直接在殼里運行,但最大的問題是運行可以運行,無法保存,要保存就又要跟傳統(tǒng)方式一樣,找個編輯器來,或者vi,存成文件以后才可以運行。Jupyter最大的優(yōu)點就是:它本身還是一個外殼環(huán)境,可以運行腳本,但同時也幫你自動把這些腳本代碼保存了下來,不但保存腳本代碼,并且你插在腳本代碼當中的所有注釋不是普通注釋,而是各種格式化的Markdown都一并幫你保存下來,并且可以隨時修改。所以它兼具了腳本外殼和文件管理系統(tǒng)的優(yōu)點,從此你開發(fā)Python代碼再也不用先在IDE里寫好代碼,然后再到終端里去運行,而直接在一個web頁面上就全部搞定了。Java有這樣的工具嗎?PHP有這樣的工具嗎?沒有,所以我們必須選擇Python。

          Pandas

          第二神器是Pandas。如果我讓你讀取一個csv文件,然后求每一列數(shù)據(jù)的平均值,最大值,最小值,方差,用Java或PHP怎么做?你首先要fopen一個文件,然后一行一行讀進來,再給它整個數(shù)據(jù)結構,然后弄個循環(huán)計算,最后你可能還要fclose這個文件。總之代碼一坨,麻煩死。而Python語言因為有Pandas這個神器,一行代碼搞定:
             
          df = pd.read_csv('a.csv')
          行了,從此以后,df就是這個DataFrame,它本身就是一個強大的數(shù)據(jù)結構,也可以把它理解成mysql數(shù)據(jù)庫中的一張表吧,各種增刪改查,求總和,求平均都是一行代碼的事情。所以有這樣強大的庫,研究人員有什么理由選擇Java?

          scikit-learn

          第三神器scikit-learn,一般縮寫為sclearn,各種機器學習算法,基本上只要你能想得到的,線性回歸,邏輯回歸,SVM,隨機森林,最近鄰居等等等等,各種算法全部在這里面,簡而言之,只有你想不到,沒有它做不到,不詳述。所以這就是為什么玩機器學習必選Python的原因,你給我找一個Java或者PHP有這樣多種算法的庫來?

          matplotlib

          第四神器是matplotlib。如果我讓你根據(jù)上面csv文件里的信息,畫一個圖,用Java該怎么做?你當然會去找第三方插件庫,然后又是一通折騰,終于把圖做出來,然后編譯,然后運行。如果我要改配色呢?如果我要求畫地圖呢?如果要畫熱力圖呢?那個麻煩就不是一星半點,而對于matplotlib來說,簡直就是小菜一碟。簡單的直方圖就不說了,下面重點介紹如何用matplotlib配合Basemap畫一個中國地圖。

          安裝Basemap

          先安裝相應的組件。我假定你已經(jīng)都安裝好了Python以及Jupyter等等。如果沒有安裝的話,就去嘗試一下brew install python3和brew install jupyter吧,網(wǎng)上有很多教程。
          然后你需要用pip3 install很多我們下面可能需要用到的庫。但是因為我們要用一個叫做Basemap的庫,而這個庫沒有辦法用簡單的pip3 install安裝,所以稍多兩個步驟:
             
          brew install geos
          pip3 install https://github.com/matplotlib/basemap/archive/v1.1.0.tar.gz

          開始畫圖

          啟動Jupyter之后,我們還是本著從最簡單的代碼開始。先畫一個世界地圖:
             
          import matplotlib.pyplot as plt
          from mpl_toolkits.basemap import Basemap

          plt.figure(figsize=(16,8))
          m = Basemap()
          m.drawcoastlines()

          plt.show()
          前面兩行引入相應的庫,真正的代碼就4行,夠簡單吧。第1行甚至可以不寫,它定義了圖的大小。第2行我們創(chuàng)建一個地圖,第3行把海岸線畫上,第4行顯示這個地圖,就是這樣:
          你用Java的4行代碼畫一個地圖出來?
          然后我們開始畫上國家,又是1行代碼:
             
          m.drawcountries(linewidth=1.5)
          就變成了這樣:
          用Java可能嗎?用PHP可能嗎?
          如果我們想顯示中國地圖,只需要在創(chuàng)建Basemap時指定一下經(jīng)緯度就行了:
             
          m = Basemap(llcrnrlon=73, llcrnrlat=18, urcrnrlon=135, urcrnrlat=53)
          然后就得到了中國地圖:
          看上去有點變形,這是因為我們沒有添加任何投影的原因,Basemap提供24種不同的投影方式,你可以自己一個個試一下,比較常用的是蘭勃特投影,我們添加一下:
             
          m = Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
          這次終于看上去比較正常了:
          我們想加上省的邊界怎么辦呢?Basemap缺省的包里沒有中國的省區(qū),只有美國的州,畢竟是美國人做的嘛。不過好在世界很大,有專門的國際組織干這事,在這里你可以下載全世界任何一個國家的行政區(qū)劃Shape文件,然后我們給它加上:
             
          m.readshapefile('CHN_adm_shp/CHN_adm1''states', drawbounds=True)
          然后就得到了下圖:
          再往后,你還可以往圖上改顏色啦,寫數(shù)字啦,這些就留待你研究吧。總之,我想說的是,用Python畫地圖真的超容易。
          最后再為Java和PHP美言幾句:大家分工不同,Java和PHP雖然做這樣的數(shù)字研究不是很方便,但還是非常適合web開發(fā)的,而Python在這方面并不適合。所以通常的做法是:首先用Python驗證算法,經(jīng)過一系列復雜的計算,把算法確定下來之后,當要應用到web上的時候,再用Java或者PHP把最終形成的結論重寫一遍,這樣就能充分利用各種語言的優(yōu)勢。
          原文鏈接:https://segmentfault.com/a/1190000010871928
             
          推薦閱讀
          你們猜猜,哪個省的女生最愛豐胸??
          神器在手,給變量命名從此高大上!

              
          關注「Python 知識大全」,做全棧開發(fā)工程師
          歲月有你 惜惜相處

          回復 【資料】獲取高質(zhì)量學習資料


          得本文對你有幫助?請分享給更多人
          瀏覽 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>
                  国产页| 每日更新欧美韩国 | 日韩美黄色黄色网 | 婬乱A片欧美大片无码芳芳 | 日本黄色免费网战 |