diff --git a/data/Diary.csv b/data/Diary.csv deleted file mode 100644 index aadf121bda2459b5ec81b6372cc9557429bb0858..0000000000000000000000000000000000000000 --- a/data/Diary.csv +++ /dev/null @@ -1,2 +0,0 @@ -tanggal,isiJournal -01-01-2020,"Hari pertama tahun baru, hari yang sangat menyenangkan" diff --git a/data/Mood.csv b/data/Mood.csv deleted file mode 100644 index 8ee28032dbd4c8ba20caad2c362086ca6bf69a49..0000000000000000000000000000000000000000 --- a/data/Mood.csv +++ /dev/null @@ -1 +0,0 @@ -tanggal,rate,relax_level,energy_level \ No newline at end of file diff --git a/data/Quote.csv b/data/Quote.csv deleted file mode 100644 index e2f48547a3d0a1fe52457e978770fbc10d0ffdc2..0000000000000000000000000000000000000000 --- a/data/Quote.csv +++ /dev/null @@ -1,11 +0,0 @@ -id,author,content -1,M. Olivia H,Berbahagialah yang tidak melihat (soal) namun percaya (kalau persis). -2,Carol Burnett,"When you have a dream, you've got to grab it and never let go." -3,Audrey Hepburn,Nothing is impossible. The word itself says 'I'm possible!' -4,Walt Whitman,"Keep your face always toward the sunshine, and shadows will fall behind you." -5,Winston Churchill,"Success is not final, failure is not fatal: it is the courage to continue that counts." -6,Malala Yousafzai,You are never too old to set another goal or to dream a new dream. -7,Mother Teresa,Spread love everywhere you go. -8,Kesha,You can be everything. You can be the infinite amount of things that people are. -9,Theodore Roosevelt,Believe you can and you're halfway there. -10,William Ellery Channing,Faith is love taking the form of aspiration. diff --git a/data/Sleep.csv b/data/Sleep.csv deleted file mode 100644 index 773b9775d962df6b58ca0ec38e8c1bc4db7769ba..0000000000000000000000000000000000000000 --- a/data/Sleep.csv +++ /dev/null @@ -1 +0,0 @@ -tanggal,jamMulai,jamSelesai,rating diff --git a/images/add_user_dark.png b/images/add_user_dark.png deleted file mode 100644 index 937d7708bf71e04a2119a85f46d2c34f5b6e4f6c..0000000000000000000000000000000000000000 Binary files a/images/add_user_dark.png and /dev/null differ diff --git a/images/bg_gradient.jpg b/images/bg_gradient.jpg deleted file mode 100644 index 067658e5b3f1bd7baa434fe8406ed87ccceea97a..0000000000000000000000000000000000000000 Binary files a/images/bg_gradient.jpg and /dev/null differ diff --git a/images/chat_dark.png b/images/chat_dark.png deleted file mode 100644 index 8ddbc5760ac2b903d7c042198ac68c46c129fe9f..0000000000000000000000000000000000000000 Binary files a/images/chat_dark.png and /dev/null differ diff --git a/src/Diary/DiaryModification.py b/src/Diary/DiaryModification.py deleted file mode 100644 index 131e1a0dead173a8c205ba41ecd57fe7f3e68af1..0000000000000000000000000000000000000000 --- a/src/Diary/DiaryModification.py +++ /dev/null @@ -1,27 +0,0 @@ -# file name: DiaryModification.py -# Komponen ini bertugas memfasilitasi pengguna untuk melakukan pencatatan jurnal harian -# berdasarkan tanggal hari yang bersangkutan atau tanggal sebelumnya serta melihat data -# jurnal yang sudah ada melalui tampilan khusus pencatatan jurnal yang tersedia - -from Utility.Date import Date - -class DiaryModification: - # CONSTRUCTOR - # Menginisiasi objek DiaryModification - def __init__(self, dateString, content): - self.date = Date(dateString) - self.content = content - - # GETTER - # Mengembalikan tanggal diary dari informasi diary ini - def getDate(self) : - return self.date - - # Mengembalikan isi diary dari informasi diary ini - def getContent(self) : - return self.content - - # Melakukan modifikasi terhadap isi diary dari informasi diary ini, nilai default = null - def modifyData(self, content): - if (content != None): - self.content = content diff --git a/src/Diary/DiaryModificationController.py b/src/Diary/DiaryModificationController.py deleted file mode 100644 index f90454b6f80bb592b3201d6b1bc6bcf133ac01ff..0000000000000000000000000000000000000000 --- a/src/Diary/DiaryModificationController.py +++ /dev/null @@ -1,95 +0,0 @@ -# File : DiaryModificationController.py -# Berisi kelas DiaryModificationController, yang bertanggung jawab untuk -# mengatur keberadaan dan penyimpanan dari record diary yang berupa objek entitas DiaryModification - -# import modul eksternal -import os -import csv -from Utility.Date import Date -from Diary.DiaryModification import DiaryModification - -class DiaryModificationController: - # CONSTRUCTOR - # Menginisiasi objek yang membaca file file csv yang sesuai dan menyimpan senarai objek entitas - def __init__ (self) : - self.filename = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "..", "data","Diary.csv") - self.header = "" - self.data = [] - - # Melakukan pembacaan terhadap file - with open(self.filename, "r") as file : - reader = csv.reader(file, quotechar='"', delimiter=',', - quoting=csv.QUOTE_ALL, skipinitialspace=True) - self.header = next(reader) - - # Pembuatan data controller berisi daftar Diary - for row in reader : - mod = DiaryModification(row[0], row[1]) - self.data.append(mod) - file.close() - - # PREDICATE - # Mengembalikan true jika record telah tercatat untuk suatu tanggal tertentu, false jika tidak - def isInRecord(self, dateString): - date = Date(dateString) - for record in self.data: - if (record.getDate() == date): - return True - return False - - # ADDITIONAL METHOD - # Mengembalikan indeks yang tepat untuk meletakkan suatu record, dihitung berdasarkan tanggal record - def findNewIndexFor(self, dateString): - index = 0 - found = False - date = Date(dateString) - - while (index < len(self.data) and not found): - if (date < self.data[index].getDate()): - found = True - else: - index += 1 - - return index - - # Mengembalikan indeks dimana suatu record dengan tanggal tertentu diletakkan - def findIndexOf(self, dateString): - date = Date(dateString) - - for i in range(0, len(self.data)): - if (date == self.data[i].getDate()): - return i - - # CRUD OPERATION - # Menyimpan informasi diary pada suatu tanggal yang baru, jika tanggal sudah ada - def createRecord(self, dateString, content): - index = self.findNewIndexFor(dateString) - self.data.insert(index, DiaryModification(dateString, content)) - self.writeRecords() - - # Membaca record informasi diary pada suatu tanggal tertentu - def readRecord(self, dateString): - index = self.findIndexOf(dateString) - return self.data[index].getDate(), self.data[index].getContent() - - # Mengubah record informasi diary pada suatu tanggal tertentu - def updateRecord(self, dateString, content): - index = self.findIndexOf(dateString) - self.data[index].modifyData(content) - self.writeRecords() - - # Menghapus record informasi diary pada suatu tanggal tertentu - def deleteRecord(self, dateString): - index = self.findIndexOf(dateString) - self.data.pop(index) - self.writeRecords() - - # WRITE TO CSV - # Melakukan write pada file csv data - def writeRecords(self): - with open(self.filename, "w", newline="") as diaryFile: - writer = csv.writer(diaryFile) - writer.writerow(self.header) - for record in self.data: - writer.writerow([record.getDate().toString(), record.getContent()]) - diaryFile.close() \ No newline at end of file diff --git a/src/Mood/MoodModification.py b/src/Mood/MoodModification.py deleted file mode 100644 index e4e934cd6814f644cd58e3d692976fa20e685889..0000000000000000000000000000000000000000 --- a/src/Mood/MoodModification.py +++ /dev/null @@ -1,41 +0,0 @@ -# File : MoodModification.py -# Berisi kelas entitas MoodModification, yang bertanggung jawab untuk -# Menyimpan informasi mood di suatu tanggal tertentu - -from Utility.Date import Date - -class MoodModification : - # CONSTRUCTOR - # Menginisialisasi objek MoodModification - def __init__(self, dateString, rate, relaxLevel, energyLevel) : - self.date = Date(dateString) - self.rate = rate - self.relaxLevel = relaxLevel - self.energyLevel = energyLevel - - # GETTER - # Mengembalikan tanggal mood dari informasi mood ini - def getDate(self) : - return self.date - - # Mengembalikan rating dari informasi mood ini - def getRate(self) : - return self.rate - - # Mengembalikan relax level dari informasi mood ini - def getRelaxLevel(self) : - return self.relaxLevel - - # Mengembalikan energy level dari informasi mood ini - def getEnergyLevel (self) : - return self.energyLevel - - # SETTER - # Mengubah informasi mood pada tanggal ini - def modifyData(self,rate=None,relaxLevel=None,energyLevel=None) : - if (rate != None) : - self.rate = rate - if (relaxLevel != None) : - self.relaxLevel = relaxLevel - if (energyLevel != None) : - self.energyLevel = energyLevel \ No newline at end of file diff --git a/src/Mood/MoodModificationController.py b/src/Mood/MoodModificationController.py deleted file mode 100644 index 192d8db643121f34738b0e5b09b90766c7de2a58..0000000000000000000000000000000000000000 --- a/src/Mood/MoodModificationController.py +++ /dev/null @@ -1,90 +0,0 @@ -# File : MoodModificationController.py -# Berisi kelas controller MoodModificationController, yang bertanggung jawab untuk -# mengatur keberadaan dan penyimpanan dari record mood yang berupa objek entitas MoodModification - -import csv -import os -from Utility.Date import Date -from Mood.MoodModification import MoodModification - -class MoodModificationController: - - # CONSTRUCTOR - # Menginisialisasi objek dengan membaca file csv yang sesuai dan menyimpan senarai objek entitas - def __init__(self): - self.fileName = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "..", "data/Mood.csv") - self.header = "" - self.data = [] - - with open(self.fileName, "r") as moodFile: - reader = csv.reader(moodFile) - self.header = next(reader) - for row in reader: - self.data.append(MoodModification(row[0], row[1], row[2], row[3])) - moodFile.close() - - # PREDICATE - # Mengembalikan true jika record telah tercatat untuk suatu tanggal tertentu, false jika tidak - def isInRecord(self, dateString): - date = Date(dateString) - for record in self.data: - if (record.getDate() == date): - return True - return False - - # ADDITIONAL - # Mengembalikan indeks yang tepat untuk meletakkan suatu record, dihitung berdasarkan tanggal record - def findNewIndexFor(self, dateString): - index = 0 - found = False - date = Date(dateString) - - while (index < len(self.data) and not found): - if (date < self.data[index].getDate()): - found = True - else: - index += 1 - - return index - - # Mengembalikan indeks dimana suatu record dengan tanggal tertentu diletakkan - def findIndexOf(self, dateString): - date = Date(dateString) - - for i in range(0, len(self.data)): - if (date == self.data[i].getDate()): - return i - - # CRUD OPERATION - # Menyimpan informasi mood pada suatu tanggal yang baru, jika tanggal sudah ada - def createRecord(self, dateString, rate, relaxLevel, energyLevel): - index = self.findNewIndexFor(dateString) - self.data.insert(index, MoodModification(dateString, rate, relaxLevel, energyLevel)) - self.writeRecords() - - # Membaca record informasi mood pada suatu tanggal tertentu - def readRecord(self, dateString): - index = self.findIndexOf(dateString) - return self.data[index].getDate(), self.data[index].getRate(), self.data[index].getRelaxLevel(), self.data[index].getEnergyLevel() - - # Mengubah record informasi mood pada suatu tanggal tertentu - def updateRecord(self, dateString, rate, relaxLevel, energyLevel): - index = self.findIndexOf(dateString) - self.data[index].modifyData(rate, relaxLevel, energyLevel) - self.writeRecords() - - # Menghapus record informasi mood pada suatu tanggal tertentu - def deleteRecord(self, dateString): - index = self.findIndexOf(dateString) - self.data.pop(index) - self.writeRecords() - - # WRITE TO CSV - # Melakukan write pada file csv data - def writeRecords(self): - with open(self.fileName, "w", newline="") as moodFile: - writer = csv.writer(moodFile) - writer.writerow(self.header) - for record in self.data: - writer.writerow([record.getDate().toString(), record.getRate(), record.getRelaxLevel(), record.getEnergyLevel()]) - moodFile.close() \ No newline at end of file diff --git a/src/Quote/QuoteModification.py b/src/Quote/QuoteModification.py deleted file mode 100644 index 86b899af117e2246f5a7a080e20dabe545675082..0000000000000000000000000000000000000000 --- a/src/Quote/QuoteModification.py +++ /dev/null @@ -1,40 +0,0 @@ -# File : QuoteModification.py -# Berisi kelas entitas QuoteModification, yang bertanggung jawab untuk -# Menyimpan informasi quote di suatu ID tertentu - -class QuoteModification : - - # CONSTRUCTOR - # Menginisialisasi objek QuoteModification - def __init__ (self, id, author, content): - self.id = id - self.author = author - self.content = content - - # GETTER - # Mengembalikan atribut ID dari Quote terkait - def getID (self): - return self.id - - # Mengembalikan atribut author dari Quote terkait - def getAuthor (self): - return self.author - - # Mengembalikan atribut content dari Quote terkait - def getContent (self): - return self.content - - # SETTER - # Megubah nilai atribut ID terkait - def setID (self, id): - self.id = id - - # Melakukan modifikasi terhadap data, nilai default = null - def modifyData(self, id = None, author = None, content = None) : - # Melakukan perubahan data mood hasil validasi dan pengecekan oleh controller. - if (id != None) : - self.id = id - if (author != None) : - self.author = author - if (content != None) : - self.content = content \ No newline at end of file diff --git a/src/Quote/QuoteModificationController.py b/src/Quote/QuoteModificationController.py deleted file mode 100644 index 35d0408ba8b785e24aa5f7941d27f558b020b602..0000000000000000000000000000000000000000 --- a/src/Quote/QuoteModificationController.py +++ /dev/null @@ -1,94 +0,0 @@ -# File : QuoteModificationController.py -# Berisi kelas controller QuoteModificationController, yang bertanggung jawab untuk -# Menyimpan seluruh data informasi quote di suatu ID tertentu - -# Impor modul eksternal -import os -import csv -from Quote.QuoteModification import QuoteModification - -class QuoteModificationController : - - # CONSTRUCTOR - # Menginisialisasi objek dengan membaca file csv yang sesuai dan menyimpan senarai objek entitas - def __init__ (self) : - self.filename = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "..", "data/Quote.csv") - self.header = "" - self.data = [] - - # Melakukan pembacaan terhadap file - with open(self.filename, "r") as file : - reader = csv.reader(file, quotechar = '"', delimiter = ',', quoting=csv.QUOTE_ALL, skipinitialspace = True) - self.header = next(reader) - with open(self.filename, "r") as file : - reader = csv.reader(file) - self.header = next(reader) - - # Pembuatan data controller berisi daftar Quote - for row in reader : - mod = QuoteModification(row[0], row[1], row[2]) - self.data.append(mod) - file.close() - - # PREDICATE - # Mengembalikan indeks dimana suatu record dengan ID tertentu diletakkan - def isInRecord (self, id): - for mod in self.data : - if (id == int(mod.getID())) : - return True - return False - - # Mengembalikan indeks dimana suatu record dengan ID tertentu diletakkan - def findIndexOf(self, id): - for i in range(len(self.data)): - if (id == int(self.data[i].getID())): - return i - - # Melakukan perbaharuan ID setelah dihapus - def updateId(self, id): - count = 1 - for mod in self.data : - # Salin nilai sebelum yang dihapus - if (count > id): - mod.setID(str(int(mod.getID()) - 1)) - count += 1 - - # Membuat data Quote yang baru - def createRecord (self, id, author, content) : - # Melakukan perbaharuan terhadap data ID - if self.isInRecord(id): - return self.updateRecord(id, author, content) - - # Membuat data Quote baru dan memasukkannya dalam senarai - newQuote = QuoteModification(id, author, content) - self.data.append(newQuote) - self.data.sort(key = lambda x : int(x.getID())) - self.writeRecords() - - # Membaca data dari csv - def readRecord(self, id) : - index = self.findIndexOf(id) - return self.data[index].getID(), self.data[index].getAuthor(), self.data[index].getContent() - - # Melakukan perbaharuan terhadap data Quote dengan id tertentu - def updateRecord(self, id, author, content) : - index = self.findIndexOf(id) - self.data[index].modifyData(id, author, content) - self.writeRecords() - - # Menghapus data Quote dengan id tertentu - def deleteRecord(self, id) : - index = self.findIndexOf(id) - self.data.pop(index) - self.updateId(index) - self.writeRecords() - - # WRITE TO CSV - # Melakukan write pada file csv data - def writeRecords(self): - with open(self.filename, "w", newline="") as file : - csvwriter = csv.writer(file) - csvwriter.writerow(self.header) - for mod in self.data : - csvwriter.writerow([mod.getID(), mod.getAuthor(), mod.getContent()]) - file.close() \ No newline at end of file diff --git a/src/Sleep/SleepTrackerController.py b/src/Sleep/SleepTrackerController.py deleted file mode 100644 index c18df683c52cdd83c6db09399af0739c7d1ebda9..0000000000000000000000000000000000000000 --- a/src/Sleep/SleepTrackerController.py +++ /dev/null @@ -1,90 +0,0 @@ -# File : SleepTrackerController.py -# Berisi kelas controller SleepTrackerController, yang bertanggung jawab untuk -# Mengatur keberadaan dan penyimpanan dari record sleep yang berupa objek entitas SleepTrackerModification - -import os -import csv -from Utility.Date import Date -from Sleep.SleepTrackerModification import SleepTrackerModification - -class SleepTrackerController: - - # CONSTRUCTOR - # Menginisialisasi objek dengan membaca file csv yang sesuai dan menyimpan senarai objek entitas - def __init__(self): - self.fileName = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "..", "data/Sleep.csv") - self.header = "" - self.data = [] - - with open(self.fileName, "r") as sleepFile: - reader = csv.reader(sleepFile) - self.header = next(reader) - for row in reader: - self.data.append(SleepTrackerModification(row[0], row[1], row[2], row[3])) - sleepFile.close() - - # PREDICATE - # Mengembalikan true jika record telah tercatat untuk suatu tanggal tertentu, false jika tidak - def isInRecord(self, dateString): - date = Date(dateString) - for record in self.data: - if (record.getDate() == date): - return True - return False - - # ADDITIONAL - # Mengembalikan indeks yang tepat untuk meletakkan suatu record, dihitung berdasarkan tanggal record - def findNewIndexFor(self, dateString): - index = 0 - found = False - date = Date(dateString) - - while (index < len(self.data) and not found): - if (date < self.data[index].getDate()): - found = True - else: - index += 1 - - return index - - # Mengembalikan indeks dimana suatu record dengan tanggal tertentu diletakkan - def findIndexOf(self, dateString): - date = Date(dateString) - - for i in range(0, len(self.data)): - if (date == self.data[i].getDate()): - return i - - # CRUD OPERATION - # Menyimpan informasi tidur pada suatu tanggal yang baru, jika tanggal sudah ada - def createRecord(self, dateString, startTime, finishTime, rating): - index = self.findNewIndexFor(dateString) - self.data.insert(index, SleepTrackerModification(dateString, startTime, finishTime, rating)) - self.writeRecords() - - # Membaca record informasi tidur pada suatu tanggal tertentu - def readRecord(self, dateString): - index = self.findIndexOf(dateString) - return self.data[index].getDate(), self.data[index].getStartTime(), self.data[index].getFinishTime(), self.data[index].getRating() - - # Mengubah record informasi tidur pada suatu tanggal tertentu - def updateRecord(self, dateString, startTime, finishTime, rating): - index = self.findIndexOf(dateString) - self.data[index].modifyData(startTime, finishTime, rating) - self.writeRecords() - - # Menghapus record informasi tidur pada suatu tanggal tertentu - def deleteRecord(self, dateString): - index = self.findIndexOf(dateString) - self.data.pop(index) - self.writeRecords() - - # WRITE TO CSV - # Melakukan write pada file csv data - def writeRecords(self): - with open(self.fileName, "w", newline="") as sleepFile: - writer = csv.writer(sleepFile) - writer.writerow(self.header) - for record in self.data: - writer.writerow([record.getDate().toString(), record.getStartTime(), record.getFinishTime(), record.getRating()]) - sleepFile.close() \ No newline at end of file diff --git a/src/Sleep/SleepTrackerModification.py b/src/Sleep/SleepTrackerModification.py deleted file mode 100644 index 0a2ef78b62ad7c0e08108f62b07f417222201b94..0000000000000000000000000000000000000000 --- a/src/Sleep/SleepTrackerModification.py +++ /dev/null @@ -1,42 +0,0 @@ -# File : SleepTrackerModification.py -# Berisi kelas entitas SleepTrackerModification, yang bertanggung jawab untuk -# Menyimpan informasi tidur di suatu tanggal tertentu - -import sys -sys.path.append("..") - -from Utility.Date import Date - -class SleepTrackerModification: - - # CONSTRUCTOR - # Menginisialisasi objek SleepTrackerModification - def __init__(self, dateString, startTime, finishTime, rating): - self.date = Date(dateString) - self.startTime = startTime - self.finishTime = finishTime - self.rating = rating - - # GETTER - # Mengembalikan tanggal tidur dari informasi tidur ini - def getDate(self): - return self.date - - # Mengembalikan waktu mulai tidur dari informasi tidur ini - def getStartTime(self): - return self.startTime - - # Mengembalikan waktu bangun tidur dari informasi tidur ini - def getFinishTime(self): - return self.finishTime - - # Mengembalikan rating tidur dari informasi tidur ini - def getRating(self): - return self.rating - - # SETTER - # Mengubah informasi tidur pada tanggal ini - def modifyData(self, startTime, finishTime, rating): - self.startTime = startTime - self.finishTime = finishTime - self.rating = rating \ No newline at end of file diff --git a/src/Utility/Date.py b/src/Utility/Date.py deleted file mode 100644 index d36e3806da92b1b0c94868241e8bf4d975a61e86..0000000000000000000000000000000000000000 --- a/src/Utility/Date.py +++ /dev/null @@ -1,58 +0,0 @@ -# File : Date.py -# Berisi kelas entitas Date, yang bertanggung jawab untuk -# Menyimpan informasi tanggal - -class Date: - - # CONSTRUCTOR - # Mengubah string berisi tanggal menjadi atribut yang sesuai - # Format : DD-MM-YYYY - def __init__(self, dateString): - self.day = int(dateString[0:2]) - self.month = int(dateString[3:5]) - self.year = int(dateString[6:]) - - # GETTER - # Mengembalikan atribut day - def getDay(self): - return self.day - - # Mengembalikan atribut month - def getMonth(self): - return self.month - - # Mengembalikan atribut year - def getYear(self): - return self.year - - # COMPARATOR - # Mengembalikan true jika tanggal ini datang setelah other, false jika tidak - def __gt__(self, other): - return ((self.year > other.year) or - (self.year == other.year and self.month > other.month) or - (self.year == other.year and self.month == other.month and self.day > other.day)) - - # Mengembalikan true jika tanggal ini sama dengan other, false jika tidak - def __eq__(self, other): - return (self.year == other.year and self.month == other.month and self.day == other.day) - - # Mengembalikan true jika tanggal ini datang sebelum other, false jika tidak - def __lt__(self, other): - return (not self > other and not self == other) - - # TRANSFORMER - # Mengubah objek menjadi string berisi tanggal - def toString(self): - result = "" - - if (self.day < 10): - result += f"0{self.day}-" - else: - result += f"{self.day}-" - if (self.month < 10): - result += f"0{self.month}-" - else: - result += f"{self.month}-" - result += f"{self.year}" - - return result diff --git a/src/Utility/Statistics.py b/src/Utility/Statistics.py deleted file mode 100644 index ac92da4615e9fb956ee74486ca5d978e0cb883df..0000000000000000000000000000000000000000 --- a/src/Utility/Statistics.py +++ /dev/null @@ -1,130 +0,0 @@ -# File : Statistics.py -# Berisi kelas entitas Statistik, yang bertanggung jawab untuk -# Menampilkan statistik bagi data yang membuktuhkan - -import matplotlib.pyplot as plt -import pandas as pd -from Utility.Time import Time - -class Statistics: - - # CONSTRUCTOR - # Konstruktor default - # Masukan tipe : Mood / Sleep - def __init__ (self, filename, tipe): - self.filename = filename - self.tipe = tipe - df = pd.read_csv(self.filename, delimiter=',', header='infer') - self.df = df.tail(7) # Mengambil 7 data terakhir - self.df.set_index('tanggal', inplace=True) # Menjadikan tanggal sebagai indeks - self.data = self.df.to_numpy() - - # GETTER - # Mengembalikan atribut tipe - def getTipe (self): - return self.tipe - - # PEMBUATAN STATISTIK - # Membuat statistik pada 7 data terakhir periode tertentu - def generateStatistics (self): - # Inisiasi grafik - fig, ax = plt.subplots(figsize=(12, 6)) - - # Pemrosesan berbasis tipe - if (self.tipe == "Mood"): - # Membuat grafik - ax.plot(self.df.index, self.df.rate, label='Rate') - ax.plot(self.df.index, self.df.relax_level, label='Relax level') - ax.plot(self.df.index, self.df.energy_level, label='Energy level') - - # Menambahkan label - for j, label in enumerate(self.df.rate): - ax.annotate(label, (self.df.index[j], self.df.rate[j])) - for j, label in enumerate(self.df.relax_level): - ax.annotate(label, (self.df.index[j], self.df.relax_level[j])) - for j, label in enumerate(self.df.energy_level): - ax.annotate(label, (self.df.index[j], self.df.energy_level[j])) - - # Melakukan pemrosesan gambar dan simpan - plt.legend(self.df.columns) - - elif (self.tipe == "Sleep"): - # Membuat senarai waktu - selisih = [] - labels = [] - for j in range (len(self.data)): - finish = Time(self.data[j][1]) - start = Time(self.data[j][0]) - selisih.append((finish - start).toMinutes() / 70) - labels.append((finish - start).toString()) - - # Membuat grafik - ax.plot(self.df.index, selisih, label='Selisih') - ax.plot(self.df.index, self.df.rating, label='Rating') - - # Menambahkan label - for j, label in enumerate(labels): - ax.annotate(label, (self.df.index[j], selisih[j]), fontsize=8) - for j, label in enumerate(self.df.rating): - ax.annotate(label, (self.df.index[j], self.df.rating[j])) - - # Melakukan pemrosesan gambar dan simpan - plt.legend(["selisih", "rating"]) - - # Menyimpan gambar untuk ditapilkan - plt.xticks(rotation = 45, ha = "right", rotation_mode = "anchor") # Merotasi nilai tanggal 45 deg - plt.subplots_adjust(bottom = 0.25, top = 0.9) # Memastikan nilai tanggal tidak terpotong - plt.ylabel('Values') - plt.xlabel('Dates') - plt.savefig('../images/result.png') - - # MEMBERIKAN INSIGHTS - # Memberikan nilai hasil pengelolaan data kepada pengguna - def showInsights (self): - # Pemrosesan berdasarkan tipe - if (self.tipe == "Mood"): - # Inisiasi proses perhitungan - count3 = 0 - count4 = 0 - - # Melakukan perhitungan data mood - for i in range (len(self.data)) : - for j in range (3): - if (self.data[i][j] == 3): - count3 += 1 - elif (self.data[i][j] == 4): - count4 += 1 - - # Pemorsesan nilai - if (len(self.data) >= 7): - if (count3 >= 2 and count4 >= 2): - return "Mood kamu 7 hari terkahir sangat bagus! Pertahankan" - else : - return "Mood kamu 7 hari terakhir kurang begitu baik :( Semangat yaa!" - else : - return "Tidak terdapat data Mood yang cukup untuk dianalisis (kurang dari 7 hari)" - - elif (self.tipe == "Sleep"): - # Membuat senarai waktu - selisih = [] - for j in range (len(self.data)): - finish = Time(self.data[j][1]) - start = Time(self.data[j][0]) - selisih.append((finish - start).toMinutes()) - - # Inisiasi proses perhitungan - count = 0 - - # Melakukan perhitungan data mood - for i in range (len(selisih)) : - if (selisih[i] >= 8 * 60): - count += 1 - - # Pemorsesan nilai - if (len(self.data) >= 7): - if (count >= 4): - return "Waktu tidurmu sangat cukup 7 hari terakhir. Pertahankan ya!" - else : - return "Waktu tidurmu 7 hari terakhir sangat kurang :( Istirahat yaa!" - else : - return "Tidak terdapat data waktu tidur yang cukup untuk dianalisis (kurang dari 7 hari)" diff --git a/src/Utility/Time.py b/src/Utility/Time.py deleted file mode 100644 index ad14481d6afbb01f143f54691914c2c5dd5b3180..0000000000000000000000000000000000000000 --- a/src/Utility/Time.py +++ /dev/null @@ -1,52 +0,0 @@ -# File : Time.py -# Berisi kelas entitas Time, yang bertanggung jawab untuk -# Menyimpan informasi terkait suatu waktu (jam, menit, detik) - -class Time: - - # CONSTRUCTOR - # Mengubah string berisi waktu menjadi atribut yang sesuai - # Format : HH:MM - def __init__(self, timeString): - self.hour = int(timeString[0:2]) - self.minute = int(timeString[3:]) - - # TRANSFORMER - # Mengembalikan jumlah menit dari waktu 00.00 hingga waktu sekarang - def toMinutes(self): - return self.hour * 60 + self.minute - - # Mengembalikan suatu string dari atribut objek time - # Format : H jam M menit - def toString(self): - result = "" - - if (self.hour > 0): - result += f"{self.hour} jam " - if (self.minute > 0): - result += f"{self.minute} menit" - - return result - - # OPERATOR - # Melakukan operasi pengurangan antara 2 objek time, mengembalikan objek time baru hasil pengurangan - def __sub__(self, other): - totalMinutes = self.toMinutes() - other.toMinutes() - if (totalMinutes < 0): - totalMinutes += 1440 - - timeString = "" - hour = totalMinutes // 60 - minute = totalMinutes % 60 - - if (hour > 9): - timeString += f"{hour}:" - else: - timeString += f"0{hour}:" - - if (self.hour > 9): - timeString += f"{minute}" - else: - timeString += f"0{minute}" - - return Time(timeString) \ No newline at end of file