Friday, September 17, 2021

9-Python: Data Correction Base On Condition

 Assalam wbt. Jumpa lagi.

Post yang lepas kita telah mempelajari bagaimana kita boleh import data *.dat atau *.csv lalu melihat isi kandungan data serta membuat filter terhadap mana-mana data yang ada di dalamnya serta menyimpan ke dalam fail output berasingan. Post kali ini kita akan bergerak ke hadapan lagi untuk membuat correction terhadap mana-mana elemen dalam data berdasarkan condition yang ditetapkan. Ada sesetengah data mungkin didapati rosak, hilang atau tidak memenuhi kehendak pengguna bagi melaksanakan sebarang tugas terhadapnya. Data-data tersebut seharusnya diproses terlebih dahulu bagi mengurangkan error semasa running process di dalam python.

Post kali ini saya menggunakan data hampir sama seperti data1.dat tetapi sedikit perubahan dilakukan terhadap dataset untuk tujuan post kali ini. Copy data ini dan save sebagai data2.dat dan simpan ke dalam folder tugas korang. Data ini mengandungi some elemen yang tidak diperlukan di dalam proses pengiraan seperti -9999, Nan dan 0.01. Elemen ini pada hakikatnya mempunyai maksud tertentu di dalam bidang meteorologi namun kali ini kita andaikan ianya tidak diperlukan dan di assigned  dengan sesuatu nilai iaitu 0.0. Data yang telah dibuat pembetulan akan disimpan ke dalam fail berasingan iaitu output-data2.dat.

data2.dat
station lat lon rain1 rain2 rain3
48604 6.483 100.267 0.2 -9999 1.6
48600 6.333 99.733 1.6 NaN 16.6
48603 6.2 100.4 0.4 -9999 1.2
48602 5.457 100.388 4.6 NaN 20.2
41529 5.35 100.4 5.6 -9999 28.8
48601 5.297 100.272 2.4 0.01 7.6
48620 4.221 100.701 0.2 0.01 -9999
48625 4.567 101.1 3.4 -9999 21.4
48632 4.467 101.367 19.6 -9999 0.6
48642 3.967 102.35 0.6 -9999 -9999
48648 3.102 101.645 51.4 7.2 2.8
48647 3.131 101.553 10.4 1 27.8
48665 2.267 102.25 84 0.2 -9999
48615 6.164 102.301 1.8 1.6 6.4
48616 5.533 102.2 2 NaN 10.2
48618 5.383 103.1 2.6 -9999 7.2
48619 5.333 103.133 0.3 7.6 11.1

################## copy skrip di sini ######################
import numpy as np

data2=np.loadtxt('data2.dat',skiprows=1)
data2[data2<0.0]=0.0
data2[data2==0.01]=0.0
data2[np.isnan(data2)]=0.0

station=data2[:,0]
lat1=data2[:,1]
lon1=data2[:,2]
rain1=data2[:,3]
rain2=data2[:,4]
rain3=data2[:,5]

np.savetxt('output-data2.dat',data2,fmt='%9.3f')
################ end copy here ##############################

Catatan:
a) data2[data2<0.0]=0.0 merujuk kepada syarat yang dikenakan kepada kesemua data2 yang bernilai <0.0 atau negatif harus ditukar kepada nilai baharu iaitu 0.0

b) data2[data2==0.01] merujuk kepada syarat yang dikenakan kepada kesemua data2 yang bernilai tepat 0.01 arus ditukar kepada nilai baharu iaitu 0.0

c) data2[np.isnan(data2)]=0.0 merujuk kepada syarat yang dikenakan kepada kesemua data2 yang bernilai NaN (Not A Number) kepada nilai baharu iaitu 0.0.

d) Korang boleh meletakkan sebarang nilai seperti yang diinginkan menggunakan kaedah yang sama namun harus berhati hati agar tidak merubah nilai yang penting.

e) Declaration bagi setiap column data adalah terpakai seperti kes-kes yang telah dibincangkan sebelum ini. Seterusnya korang boleh meneruskan operasi program seperti biasa.

f) Akhir sekali kesemua data yang telah diproses disimpan ke dalam fail berasingan baharu iaitu output-data2.dat. Sila rujuk fail output tersebut bagi melihat perubahan terhadap data.

output-data2.dat
48604.000     6.483   100.267     0.200     0.000     1.600
48600.000     6.333    99.733     1.600     0.000    16.600
48603.000     6.200   100.400     0.400     0.000     1.200
48602.000     5.457   100.388     4.600     0.000    20.200
41529.000     5.350   100.400     5.600     0.000    28.800
48601.000     5.297   100.272     2.400     0.000     7.600
48620.000     4.221   100.701     0.200     0.000     0.000
48625.000     4.567   101.100     3.400     0.000    21.400
48632.000     4.467   101.367    19.600     0.000     0.600
48642.000     3.967   102.350     0.600     0.000     0.000
48648.000     3.102   101.645    51.400     7.200     2.800
48647.000     3.131   101.553    10.400     1.000    27.800
48665.000     2.267   102.250    84.000     0.200     0.000
48615.000     6.164   102.301     1.800     1.600     6.400
48616.000     5.533   102.200     2.000     0.000    10.200
48618.000     5.383   103.100     2.600     0.000     7.200
48619.000     5.333   103.133     0.300     7.600    11.100

Selamat mencuba!

No comments:

Post a Comment

23-Python : Plotting Temperature Histogram

  Assalamualaikum wbt dan jumpa lagi. Post kali ini kita akan cuba untuk membuat analisa taburan suhu purata setiap data yang telah dibelakk...