https://www.kaggle.com/datasets/shankarpriya2913/crop-and-soil-dataset?resource=download
Dataset yang digunakan dalam analisis ini adalah Crop and Soil DataSet yang diperoleh dari platform Kaggle, diunggah oleh pengguna bernama Shankar. Dataset ini berisi informasi terkait pertanian, seperti jenis tanah (Soil Type), jenis tanaman (Crop Type), suhu (Temperature), kelembapan udara (Humidity), kelembapan tanah (Moisture), kandungan unsur hara Nitrogen, Potassium, Fosfor, serta jenis pupuk (Fertilizer Name). Data tersebut dapat digunakan untuk mempelajari karakteristik tanah dan kondisi lingkungan yang berkaitan dengan berbagai jenis tanaman.
Dataset ini dipilih karena memiliki variabel yang beragam dan relevan dengan bidang pertanian, sehingga cocok untuk dianalisis menggunakan RStudio. Selain itu, data ini menyediakan kombinasi variabel numerik dan kategorik yang dapat divisualisasikan melalui histogram, pie chart, dan grafik lainnya. Dengan menggunakan dataset ini, analisis dapat memberikan gambaran yang lebih mudah dipahami mengenai distribusi kondisi tanah, komposisi jenis tanaman, serta perbedaan kandungan unsur hara berdasarkan jenis tanaman. Dataset ini juga menarik untuk dipelajari karena berkaitan dengan penerapan analisis data dalam mendukung pemahaman di bidang pertanian.
# Memanggil package
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Membaca dataset
data <- read.csv("datacrop.csv", header = TRUE)
# Menampilkan 6 baris pertama
head(data)
# Melihat nama kolom
names(data)
## [1] "Temparature" "Humidity" "Moisture" "Soil.Type"
## [5] "Crop.Type" "Nitrogen" "Potassium" "Phosphorous"
## [9] "Fertilizer.Name"
# Membaca dataset
data <- read.csv("datacrop.csv", check.names = FALSE)
# Menghitung frekuensi setiap jenis tanah
df <- data %>%
group_by(`Soil Type`) %>%
summarise(counts = n(), .groups = "drop")
# Menampilkan tabel frekuensi
df
# Menghitung persentase dan posisi label
df <- df %>%
arrange(desc(`Soil Type`)) %>%
mutate(
prop = round(counts * 100 / sum(counts), 1),
lab.ypos = cumsum(prop) - 0.5 * prop
)
# Menampilkan hasil perhitungan
df
# Membuat pie chart distribusi jenis tanah
ggplot(df, aes(x = "", y = prop, fill = `Soil Type`)) +
geom_bar(width = 1, stat = "identity", color = "white") +
geom_text(
aes(y = lab.ypos, label = paste0(prop, "%")),
color = "white",
size = 4
) +
coord_polar("y", start = 0) +
scale_fill_brewer(palette = "Set1") +
labs(
title = "Distribusi Persentase Jenis Tanah",
fill = "Jenis Tanah"
) +
theme_void()
Pie chart menunjukkan bahwa distribusi jenis tanah dalam dataset datacrop.csv relatif merata. Jenis tanah Clayey memiliki proporsi terbesar, yaitu 20,3% atau sebanyak 1.623 data. Sementara itu, Sandy memiliki proporsi terkecil, yaitu 19,8% atau sebanyak 1.580 data. Selisih persentase antara kategori terbesar dan terkecil hanya sekitar 0,5 poin persentase. Hal ini menunjukkan bahwa tidak terdapat satu jenis tanah yang mendominasi dataset secara signifikan.
# Menghitung frekuensi setiap jenis tanaman
df_crop <- data %>%
group_by(`Crop Type`) %>%
summarise(counts = n(), .groups = "drop")
# Menampilkan tabel frekuensi
print(df_crop, n = Inf)
## # A tibble: 11 × 2
## `Crop Type` counts
## <chr> <int>
## 1 Barley 703
## 2 Cotton 722
## 3 Ground Nuts 732
## 4 Maize 753
## 5 Millets 718
## 6 Oil seeds 711
## 7 Paddy 706
## 8 Pulses 728
## 9 Sugarcane 763
## 10 Tobacco 717
## 11 Wheat 747
# Menghitung persentase dan posisi label
df_crop <- df_crop %>%
arrange(desc(`Crop Type`)) %>%
mutate(
prop = round(counts * 100 / sum(counts), 1),
lab.ypos = cumsum(prop) - 0.5 * prop
)
# Menampilkan hasil perhitungan
print(df_crop, n = Inf)
## # A tibble: 11 × 4
## `Crop Type` counts prop lab.ypos
## <chr> <int> <dbl> <dbl>
## 1 Wheat 747 9.3 4.65
## 2 Tobacco 717 9 13.8
## 3 Sugarcane 763 9.5 23.0
## 4 Pulses 728 9.1 32.4
## 5 Paddy 706 8.8 41.3
## 6 Oil seeds 711 8.9 50.2
## 7 Millets 718 9 59.1
## 8 Maize 753 9.4 68.3
## 9 Ground Nuts 732 9.2 77.6
## 10 Cotton 722 9 86.7
## 11 Barley 703 8.8 95.6
# Membuat pie chart distribusi jenis tanaman
ggplot(df_crop, aes(x = "", y = prop, fill = `Crop Type`)) +
geom_bar(width = 1, stat = "identity", color = "white") +
geom_text(
aes(y = lab.ypos, label = paste0(prop, "%")),
color = "white",
size = 3.5
) +
coord_polar("y", start = 0) +
scale_fill_viridis_d(option = "turbo") +
labs(
title = "Distribusi Persentase Jenis Tanaman",
fill = "Jenis Tanaman"
) +
theme_void()
Pie Chart ini menunjukkan distribusi 11 jenis tanaman dalam dataset. Sugarcane memiliki jumlah data terbanyak, yaitu 763 data, sedangkan Barley memiliki jumlah paling sedikit, yaitu 703 data. Jumlah data setiap jenis tanaman relatif berdekatan, sehingga tidak terdapat satu kategori tanaman yang mendominasi dataset secara mencolok.
ggplot(data, aes(x = Temparature)) +
geom_histogram(
binwidth = 1,
fill = "coral",
color = "white",
alpha = 0.8
) +
labs(
title = "Distribusi Frekuensi Suhu Lingkungan (Temperature)",
x = "Suhu (°C)",
y = "Frekuensi"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
axis.title = element_text(face = "bold")
)
Suhu lingkungan pada dataset terdistribusi dalam rentang antara 20°C hingga 40°C. Sebagian besar data terkonsentrasi pada rentang suhu pertengahan, yaitu sekitar 26°C hingga 34°C. Puncak frekuensi tertinggi berada di sekitar nilai 30°C, yang menunjukkan bahwa kondisi suhu paling umum terjadi pada wilayah/kondisi lahan dalam dataset ini adalah sekitar 30°C.
ggplot(data, aes(x = Moisture)) +
geom_histogram(
binwidth = 2,
fill = "skyblue",
color = "white",
alpha = 0.8
) +
labs(
title = "Distribusi Kelembapan Tanah (Moisture)",
x = "Kelembapan Tanah (%)",
y = "Frekuensi"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
axis.title = element_text(face = "bold")
)
Histogram menunjukkan bahwa nilai kelembapan tanah pada dataset tersebar dalam rentang sekitar 20% hingga 70%. Frekuensi data meningkat dari kisaran 20% dan mencapai puncak pada kisaran 35%–40%, yang menunjukkan bahwa kelembapan tanah pada rentang tersebut paling banyak ditemukan dalam sampel. Sebagian besar data berada pada kisaran 30%–55%, sedangkan nilai kelembapan di atas 60% cenderung memiliki frekuensi lebih rendah. Pola ini menggambarkan bahwa sampel tanah dalam dataset memiliki tingkat kelembapan yang bervariasi, dengan konsentrasi terbesar pada tingkat kelembapan sedang.
ggplot(data, aes(x = Nitrogen, y = Phosphorous, color = `Crop Type`)) +
geom_point(alpha = 0.6, size = 2) +
geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed") +
scale_color_viridis_d(option = "turbo") +
labs(
title = "Hubungan Antara Kandungan Nitrogen dan Phosphorous",
x = "Kandungan Nitrogen (N)",
y = "Kandungan Phosphorous (P)",
color = "Jenis Tanaman"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
axis.title = element_text(face = "bold")
)
## `geom_smooth()` using formula = 'y ~ x'
Titik-titik tersebar secara menyeluruh di sepanjang bidang koordinat. Garis tren cenderung datar/horizontal, mengindikasikan bahwa tidak ada hubungan linear yang kuat antara kadar Nitrogen dan Phosphorous pada dataset secara umum. Pemetaan berdasarkan warna Crop Type menunjukkan bahwa setiap kelompok tanaman memiliki kombinasi nutrisi yang bervariasi.
ggplot(data, aes(x = `Soil Type`, fill = `Crop Type`)) +
geom_bar(position = "fill") +
scale_y_continuous(labels = scales::percent) +
scale_fill_viridis_d(option = "turbo") +
labs(
title = "Proporsi Jenis Tanaman pada Setiap Jenis Tanah",
x = "Jenis Tanah",
y = "Persentase Komposisi",
fill = "Jenis Tanaman"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
axis.title = element_text(face = "bold")
)
Stacked bar chart menunjukkan komposisi persentase 11 jenis tanaman pada masing-masing jenis tanah, yaitu Black, Clayey, Loamy, Red, dan Sandy. Secara umum, proporsi jenis tanaman pada setiap jenis tanah terlihat relatif seimbang, dengan masing-masing tanaman menyumbang sekitar 8%–10% dari total data pada tiap jenis tanah. Meskipun terdapat sedikit perbedaan proporsi antarjenis tanaman dan jenis tanah, tidak terlihat adanya satu jenis tanaman yang mendominasi secara mencolok. Hal ini menunjukkan bahwa dalam dataset, berbagai jenis tanaman tercatat pada seluruh jenis tanah dengan komposisi yang cukup merata.
# 1. Menyiapkan tabel rata-rata Nitrogen per Jenis Tanaman
freqtab <- data %>%
group_by(`Crop Type`) %>%
summarise(Freq = mean(Nitrogen), .groups = "drop") %>%
rename(Var1 = `Crop Type`)
# 2. Membuat Needle Chart Rata-rata Nitrogen
ggplot(data = freqtab, mapping = aes(x = reorder(Var1, Freq), y = Freq)) +
geom_segment(
aes(x = reorder(Var1, Freq), xend = reorder(Var1, Freq), y = 0, yend = Freq),
color = "skyblue"
) +
geom_point(color = "navyblue", size = 4, alpha = 0.6) +
geom_text(aes(label = round(Freq, 1)), hjust = -0.3, size = 3.5) +
coord_flip() +
scale_y_continuous(limits = c(0, max(freqtab$Freq) * 1.15)) +
labs(
title = "Rata-Rata Kandungan Nitrogen Berdasarkan Jenis Tanaman",
x = "Jenis Tanaman",
y = "Rata-Rata Kandungan Nitrogen (ppm)"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
axis.title = element_text(face = "bold")
)
Visualisasi needle chart menunjukkan perbandingan rata-rata kandungan Nitrogen (ppm) pada tanah untuk setiap jenis tanaman dalam dataset. Tanaman Millets memiliki rata-rata kandungan Nitrogen tertinggi, yaitu 19,2 ppm, diikuti oleh Maize sebesar 18,9 ppm dan Sugarcane sebesar 18,8 ppm. Sementara itu, Barley memiliki rata-rata terendah, yaitu 17,9 ppm. Secara keseluruhan, rata-rata kandungan Nitrogen seluruh jenis tanaman berada pada rentang 17,9–19,2 ppm, sehingga perbedaannya relatif kecil. Hal ini menunjukkan bahwa nilai rata-rata Nitrogen pada kelompok tanaman dalam dataset cenderung berdekatan, meskipun terdapat sedikit variasi antarjenis tanaman.