Histogram berasal dari kata histos (sesuatu yang diatur tegak) dan gramma (gambar, tulisan) adalah representasi grafik yang mewakili distribusi dari data (kontinu) berupa deretan batang sama lebar berdampingan yang tingginya menggambarkan banyaknya data untuk berbagai selang nilai. Pada histogram terdapat sumbu vertikal yang menunjukkan persentase, frekuensi, atau densitas dari setiap selang nilai dan sumbu horizontal menampilkan selang-selang nilai peubah yang akan dilihat distribusinya.
Berikut ini beberapa kegunaan histogram :
Memberikan informasi ukuran pemusatan dan penyebaran data secara ringkas, meskipun ukuran contohnya sangat besar. Distribusi data pada histogram akan membentuk kemenjuluran/kemiringan yang dapat ditentukan dari perbedaan letak ukuran pemusatan data yaitu mean, median, dan modus. Terdapat tiga jenis Kemenjuluran/kemiringan yaitu :
Mean = median = modus : Simteris
Mean < median < modus : Menjulur ke kiri
Mean > median > modus : Menjulur ke kanan
Mengenali pola umum sebaran
Mengidentifikasi keberadaan data yang ‘kurang wajar’ dan ekstrim
Memberikan informasi secara cepat banyaknya amatan yang termasuk dalam selang minat tertentu (misal: produk cacat, produk terlaris)
Susun selang-selang nilai yang sama lebar dan meliputi seluruh nilai data yang dimiliki
Hitung banyaknya amatan yang tercakup dalam masing-masing selang
Pada sumbu mendatar, tandai untuk setiap batas selang nilai
Pada setiap selang nilai, gambarkan batang yang tingginya sesuai dengan frekuensinya
Seiring perkembangan teknologi, kita dimudahkan dalam menyajikan data dengan ukuran besar menggunakan berbagai aplikasi yang telah didesain sedemikian rupa sehingga waktu yang digunakan lebih efektif. Salah satu aplikasi tersebut adalah R yang terus berkembang menciptakan program-program untuk memudahkan dalam pengolahan data. Pada materi kali ini, kita akan mencoba menyajikan data dalam bentuk histogram menggunakan software R. Sebelumnya, perlu dipastikan bahwa data yang akan digunakan bertipe numerik.
usia <- read.csv("Usia pasien covid 19.csv", sep =";")
View(usia)
str(usia)
## 'data.frame': 998 obs. of 1 variable:
## $ Usia.pasien.covid: int 30 47 49 47 50 42 59 30 39 38 ...
Dari program di atas, terdapat beberapa hal yang perlu diperhatikan :
Dataset yang digunakan merupakan file bertipe csv.Sedangkan syntax read.csv(“tempat penyimpanan file/namadata.csv”) berarti membaca data yang dengan nama datanya Usia pasien covid 19. Perlu diperhatikan juga bahwa dalam penulisan tempat penyimpanan file harus dipisahkan oleh tanda /.
Syntax sep=“;” atau sep=“,” digunakan untuk merapikan dan memisahkan tiap peubah dalam tabel apabila setelah dicoba tanpa menggunakan sep/separator ternyata tabel yang muncul bertumpuk atau tumpang tindih antarpeubah.
Fungsi View(namadata) bertujuan untuk menampilkan data yang dipanggil dalam bentuk tabel.
Fungsi str(namadata) menunjukkan tipe dari setiap peubah dalam dataset.
Selanjutnya, dari fungsi str(namadata) kita mendapatkan informasi bahwa tipe data peubah usia pasien covid-19 adalah character, sehingga kita perlu mengubahnya dalam tipe numerik. Umumnya syntax yang digunakan sebagai berikut.
usia <- as.numeric(usia)
Error: ‘list’ object cannot be coerced to type ‘double’
Setelah program tersebut dijalankan, maka akan muncul pernyataan eror karena data tidak bisa dipaksa menjadi tipe “double”. Hal tersebut dapat di atasi dengan perintah seperti berikut.
class(unlist(usia))
## [1] "integer"
usia_pasien_covid <- as.numeric(unlist(usia))
usia_pasien_covid
## [1] 30 47 49 47 50 42 59 30 39 38 45 33 37 39 32 45 45 18 56 42 33 44 65 21 41
## [26] 44 30 70 43 31 43 24 40 66 65 36 10 63 37 78 76 48 66 66 63 62 49 46 34 41
## [51] 72 20 54 33 49 42 33 2 29 62 61 20 51 50 72 80 49 69 66 32 28 55 68 30 34
## [76] 30 50 39 56 62 63 62 57 35 40 30 30 37 56 50 35 36 35 27 40 42 33 40 50 42
## [101] 66 52 29 28 22 32 42 23 49 38 62 65 56 35 88 28 31 50 48 36 37 19 60 58 29
## [126] 47 52 51 53 39 34 49 46 46 40 51 37 55 32 24 39 25 56 44 50 42 43 22 43 51
## [151] 38 59 60 35 25 49 41 57 26 30 64 33 28 41 42 24 32 34 63 58 49 27 68 45 65
## [176] 27 48 30 31 40 30 65 2 11 32 66 53 37 35 55 55 73 68 61 74 33 60 35 66 28
## [201] 40 35 43 53 50 51 73 36 54 56 40 43 48 54 47 55 47 46 47 41 36 70 52 44 47
## [226] 58 39 21 42 38 7 43 68 64 21 60 44 53 39 41 31 27 82 34 22 67 52 43 56 15
## [251] 30 33 55 23 28 49 25 40 59 38 37 49 43 39 41 67 52 31 34 24 47 16 32 32 25
## [276] 52 42 51 43 36 41 25 46 50 36 36 32 64 70 25 33 5 15 50 44 22 22 22 22 24
## [301] 22 30 30 64 52 45 40 52 46 49 36 29 26 27 46 66 3 45 56 56 56 56 35 36 32
## [326] 4 52 56 49 34 71 22 16 28 47 35 37 38 42 29 23 34 25 28 44 33 49 80 45 45
## [351] 77 25 55 33 44 22 50 35 72 73 25 31 34 33 37 75 39 31 47 38 31 28 37 51 45
## [376] 27 32 35 34 31 66 48 32 60 38 65 48 63 37 40 57 56 55 31 43 70 53 72 45 62
## [401] 37 33 52 73 25 44 49 60 60 28 62 28 54 25 49 28 40 43 73 37 47 31 31 80 57
## [426] 31 52 59 29 30 77 10 34 61 59 56 28 61 35 42 20 44 75 43 66 44 39 64 74 62
## [451] 5 68 70 39 48 72 73 34 50 36 56 26 73 44 36 38 20 64 59 39 46 94 38 68 29
## [476] 72 48 80 24 75 36 10 47 34 41 42 53 57 57 30 81 32 24 56 52 47 54 50 50 49
## [501] 35 37 24 50 76 38 47 56 32 42 66 36 37 46 43 33 43 42 26 41 63 59 29 42 30
## [526] 28 48 44 41 17 32 70 60 64 42 8 29 69 9 61 51 27 29 56 20 64 65 61 53 27
## [551] 42 56 49 65 52 33 41 51 37 41 45 41 30 25 27 51 66 51 65 49 23 51 49 16 60
## [576] 64 60 62 77 69 49 12 15 46 60 54 62 60 45 37 37 31 33 56 54 38 52 69 32 55
## [601] 48 43 35 29 51 35 28 78 38 36 56 55 63 65 68 46 48 45 47 83 66 35 47 8 51
## [626] 52 45 41 27 60 59 22 45 65 50 77 48 49 66 47 43 67 33 53 50 60 62 42 41 49
## [651] 41 59 64 35 75 61 36 20 45 9 43 49 24 39 11 45 58 53 42 39 65 21 64 63 53
## [676] 39 71 45 27 42 25 84 39 68 49 24 21 55 33 63 30 64 38 35 67 49 42 26 37 24
## [701] 41 54 29 38 29 58 41 56 68 55 27 1 46 55 33 23 27 53 34 79 58 57 45 67 33
## [726] 40 49 29 47 54 60 65 38 26 87 27 4 50 39 2 84 39 68 24 21 55 49 33 21 26
## [751] 64 73 51 51 43 67 37 41 25 54 50 61 66 27 17 51 68 26 30 53 35 27 28 58 33
## [776] 33 50 33 45 24 88 29 21 78 52 60 50 60 29 82 29 55 50 33 7 33 7 44 69 16
## [801] 47 35 8 43 10 55 47 25 47 38 30 26 47 42 34 62 39 40 42 40 64 38 53 24 52
## [826] 51 36 71 39 54 9 31 37 2 35 39 30 34 46 48 37 54 62 39 54 30 30 26 55 30
## [851] 61 51 57 44 54 50 61 28 56 70 65 46 57 27 32 35 79 26 27 25 40 82 43 29 71
## [876] 37 50 1 35 65 58 73 57 35 38 50 69 24 38 77 78 67 68 45 32 30 41 70 64 78
## [901] 40 96 10 62 52 43 44 55 20 40 28 43 32 63 64 19 22 24 53 68 57 50 51 52 41
## [926] 33 20 75 58 47 38 50 62 22 24 36 53 61 21 22 38 35 40 25 33 55 55 36 60 41
## [951] 61 47 20 50 21 16 80 33 55 24 60 77 25 25 50 54 65 62 8 31 29 18 28 72 54
## [976] 43 4 10 10 15 17 17 17 24 26 28 64 44 12 34 55 30 23 45 88 45 38 39
typeof(usia_pasien_covid)
## [1] "double"
Pada program di atas, fungsi unlist() ialah mengubah tipenya menjadi vektor kemudian untuk fungsi as.numeric() untuk mengubah tipenya menjadi tipe vector.i.e. dan jika kita cek kembali, maka tipe data usia pasien covid saat ini berubah menjadi double. Hal ini menandakan eror yang terjadi di atas sudah teratasi dan data usia_pasien_covid dapat digunakan.
hist(usia_pasien_covid)
Interpretasi : Berdasarkan histogram di atas, kita dapat mengetahui sebaran datanya cenderung simetris. Hal ini menandakan bahwa rataan, median dan modusnya bernilai sama.Kita juga mendapatkan informasi bahwa usia pasien covid terbanyak berada pada selang 30-50 tahun dengan jumlah mencapai lebih dari 200 pasien. Sedangkan usia paling tinggi pasien covid-19 berada pada selang 90-100 tahun.
Selain dapat mengetahi frekuensi dari tiap peubah, kita juga dapat mengetahui peluang atau densitas dari peubah tersebut dengan mengubah sumbu y menjadi probability density, maka kita bisa menggunakan opsi freq=FALSE seperti berikut.
hist (usia_pasien_covid,
freq = FALSE)
Interpretasi : Berdasarkan histogram di atas, kita dapat mengetahui sebaran datanya cenderung simetris sehingga nilai median, modus dan rataannya bernilai sama. Selain itu densitas pasien berusia 30-50 lebih dari 0.02 dan pasien berusi 90-100 tahun memiliki densitas mendekati nol.
Setelah mengetahui cara membuat histogram, selanjutnya agar histogram tersebut memberikan informasi yang dapat dipahami maka perlu menambahkan judul sub judul, serta label sumbu x dan y pada histogram. Pada ilustrasi ini sumbu y yang digunakan adalah frekuensi usia pasien covid-19.
hist (usia_pasien_covid,
main ='Histogram Frekuensi Usia Pasien Covid-19 ',
sub = 'Analisis Eksplorasi Data ',
ylab = 'Frekuensi',
xlab = 'Usia Pasien covid')
Berdasarkan syntax di atas, main menunjukkan judul, sub main menunjukkan sub judul, ylab untuk memberi judul pada sumbu y dan xlab untuk memberi judul pada sumbu x.
Secara umum, saat membuat visualisasi data akan lebih menarik jika kita menambahkan warna. Pada software R opsi col= ‘warna yang dipilih’ akan membantu merubah batang histogram menjadi berwarna sesuai dengan yang kita tuliskan dalam syntax. Terdapat berbagai pilihan warna yang bisa digunakan dan untuk detailnya bisa dilihat pada link berikut : https://www.r-graph-gallery.com/42-colors-names.html. Pada ilustasi kali ini, kita akan menggunakan warna hijau sehingga dapat dituliskan col =“green”.
hist (usia_pasien_covid,
main ='Histogram Frekuensi Usia Pasien Covid-19 ',
sub = 'Analisis Eksplorasi Data ',
ylab = 'Frekuensi',
xlab = 'Usia Pasien covid',
col = 'green')
Selain dapat menambahkan judul dan warna pada histogram, kita dapat mengatur jumlah batang sesuai keinginan kita dan akan berdampak pada selang yang terbentuk. Semakin banyak batang maka semakin banyak selang yang terbentuk, dan sebaliknya. Untuk mengubah jumlah batangnya, kita dapat menggunakan syntax berikut.
hist ( data, breaks = seq(min(data), max(data), length.out = n+1))
Contoh penggunaan syntax di atas pada data usia pasien Covid-19 adalah sebagai berikut.
min(usia_pasien_covid)
## [1] 1
max(usia_pasien_covid)
## [1] 96
hist (usia_pasien_covid,
main ='Histogram Frekuensi Usia Pasien Covid-19 ',
sub = 'Analisis Eksplorasi Data ',
ylab = 'Frekuensi',
xlab = 'Usia Pasien covid',
col = 'green',
breaks = seq(1, 96, length.out = 25+1))
Interpretasi : Berdasarkan histogram di atas, terlihat batang histogram yang terbentuk menjadi lebih banyak dari sebelumnya. Hal ini berdampak pada selang yang terbentuk semakin banyak, sehingga informasi yang terbentuk akan semakin beragam.
Namun, hal yang perlu diperhatikan yaitu perbedaan ketika menggunakan syntax (breaks = n) untuk mengatur jumlah batang. R akan menjalankan algoritma untuk memecah data sesuai defaultnya. Jika syntax ini digunakan belum tentu output histogramnya akan memiliki jumlah batang sesuai yang kita inginkan. Sehingga, untuk mengatur jumlah batang sesuai keinginan lebih tepat menggunakan syntax [hist (data, breaks = seq(min(data), max(data), length.out = n+1))].