<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
為了製作全球地震散點圖,我在網上下載了一個資料集,其中記錄了一個月內全球發生的所有地震,但這些資料是以JSON格式儲存的,因此需要用json模組來進行處理。
首先我們先開啟下載好的資料集瀏覽一下:
你會發現其中的資料密密麻麻,根本不是人讀的,因此,接下來我們將對資料進行處理,讓它變得簡單易讀。
import json#匯入json模組,以便於載入檔案中的資料 filename='eq_data_1_day_m1.json' with open(filename) as f: all_eq_data=json.load(f)#json.load(),將資料轉化為Python能夠處理的格式 readable_file='eq_data_1_day_m1.json'#建立一個檔案,以便將這些資料以易於閱讀的方式寫入其中 with open(readable_file,'w') as f: json.dump(all_eq_data,f,indent=4)#json.dump()將資料讀入其中 #引數indent讓dump()使用與資料結構匹配的縮排量來設定資料的格式
經過處理之後,我們再開啟這個檔案會發現裡面的資料變得清晰了許多。
從中我們能夠快速獲取資料的很多資訊,比如地震的次數,型別等等,不僅如此,我們還能夠知道有關這些資料的一些資訊,比如,它的生成時間,他在網頁上怎麼獲取等等。
如果indent是非負整數或字串,則JSON陣列元素和物件成員將使用該縮排級別進行列印。如果indent為0,負數或“”只會插入換行符。
None(預設)則選擇最緊湊的表示形式。,使用正整數縮排會使每個級別縮排多個空格。,如果縮排是字串(例如“
t”),則該字串用於縮排每個級別。
當我們將縮排量修改為0時,檔案的排版也會發生變化:
json.dump(all_eq_data,f,indent=0)
import json filename='eq_data_1_day_m1.json' with open(filename) as f: all_eq_data=json.load(f)#對檔案進行處理 all_eq_dicts=all_eq_data['features'] print(len(all_eq_dicts))#提取出這個檔案記錄的所有地震
輸出結果如下:
158
是的,從檔案的開頭,我們就可以確定地震的次數為158次,因此輸出結果正確:
方法即是新建立一個列表用來存放震源的有關資料,再提取字典features的properties部分的mag.
程式碼如下:
import json filename='eq_data_1_day_m1.json' with open(filename) as f: all_eq_data=json.load(f) all_eq_dicts=all_eq_data['features'] mags=[] for eq_dict in all_eq_dicts: mag=eq_dict['properties']['mag'] mags.append(mag) print(mags[:10])#列印前十次的震級資料
[0.96, 1.2, 4.3, 3.6, 2.1, 4, 1.06, 2.3, 4.9, 1.8]
首先,我們需要在檔案中找到關於經度和維度的部分,如下所示,我們在檔案中查詢到,它是存在於geometry字典下,coordinates鍵中的。
---snip--- all_eq_dicts=all_eq_data['features'] mags,titles,lons,lats=[],[],[],[] for eq_dict in all_eq_dicts: mag=eq_dict['properties']['mag'] title=eq_dict['properties']['title'] lon=eq_dict['geometry']['coordinates'][0]#提取coordinates鍵中索引值為0的資料 lat=eq_dict['geometry']['coordinates'][1] mags.append(mag) titles.append(title) lons.append(lon) lats.append(lat) print(mags[:10]) print(titles[:2]) print(lons[:5])#輸出前五個經度 print(lats[:5])#輸出前五個維度
輸出結果如下:
[0.96, 1.2, 4.3, 3.6, 2.1, 4, 1.06, 2.3, 4.9, 1.8]
['M 1.0 - 8km NE of Aguanga, CA', 'M 1.2 - 11km NNE of North Nenana, Alaska']
[-116.7941667, -148.9865, -74.2343, -161.6801, -118.5316667]
[33.4863333, 64.6673, -12.1025, 54.2232, 35.3098333]
通過我們前面提取的有關震源的資料,下面我們可對提取的資料進行視覺化作圖:
import plotly.express as px#Plotly Express是Plotly的高階介面,相當於Matplotlib是一個工具 fig=px.scatter( x=lons, y=lats, labels={'x':'經度','y':'維度'}, range_x=[-200,200], range_y=[-90,90], #width和height代表圖表的高度和寬度均為800畫素 width=800, height=800, title="全球地震散點圖", ) fig.write_html('global_earthquakes.html')#將視覺化圖儲存為html檔案 fig.show()
散點圖設定完成後,下面我們在程式目錄下尋找我們儲存的視覺化圖(global_earthquakes.html),再使用瀏覽器開啟該html檔案
如下所示,即為散點圖:
上面我們繪製地震散點圖是通過手動設定經緯度,通過將x,y和經度,緯度建立聯絡:
x=lons, y=lats, labels={'x':'經度','y':'維度'},
但這在資料處理過程中並不是最簡單的方式,下面我們介紹另一種圖表指定資料的方式,需要結合我們上面所提到的pandas資料分析工具。
import pandas as pd#匯入pandas模組x data=pd.DataFrame(data=zip(lons,lats,titles,mags),colums=['經度','緯度','位置','震級'])#使用DataFrame將需要處理的資料封裝,注意:DataFrame後面的兩個引數是可選的,如果這兩個引數存在的話,這兩個引數的長度要和DataFrame的長度匹配 #zip()函數的作用:將可迭代的物件中的對應元素打包為多個元祖,再返回由這些元祖組成的列表 data.head()
它是Python中pandas庫中的一種資料結構,和excel比較相似,它不僅可以設定列名columns和行名index,而且它的單元格可以存放數值,字串等。
data.head():返回資料的前幾行資料,預設是前五行,如果需要指定則寫data.head(‘指定的行數’)
data.tail():返回data的後幾行資料,預設為後五行,如果需要指定則寫data.tail(‘指定的行數’)
資料封裝好之後,引數的設定方式可修改為:
data, x='經度', y='緯度',
現在我們通過這種引數設定方式進行地震散點圖的繪製:
#建立地震列表,提取資料 import json filename='eq_data_1_day_m1.json' with open(filename) as f: all_eq_data=json.load(f) all_eq_dicts=all_eq_data['features'] mags,titles,lons,lats=[],[],[],[] for eq_dict in all_eq_dicts: mag=eq_dict['properties']['mag'] title=eq_dict['properties']['title'] lon=eq_dict['geometry']['coordinates'][0]#提取coordinates鍵中索引值為0的資料 lat=eq_dict['geometry']['coordinates'][1] mags.append(mag) titles.append(title) lons.append(lon) lats.append(lat) #引數設定設定 import pandas as pd data=pd.DataFrame( data=zip(lons,lats,titles,mags),columns=['經度','緯度','位置','震級'] ) data.head() #繪製散點圖 import plotly.express as px fig = px.scatter( data, x='經度', y='緯度', range_x=[-200, 200], range_y=[-90, 90], width=800, height=800, title="全球地震散點圖", ) fig.write_html('global_earthquake.html') fig.show()
設定完成後,下面我們在程式目錄下尋找我們儲存的視覺化圖(global_earthquakes.html),再使用瀏覽器開啟該html檔案如下圖所示:
通過輸出結果,我們可得出,無論使用那種引數設定方式,其輸出結果都是相同的,但第二種這種以鍵值對的方式,更加清晰。
和我們上篇文章提到的與溫度有關的散點圖相類似,我們希望知道最高溫度和最低溫度等這些特殊且重要的資訊,那麼震源散點圖也是如此,上圖我們所設計的震源散點圖只是將緯度和經度在圖上呈現出來了,但震源並沒有體現。
下面,我們將震級也呈現在散點圖上:
方法:使用size引數設計散點圖中每個尺寸的大小:
size='震級', size_max=10,
對比上面的兩幅圖,我們會發現散點圖中關於地震的資訊還增加了震級,不僅如此,散點的尺寸大小也與震級的大小有關,震級越大,散點的尺寸越大,這樣一來,我們很容易觀察到不同地方的地震強度,但這還不夠直觀,為了能夠更加直白的呈現地震的情況,我們還設計散點的顏色以便更加清晰的顯示。
方法:
color='震級', #預設漸變色的範圍是從藍到紅再到黃,數值越小標記越藍,而數值越大則標記越黃。
把在網上下載好的近30天的資料檔案複製到該程式目錄下,將引數color新增其中,再繪製散點圖。,注意修改檔名。
如下圖所示:
美化後的散點圖,不僅在顏色上漂亮了許多,漸變的顏色也更加清晰的反映了地震的嚴重程度。
獲取Plotly Express中所有的漸變色:
不僅如此,Plotly Express還為我們提供了許多的漸變色,而這些漸變色是在px.colors.named_colorscales()中定義的,下面來獲取這些漸變色:
import plotly.express as px for key in px.colors.named_colorscales(): print(key,end='/')
輸出結果如下:
aggrnyl/agsunset/blackbody/bluered/blues/blugrn/bluyl/brwnyl/bugn/bupu/burg/burgyl/cividis
/darkmint/electric/emrld/gnbu/greens/greys/hot/inferno/jet/magenta/magma/mint/orrd/oranges
/oryel/peach/pinkyl/plasma/plotly3/pubu/pubugn/purd/purp/purples/purpor/rainbow/rdbu/rdpu
/redor/reds/sunset/sunsetdark/teal/tealgrn/turbo/viridis/ylgn/ylgnbu/ylorbr/ylorrd/algae
/amp/deep/dense/gray/haline/ice/matter/solar/speed/tempo/thermal/turbid/armyrose/brbg/earth
/fall/geyser/prgn/piyg/picnic/portland/puor/rdgy/rdylbu/rdylgn/spectral/tealrose/temps/tropic
/balance/curl/delta/oxy/edge/hsv/icefire/phase/twilight/mrybm/mygbm/
此外,我們還可將對應配色列表進行反轉:
方法:
px.colors.diverging.RdYlGn[::-1]
此外,Plotly除了有px.colors.diverging表示連續的配色方案,還有px.colors.sequential和px.colors.qualitative表示離散變數。每個漸變色都有起始色和終止色,有些漸變色還定義了一個或多箇中間色。
新增滑鼠指向時顯示的文字:
方法,使用引數hover_name,引數設定為data的‘位置’
hover_name='位置',
修改後,散點圖的輸出如下所示:
我們發現,對比於前面的圖表,此時又增加了位置資訊,此時,我們就完整的繪製了一副關於地震資訊的散點圖。
到此這篇關於Python資料視覺化製作全球地震散點圖的文章就介紹到這了,更多相關Python地震散點圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45