Büyük veri setlerinin keşif analizleri kontrol altında nasıl tutulur?


22

Büyük bir veri setinde (birçok örnek, birçok değişken) keşif analizine başladığımda, kendimi sık sık yüzlerce türetilmiş değişkenle ve tonlarca farklı grafikle ve nereye gittiğini izlemenin gerçek bir yolunu bulamıyorum. Kod spagetti gibi biter, çünkü en baştan bir yön yok ...

Keşif analizini temiz ve düzenli tutmak için önerilen yöntemler var mı? Özellikle birden fazla keşif dalını (çıkmaz olanlar dahil) ve farklı parsel versiyonlarıyla nasıl başa çıkabilirsiniz?


Başvuru için, jeobilimsel veriler üzerinde çalışıyorum (zaman içinde, bazen uzayda da birçok değişken var). Genellikle Python veya R ile çalışıyorum ve her şeyi git içinde saklıyorum ve IPython Not Defteri'ni de deniyorum. Bununla birlikte, cevapların diğer alanlarda (büyük?) Verilerle, tüm alanlardaki insanlar için biraz genel ve faydalı olması iyi olurdu .


1
Rekabetçi tahmin veya tahmin yöntemlerini değerlendirmek için tasarlanan simülasyon çalışmalarına eşit derecede uygulanabileceğini çok fazla öneriyorum.
Olasılıksal

1
Evet, bu cevabın da muhtemelen okunması gerekir: stats.stackexchange.com/questions/2910/… . Daha spesifik bir tavsiye olabileceğini düşünüyordum, ama sanırım gerçekten de yok.
naught101

Yanıtlar:


10

Bence sık sık, keşifsel analizlerle bir tavşan deliğinden aşağıya inmiş gibi hissetme eğiliminin, sorduğunuz asıl soruları görmemekten kaynaklandığını düşünüyorum. Bazen kendim yapıyorum ve sonra hedeflerimin ne olduğunu kendime hatırlatmam gerekiyor. Örneğin, belirli bir model oluşturmaya mı ya da mevcut olanın yeterliliğini değerlendirmeye mi çalışıyorum? Verilerle ilgili sorunların kanıtını mı arıyorum (yani, adli veri analizi)? Ya da, analizin ilk aşamalarında, resmi olmayan bir model geliştirmeye geçmeden önce belirli soruları gayrı resmi olarak araştırdığım (örneğin, iki değişken arasında bir ilişki var mı?)? Özetle, kendinize arsaları ve masaları kesip yakalarsanız, ancak asıl amacınızın ne olduğunu veya bu arsanın / masanın neden alakalı olduğunu açıkça belirtemezseniz, o zaman sizi bilirsiniz.

Yazarken yaptığım gibi, bir program yazarken veya bir makale yazarken keşifsel veri analizine yaklaşmaya çalışıyorum. Her iki durumda da, önce bir taslak oluşturmadan başlayamam. Bu taslak elbette değişebilir (ve sıklıkla yapar), ancak bir tanesi olmadan yazmaya başlamak yetersizdir ve çoğu zaman zayıf bir nihai ürün verir.

WRT organizasyonu, her analistin kendisi için işe yarayan bir iş akışı bulması gerekir - bunu yapmak IMO'nun başkasının iş akışını katı bir şekilde izlemeye çalışmaktan daha önemlidir (yine de başkalarının yaptıklarından fikir almak her zaman yararlıdır). Programlı olarak çalışıyorsanız (yani, bir takım sonuçlar üretmek / yeniden üretmek için çalıştırılabilecek kodlar yazmak) ve çalışmanızı git içine kontrol etmek istiyorsanız, o zaman bu konuda zaten birçok mil ötedesiniz. Kodunuzu düzenlemek için biraz zaman geçirmeniz gerekebileceğinden şüpheleniyorum ve bunun için anahatlarınızı takip etmenizi öneririm. Örneğin, analiz dosyalarınızı nispeten kısa ve hedefli tutun; böylece her biri belirli bir soruyu yanıtlar (örneğin, belirli bir regresyon modeli için tanı grafikleri). Bunları projenin büyüklüğüne ve karmaşıklığına bağlı olarak bir veya iki düzeyde alt dizinlerde düzenleyin. Bu şekilde, proje kendini belgelendirir; dizinlerin, alt dizinlerin ve dosyaların liste görünümü (her dosyanın başında yer alan yorumla birlikte) teorik olarak taslağınızı yeniden oluşturmalıdır.

Elbette, büyük bir projede, veri temizleme ve yönetimi yapan bir kodunuz, belirli bir model türünü tahmin etmek için yazdığınız kod veya yazdığınız diğer yardımcı programların da olabilir veri analiziniz için anahatlar bu yüzden proje klasörünüzün farklı bir bölümünde düzenlenmelidirler.

Güncelleme: Bunu gönderdikten sonra, "çıkmazlar" hakkındaki sorunuzu doğrudan ele almadığımı fark ettim. Tüm bir analiz setinin değerinin olmadığına gerçekten karar verirseniz, o zaman gitde çalışıyorsanız, ilgili dosyaları / dosyaları "Bu analiz satırını terk etmedim çünkü üretken." Yazdıklarınızı sıkıştırıp çöpe atmadan farklı olarak, istenirse, daha sonra ne yaptığınıza geri dönebilirsiniz.

Ancak, düşündüğünüz bir çerçeveden ilerlerseniz, daha az çıkmaz elde edeceğinizi düşünüyorum. Bunun yerine, değerli ve ilgili bir soruyu araştırmak için zaman harcıyorsanız - bu boş bir bulguya yol açsa veya beklediğiniz gibi çıkmasa bile - muhtemelen yaptığınız ve sonucun kaydını tutmak isteyebilirsiniz. minimum, böylece daha sonra tekrarlamak için hata yapmazsınız). Bunları, "Ek" olarak, anahattınızın altına taşıyın.


4

Genel bir cevabın ne kadar yararlı olacağını bilmiyorum. Zor bir şeyi nasıl yapacağınızı soruyorsunuz; iyi cevaplar muhtemelen disipline bağlı olacak ve muhtemelen uzun ve farklı olacaktır. :)

Organizasyon devam ederken, zaten git kullanıyorsunuz, bu yüzden daha sonra analizi yapmak için bir makefile kullanmaya başlamalısınız . Makefile, farklı dosyaların birbirine nasıl bağlı olduğunu (yani hangi istatistiklerin hangi koddan türetildiğini) ortaya koyar ve aradığınızda make, güncellenmesi gereken her şey olacaktır.

Şimdi, bu keşif kısmına yardımcı olmuyor. EDA için ESS üzerinden emacs (çoğunlukla) R kullanın. EDA için bir REPL'e ihtiyacınız var. Benim iş akışı (bir in ESS vb çizimleri, tahminlerine ile oynamaktır exploratory.R, sonra ben tutmak istiyorum karar, tip dosyası) öyle o toplu idam make edilebileceğini recodesrc. Re: git, nasıl kullandığınızı bilmiyorum, ancak her proje için tek bir havuz kullanıyorum (genellikle tek bir kağıt) ve temiz bir geçmiş tutmak için kod bankamın dışına çıkıyorum; yani kullanıyorum

$ git merge meandering-branch --squash
$ git add -p somefile
$ git rebase -i master
$ git reset HEAD --hard

yolu daha ben git ile başladı ve ne zaman daha yolu daha ben bir acemi öneriyoruz daha. Tüm bu komut ve seçeneklere aşina değilseniz, daha fazla git öğrenmek isteyebilirsiniz. Bana yardım eden en büyük şey, mantıksal olarak kesin taahhütlerde bulunma konusunda disiplinli olmak; yani, her bir taahhüt, gelecekte bir kerede hepsini geri almak isteyebileceğiniz tüm değişiklikleri içermelidir (ve az ya da çok).

Verileri gerçekten araştırırken, bu kitapları faydalı ve ilginç buldum ve özellikle büyük veri kümeleriyle (en azından bölümlerde) ilgilendiler:

  • Unwin, Theus ve Hofmann tarafından düzenlenen Büyük Veri Kümelerinin Grafikleri . erişiminiz varsa springerlink yoluyla , aksi takdirde bireysel bölümler googling ile kullanılabilir.

  • Chen, Härdle ve Unwin tarafından düzenlenen veri görselleştirme el kitabı . ayrıca springerlink yoluyla

  • Huber Tarafından Veri Analizi (2011) ..


3

İki kelime: kavram haritası. Bu, büyük veri setlerini veya gerçekten sarsılmış herhangi bir konsepti bölmek ve elde etmek için bulduğum tek etkili yol. http://en.wikipedia.org/wiki/Concept_maps

Şahsen, kağıt üzerinde ekrandan daha iyi düşünüyorum, bu yüzden herhangi bir temel analiz yapmaya başlamadan önce uğraştığım yerin haritasını çıkardım. Daha profesyonel bir diyagram için, çok fazla zihin haritalama yazılımı vardır: http://en.wikipedia.org/wiki/List_of_concept-_and_mind-mapping_software

Zihin haritalamanın birçok avantajı vardır:

  • Bana "çekirdek" değişkenler ve türetilmiş değişkenler açısından sahip olduğumu söyler
  • teori / mantığa dayalı bir modelin organizasyonu / formülasyonu için izin verir
  • hangi değişkenlerin eksik olabileceğine ve / veya çekirdek değişkenler arasındaki ilişkilerin olması gerektiği gibi çıkmadığı durumlarda ekleyebileceğine işaret eder.

Düzenle :

Örnek olarak, faktör analizi için kavram haritası şudur: http://www.metacademy.org/graphs/concepts/factor_analysis#focus=factor_analysis&mode=explore Şimdi bu sadece kavramı öğrenmek, analiz yapmak değil, fikirdir. aynıdır: yapmadan önce ne yapmanın mantıklı olduğunu anlamak ve sonra bunu yapmak.

Bunun otomatik / kodlanmış bir versiyonunu arıyorsanız, bunun olduğunu sanmıyorum. Bir sistemi anlamaya çalışırken modelleme kavramını otomatikleştiremezsiniz. (Ve bu iyi bir şey çünkü bir sürü insanı işsiz bırakacaktı.)


Hrm ... Bu daha detaylı bir örnekle yapabilirdi. Bunun bahsettiğim karmaşıklıkla nasıl başa çıkabileceğini görmekle ilgili sorunum var. Özellikle, çıkmazlara yol açan araştırma yollarından gelen analizlerle (türetilmiş veriler, arsalar vb.) Ne yapılması gerektiği ile ilgilenmez.
naught101

Kavram haritası, yalnızca konuya özgü teoriye dayanarak bir yere götürmesi gereken yolları araştırmak için tasarlanmıştır. Belirli bir araştırmanın hiçbir yere gitmediği ortaya çıkarsa, kavram haritasına not edin, çünkü bu sizin rehberiniz / yapılacaklar listeniz Deneyin.
rocinante

3

Zaten git kullanıyorsunuz: neden araştırmanızı organize etmek için sürüm denetimi kullanmıyorsunuz? Araştırmanızın her yeni "dalı" için yeni bir dal oluşturun ve farklı parsel sürümleri için dalları da çatallayın. Bu yöntem, sonuçlarınızı birleştirmeyi biraz daha zorlaştıracaktır, ancak analizinizin "taşları" nı bırakabileceğiniz, her zaman izlenemeyen bir dizini tutabilirsiniz. Muhtemelen hangi çatal / işleme işleminin geldiğini göstermek için dosyalarınızı bu dizinde etiketlemek isteyeceksiniz. Bu yöntem, diffkomut aracılığıyla farklı analizlerin kontrast oluşturmayı gerçekten kolaylaştırma avantajına sahiptir .


1

Benzer sorunların ortaya çıktığı İş Zekası araçlarına bakardım. Özellikle (veri ambarları, boyut analizi) hiyerarşileri ve sondajlar.

Temel fikir, temel verilerinizi toplam miktarlar (örneğin, yüzdeler yerine sayılar, kazançlar vb.) Olarak göstermeye çalışmanızdır. Ardından, ayrıntıların üzerinde toplanacak hiyerarşiler tasarlarsınız (örneğin aylar / haftalar ...). Bu, tüm verilerinize basit bir bakış atmanıza ve ardından belirli alanları yakınlaştırmanıza izin verir. bakınız örneğin http://cubes.databrewery.org/ (python) veya excel power pivot

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.