Saya mencoba membuat grafik jumlah tindakan oleh pengguna (dalam hal ini, "suka") dari waktu ke waktu.
Jadi saya memiliki "Jumlah tindakan" sebagai sumbu y, sumbu x adalah waktu (minggu), dan setiap baris mewakili satu pengguna.
Masalah saya adalah saya ingin melihat data ini untuk sekitar 100 pengguna. Grafik garis dengan cepat menjadi berantakan campur aduk dengan 100 baris. Apakah ada jenis grafik yang lebih baik yang dapat saya gunakan untuk menampilkan informasi ini? Atau haruskah saya melihat mampu mengaktifkan / menonaktifkan jalur individual?
Saya ingin melihat semua data sekaligus, tetapi bisa membedakan jumlah tindakan dengan presisi tinggi tidak terlalu penting.
Kenapa saya melakukan ini
Untuk sebagian pengguna saya (pengguna teratas), saya ingin mencari tahu yang mana yang mungkin tidak menyukai versi baru dari aplikasi yang diluncurkan pada tanggal tertentu. Saya mencari penurunan signifikan dalam jumlah tindakan oleh pengguna individu.
sumber
facet_wrap
fungsi ggplot2 untuk membuat blok grafik 4 x 5 (4 baris, 5 kolom - sesuaikan tergantung pada rasio aspek yang diinginkan) dengan ~ 5 pengguna per grafik. Itu harus cukup jelas dan Anda bisa meningkatkannya menjadi sekitar 10 pengguna per bagan, memberi ruang bagi 200 dengan plot 4x5 atau 360 dengan plot 6x6.Jawaban:
Saya ingin menyarankan analisis awal (standar) untuk menghapus efek utama dari (a) variasi di antara pengguna, (b) respons khas di antara semua pengguna terhadap perubahan, dan (c) variasi khas dari satu periode waktu ke periode berikutnya .
Cara sederhana (tetapi tidak berarti yang terbaik) untuk melakukan ini adalah dengan melakukan beberapa iterasi "median polesan" pada data untuk menyapu rata-rata median pengguna dan median periode waktu, kemudian menghaluskan residu dari waktu ke waktu. Identifikasi smooths yang banyak berubah: mereka adalah pengguna yang ingin Anda tekankan dalam grafik.
Karena ini adalah data jumlah, ide yang bagus untuk mengekspresikannya kembali menggunakan akar kuadrat.
Sebagai contoh dari apa yang dapat terjadi, berikut ini adalah dataset 60 minggu yang disimulasikan dari 240 pengguna yang biasanya melakukan 10 hingga 20 tindakan per minggu. Perubahan dalam semua pengguna terjadi setelah minggu ke-40. Tiga di antaranya "diberitahu" untuk merespons negatif terhadap perubahan tersebut. Plot kiri menunjukkan data mentah: jumlah tindakan oleh pengguna (dengan pengguna dibedakan berdasarkan warna) dari waktu ke waktu. Seperti ditegaskan dalam pertanyaan, itu berantakan. Plot yang tepat menunjukkan hasil EDA ini - dengan warna yang sama seperti sebelumnya - dengan pengguna yang luar biasa responsif secara otomatis diidentifikasi dan disorot. Identifikasi - meskipun agak ad hoc - lengkap dan benar (dalam contoh ini).
Berikut adalah
R
kode yang menghasilkan data ini dan melakukan analisis. Ini dapat ditingkatkan dalam beberapa cara, termasukGunakan semir penuh untuk menemukan residu, bukan hanya satu iterasi.
Menghaluskan residunya secara terpisah sebelum dan sesudah titik perubahan.
Mungkin menggunakan algoritma pendeteksian pencilan yang lebih canggih. Yang saat ini hanya menandai semua pengguna yang rentang residunya lebih dari dua kali rentang median. Meskipun sederhana, itu kuat dan tampaknya berfungsi dengan baik. (Nilai yang
threshold
dapat diatur pengguna ,, dapat disesuaikan untuk membuat identifikasi ini lebih atau kurang ketat.)Namun pengujian menyarankan solusi ini bekerja dengan baik untuk berbagai jumlah pengguna, 12 - 240 atau lebih.
sumber
threshold
n.users <- 500
n.outliers <- 100
threshold <- 2.5
Secara umum saya menemukan lebih dari dua atau tiga baris pada satu sisi plot mulai sulit dibaca (walaupun saya masih melakukannya sepanjang waktu). Jadi ini adalah contoh menarik tentang apa yang harus dilakukan ketika Anda memiliki sesuatu yang secara konseptual bisa menjadi plot 100 faset. Salah satu cara yang mungkin adalah menggambar semua 100 aspek tetapi alih-alih mencoba untuk mendapatkan semuanya pada halaman sekaligus, melihatnya satu per satu dalam sebuah animasi.
Kami sebenarnya menggunakan teknik ini di pekerjaan saya - kami awalnya membuat animasi yang menampilkan 60 plot garis berbeda sebagai latar belakang untuk suatu acara (peluncuran seri data baru), kemudian menemukan bahwa dengan melakukan itu kami benar-benar mengambil beberapa fitur data. yang belum pernah terlihat dalam bidang faceted dengan 15 atau 30 aspek per halaman.
Jadi di sini adalah cara alternatif untuk menyajikan data mentah, sebelum Anda mulai menghapus pengguna dan efek waktu yang khas seperti yang direkomendasikan oleh @whuber. Ini disajikan hanya sebagai alternatif tambahan untuk penyajiannya data mentah - Saya sepenuhnya menyarankan Anda kemudian melanjutkan dengan analisis seperti yang ia sarankan.
Salah satu cara untuk mengatasi masalah ini adalah dengan menghasilkan plot seri 100 (atau 240 dalam contoh @ whuber) secara terpisah dan menyatukannya menjadi sebuah animasi. Kode di bawah ini akan menghasilkan 240 gambar terpisah dari jenis ini dan kemudian Anda dapat menggunakan perangkat lunak pembuatan film gratis untuk mengubahnya menjadi film. Sayangnya satu-satunya cara saya bisa melakukan ini dan menjaga kualitas yang dapat diterima adalah file 9MB, tetapi jika Anda tidak perlu mengirimkannya di internet yang mungkin tidak menjadi masalah dan lagi pula saya yakin ada cara lain dengan sedikit lebih banyak cerdas animasi. Paket animasi dalam R dapat berguna di sini (memungkinkan Anda melakukan semuanya dengan panggilan dari R) tetapi saya tetap membuatnya sederhana untuk ilustrasi ini.
Saya telah membuat animasi sedemikian rupa sehingga menarik setiap garis dalam hitam pekat kemudian meninggalkan bayangan hijau semi-transparan pucat di belakang sehingga mata mendapatkan gambar bertahap dari data yang terakumulasi. Ada risiko dan peluang dalam hal ini - urutan penambahan garis akan meninggalkan kesan yang berbeda, jadi Anda harus mempertimbangkan untuk membuatnya bermakna dalam beberapa cara.
Berikut adalah beberapa stills dari film, yang menggunakan data yang sama yang dihasilkan @whuber:
sumber
windows()
atauquartz()
, dan kemudian meletakkanfor()
lingkaran Anda di dalamnya. NB, Anda harus meletakkan aSys.sleep(1)
di bagian bawah loop Anda sehingga Anda benar-benar dapat melihat iterasi. Tentu saja, strategi ini sebenarnya tidak menyimpan file film - Anda hanya perlu menjalankannya kembali setiap kali Anda ingin menontonnya lagi.Salah satu hal termudah adalah boxplot. Anda dapat segera melihat bagaimana median sampel Anda bergerak dan hari-hari apa yang memiliki outlier paling banyak.
Untuk analisis individual, saya sarankan mengambil sampel acak kecil dari data Anda dan menganalisis deret waktu terpisah.
sumber
Yakin. Pertama, urutkan berdasarkan jumlah tindakan rata-rata. Kemudian buat (katakanlah) 4 grafik, masing-masing dengan 25 garis, satu untuk setiap kuartil. Itu berarti Anda dapat mengecilkan sumbu-y (tetapi memperjelas label sumbu y). Dan dengan 25 garis, Anda dapat memvariasikannya berdasarkan jenis dan warna garis dan mungkin memplot simbol dan mendapatkan kejelasan
Kemudian susun grafik secara vertikal dengan sumbu waktu tunggal.
Ini akan sangat mudah di R atau SAS (setidaknya jika Anda memiliki v. 9 dari SAS).
sumber
Saya menemukan bahwa ketika Anda kehabisan jika opsi mengenai jenis jika grafik dan pengaturan grafik pengenalan waktu melalui animasi adalah cara terbaik untuk ditampilkan karena memberi Anda dimensi ekstra untuk bekerja dengan dan memungkinkan Anda untuk menampilkan lebih banyak informasi dengan cara yang mudah diikuti. . Fokus utama Anda harus pada pengalaman pengguna akhir.
sumber
Jika Anda paling tertarik dengan perubahan untuk pengguna individual, mungkin ini adalah situasi yang baik untuk koleksi Sparklines (seperti contoh ini dari The Pudding ):
Ini cukup detail, tetapi Anda bisa menampilkan lebih banyak grafik sekaligus dengan menghapus label dan unit sumbu.
Banyak alat data yang membuatnya ( Microsoft Excel memiliki grafik mini ), tapi saya kira Anda ingin menarik paket untuk membuatnya di R.
sumber