Analyzing the Effect of Weather on Policing Activity

Insan Cahya Setia
7 min readMay 2, 2021
https://openpolicing.stanford.edu/

Halo semuanya. Kali ini kita melakukan analisis pengaruh cuaca terhadap aktivitas pemberhentian lalu lintas di negara bagian Rhode Island. Pembahasan ini merupakan kelanjutan dari sesi sebelumnya yaitu Policing Activity Analysis for Traffic Stop in Rhode Island. Bagi kalian yang ingin melihat analisis yang sudah saya lakukan pada topik diatas, kalian bisa melihatnya disini. Library yang akan kita gunakan yaitu Pandas untuk manipulasi data dan Matplotlib untuk visualisasi data.

Pada bagian ini, kita akan menggunakan dataset kedua untuk mengeksplorasi dampak kondisi cuaca terhadap aktivitas polisi selama perhentian lalu lintas. Kita akan melakukan penggabungan dan pembentukan ulang dataset, menilai apakah sumber data dapat dipercaya, bekerja dengan data kategorikal, dan keterampilan lainnya.

Data cuaca yang akan kita gunakan dikumpulkan oleh National Centers for Environmental Information. Dalam situasi yang ideal, kita dapat melihat riwayat cuaca di lokasi untuk setiap perhentian. Karena tidak tersedia, kita akan menggunakan data dari satu stasiun cuaca di dekat pusat Rhode Island. Ini mungkin tidak ideal, tetapi karena ini adalah negara bagian terkecil, itu masih bisa memberi kita gambaran umum tentang cuaca di seluruh negara bagian.

Pertama kita akan melihat lima data cuaca teratas di pusat Rhode Island menggunakan function head(). Simpan data ke dalam dataframe weather.

Lima data teratas

Selanjutnya kita akan melihat informasi data cuaca yang kita gunakan menggunakan function info().

Informasi dataset

Dari gambar diatas jumlah baris data cuaca yaitu sebanyak 4017 dengan 27 kolom.

Penjelasan dari kolom data cuaca diatas sebagai berikut :

  • TAVG, TMIN, TMAX: Temperature (Fahrenheit)
  • AWND, WSF2: Wind speed (miles/hour)
  • WT01 ... WT22: Bad weather conditions

Visualisasi Suhu

Dalam latihan ini, kita akan memeriksa kolom suhu dari dataset cuaca untuk menilai apakah data tersebut tampak masuk akal. Pertama kita akan melihat statistik deskriptif, dan kemudian kita akan memvisualisasikan data suhu menggunakan boxplot.

Saat memutuskan apakah nilainya tampak masuk akal, perlu diingat bahwa suhu diukur dalam derajat Fahrenheit, bukan Celcius!

Statistik deskriptif
Visualisasi data suhu

Pada visualisasi diatas terlihat data suhu terlihat bagus sejauh ini. Rata-rata suhu (TAVG ) nilainya berada di antara suhu minimal (TMIN) dan suhu maksimal (TMAX), dan pengukuran serta rentangnya tampak masuk akal.

Visualisasi perbedaan suhu

Dalam latihan ini, kita akan terus melihat apakah dataset tersebut tampak dapat dipercaya dengan memplot perbedaan antara suhu maksimum dan minimum. Kita akan membuat kolom baru yaitu TDIFF yang merupakan perbedaan suhu maksimal dan minimal.

Pada visualisasi diatas kolom TDIFF tidak memiliki nilai-nilai negatif dan distribusinya normal, keduanya merupakan tanda-tanda bahwa data tersebut dapat dipercaya.

Counting bad weather conditions

Data cuaca berisi 20 kolom yang dimulai dengan WT, yang masing-masing mewakili kondisi cuaca buruk. Sebagai contoh:

  • WT05 menunjukkan "Hujan es (Hail)"
  • WT11 menunjukkan "Angin kencang atau merusak (High or damaging winds)"
  • WT17 menunjukkan "Hujan beku (Freezing rain)"

Untuk setiap baris dalam data cuaca, setiap kolom WT berisi antara 1 (artinya kondisinya ada pada hari itu) atau NaN(artinya kondisinya tidak ada).

Dalam latihan ini, kita akan menghitung “seberapa buruk” cuaca setiap hari dengan menghitung jumlah nilai 1 di setiap baris.

Karena NaN berarti pada hari tersebut tidak terjadi cuaca buruk (cuaca bagus), maka kita bisa mengisi nilai NaN (missing value) dengan angka nol.

Sepertinya berhari-hari tidak ada kondisi cuaca buruk, dan hanya sebagian kecil hari yang memiliki lebih dari empat kondisi cuaca buruk.

Kategori kondisi cuaca

Pada latihan sebelumnya, kita telah menghitung jumlah kondisi cuaca buruk setiap hari. Dalam latihan ini, kita akan menggunakan hitungan untuk membuat kategori sistem penilaian cuaca dari kolom bad_condition. Simpan hasilnya pada kolom baru, yaitu rating.

Hitungannya berkisar dari 0 hingga 9, dan harus diubah menjadi kategori sebagai berikut:

  • Konversi 0 ke ’good’
  • Konversi 1 sampai 4 ke ‘bad’
  • Konversi 5 sampai 9 ke ‘worse’

Setelah kita lakukan konversi selanjutnya tampilkan jumlah baris untuk setiap kategori kondisi cuaca.

Sistem pengkategorian ini seharusnya membuat data kondisi cuaca lebih mudah dipahami.

Merubah tipe data ke kategori

Karena kolom rating hanya memiliki beberapa kemungkinan nilai, kita akan merubah tipe datanya menjadi “category” untuk menyimpan data dengan lebih efisien. Kita juga akan menentukan urutan yang masuk akal untuk kategori, yang akan berguna untuk latihan selanjutnya. Urutan untuk kategori kondisi cuaca yaitu good < bad < worse. Gunakan pandas.Categorical() untuk merubah tipe data kolom rating.

Kolom rating

Mempersiapkan DataFrame

Dalam latihan ini, kita akan menyiapkan data perhentian lalu lintas pada sesi sebelumnya dan data kondisi cuaca sehingga siap untuk digabungkan:

  1. Dengan dataframe police dari sesi sebelumnya, kita akan melakukan reset indeks stop_datetime karena indeks akan hilang selama penggabungan.
  2. Dengan dataframe weather, kita akan memilih hanya kolom DATE dan rating, lalu simpan ke dalam dataframe baru bernama weather_rating.
DataFrame police
DataFrame weather_rating

DataFrame police dan weather_rating sekarang siap untuk digabung.

Penggabungkan DataFrames

Dalam latihan ini, kita akan menggabungkan dataframe police dan weather_rating menjadi dataframe baru, yaitu police_weather.

Karena penggabungan memerlukan kolom yang sama pada kedua dataframe, maka penggabungan akan menggunakan kolom stop_date dari dataframe police dan kolom DATE dari dataframe weather_rating. Pastikan format tanggal kedua kolom sama.

Setelah penggabungan selesai, kita akan menjadikan kembali kolom stop_datetime menjadi indeks.

Dataframe police_weather

Terlihat bahwa kedua dataframe sudah menjadi satu, terlihat kolom DATE dan rating sudah ditambahkan ke dalam dataframe.

Apakah cuaca mempengaruhi tingkat penangkapan?

Karena data perhentian lalu lintas dan cuaca sudah bergabung, kita menjadi leluasa untuk melakukan analisis pada data perhentian lalu lintas dan data cuaca.

Apakah polisi lebih sering menangkap pengemudi pada saat cuaca buruk? Kita akan cari tahu :

  • Pertama, kita akan menghitung tingkat penangkapan secara keseluruhan.
  • Kemudian, kita akan menghitung tingkat penangkapan untuk setiap kondisi cuaca yang telah kita tetapkan sebelumnya.
  • Terakhir, kita akan menambahkan jenis pelanggaran sebagai faktor kedua dalam analisis, untuk melihat apakah itu menjelaskan perbedaan dalam tingkat penangkapan.

Karena sebelumnya kita telah menetapkan urutan untuk kategori cuaca good < bad < worse, maka data akan diurutkan seperti berikut.

Hitung persentase tingkat penangkapan keseluruhan perhentian lalu lintas menggunakan kolom is_arrested.

Percentage arrest rate

Dari hasil diatas terihat bahwa persentase tingkat penangkapan saat perhentian lalu lintas berakhir dengan penangkapan yaitu dengan persentase sekitar 3.56%.

Selanjutnya lakukan grouping untuk menghitung tingkat penangkapan setiap kondisi cuaca.

Number of arrest rate

Hitung tingkat penangkapan untuk setiap jenis pelanggaran dan kondisi cuaca.

Number of arrest rate by violation and weather condition

Jumlah penangkapan meningkat pada saat cuaca buruk dan terjadi penurunan saat cuaca semakin memburuk, dan tren tersebut terus berlanjut di hampir semua jenis pelanggaran. Ini tidak membuktikan adanya hubungan sebab akibat, tapi ini hasil yang cukup menarik!

Memilih dari Series multi-indeks

Data hasil dari operasi grouping pada banyak kolom adalah dalam bentuk Series dengan MultiIndex. Bekerja dengan objek data ini mirip dengan bekerja dengan DataFrame meskipun berbeda.

Untuk melihat tipe hasil grouping kita bisa menggunakan function type().

Type arrest rate
  • Tingkat indeks luar seperti baris DataFrame.
  • Tingkat indeks bagian dalam seperti kolom DataFrame.

Dalam latihan ini, kita akan berlatih mengakses jumlah jenis pelanggaran “Moving violation” pada saat cuaca buruk dan “Speeding” dari Series multi-indeks menggunakan .loc[].

Use of the multi index series

Membentuk ulang data tingkat penangkapan

Dalam latihan ini, kita akan mulai dengan membentuk ulang tingkat penangkapan hasil grouping sebelumnya menjadi DataFrame. Ini adalah langkah yang berguna saat bekerja dengan Series multi-index, karena memungkinkan kita mengakses berbagai metode DataFrame. Kita dapat menggunakan function unstack() untuk melakukan hal tersebut.

Reshaping arrest rate series

Terlihat bahwa hasil pembentukan ulang tingkat penangkapan hasil grouping menjadi lebih mudah untuk dipahami daripada hasil sebelumnya.

Selesai sudah pembahasan kita kali ini tentang data perhentian lalu lintas dan data cuaca yang merupakan kelanjutan dari sesi sebelumnya. Dari analisis yang sudah kita lalukan, apakah Anda menemukan insight yang menarik?

Bagi kalian yang ingin melihat full project nya kalian bisa lihat disini.

Sampai jumpa di lain kesempatan, tunggu pembahasan-pembahasan lain yang akan saya paparkan di waktu yang akan datang. So stay tune… #dontstoptolearn

--

--