Big Data Analytics - oczyszczanie danych

Po zebraniu danych zwykle mamy różne źródła danych o różnych cechach. Najpilniejszym krokiem byłoby ujednolicenie tych źródeł danych i dalszy rozwój naszego produktu danych. Zależy to jednak od rodzaju danych. Powinniśmy zadać sobie pytanie, czy homogenizacja danych jest praktyczna.

Może źródła danych są zupełnie inne, a utrata informacji będzie duża, jeśli źródła zostaną ujednolicone. W takim przypadku możemy pomyśleć o alternatywach. Czy jedno źródło danych może pomóc mi zbudować model regresji, a drugie model klasyfikacyjny? Czy można pracować z niejednorodnością na naszą korzyść, zamiast po prostu tracić informacje? Podejmowanie tych decyzji sprawia, że ​​analizy są interesujące i stanowią wyzwanie.

W przypadku recenzji można mieć język dla każdego źródła danych. Ponownie mamy dwie możliwości -

  • Homogenization- Polega na tłumaczeniu różnych języków na język, w którym mamy więcej danych. Jakość usług tłumaczeniowych jest akceptowalna, ale gdybyśmy chcieli tłumaczyć ogromne ilości danych za pomocą API, koszt byłby znaczny. Dostępne są narzędzia programowe do tego zadania, ale byłoby to również kosztowne.

  • Heterogenization- Czy byłoby możliwe opracowanie rozwiązania dla każdego języka? Ponieważ łatwo jest wykryć język korpusu, moglibyśmy opracować zalecenia dla każdego języka. Wymagałoby to więcej pracy w zakresie dostrajania każdego polecającego w zależności od liczby dostępnych języków, ale jest to zdecydowanie opłacalna opcja, jeśli mamy dostępnych kilka języków.

Mini projekt na Twitterze

W tym przypadku musimy najpierw wyczyścić nieustrukturyzowane dane, a następnie przekształcić je w macierz danych, aby zastosować na niej tematy modelujące. Generalnie przy pobieraniu danych z Twittera jest kilka postaci, których nie jesteśmy zainteresowani, przynajmniej na pierwszym etapie procesu czyszczenia danych.

Na przykład po pobraniu tweetów otrzymujemy te dziwne znaki: „<ed> <U + 00A0> <U + 00BD> <ed> <U + 00B8> <U + 008B>”. Prawdopodobnie są to emotikony, więc aby wyczyścić dane, po prostu je usuniemy za pomocą poniższego skryptu. Ten kod jest również dostępny w pliku bda / part1 / collect_data / cleaning_data.R.

rm(list = ls(all = TRUE)); gc() # Clears the global environment
source('collect_data_twitter.R')
# Some tweets
head(df$text)

[1] "I’m not a big fan of turkey but baked Mac &
cheese <ed><U+00A0><U+00BD><ed><U+00B8><U+008B>"
[2] "@Jayoh30 Like no special sauce on a big mac. HOW"
### We are interested in the text - Let’s clean it!

# We first convert the encoding of the text from latin1 to ASCII
df$text <- sapply(df$text,function(row) iconv(row, "latin1", "ASCII", sub = ""))

# Create a function to clean tweets
clean.text <- function(tx) {
  tx <- gsub("htt.{1,20}", " ", tx, ignore.case = TRUE)
  tx = gsub("[^#[:^punct:]]|@|RT", " ", tx, perl = TRUE, ignore.case = TRUE)
  tx = gsub("[[:digit:]]", " ", tx, ignore.case = TRUE)
  tx = gsub(" {1,}", " ", tx, ignore.case = TRUE)
  tx = gsub("^\\s+|\\s+$", " ", tx, ignore.case = TRUE)
  return(tx)
}  

clean_tweets <- lapply(df$text, clean.text)

# Cleaned tweets
head(clean_tweets)
[1] " WeNeedFeminlsm MAC s new make up line features men woc and big girls "
[1] " TravelsPhoto What Happens To Your Body One Hour After A Big Mac "

Ostatnim krokiem mini projektu czyszczenia danych jest wyczyszczenie tekstu, który możemy przekształcić w macierz i zastosować algorytm. Z tekstu przechowywanego wclean_tweets wektor możemy łatwo przekształcić go w zbiór macierzy słów i zastosować algorytm uczenia się bez nadzoru.