Pengembangan peta distribusi coronavirus interaktif tipe 2019-nCoV dengan Python

Coronavirus tipe 2019-nCoV, setelah wabah di kota Wuhan di Cina, menyebar dengan cepat ke seluruh dunia. Pada saat penulisan artikel asli (30 Januari 2020), lebih dari 9.000 orang terinfeksi dan 213 orang mati dilaporkan, hingga hari ini (10 Februari 2020), 40.570 orang telah terinfeksi, 910 orang telah meninggal. Kasus infeksi coronavirus telah terdeteksi di Prancis, Australia, Rusia, Jepang, Singapura, Malaysia, Jerman, Italia, Sri Lanka, Kamboja, Nepal, dan banyak negara lainnya. Tidak ada yang tahu kapan virus akan dihentikan. Sementara itu, jumlah kasus koronavirus yang dikonfirmasi hanya bertambah.

Penulis artikel yang kami terjemahkan hari ini ingin berbicara tentang bagaimana, menggunakan Python, untuk membuat aplikasi sederhana untuk melacak penyebaran coronavirus. Setelah menyelesaikan pekerjaan pada aplikasi ini, pembaca akan memiliki halaman HTML yang menampilkan peta penyebaran virus dan slider yang memungkinkan Anda untuk memilih tanggal di mana data ditampilkan di peta.


Peta interaktif distribusi teknologi coronavirus tipe 2019-nCoV

seperti Python 3.7, Pandas, Plotly 4.1.0 dan Jupyter Notebook akan digunakan di sini.

Impor perpustakaan


Mari kita mulai dengan mengimpor ke proyek yang didasarkan pada Jupyter Notebook, perpustakaan Plotly dan Pandas.

import plotly.offline as go_offline
import plotly.graph_objects as go
import pandas as pd

Sebelum melanjutkan, coba jalankan kodenya. Jika Anda tidak melihat pesan kesalahan, maka semua perpustakaan yang diperlukan telah diinstal dan berfungsi dengan benar. Jika kode gagal dijalankan, lihat halaman resmi Plotly dan Pandas dan bacalah bahan rujukan dan instalasi untuk pustaka ini. Jika Anda tidak memiliki sistem Jupyter Notebook yang berjalan di perangkat keras Anda, saya sarankan menggunakan Google Colab , platform berbasis cloud yang memungkinkan Anda untuk bekerja dengan Jupyter Notebook.

Pengolahan data


Data yang kami gunakan di sini dapat ditemukan di sini . Ini adalah spreadsheet bersama dari Google docs yang diperbarui setiap hari. Terima kasih banyak untuk semua orang yang tetap up to date! Anda melakukan pekerjaan yang sangat perlu.

Kami akan membaca data menggunakan metode Pandas read_csv. Tapi sebelum memuat data dari tabel, menggunakan tautannya, kita perlu bekerja dengan tautan ini. Sekarang tampilannya seperti ini: Kita perlu mengganti fragmen tautan yang dipilih, membawa tautan ke formulir ini: Dalam kode berikut, kita menginisialisasi variabel dengan menulis tautan ke data ke dalamnya, membaca data menggunakan metode dan menulis ke sel kosong yang berisi nilai .

https://docs.google.com/spreadsheets/d/18X1VM1671d99V_yd-cnUI1j8oSG2ZgfU_q1HfOizErA/edit#gid=0



https://docs.google.com/spreadsheets/d/18X1VM1671d99V_yd-cnUI1j8oSG2ZgfU_q1HfOizErA/export?format=csv&id

urlread_csvNaN0

url='https://docs.google.com/spreadsheets/d/18X1VM1671d99V_yd-cnUI1j8oSG2ZgfU_q1HfOizErA/export?format=csv&id'
data=pd.read_csv(url)
data=data.fillna(0)

Memahami bagaimana struktur data yang kami gunakan terstruktur sangat penting pada tahap pekerjaan ini, karena hal ini menentukan pendekatan apa terhadap pemrosesan data yang kami terapkan. Lihat data menggunakan perintah data.head(). Ini akan menghasilkan output dari 5 baris pertama dari tabel.


5 baris pertama data virus corona

Di sudut kiri bawah Anda dapat melihat informasi bahwa ada 47 kolom dalam tabel data. Berikut adalah nama-nama dari lima kolom pertama:country,location_id,location,latitudedanlongitude. Kolom lainnya adalah pasangan yang namanya dikonstruksi sebagai berikut:confirmedcase_dd-mm-yyyydandeaths_dd-mm-yyyy. Jumlah kolom dalam tabel pada saat menulis materi ini adalah 47. Ini berarti bahwa saya memiliki data selama 21 hari yang saya inginkan ((47-5) / 2 = 21). Jika tanggal mulai untuk pengumpulan data adalah 10.01.2020, maka tanggal akhir adalah 30.01.2020.

Nama lima kolom pertama tabel tidak berubah, tetapi seiring waktu kolom dengan nama baru akan ditambahkan ke tabel. Apa yang akan ditampilkan oleh peta interaktif kami adalah visualisasi distribusi coronavirus dengan kemampuan untuk menunjukkan hari sesuai dengan peta tersebut dibentuk. Oleh karena itu, kita perlu memisahkan seluruh kumpulan data dengan memilih informasi darinya untuk setiap hari dan memperhitungkan bahwa 5 kolom pertama dari tabel tidak berubah, dan setiap hari dijelaskan oleh dua kolom. Kemudian, jika Anda melihat lebih dekat pada data, misalnya, data untuk 10.01.2020, ternyata banyak tanggal yang sesuai dengan tanggal ini. Bahkan, pada tanggal ini deteksi virus corona dikonfirmasi hanya di satu tempat, yang ditandai dengan nomor yang sesuai. Semua baris lain pada tanggal ini hanya berisi nol. Itu berarti,bahwa kita perlu mengecualikan garis-garis ini dari proses pembuatan peta.

Proses mempersiapkan data untuk visualisasi dilakukan dalam satu siklus.

#  
fig=go.Figure()
col_name=data.columns
n_col=len(data.columns)
date_list=[]
init=4
n_range=int((n_col-5)/2)

#,          
for i in range(n_range):
    col_case=init+1
    col_dead=col_case+1
    init=col_case+1
    df_split=data[['latitude','longitude','country','location',col_name[col_case],col_name[col_dead]]]
    df=df_split[(df_split[col_name[col_case]]!=0)]
    lat=df['latitude']
    lon=df['longitude']
    case=df[df.columns[-2]].astype(int)
    deaths=df[df.columns[-1]].astype(int)
    df['text']=df['country']+'<br>'+df['location']+'<br>'+'confirmed cases: '+ case.astype(str)+'<br>'+'deaths: '+deaths.astype(str)
    date_label=deaths.name[7:17]
    date_list.append(date_label)
    
    #  Scattergeo
    fig.add_trace(go.Scattergeo(
    name='',
    lon=lon,
    lat=lat,
    visible=False,
    hovertemplate=df['text'],
    text=df['text'],
    mode='markers',
    marker=dict(size=15,opacity=0.6,color='Red', symbol='circle'),
    ))

Selama operasi, output setiap set data ditambahkan ke grafik Scattergeo menggunakan fig.add_trace. Pada saat penulisan, data yang menjadi dasar gambar akan diwakili oleh 21 objek. Anda dapat memverifikasi ini menggunakan perintah fig.data.

Pembuatan slider


Di sini kita akan membuat slider dengan bantuan pemilihan data yang divisualisasikan pada peta. Ini kode yang relevan:

# 
steps = []
for i in range(len(fig.data)):
    step = dict(
        method="restyle",
        args=["visible", [False] * len(fig.data)],
        label=date_list[i],
    )
    step["args"][1][i] = True  #  i-     "visible"
    steps.append(step)
    
sliders = [dict(
    active=0,
    currentvalue={"prefix": "Date: "},
    pad={"t": 1},
    steps=steps
)]

Kode slider terdiri dari dua fragmen utama. Yang pertama adalah loop di mana daftar yang stepsdigunakan saat memindahkan slider slider diisi . Saat Anda memindahkan slider, set data yang sesuai divisualisasikan dan apa yang ditampilkan sebelumnya disembunyikan. Bagian kedua dari kode adalah penyertaan daftar yang dibangun sebelumnya stepsdalam objek slider. Ketika slider bergerak, ia memilih elemen yang sesuai steps.

Memetakan output dan menyimpannya sebagai file HTML


Sekarang kita sampai pada bagian akhir dari materi. Di sini kita berbicara tentang cara menampilkan peta, dan cara menyimpannya dalam format HTML. Berikut adalah kode yang mengimplementasikan operasi ini:

#    
fig.data[0].visible=True

#       HTML
fig.update_layout(sliders=sliders,title='Coronavirus Spreading Map'+'<br>geodose.com',height=600)
fig.show()
go_offline.plot(fig,filename='F:/html/map_ncov.html',validate=True, auto_open=False)

Ketika peta ditampilkan, representasi visual dari set data pertama terlihat. Kemudian kami membuat konten dari pembaruan peta sesuai dengan posisi slider. Di sini kita mengatur judul peta dan menyesuaikan ketinggiannya. Pada langkah terakhir, kami menampilkan peta menggunakan metode fig.show, dan kemudian menyimpannya dalam HTML menggunakan metode go_offline.plot.

Kode proyek lengkap


Berikut adalah kode proyek lengkap untuk membuat peta distribusi coronavirus tipe 2019-nCoV. Harap dicatat bahwa baris terakhir yang bertanggung jawab untuk menyimpan versi HTML peta perlu diedit, menggantikan jalur yang ditentukan di sana dengan yang relevan dengan Anda.

import plotly.offline as go_offline
import plotly.graph_objects as go
import pandas as pd

# 
url='https://docs.google.com/spreadsheets/d/18X1VM1671d99V_yd-cnUI1j8oSG2ZgfU_q1HfOizErA/export?format=csv&id'
data=pd.read_csv(url)
data=data.fillna(0)

#  
fig=go.Figure()
col_name=data.columns
n_col=len(data.columns)
date_list=[]
init=4
n_range=int((n_col-5)/2)

#,          
for i in range(n_range):
    col_case=init+1
    col_dead=col_case+1
    init=col_case+1
    df_split=data[['latitude','longitude','country','location',col_name[col_case],col_name[col_dead]]]
    df=df_split[(df_split[col_name[col_case]]!=0)]
    lat=df['latitude']
    lon=df['longitude']
    case=df[df.columns[-2]].astype(int)
    deaths=df[df.columns[-1]].astype(int)
    df['text']=df['country']+'<br>'+df['location']+'<br>'+'confirmed cases: '+ case.astype(str)+'<br>'+'deaths: '+deaths.astype(str)
    date_label=deaths.name[7:17]
    date_list.append(date_label)
    
    #  Scattergeo
    fig.add_trace(go.Scattergeo(
    name='',
    lon=lon,
    lat=lat,
    visible=False,
    hovertemplate=df['text'],
    text=df['text'],
    mode='markers',
    marker=dict(size=15,opacity=0.6,color='Red', symbol='circle'),
    ))


# 
steps = []
for i in range(len(fig.data)):
    step = dict(
        method="restyle",
        args=["visible", [False] * len(fig.data)],
        label=date_list[i],
    )
    step["args"][1][i] = True  #  i-     "visible"
    steps.append(step)
    
sliders = [dict(
    active=0,
    currentvalue={"prefix": "Date: "},
    pad={"t": 1},
    steps=steps
)]

#    
fig.data[0].visible=True

#       HTML
fig.update_layout(sliders=sliders,title='Coronavirus Spreading Map'+'<br>geodose.com',height=600)
fig.show()
go_offline.plot(fig,filename='F:/html/map_ncov_slider.html',validate=True, auto_open=False)

Ringkasan


Kami telah menyelesaikan ulasan panduan untuk membuat peta interaktif untuk memvisualisasikan distribusi tipe coronavirus 2019-nCoV. Setelah mempelajari materi ini, Anda belajar cara membaca data dari spreadsheet publik Google, cara memproses data menggunakan Pandas, dan cara memvisualisasikan data ini pada peta interaktif menggunakan slider dan Plotly. Hasil proyek sebagai halaman HTML dapat diunduh dari sini.. Informasi yang ditampilkan di peta tergantung pada tabel data. Setiap kali kode proyek dieksekusi, peta diperbarui, dan data segar dari tabel tersedia di sana. Ini adalah peta yang sangat sederhana. Ada banyak cara untuk memperbaikinya. Misalnya, dapat dilengkapi dengan grafik tambahan, beberapa data ringkasan, dan sebagainya. Jika Anda tertarik, Anda dapat melakukan semua ini dan lebih banyak lagi sendiri.

Pembaca yang budiman! Untuk tugas apa Anda menggunakan teknologi Jupyter Notebook?

Source: https://habr.com/ru/post/undefined/


All Articles