免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

用Python畫一個(gè)中國(guó)地圖

:2018年05月20日 腳本之家
分享到:

為什么是Python

先來聊聊為什么做數(shù)據(jù)分析一定要用PythonR語言。編程語言這么多種,JavaPHP都很成熟,但是為什么在最近熱火的數(shù)據(jù)分析領(lǐng)域,很多人選擇用Python語言?

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

Jupyter

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

Pandas

第二神器是Pandas。如果我讓你讀取一個(gè)csv文件,然后求每一列數(shù)據(jù)的平均值,最大值,最小值,方差,用JavaPHP怎么做?你首先要fopen一個(gè)文件,然后一行一行讀進(jìn)來,再給它整個(gè)數(shù)據(jù)結(jié)構(gòu),然后弄個(gè)循環(huán)計(jì)算,最后你可能還要fclose這個(gè)文件。總之代碼一坨,麻煩死。而Python語言因?yàn)橛?code style="max-width: 100%;box-sizing: border-box;word-wrap: break-word !important;">Pandas這個(gè)神器,一行代碼搞定:

df = pd.read_csv('a.csv')

行了,從此以后,df就是這個(gè)DataFrame,它本身就是一個(gè)強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),也可以把它理解成mysql數(shù)據(jù)庫中的一張表吧,各種增刪改查,求總和,求平均都是一行代碼的事情。所以有這樣強(qiáng)大的庫,研究人員有什么理由選擇Java

scikit-learn

第三神器scikit-learn,一般縮寫為sklearn,各種機(jī)器學(xué)習(xí)算法,基本上只要你能想得到的,線性回歸,邏輯回歸,SVM,隨機(jī)森林,最近鄰居等等等等,各種算法全部在這里面(http://scikit-learn.org/stable/user_guide.html,簡(jiǎn)而言之,只有你想不到,沒有它做不到,不詳述。所以這就是為什么玩機(jī)器學(xué)習(xí)必選Python的原因,你給我找一個(gè)Java或者PHP有這樣多種算法的庫來?

matplotlib

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

安裝Basemap

先安裝相應(yīng)的組件。我假定你已經(jīng)都安裝好了Python以及Jupyter等等。如果沒有安裝的話,就去嘗試一下brew install python3brew install jupyter吧,網(wǎng)上有很多教程。

然后你需要用pip3 install很多我們下面可能需要用到的庫。但是因?yàn)槲覀円靡粋€(gè)叫做Basemap的庫,而這個(gè)庫沒有辦法用簡(jiǎn)單的pip3 install安裝,所以稍多兩個(gè)步驟:

brew install geos 
pip3 install https://github.com/matplotlib/basemap/archive/v1.1.0.tar.gz

開始畫圖

啟動(dòng)Jupyter之后,我們還是本著從最簡(jiǎn)單的代碼開始。先畫一個(gè)世界地圖:

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
plt.figure(figsize=(16,8))
m = Basemap()
m.drawcoastlines()
plt.show()

前面兩行引入相應(yīng)的庫,真正的代碼就4行,夠簡(jiǎn)單吧。第1行甚至可以不寫,它定義了圖的大小。第2行我們創(chuàng)建一個(gè)地圖,第3行把海岸線畫上,第4行顯示這個(gè)地圖,就是這樣:

1.jpg

你用Java4行代碼畫一個(gè)地圖出來?

然后我們開始畫上國(guó)家,又是1行代碼:

m.drawcountries(linewidth=1.5)

就變成了這樣:

2.jpg

Java可能嗎?用PHP可能嗎?

如果我們想顯示中國(guó)地圖,只需要在創(chuàng)建Basemap時(shí)指定一下經(jīng)緯度就行了:

m = Basemap(llcrnrlon=73, llcrnrlat=18, urcrnrlon=135, urcrnrlat=53)

然后就得到了中國(guó)地圖:

3.jpg

看上去有點(diǎn)變形,這是因?yàn)槲覀儧]有添加任何投影的原因,Basemap提供24種不同的投影方式,你可以自己一個(gè)個(gè)試一下,比較常用的是蘭勃特投影,我們添加一下:

m = Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)

這次終于看上去比較正常了:

4.jpg

我們想加上省的邊界怎么辦呢?Basemap缺省的包里沒有中國(guó)的省區(qū),只有美國(guó)的州,畢竟是美國(guó)人做的嘛。不過好在世界很大,有專門的國(guó)際組織干這事,在這里(https://gadm.org/download_country_v3.html)你可以下載全世界任何一個(gè)國(guó)家的行政區(qū)劃Shape文件,然后我們給它加上:

m.readshapefile('CHN_adm_shp/CHN_adm1', 'states', drawbounds=True)

然后就得到了下圖:

5.jpg

再往后,你還可以往圖上改顏色啦,寫數(shù)字啦,這些就留待你研究吧。總之,我想說的是,用Python畫地圖真的超容易。

最后再為JavaPHP美言幾句:大家分工不同,JavaPHP雖然做這樣的數(shù)字研究不是很方便,但還是非常適合web開發(fā)的,而Python在這方面并不適合。所以通常的做法是:首先用Python驗(yàn)證算法,經(jīng)過一系列復(fù)雜的計(jì)算,把算法確定下來之后,當(dāng)要應(yīng)用到web上的時(shí)候,再用Java或者PHP把最終形成的結(jié)論重寫一遍,這樣就能充分利用各種語言的優(yōu)勢(shì)。

【Python那些事】補(bǔ)充:basemap這個(gè)第三方庫可能不太好安裝,Windows下可以在  https://sourceforge.net/projects/matplotlib/files/matplotlib-toolkits/basemap-1.0.7/  下載EXE文件安裝。

[我要糾錯(cuò)]
[編輯:宋聰喬 &發(fā)表于江蘇]
關(guān)鍵詞: 為什么 Python 先來 聊聊 為什么

來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺(tái),并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)聯(lián)系小編,我們會(huì)及時(shí)審核處理。
聲明:江蘇教育黃頁對(duì)文中觀點(diǎn)保持中立,對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對(duì)文章觀點(diǎn)負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。

點(diǎn)個(gè)贊
0
踩一腳
0

您在閱讀:用Python畫一個(gè)中國(guó)地圖

Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺(tái)保留所有權(quán)利

蘇公網(wǎng)安備32010402000125 蘇ICP備14051488號(hào)-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司

南京思必達(dá)教育科技有限公司版權(quán)所有   百度統(tǒng)計(jì)

主站蜘蛛池模板: 日韩欧美视频 | 天天射寡妇射 | 羞羞视频免费观看网站 | 国产一级一片 | 国产午夜精品片一区二区三区 | 1024人成网站色 | 午夜成年视频 | 黄色污污在线观看 | 国产精品日本 | 成人性动漫在线观看视频 | 三级三级三级全黄 | 日鲁夜鲁鲁狠狠综合视频 | 北条麻妃国产九九九精品视频 | 成人一级毛片 | 日韩专区中文字幕 | 成人a级特黄毛片 | 人人草人人澡 | 91精品国产自产91精品 | 午夜a毛片| 被黄漫网站视频在线观看 | 久9视频这里只有精品 | 中文字幕第7页 | 日b毛片| 欧美日韩精品国产一区在线 | 你懂的在线视频网站 | 日韩在线视频播放 | 免费在线a | 美日韩一区二区 | 日本一本在线观看 | 丝袜美臀综合图 | 午夜在线观看网站 | 男女啪啪猛烈到合不拢腿小说网 | 久热精品男人的天堂在线视频 | 成人黄色免费观看 | 国产精品 视频一区 二区三区 | 五月开心六月伊人色婷婷 | 老司机午夜在线视频 | 奇米一区| 黄色片黄色片黄色片黄色片黄色片 | 亚洲欧美日韩在线线精品 | 亚洲综合一二三区 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產(chǎn)品享最低成本,有需要聯(lián)系,
  • 卡爾蔡司鏡片優(yōu)惠店,鏡片價(jià)格低
  • 蘋果原裝手機(jī)殼