Python dan Waktu Shalat di Swedia

Sebagai Seorang muslim Shalat merupakan suatu kewajiban.  Shalat merupakan rukun Islam yang ke-2, seperti tertera dalam riwayat berikut yang saya kopi dari sini.  Dari ‘Abdullah bin ’Umar radhiyallahu ’anhuma, Rasulullah shallallahu ’alaihi wa sallam bersabda,

بُنِىَ الإِسْلاَمُ عَلَى خَمْسٍ شَهَادَةِ أَنْ لاَ إِلَهَ إِلاَّ اللَّهُ وَأَنَّ مُحَمَّدًا عَبْدُهُ وَرَسُولُهُ وَإِقَامِ الصَّلاَةِ وَإِيتَاءِ الزَّكَاةِ وَحَجِّ الْبَيْتِ وَصَوْمِ رَمَضَانَ

Islam dibangun atas lima perkara, yaitu : (1) bersaksi bahwa tidak ada sesembahan yang benar untuk diibadahi kecuali Allah dan bersaksi bahwa Muhammad adalah utusan-Nya, (2) mendirikan shalat, (3) menunaikan zakat, (4) naik haji ke Baitullah -bagi yang mampu-, (5) berpuasa di bulan Ramadhan.” (HR. Bukhari no. 8 dan Muslim no. 16).

Pada kesempatan kali ini. Saya akan mencoba membahas sedikit tentang definisi waktu sholat dan contoh penerapannya untuk daerah Lund Swedia. Saya juga akan menyertakan code python untuk menghitung waktu sholat. Berikut merupakan pedoman waktu sholat yang saya ambil dari praytimes.org.

2018-11-25

Metode perhitungan secara rinci dapat dilihat pada tautan link berikut. Di lain kesempatan akan saya tulis. Tidak seperti Indonesia yang berada di khatulistiwa,  lamanya siang dan malam pada negara-negara 4 musim tidak selalu sama, hal ini disebakan oleh gerak semu matahari tahunan yang merupakan konsekuensi dari revolusi Bumi.  Akibatnya, waktu shalat di negara 4 musim berubah-ubah tergantung kepada gerak semua matahari tersebut. Berikut adalah contoh waktu sholat Maghrib selama 1 tahun di Lund, Swedia.  Kordinat kota Lund adalah sebagai berikut Latitude: 55,7074 Longitude: 13,1971 dan perbedaan waktu dengan GMT bergantung kepada tanggal. Pada

maghrib_lund

Gambar 1. Waktu Sholat Maghrib Selama 1 Tahun di Lund, Swedia.

Waktu Sholat Maghrib tercepat di Lund adalah 15:34 di akhir bulan Desember dan 21:56 di akhir bulan Juni, seperti terlihat pada Gambar 1.  Tidak seperti di Lund yang memilki waktu maghrib berubah secara dramatis sebagai fungsi waktu, Jakarta memiliki waktu sholat maghrib yang relatif idak berubah secara drastis. Berikut adalah waktu sholat maghrib di Jakarta.

maghrib_jakarta.png

Gambar 2. Waktu Sholat Maghrib di Jakarta, Indonesia.

Di Jakarta, waktu sholat maghrib tercepat terjadi pada Bulan November yaitu 17:40 dan terlama pada bulan Juli, yaitu 18:20. Perbedaan waktu sholat maghrib terlama dan tercepat hanya 40 menit, sehingga tidak terlalu besar dibandingkan dengan perbedaan yang sama di Lund.

Code perhitungan waktu sholat, class nya saya peroleh dari sini (http://praytimes.org/code/) lalu saya buatkan looping untuk mendapatkan perhitungan selama 1 tahun.

import math
import re</pre>
'''
--------------------- Copyright Block ----------------------
praytimes.py: Prayer Times Calculator (ver 2.3)
Copyright (C) 2007-2011 PrayTimes.org
Python Code: Saleem Shafi, Hamid Zarrabi-Zadeh
Original js Code: Hamid Zarrabi-Zadeh
License: GNU LGPL v3.0
TERMS OF USE:
Permission is granted to use this code, with or
without modification, in any website or application
provided that credit is given to the original work
with a link back to PrayTimes.org.
This program is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY.
PLEASE DO NOT REMOVE THIS COPYRIGHT BLOCK.
--------------------- Help and Manual ----------------------
User's Manual:
http://praytimes.org/manual
Calculation Formulas:
http://praytimes.org/calculation
------------------------ User Interface -------------------------
getTimes (date, coordinates, timeZone [, dst [, timeFormat]])
setMethod (method) // set calculation method
adjust (parameters) // adjust calculation parameters
tune (offsets) // tune times by given offsets
getMethod () // get calculation method
getSetting () // get current calculation parameters
getOffsets () // get current time offsets
------------------------- Sample Usage --------------------------
&gt;&gt;&gt; PT = PrayTimes('ISNA')
&gt;&gt;&gt; times = PT.getTimes((2011, 2, 9), (43, -80), -5)
&gt;&gt;&gt; times['sunrise']
07:26

'''

#----------------------- PrayTimes Class ------------------------

class PrayTimes():
#------------------------ Constants --------------------------

# Time Names
timeNames = {
'imsak' : 'Imsak',
'fajr' : 'Fajr',
'sunrise' : 'Sunrise',
'dhuhr' : 'Dhuhr',
'asr' : 'Asr',
'sunset' : 'Sunset',
'maghrib' : 'Maghrib',
'isha' : 'Isha',
'midnight' : 'Midnight'
}

# Calculation Methods
methods = {
'MWL': {
'name': 'Muslim World League',
'params': { 'fajr': 18, 'isha': 17 } },
'ISNA': {
'name': 'Islamic Society of North America (ISNA)',
'params': { 'fajr': 15, 'isha': 15 } },
'Egypt': {
'name': 'Egyptian General Authority of Survey',
'params': { 'fajr': 19.5, 'isha': 17.5 } },
'Makkah': {
'name': 'Umm Al-Qura University, Makkah',
'params': { 'fajr': 18.5, 'isha': '90 min' } }, # fajr was 19 degrees before 1430 hijri
'Karachi': {
'name': 'University of Islamic Sciences, Karachi',
'params': { 'fajr': 18, 'isha': 18 } },
'Tehran': {
'name': 'Institute of Geophysics, University of Tehran',
'params': { 'fajr': 17.7, 'isha': 14, 'maghrib': 4.5, 'midnight': 'Jafari' } }, # isha is not explicitly specified in this method
'Jafari': {
'name': 'Shia Ithna-Ashari, Leva Institute, Qum',
'params': { 'fajr': 16, 'isha': 14, 'maghrib': 4, 'midnight': 'Jafari' } }
}

# Default Parameters in Calculation Methods
defaultParams = {
'maghrib': '0 min', 'midnight': 'Standard'
}
#---------------------- Default Settings --------------------

calcMethod = 'MWL'

# do not change anything here; use adjust method instead
settings = {
"imsak" : '10 min',
"dhuhr" : '0 min',
"asr" : 'Standard',
"highLats" : 'NightMiddle'
}

timeFormat = '24h'
timeSuffixes = ['am', 'pm']
invalidTime = '-----'

numIterations = 1
offset = {}
#---------------------- Initialization -----------------------

def __init__(self, method = "MWL") :

# set methods defaults
for meth, config in self.methods.items():
for name, value in self.defaultParams.items():
if not name in config['params'] or config['params'][name] is None:
config['params'][name] = value

# initialize settings
self.calcMethod = method if method in self.methods else 'MWL'
params = self.methods[self.calcMethod]['params']
for name, value in params.items():
self.settings[name] = value

# init time offsets
for name in self.timeNames:
self.offset[name] = 0
#-------------------- Interface Functions --------------------

def setMethod(self, method):
if method in self.methods:
self.adjust(self.methods[method].params)
self.calcMethod = method

def adjust(self, params):
self.settings.update(params)

def tune(self, timeOffsets):
self.offsets.update(timeOffsets)

def getMethod(self):
return self.calcMethod

def getSettings(self):
return self.settings

def getOffsets(self):
return self.offset

def getDefaults(self):
return self.methods

# return prayer times for a given date
def getTimes(self, date, coords, timezone, dst = 0, format = None):
self.lat = coords[0]
self.lng = coords[1]
self.elv = coords[2] if len(coords)&gt;2 else 0
if format != None:
self.timeFormat = format
if type(date).__name__ == 'date':
date = (date.year, date.month, date.day)
self.timeZone = timezone + (1 if dst else 0)
self.jDate = self.julian(date[0], date[1], date[2]) - self.lng / (15 * 24.0)
return self.computeTimes()

# convert float time to the given format (see timeFormats)
def getFormattedTime(self, time, format, suffixes = None):
if math.isnan(time):
return self.invalidTime
if format == 'Float':
return time
if suffixes == None:
suffixes = self.timeSuffixes

time = self.fixhour(time+ 0.5/ 60) # add 0.5 minutes to round
hours = math.floor(time)

minutes = math.floor((time- hours)* 60)
suffix = suffixes[ 0 if hours &lt; 12 else 1 ] if format == &#039;12h&#039; else &#039;&#039;
formattedTime = &quot;%02d:%02d&quot; % (hours, minutes) if format == &quot;24h&quot; else &quot;%d:%02d&quot; % ((hours+11)%12+1, minutes)
return formattedTime + suffix
#---------------------- Calculation Functions -----------------------

# compute mid-day time
def midDay(self, time):
eqt = self.sunPosition(self.jDate + time)[1]
return self.fixhour(12 - eqt)

# compute the time at which sun reaches a specific angle below horizon
def sunAngleTime(self, angle, time, direction = None):
try:
decl = self.sunPosition(self.jDate + time)[0]
noon = self.midDay(time)
t = 1/15.0* self.arccos((-self.sin(angle)- self.sin(decl)* self.sin(self.lat))/
(self.cos(decl)* self.cos(self.lat)))
return noon+ (-t if direction == &#039;ccw&#039; else t)
except ValueError:
return float(&#039;nan&#039;)

# compute asr time
def asrTime(self, factor, time):
decl = self.sunPosition(self.jDate + time)[0]
angle = -self.arccot(factor + self.tan(abs(self.lat - decl)))
return self.sunAngleTime(angle, time)

# compute declination angle of sun and equation of time
# Ref: http://aa.usno.navy.mil/faq/docs/SunApprox.php
def sunPosition(self, jd):
D = jd - 2451545.0
g = self.fixangle(357.529 + 0.98560028* D)
q = self.fixangle(280.459 + 0.98564736* D)
L = self.fixangle(q + 1.915* self.sin(g) + 0.020* self.sin(2*g))

R = 1.00014 - 0.01671*self.cos(g) - 0.00014*self.cos(2*g)
e = 23.439 - 0.00000036* D

RA = self.arctan2(self.cos(e)* self.sin(L), self.cos(L))/ 15.0
eqt = q/15.0 - self.fixhour(RA)
decl = self.arcsin(self.sin(e)* self.sin(L))

return (decl, eqt)

# convert Gregorian date to Julian day
# Ref: Astronomical Algorithms by Jean Meeus
def julian(self, year, month, day):
if month  portion:
time = base + (-portion if direction == 'ccw' else portion)
return time

# the night portion used for adjusting times in higher latitudes
def nightPortion(self, angle, night):
method = self.settings['highLats']
portion = 1/2.0 # midnight
if method == 'AngleBased':
portion = 1/60.0 * angle
if method == 'OneSeventh':
portion = 1/7.0
return portion * night

# convert hours to day portions
def dayPortion(self, times):
for i in times:
times[i] /= 24.0
return times
#---------------------- Misc Functions -----------------------

# compute the difference between two times
def timeDiff(self, time1, time2):
return self.fixhour(time2- time1)

# convert given string into a number
def eval(self, st):
val = re.split('[^0-9.+-]', str(st), 1)[0]
return float(val) if val else 0

# detect if input contains 'min'
def isMin(self, arg):
return isinstance(arg, str) and arg.find('min') &gt; -1
#----------------- Degree-Based Math Functions -------------------

def sin(self, d): return math.sin(math.radians(d))
def cos(self, d): return math.cos(math.radians(d))
def tan(self, d): return math.tan(math.radians(d))

def arcsin(self, x): return math.degrees(math.asin(x))
def arccos(self, x): return math.degrees(math.acos(x))
def arctan(self, x): return math.degrees(math.atan(x))

def arccot(self, x): return math.degrees(math.atan(1.0/x))
def arctan2(self, y, x): return math.degrees(math.atan2(y, x))

def fixangle(self, angle): return self.fix(angle, 360.0)
def fixhour(self, hour): return self.fix(hour, 24.0)

def fix(self, a, mode):
if math.isnan(a):
return a
a = a - mode * (math.floor(a / mode))
return a + mode if a  82 and count &lt; 301):
times = prayTimes.getTimes(dates, (6.1805, 106.8283), +7);
else:
times = prayTimes.getTimes(dates, (6.1805, 106.8283), +7);
# print(times[&#039;fajr&#039;])
count += 1
hari[count] = day
shubuh[count] = times[&#039;fajr&#039;]
zhuhur[count] = times[&#039;dhuhr&#039;]
ashar[count] = times[&#039;asr&#039;]
maghrib[count] = times[&#039;maghrib&#039;]
isya[count] = times[&#039;isha&#039;]

# simpan = pd.DataFrame.from_dict(shubuh)
df0 = pd.DataFrame([hari]).astype(&#039;datetime64[ns]&#039;)
# pd.to_datetime(df0)
df1 = pd.DataFrame([shubuh]).astype(&#039;datetime64[ns]&#039;)
df2 = pd.DataFrame([zhuhur]).astype(&#039;datetime64[ns]&#039;)
df3 = pd.DataFrame([ashar]).astype(&#039;datetime64[ns]&#039;)
df4 = pd.DataFrame([maghrib]).astype(&#039;datetime64[ns]&#039;)
df5 = pd.DataFrame([isya]).astype(&#039;datetime64[ns]&#039;)

df = df0.append([df1,df2,df3,df4,df5])
df = df.T
df.columns = [&quot;Tanggal&quot;, &quot;Shubuh&quot;, &quot;Zuhur&quot;, &quot;Ashar&quot;,&quot;Maghrib&quot;,&quot;Isya&quot;]
df[&#039;Tanggal&#039;] = pd.to_datetime(df[&#039;Tanggal&#039;]).dt.date
df[&#039;Shubuh&#039;] = pd.to_datetime(df[&#039;Shubuh&#039;],format= &#039;%H:%M:%S&#039; ).dt.time
df[&#039;Zuhur&#039;] = pd.to_datetime(df[&#039;Zuhur&#039;],format= &#039;%H:%M:%S&#039; ).dt.time
df[&#039;Ashar&#039;] = pd.to_datetime(df[&#039;Ashar&#039;],format= &#039;%H:%M:%S&#039; ).dt.time
df[&#039;Maghrib&#039;] = pd.to_datetime(df[&#039;Maghrib&#039;],format= &#039;%H:%M:%S&#039; ).dt.time
df[&#039;Isya&#039;] = pd.to_datetime(df[&#039;Isya&#039;],format= &#039;%H:%M:%S&#039; ).dt.time

writer = pd.ExcelWriter(&#039;Jakarta_shalat.xlsx&#039;)
df.to_excel(writer,&#039;Sheet1&#039;)
### update.to_excel(writer, &quot;Here&quot;, startrow=1, startcol=2)
writer.save()
### u = dpd.to_datetime(df0)
# print(df1.dtypes)
# plt.plot(df[&#039;Tanggal&#039;],df[&#039;Shubuh&#039;],&#039;x&#039;)
# plt.plot(df[&#039;Tanggal&#039;],df[&#039;Zuhur&#039;])
# plt.plot(df[&#039;Tanggal&#039;],df[&#039;Ashar&#039;])
plt.plot(df[&#039;Tanggal&#039;],df[&#039;Maghrib&#039;])
# plt.plot(df[&#039;Tanggal&#039;],df[&#039;Isya&#039;])
plt.show()

 

Apabila tampilan code tersebut tidak dapat dikopi, sedangkan anda membutuhkannya, silahkan tulis alamat email anda.

Salam,

Syahril

Advertisements

Memfitting data dengan python

Hej,

Akhirnya saya punya waktu untuk posting. Tulisan ini dimotivasi oleh pertanyaan teman saya, seorang mahasiswa S1 di Jepang, kepada saya tentang cara memfitting data experimens agar mendapatkan variabel analitik. Berikut adalah data hasil eksperimen.

hasil_eksp

Gambar 1. Data hasil eksperimen.

Berdasarkan teori, teman saya mengatakan bahwa data tersebut merupakan sinusoidal dan Fungsi Analitiknya perlu untuk diketahui. Dia mengatakan bahwa fungsi seharusnya berbentuk y = a sin(bx + c) + d. Tugas kita adalah mencari berapa nilai a,b,c dan d. Nilai tersebut harus didapat dari data eksperimen. Lalu, saya coba membuatkan program di python. Apabila pembaca ingin mencobanya, berikut merupakan input data hasil eksperimennya.input 

"""
Created on Thu Oct 25 09:29:10 2018
Data is from ******
Fitting with sinusoidal function 
@author: siregar
"""
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def sin_adam(x, a,b,c,d):
return a* np.sin(b*x + c) + d

file ='input.csv'
a = np.genfromtxt(file, delimiter=',')
t = a[:,0]
y = a[:,1]

init_vals = [1, 0.6, 0, 80] # for [amp, cen, wid]
best_vals, covar = curve_fit(sin_adam, t, y, p0=init_vals)

print(best_vals)
plt.figure(1)
plt.title('Hasil Eksperimen')
plt.plot(t,y,'x')

plt.figure(2)
plt.title('Hasil ekesperimen dan kurva fittingnya')
plt.plot(t,y,'o')
plt.plot(t, sin_adam(t, *best_vals))
plt.show()

Source code di atas akan menghasilkan kurva berikut.

hasil_exp_data

Gambar 2. Data eksperimen beserta kurva fittingnya. 

Dari code tersebut kita bisa mendapatkan nilai a =  0.95756921, b =  12.46966803, c=-22.08694011 dan d = 84.21983745. Namun, dalam algoritma yang tertanam dalam scipy, kita diharuskan untuk menebak semua parameter a,b,c, dan d terlebih dahulu. Berikut adalah nilai tebakan saya init_vals = [1, 0.6, 0, 80], data itu merupakan a,b,c dan d tebakan awal. Fungsi  curve_fit pada scipy dapat digunakan untuk berbagai macam kurva. Silahkan untuk teman-teman coba sendiri. Demikian postingan kali ini, semoga bermanfaat.

Lund, 30 Oktober 2018

 

Syahril Siregar.

 

Perjalanan dari Bandara Kastrup, Denmark Menuju Lund, Swedia

Setelah tertahan di bandara Kastrup selama 30 menit. Akhirnya saya diijinkan ke luar bandara untuk melanjutkan perjalanan ke Lund University.  Lund Central dapat diakses dengan menggunakan Kereta dari Kastrup. Kira-kira butuh waktu 45 menit untuk sampai di stasiun Lund C. Harga tiketnya 140 SEK (Swedish Krona), kurang lebih Rp. 250,000. Tiket bisa dibeli dengan menggunakan vending machine dan pembayarannya hanya dapat menggunakan Credit Card atau  kartu debit. Jadi, buat teman-teman yang akan pergi ke Lund, jangan lupa membawa kartu debit atau kartu kreditnya ya !

Denmark dan Swedia sebenarnya merupakan daratan yang berbeda. Namun, keduanya dihubungkan dengan jembatan. Serius jembatannya panjang banget, Maaf norak ! Sayangnya saya tidak bisa mengupload video di wordpress ini karena gratisan. Namun, pesan saya adalah selalu bawa kartu Kredit /debit anda apabila ingin berkunjung ke Swedia melalui Denmark.

Salam, Lund

Syahril

Tertahan di Bandara Kastrup Denmark

Hari ini, tepat dua minggu saya tinggal di belahan bumi Eropa.  Negara Eropa pertama  yang berhasil saya kunjungi adalah Denmark. Saya mendarat di bandara Kastrup Denmark bukan untuk menetap di Denmark, tetapi hanya singgah untuk beberapa Jam saja. Tepatnya, Jumat 28 September 2018. Setelah sempat ditahan selama kurang-lebih 30 menit oleh polisi Imigrasi, Alhamdulillah saya dibebaskan dan diijinkan untuk keluar bandara. Masalah pada saat itu adalah ijin masuk saya ke Swedia tertulis 1 Oktober 2018, sedangkan saya datang ke Denmark 28 September tanpa menggunakan visa lain, hanya residence card yang berlaku mulai 1 Oktober. Akhirnya saya tertahan dan diinterogasi oleh polisi imigrasi. Anehnya, mereka sangat sopan setelah membaca visa saya sebagai Forskare/researcher. Setelah berkordinasi dengan pihak kepolisian Swedia, saya diijinkan untuk keluar bandara, karena pihak Swedia tidak mempermasalahkan kedatangan saya yang lebih cepat 2 hari dari seharusnya.

dav

Demikian postingan saya kali ini. Buat teman-teman yang akan memasuki Eropa, perhtaikan baik-baik kapan residence card anda akan berlaku. Jangan sampai kejadian seperti saya terulang.

Salam, Lund

Syahril

 

Our Paper Laser Heating Carbon Nanotube Has Been Published

Laser heating carbon nanotubes is an important physics phenomenon in many aspects especially material science, medicine, and biology.  The applications of laser heating carbon nanotubes in medicine and biology are heating agents of photothermal cancer therapy and contrast agents of photoacoustic imaging. In the present work, we developed the theoretical model of laser heating carbon nanotubes in the microscopic point of view. Our model is constructed by using the classical heat conduction equation. We have several assumptions to simplify the problem.  First, the carbon nanotube is assumed as a solid cylinder with the length of carbon nanotubes is much larger than its diameter.  Based on our model, we suggest using the larger diameter of carbon nanotubes to maximize the laser heating process. For more detail, please go to nanomaterials web.

graphical_abstract_blog.png

Thank you.

Mengenal Savitzky-Golay Filter dan implementasinya pada python

Hallo teman-teman, sebelumnya saya ingin mengucapkan selamat Idul-Fitri 1439 H. Mohon maaf lahir dan bathin.  Beberapa hari yang lalu ketika saya melakukan wawancara kerja, pewawancara menanyakan kepada saya tentang data pre-processing dalam riset menggunakan Raman spectroscopy. Salah satu metode yang mereka gunakan adalah Savitzky-Golay Filter. Untuk itu, saya sengaja menuliskan metode tersebut pada blog ini.

Savitzky-Golay filter adalah suatu metode smoothing kurva (sinyal) dengan tujuan meningkan Signal-to-noise Ratio (SNR) tanpa menghilangkan informasi penting dari sinyal. Metode ini pertama kali dikenalkan oleh Abraham Savitzky dan Marcel J.E. Golay pada tahun 1964.

Data yang digunakan akan dicocokan dengan data sebelum ataupun setelahnya dengan metode pangkat terkecil. Koefisien yang akan digunakan, sudah ditentukan melalui tabel.

Sebagai contoh,  data n {xjyj}  titik (j = 1, …, n), dengan x adalah variable bebas dan yj variable terikat. Data diolah dengan sejumlah m koefisien konvolusion, Ci, dengan persamaan ;

{\displaystyle Y_{j}=\sum _{i=-{\tfrac {m-1}{2}}}^{\tfrac {m-1}{2}}C_{i}\,y_{j+i},\qquad {\frac {m-1}{2}}\leq j\leq n-{\frac {m-1}{2}}}

Koefisien konvolusion dapat dilihat pada tabel di bawah. Sebagai contoh, kita ingin melakukan smoothing dengan 5 titik polinomial kuadratik m = 5, i = -2, -1 , 0 ,1 , dan 2. Formula smoothingnya menjadi

{\displaystyle Y_{j}={\frac {1}{35}}(-3y_{j-2}+12y_{j-1}+17y_{j}+12y_{j+1}-3y_{j+2})},

nilai -3/35 , 12/35 dan seterusnya diperoleh dari tabel.

Screenshot 2018-06-22 16.14.56

Tabel 1. Nilai konstanta untuk koefisien smoothing.

Selanjutnya tentu saja, kita akan mencoba mengaplikasikan filter ini kepada data sesunggunya. Berikut adalah Python code untuk mencoba mengenerate signal, noise dan proses untuk menghilangkan noise.

""" program to execute smoothing spectra
using Savitzky-Golay Filter
written by Syahril Siregar
2018/5/22
"""
import numpy as np
from scipy.signal import savgol_filter
import matplotlib.pyplot as plt
ndata = 400
xx = np.linspace(-15.0,15,ndata)
yy_ori = np.sin(xx)/xx
yy_noisy = yy_ori + 0.5*np.random.random(ndata) - 0.5*np.random.random(ndata)
y_filter = savgol_filter(yy_noisy,55,2)
plt.figure(1)
plt.title('Noisy Signal')
plt.plot(xx,yy_noisy)
plt.figure(2)
plt.title('Data tanpa Noise')
plt.plot(xx,yy_ori)
plt.figure(3)
plt.title('Data Perbandingan')
plt.plot(xx,yy_ori,xx,y_filter)
plt.legend(('tanpa noise', 'smoothing'),
loc='best',shadow=False, fontsize=14)
plt.show()

Berikut adalah hasilnya

tanpa_noise

Gambar 1. Berikut adalah kurva tanpa noise.

Kurva tanpa noise di atas kemudian ditambahkan random noise.

noisy

Gambar 2. Kurva setelah ditambahkan noise

Lalu kita aplikasikan metode Savitzky-Golay filter. Hasilnya sebagai berikut

figure_3

Gambar 3. Perbandingan kurva original (tanpa noise) dengan hasil smooting .

Demikian postingan kali ini, mohon maaf bahasa yang agak berantakan. Karena menulisnya buru-buru.

Sumber : Wikipedia 

Kuliah di Jepang dengan biaya sendiri

Pada postingan kali ini saya akan menggambarkan hidup di Jepang sebagai mahasiswa dengan biaya sendiri.

Jepang merupakan negara maju yang biaya hidupnya sangat mahal apabila dibandingkan dengan biaya hidup di Indonesia. Sebagai contoh, harga 1 botol air mineral (500 ml) seharga 120 Yen, kurang lebih Rp. 15.000. Biaya makan siang di kantin setidaknya butuh 500 Yen, kurang lebih Rp. 60.000. Setidaknya, saya menghabiskan sehemat-hematnya untuk hidup di Sendai Jepang 80,000 Yen/bulan (Rp. 10.000.000). Biaya tersebut sudh termasuk dengan biaya apartemen, biaya makan (memasak sendiri), biaya listrik, internet dan komunikasi.

Pertanyaan selanjutnya, berapa biaya kuliah di universitas di Jepang ? Jepang merupakan negara yang mewajibkan mahasiswa untuk membayar tuition fee dan admission fee. Apabila teman-teman mendapatkan beasiswa mombusho,  teman-teman tidak perlu untuk membayar tuition fee dan admission fee karena sudah dibayarkan oleh mombusho. Berikut adalah rincian biaya kuliah di universitas negeri di Jepang

Screenshot 2018-06-13 18.42.52

Gambar 1. Biaya kuliah kampus negeri di Jepang. Sumber di sini.

Apabila kita berstatus mahasiswa tanpa beasiswa, kita bisa mengajukan keringanan biaya kuliah. Ada beberapa jenis keringanan biaya kuliah diantaranya dibebaskan utuh (100%) atau setengahnya. Namun perlu diingat, pengajuan keringanan kita belum tentu dikabulkan.

Ada berbagai macam cara untuk menghasilkan uang halal di Jepang untuk keperluan kuliah seperti bekerja paruh waktu di luar kampus dan bekerja di kampus. Bekerja dikampus seperti TA (Teaching assistant) dan RA (Research Assistant). Kisaran gaji untuk TA dan RA adalah 1200-1500 Yen/Jam. Sedangkan untuk bekerja di luar kampus 800-1500 Yen/jam bergantung jenis pekerjaannya.

Ada baiknya mencari beasiswa saja. Mengapa ? karena apabila kita bekerja paruh waktu dan memiliki penghasilan kita diharuskan membayar pajak yang sangat mahal dan biaya asuransi yang kita bayar akan menjadi mahal. Sebagai perbandingan, beasiswa mombusho 144,000 Yen tidak membayar pajak dan biaya asuransi 2,100 Yen. Anggaplah gaji paruh waktu anda setara dengan beasiswa mombusho, maka anda diharuskan membayar pajak kota sebesar 18.000 yen/ dua bulan, dan biaya asuransi anda menjadi 8000 yen/bulan. Terkesan tidak adil memang, tapi apa boleh buat.

Oh ya, sebenarnya batas waktu untuk bekerja paruh waktu itu hanya 28 jam/minggu. Lebih dari waktu tersebut maka kita sudah melanggar hukum.

Demikian gambaran hidup di jepang sebagai mahasiswa dengan biaya sendiri. Ada baiknya anda mencari beasiswa saja….

Salam

 

Syahril

28 Ramadhan 1439 H