Verileri temizlemek için organize süreçler


34

R'yi kullanan veri bilimi ile sınırlı uğraşımdan, kötü verileri temizlemenin analiz için veri hazırlamanın çok önemli bir parçası olduğunu anladım.

Verileri işlemeden önce temizlemek için en iyi yöntemler veya işlemler var mı? Öyleyse, bu en iyi uygulamaların bazılarını uygulayan otomatik veya yarı otomatik araçlar var mı?


1
Muhtemelen biraz temizlik yapmak iyi bir fikirdir. Verileri temizleme altında ne demek istiyorsun , bence biraz kafa karıştırıcı görünüyor
MolbOrg

2
Temizlik verilerinin ne anlama geldiğini daha fazla açıklamak faydalı olacaktır. Çalıştığım bağlamda, temizlemenin biçimlendirme ile ilgisi yok - Ben sadece ayrıştırma / içe aktarma derdim - Ama bunun yerine gürültülü kullanıcı verilerini konuşmak ve tutarlılık için doğrulamak anlamına gelirdi. Kullanılan teknikler, basit istatistiksel kurallardan bulanık algoritmalara, özellikle de veri seyrek olduğunda, veri setine özgüdür.
AdrianBR

Yanıtlar:


21

R, bir içeren standart onun içinde, veri temizleme için kullanılabilecek veri manipülasyonu için fonksiyonlar, taban paketi ( gsub, transformörneğin, vs.) ve aynı zamanda çeşitli üçüncü taraf paketlerini stringr , yeniden şekillendirme / reshape2 ve plyr / dplyr . Bu paketler ve işlevleri için örnekler ve en iyi kullanım uygulamaları aşağıdaki makalede açıklanmıştır: http://vita.had.co.nz/papers/tidy-data.pdf .

Ek olarak, R özellikle veri temizleme ve dönüştürmeye odaklanan bazı paketler sunar :

Düzenleyici ve kesin olmayan paketlerin örnekleri ve kullanımı, R'de veri temizlemenin iş akışının ( çerçeve ) bir tanımının yanı sıra, R'de veri temizlemesine kapsamlı ve tutarlı bir yaklaşım , aşağıdakileri de şiddetle tavsiye ediyorum: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Giriş_to_data_cleaning_with_R.pdf .


2
Ayrıca dplyr, belirli plyraraçların optimize edilmiş bir yeniden yazması ve data.tableverilerin işlenmesi için tamamen farklı bir yaklaşım olduğunu da ekleyeceğim . Her ikisi de Hadley Wickham tarafından.
shadowtalker

@ ssdecontrol: Kabul ediyorum - cevabı güncelledi. Hadley, dplyrpaketin yazarıdır, değil data.table.
Aleksandr Blekh

16

Benim açımdan, bu soru iki aşamalı bir cevap için uygundur. İlk kısım, onu yumuşak ön işleme olarak adlandıralım, verileri daha sonraki analizler için uygun hale getirecek şekilde ön işleme için farklı veri madenciliği algoritmalarının kullanılması olarak alınabilir. Hedef, tek bir çekimde ele alınacak kadar basitse, bunun analizin kendisi olabileceğine dikkat edin.

İkinci kısım, zor ön işleme , aslında başka herhangi bir işlemden önce gelir ve işlenecek belirli içerikleri seçerek verileri temizlemek için basit araçların veya komut dosyalarının kullanımı olarak alınabilir. Bu problem için POSIX, özlü ve çok güçlü - ön işleme senaryoları oluşturmak için kullanılabilecek bir dizi sihirli araç sunar.

Örneğin, sosyal web sitelerinden (twitter, facebook, ...) gelen verilerle ilgilenen insanlar için veri alımı genellikle çok özel bir formatta dosyalar üretir - her zaman güzel bir yapı olmasa da, eksik alanlar içerebildiğinden, . Bu gibi durumlarda, basit bir awkkomut dosyası verileri temizleyerek daha sonraki işlemler için geçerli bir girdi dosyası oluşturabilir. Sihirli kümesinden, bir de işaret edebilir grep, sed, cut, join, paste, sort, ve diğer araçlar olan çok sayıda.

Basit olması durumunda, kaynak dosyada çok fazla nitty-gritties varsa, verileri temizlemek için bir yöntem paketi üretmek de gerekli olabilir. Bu gibi durumlarda, genellikle Python, Ruby ve Perl gibi betik dilleri (kabuk olanlar hariç) kullanmak daha iyidir. Bu, API'lerin oluşturulmasının belirli verileri çok basit ve tekrar kullanılabilir bir şekilde seçmesini sağlar. Bu tür API'ler bazen IMDbPY , Stack Exchange API ve diğerleri gibi yazarları tarafından kamuya duyurulur .

Öyleyse soruyu cevaplamak: En iyi uygulamalar var mı? Bu genellikle görevinize bağlıdır. Her zaman aynı veri biçimiyle ilgilenecekseniz, önceden işlemek için düzenli bir komut dosyası yazmak en iyisidir ; bazı veri kümelerinde basit ve hızlı bir temizleme işlemine ihtiyacınız varsa, tüm işi bir Python komut dosyasından çok daha hızlı yapacak özlü kabuk komut dosyaları için POSIX araçlarına güvenin . Yana temiz yukarı veri kümesi üzerinde ve amaçlarınıza de bağlıdır, her şeyi zaten bitmiş olması zor. Yine de, sorunla başa çıkabileceğiniz birçok API var.


hm - verileri alın, verileri biçimlendirin (awk sed grep stuff), ilk adım olarak gürültüyü kaldırın, sonra daha da derine inin. çok zor değil ön işleme ilk başta geliyor, eğer termerlerinizi kullanıyorsanız
MolbOrg

@ MolbOrg Evet, demek istediğim buydu. Adı verilen ön işleme sabit komut yan ve ön işleme yumuşak genellikle azaltır veri madenciliği algoritmaları kullanımına büyüklüğü sorunu (veritabanı temizler) arasında. Ayrıca, ikinci bölüm, zor ön işleme, aslında başka herhangi bir işlemden önce geldiğini belirtti . Bu tür terimlerle çok net olmasa, cevabı iyileştirmek için diğer önerileri memnuniyetle değerlendiririm.
Rubens

1
ah evet, ham verinin ön işlenmesinde yeterince dikkat edilmedi . Test edilmiş atm - evet perl oneliner, 300 MB’daki 3.5kk dizeleri için grenin 3 katıdır, perl için 1.1 sn, 0.35 sn. Perl regexp'in puanlarının yavaş, pratikte çok daha yavaş olduğu bir makaleyi gördüm (
sanırım

@ MolbOrg Güzel referans! AFAIK, grepvarsayılan olarak POSIX temel regex'i kullanır ve çalıştırıldığında genişletilmiş POSIX regex'in ve çalıştırıldığında grep -EPCRE'nin kullanılmasına izin verir grep -P.
Rubens

1
Bu çok iyi bir yazı. R, veri manipülasyonu için mükemmeldir ancak string manipülasyonu için sözdizimi ve veri yapıları için listeler ve matrislere oldukça katı bir şekilde bağlı kalması nedeniyle veri temizliği ile oldukça hantal olabilir .
shadowtalker

11

Veri temizlemenin nadiren otomatik hale getirilmesinin bir nedeni, “sorun” un sizin özel probleminiz, yöntemleriniz ve hedefleriniz için ne anlama geldiğini tanımlamak için gereken çok fazla yargıya sahip olmasıdır.

Herhangi bir eksik veri için değerleri çarpmak kadar basit olabilir veya önceki otomatikleştirilmiş işlemlerden (örneğin kodlama, sansürleme, dönüştürme) veri giriş hatalarını veya veri dönüştürme hatalarını teşhis etmek kadar karmaşık olabilir. Bu son iki durumda, veriler dış görünüme göre iyi görünüyor , ancak gerçekten hatalı. Bu tanı, sıklıkla manuel analiz ve inceleme ile kullandıkları veri kaynakları ve yöntemler hakkında bilgiler gibi bant dışı bilgileri de gerektirir.

Ayrıca, bazı veri analiz yöntemleri hatalı veya eksik veriler empoze edilmek veya varsayılan bir değer vermek yerine boş bırakıldığında (veya N / A) daha iyi çalışır. Bu, Dempster-Shafer İnanç işlevleri gibi açık belirsizlik ve cehalet temsilleri olduğunda doğrudur.

Son olarak, temizleme işlemi için belirli tanılama ve ölçümlere sahip olmak yararlıdır. Eksik veya hatalı değerler rastgele dağıtılmış veya analizin sonucunu etkileyebilecek herhangi bir şekilde yoğunlaşmışlar mı. Nihai sonuçları etkileyip etkilemediğini görmek için alternatif temizleme stratejilerinin veya algoritmaların etkilerini test etmek faydalıdır.

Bu endişeler ışığında, veri temizliğini yüzeysel, şövalye veya tam otomatik bir şekilde ele alan herhangi bir yöntem veya süreçten şüpheliyim. Bu ayrıntılarda saklanan birçok şeytan var ve onlara ciddi ilgi göstermeleri gerekiyor.


1
Yandan bir yorum olarak: Bir problemin neden olduğu hatalı verileri tespit etmek, boru hattında daha ileri bir altın beceri olduğunu düşünüyorum. Bir süredir analizimin neden garip sonuçlar verdiğini merak ettim ve boru hattına baktığımda bir çeşit hata buldum. Örn: Neden yüksek fiyatlara doğru çarpıştım tüm verilerimin - zihinsel modelim dışında kaldığını merak ettim. Etrafı sorduğumda, bazı taşeronların brifingi yanlış anladığını ve yüksek gelirli gruplar için veri ilettiğini, karışık veriler istediğimizi tespit ettim ...
Christian Sauer

Evet! Veri hataları, genellikle süreç sorunlarının belirtileridir. Süreçte hataların ve mekanizmaların nerede ortaya çıktığını bilmek, temizlik işleminde çok yardımcı olacaktır. Fakat yine de daha iyisi, proses problemlerini temiz (veya daha temiz) veri üretecek şekilde düzeltmektir.
MrMeritology,

5

Otomatik temizleme hakkında: Verileri otomatik olarak temizleyemezsiniz, çünkü hataların sayısı ve bir hatanın tanımı genellikle verilere bağlıdır. Örn: "Gelir" sütununuz bir hata olan negatif değerler içerebilir - bu durumlar hakkında bir şeyler yapmalısınız. Öte yandan, bir "aylık tasarruf" sütunu makul olarak negatif değerler içerebilir.

Bu tür hatalar büyük ölçüde etki alanına bağlıdır - bu yüzden onları bulmak için etki alanı bilgisine sahip olmalısınız, insanın üstün olduğu bir şey, otomatikleştirilmiş süreçler çok fazla değil.

Otomatize edebileceğiniz ve yapmanız gerekenler tekrarlanan projelerdir. Örneğin, aylık olarak üretilmesi gereken bir rapor. Hataları tespit ederseniz, bu tür hataları izleyen aylarda tespit edip zamanınızı boşaltan otomatik bir işlem yapmalısınız.


5

Gerçek bir araştırma yapmadan önce verilerin temizlenmesi için evrensel bir teknik olmadığını düşünüyorum. Öte yandan, mümkün olduğu kadar çoğaltılabilir araştırma yapmayı hedefliyorum . Tekrarlanabilir araştırmalar yaparak, temizlik tekniklerini böceklerle veya zayıf parametreler / varsayımlarla kullanıyorsanız, diğerleri tarafından farkedilir.

Yeniden üretilebilir araştırmalarda çok yardımcı olan hoş bir R paketi knitr var.

Elbette, bütün araştırmalar tam olarak çoğaltılamaz (örneğin, canlı Twitter verileri), ancak en azından temizleme, biçimlendirme ve ön işleme adımlarını kolayca belgeleyebilirsiniz.

Coursera'daki Reproducible Research dersi için hazırlanan değerlendirmemi kontrol edebilirsiniz .


3

OpenRefine (eski adıyla Google Refine) etkileşimli olarak veri temizleme ve dönüşüm işlemleri gerçekleştirebileceğiniz harika bir araçtır. Son çıktınız çeşitli standart biçimlere (json, csv) veya herhangi bir özel biçime (örneğin: wiki) dışa aktarılabilir.

Tam kopyalar, OpenRefine'da "boş aşağı" özelliğini kullanarak + sıralayarak işlenebilir. Ayrıca, şirket adları veya adresleri gibi benzer görünümlü kopyaları gruplayabileceğiniz yaklaşık bir dizi (bulanık) kümeleme özelliği vardır. Bu özellik tek başına harika yapar.


1
Bu harika, az bildirilen bir araçtır.
thanks_in_advance

2

Coursera'da buna adanmış bir kurs var. Bahsettiğiniz teknikleri gözden geçirmek isteyebilirsiniz ve önemli olan ne zaman ne kullanılacağını bilmek.

https://www.coursera.org/learn/data-cleaning

Her veri kümesinin kendine özgü sorunları ve sorunları olduğu için tüm adımlar tüm veri kümeleri için geçerli olmadığından, otomatikleştirme yerine manuel olarak yapmak her zaman daha iyidir.

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.