Prepare data for ArcGis

cahyati sangaji (cahya)
7 min readJul 5, 2020

--

Cahyati Supriyati Sangaji (My Note)

Melanjutkan Project tentang “A Visual Approach to determine Strategic Locations for Masks and Medical Devices Distribution for COVID-19 treatment based on confirmed cases on May 28, 2020 at red zone areas to measure “new normal” readiness”, saya menggunakan database PostgreSQL untuk dapat terhubung dengan ArcGis. Hasil proses ini bertujuan untuk mempermudah ArcGis mengakses update data.

Setelah melakukan beberapa kali percobaan, saya mendapatkan rules tabel dasar dari tabel hasil project sebelumnya. Karena tujuan dari usecase ingin menunjukkan hasil visualisasi update kasus Covid19 dan sesuai aturan tabel pada ArcGis. Saya harus menambahkan kolom untuk tanggal serta kolom index pada tabel baru yang ingin ditambahkan pada database yang sudah di inputkan sebelumnya pada database PostgreSQL.

Berikut proses pengolahan data yang selanjutnya disimpan di PostgreSQL. Langkah pertama persiapkan data yang ingin diolah, read data CSV dan simpan di dataframe.

# Read in the data Covid-19 cases per district (28 May,2020)
df_cases_postgre = pd.read_csv("https://raw.githubusercontent.com/cahyati/GIS_Approach_on_Covid19/master/Standar%20Kelurahan%20Data%20Corona%20(28%20MEI%202020%20Pukul%2009.00).csv")
# View the top rows of the dataset
df_cases_postgre

Saya mengguankan 2 table/dataframe yang akan digabungkan pada database PostgreSQL.

# Read in the data Covid-19 cases per district (29 May,2020)
df_cases_postgre2 = pd.read_csv("https://raw.githubusercontent.com/cahyati/GIS_Approach_on_Covid19/master/Standar%20Kelurahan%20Data%20Corona%20(29%20MEI%202020%20Pukul%2009.00).csv")
# View the top rows of the dataset
df_cases_postgre2

Buat juga dataframe untuk pengolahan data dari tabel yang sudah dapat di simpan namun disini karena saya tidak ingin merubah data tabel sebelumnya.

df_hospital_postgre = df_hospital
df_hospital_postgre
df_venues_postgre = nearby_venues
df_venues_postgre

Seperti tabel Hospital dan Venue yang telah dideklarasikan sebelumnya, sesuai juga dengan aturan dari ArcGis, saya menambahkan field FID.

FID_cases1 = []
n = 0
for index, row in df_cases_postgre.iterrows():
#FID = row['FID']
n = n + 1
cases1 = n
FID_cases1.append(cases1)
print(FID_cases1)
nIn = n

Output:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267]

Proses input field “FID” beserta nilai pada tiap row dataframe kasus tabel pertama pada tanggal 28 Mei 2020 :

df_cases_postgre.insert(0,"FID",FID_cases1)
df_cases_postgre

Berikut proses pembuatan data row untuk FID pada tabel kasus pada tanggal 29 Mei 2020.

FID_cases2 = []
for index, row in df_cases_postgre2.iterrows():
n = n + 1
cases2 = n
FID_cases2.append(cases2)
print(FID_cases2)

Output:

[268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534]

Proses input field “FID” beserta nilai pada tiap row dataframe kasus tabel kedua pada tanggal 29 Mei 2020 :

df_cases_postgre2.insert(0,"FID",FID_cases2)
df_cases_postgre2

Selanjutnya saya menambahkan field “index” pada tabel kasus kedua, tanggal 29 Mei 2020.

index_cases2 = []
for index, row in df_cases_postgre2.iterrows():
index_cases2.append(nIn)
nIn = nIn + 1
print(index_cases2)
nIn2 = nIn

Output:

[267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533]

Proses input field “index” beserta nilai pada tiap row dataframe kasus tabel kedua pada tanggal 29 Mei 2020 :

df_cases_postgre2.insert(0,"index",index_cases2)
df_cases_postgre2

Setelah semua data siap kita melakukan koneksi dengan database PostgreSQL. Sebagai catatan sebelumnya kita sudah melakukan install PostgreSQL dan telah melakukan proses create database. Selain itu juga sudah melakukan proses install Library Python “psychopg2

Sintax program dibawah adalah proses create engine dengan parameter (“databasedialect://user:password@host/database”).

# Connect to database (Note: The package psychopg2 is required for Postgres to work with SQLAlchemy)
engine = sqlalchemy.create_engine("postgres://postgres:p@ssw0rdswg@localhost/Covid19")
con = engine.connect()
# Verify that there are no existing tables
print(engine.table_names())

Periksa dan pastikan belum ada tabel yang dibuat atau tidak ada nama tabel yang sama dengan nama tabel yang ingin dibuat.

[]

Deklarasikan tebel yang akan di buat pada database PostgreSQL, kemudian simpan tabel dan periksa isi tabel pada database PostgreSQL.

Output:

table_cases = 'Covid19TB'
table_hospital = 'HospitalTB'
table_vanue = 'VanueTB'
df_cases_postgre.to_sql(table_cases, con)
df_hospital_postgre.to_sql(table_hospital, con)
df_venues_postgre.to_sql(table_vanue, con)
print(engine.table_names())

Output:

['VanueTB', 'Covid19TB', 'HospitalTB']

Berikut ini adalah sintax program untuk input dataframe table kedua pada tabel_cases yang sudah dibuat sebelumnya di database PostgreSQL.

df_cases_postgre2.to_sql(table_cases, con, if_exists = 'append', index=nIn)

Inputkan juga data tabel penduduk pada database PostgreSQL dan tampilkan data tabel untuk memastikan tabel berhasil simpan.

df_pop_postgre = df_population
df_pop_postgre = df_pop_postgre.rename(columns = {'Total_population_2020(people/km2)':'Total_population2020_people/km2'})
table_pop = "PopulationTB"
df_pop_postgre.to_sql(table_pop, con)
df_Mpop_postgre = df_most_population
df_Mpop_postgre
df_Mpop_postgre = df_Mpop_postgre.rename(columns = {'Total_population_2020_(people/km2)':'Total_population2020_people/km2'})
table_Mpop = "MostPopulationTB"
df_Mpop_postgre.to_sql(table_Mpop, con)
print(engine.table_names())

Output:

['VanueTB', 'PopulationTB', 'MostPopulationTB', 'Covid19TB', 'HospitalTB']
Ilustrasi-1 : Database PostgreSQL

Dari sini dapat dilihat pada Illustrasi-1, data berhasil disimpan pada database PostgreSQL.

Dari pemahaman ini Anda juga dapat menggunakan IBM Watson Studio. IBM Watson Studio dapat menggunakan notebook dan semua data juga dapat di simpan pada data asset yang membuat kita lebih mudah dalam mengakses data. Begitu juga connection dari IBM Watson Studio bisa dipermudah, yaitu untuk kondisi koneksi ke database PostgreSQL.

Saya sangat senang jika ada yang memiliki pengalaman yang sama dan tentu saja bersedia membagi pengalamannya kepada saya.

Terimakasih untuk yang telah bersedia membaca catatan saya.

--

--

No responses yet