Bagaimana saya bisa menemukan kolom median dalam database?


8

Saya memiliki data tentang periode konstruksi untuk tempat tinggal di daerah penyebaran. Saya telah mentransfer data ini ke area studi saya dan ingin menentukan periode median konstruksi untuk setiap area studi. Satu-satunya masalah adalah bahwa informasi kolom adalah jumlah tempat tinggal dan saya tidak ingin median ini, tetapi judul kolom untuk mengisi baris dalam bidang baru (atau sesuatu yang menunjukkan itu, lebih disukai periode dalam teks format, tapi ini bukan akhir dunia jika hanya angka yang menunjukkan periode).

Saya melampirkan gambar tabel atribut dengan bidang yang relevan disorot. Ada bidang MEDIAN tetapi data yang saya gunakan dibuat oleh orang lain dan tidak terdokumentasi dengan baik, jadi saya tidak yakin apakah perhitungannya sudah dilakukan atau belum.

(Tujuh kolom mewakili tujuh periode waktu yang tidak tumpang tindih yang dipesan secara kronologis. Kolom [Median] tampaknya mengindeks periode di mana total konstruksi setengah selesai; yaitu, ia mencatat waktu rata - rata. )

Cuplikan layar tabel


1
Apakah Anda menanyakan nama (atau indeks) bidang tempat nilai median terjadi? (Itu jelas bukan nilai [Median] saat ini.) Atau apakah Anda mungkin menanyakan nama (atau indeks) periode waktu selama paruh pertama dari semua konstruksi ditemui? Misalnya, di baris 1, total konstruksi pada akhir periode berjalan 45, 180, 485, 1495, 1995, 2130, 2130. Median 2130/2 = 1065 terjadi selama periode keempat (dan, tentu saja, [Median ] = 4). Itu biasanya tidak disebut "median," tetapi terlihat konsisten dengan data saat ini.
Whuber

@whuber, saya hanya paranoid bahwa itu tidak benar, karena orang yang menyusun ini di Vancouver dan saya tidak bisa langsung bertanya kepadanya dan dia tidak mendokumentasikan apa pun dalam metadata.
Emily

Saya masih tidak tahu apa arti "median kolom" - dapatkah seseorang mengulangi judul dan pertanyaan?
blah238

1
@blah Terminologi memang benar, seperti yang dijelaskan di awal jawaban saya dan selanjutnya diklarifikasi dalam komentar untuk jawaban oleh Nathanus. Untuk menanggapi permintaan Anda, saya telah menambahkan paragraf ke pertanyaan.
whuber

Jawaban:


8

Dengan asumsi kolom muncul dalam urutan waktu, baris pertama (misalnya) menunjukkan bahwa total konstruksi melalui setiap periode berjalan

0, 0+45 = 45, 45+135 = 180, 180+405 = 585, 585+1010 = 1595, ..., 2230+0 = 2230.

Konstruksi setengah jalan pada 2230/2 = 1115. Ini terjadi selama periode 4, karena pada akhir periode 3 totalnya adalah 585, pada akhir periode 4 totalnya adalah 1595, dan 585 <= 1115 <1595.

Ini tampaknya merupakan hasil yang dilaporkan oleh kolom [Median], yang memberikan indeks periode (mulai dari 1 di sebelah kiri).

Anda dapat mengkodekan ini dalam bahasa favorit Anda . Tabelnya sangat kecil (100 baris), sehingga spreadsheet akan nyaman, jika hanya untuk memeriksa apa yang Anda lakukan secara lebih formal dengan Python atau apa pun. Begini tampilannya:

Spreadsheet

Tiga baris data pertama memiliki nilai yang sama dengan milik Anda. Dua baris data berikutnya (dikelilingi oleh baris kosong) dipilih lebih jauh di tabel Anda. Lima baris data terakhir menggunakan algoritme sedikit.

(Perhatikan, seperti yang ditunjukkan dalam dua baris terakhir spreadsheet, bagaimana Excel memilih periode berikutnya setiap kali bagian tengah jatuh tepat di antara dua periode. Ini tidak selalu merupakan jawaban yang "benar", tetapi itu adalah yang valid.)

Berikut adalah rumus di kolom H: R:

Formula

Anda tidak harus mengetik semuanya. Satu-satunya pengetikan yang dibutuhkan adalah:

  • =H2+A2di I2. Seret ini melalui O2. Ini menghitung jumlah kumulatif. Ini mensyaratkan bahwa kolom A: G berada dalam urutan kronologis.

  • =O2/2dalam P2. Ini menemukan setengah dari total.

  • =Match(P2,H2:O2,1)di Q2. Ini mengindeks kolom di mana konstruksi setengah selesai.

  • =Offset($A$1:$G$1,0 0, Q2-1, 1, 1)dalam R2. Ini mendapatkan judul kolom yang sesuai dengan indeks.

Kemudian tempel 0di semua kolom H dan seret I2: R2 ke baris sebanyak yang diperlukan.

Ini secara efektif berfungsi sebagai pseudocode untuk algoritma. Bagian tersulit akan menjadi pencarian untuk mengimplementasikan MATCHfungsi Excel . Tapi itu tidak memerlukan keahlian apa pun: tidak efisien untuk mencari setiap array jumlah kumulatif secara berurutan (daripada dengan algoritma pencarian biner yang disukai) karena array ini sangat pendek.


Terima kasih banyak whuber! Ini yang saya cari. :)
Emily

1

Jika Anda ingin mengembalikan kolom median, saya mungkin akan menggunakan kursor python untuk beralih melalui baris. Gunakan bidang untuk mengisi daftar lalu kembalikan item tengah (akan diindeks pada [3] untuk 7 item) setelah memanggil fungsi sortir () pada daftar yang telah Anda buat. Saya akan menulis sedikit kode ketika saya kembali dari makan siang.


Tunda pengodean sampai Anda yakin inilah yang dibutuhkan!
whuber

Entah itu tahun atau jumlahnya hanya perbedaan antara kamus dan daftar, saya harus berpikir.
Nathanus

Saya telah secara manual memeriksa komentar a la @ whuber pada pertanyaan saya dan mungkin kolomnya benar, meskipun akan lebih baik untuk mengetahui bagaimana melakukan ini untuk wilayah studi mendatang (yang tidak memiliki kolom ini)
Emily

Saya pikir ini perhitungan yang sangat berbeda, @Nathanus. Yang satu memandang data sebagai sekumpulan hitungan yang tidak teratur {x1, x2, ..., x7} sedangkan yang lain melihatnya sebagai perbedaan dalam suatu urutan (0, x1, x1 + x2, x1 + x2 + x3, ..., x7) mewakili distribusi kumulatif dari waktu ke waktu. Median hitungan akan menjadi nilai yang dilampaui oleh tiga dari mereka dan lebih besar dari atau sama dengan tiga lainnya. Median distribusi kumulatif adalah waktu, bukan hitungan, dan ditemukan menggunakan metode yang dijelaskan dalam balasan saya.
whuber

1
Anda benar: perbedaannya tidak jelas dalam pertanyaan. Itu hanya keluar di komentar. Saya telah memasukkan paragraf penjelasan singkat dalam pertanyaan.
whuber
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.