Data Wrangling Cases: Case #1: Emre’s Language Score Problem


userscore_typescore
jimmytoefl80
catherineielts33
fitzwilliamtoefl90
emreielts100
emretoefl99

Let’s contemplate a data set like above. Any user can have TOEFL or IELTS score. Some of them like ‘Emre’ has two score together. Let’s think we want to convert this dataset like below:

userieltstoefl
jimmyNone80
catherine33None
fitzwilliam90None
emre100None
emreNone99

What we did? We just converted two factor type of score_type as a column and get the corresponding values from to the newly generated score columns. During this conversation if person has not given type of exam we put ‘None’ and if any person has more than one exam we put each score within a new row.

How can we perform this conversion? Manually? Perfect for a few row! What we do when there is 40.000 of row? The GG should answer this question? 🙂

Use Python Language:

import pandas as pd
df = pd.read_csv("/home/satan/Masaüstü/data.csv",sep="|")
# you can either use a function disctincts kind of factors from score_type column by df['colname'].unique().tolist()
score_factors = ['toefl','ielts']
for factor in score_factors:
    df[factor] = None
# distribute the values to added columns
j = 3 # due to additional columns should start from 3'th column
score_type_column_nr = 1 # locate where is score_type column
for factor in score_factors:
    for index,row in df.iterrows():
        stype = df.iloc[index,score_type_column_nr]
        corresponding_column_no = j
        if (factor in stype):
            df.iloc[index,corresponding_column_no] = df.iloc[index,2]
        else:
            pass
    j = j+1 

That’s all. Can you solve this problem with your veteran Excel? I think no 🙂 If you can write, please explain how, to below. Don’t forget, to add how much time you spend to solve the problem including goggling.

For me I didn’t open the browser and wrote it within 15 minutes! Huh ?

Note: This scenario and its answer is original and firstly published from Dr. Suat ATAN’s blog

Reklamlar

Scikit ile Makine Öğrenmesi Kodlamak


Makine öğrenmesi çalışmalarında şimdiye kadar hep R kullanmıştım. Scikit ve Tensorflow hakkında kaggle’daki istatistikleri görünce biraz da Python’a dair eğilimle, Scikit kullanmaya karar verdim. Direkt Scikit öğrenmek R’dan sonra karmaşık geldiği için, Numpy ve Pandas dokümantasyonları inceleyip bir kaç deneden sonra “Hands-On Machine Learing” kitabını keşfettim. Kitap kitap değil hazine mübarek. Anlatım güzel olmakla birlikte yazarının derin bilgisi yüzünden resmen bilgi pompalıyor. Bu yüzden biraz zorluyor.

2017-12-01 21_16_54-Hands-On Machine Learning with Scikit-Learn and TensorFlow_ Concepts, Tools, and.png

Ben de hem kendim denemek hem de İngilizce ile arası iyi olmayan veri bilimci adayları için örnekleri ekstra açıklamalı olarak yeniden kurguladım. Şu linkte kodlarını ve yazdığım yorumları açıkça paylaştığım kod deposu (repository) var.

Link şurada.

İlgilenenlerin işine yarayacağını umuyorum.

Yorumlarınızı, katkılarınızı, sorularınızı memnuniyetle beklerim.

Son bir not benim gibi R’cılar için, Scikit ile R Caret arasında basit bir mukayese:

Scikit-in R’dan farkı

Daha önce makine öğrenme algoritmalarını daha çok R ile denemiştim. Python ve Scikit kullanımında en çok dikkat ettiğim özellikler şunlar. İşte tecrübe:)

Scikit’in artıları:

  • Scikit özellikle Imputer ve OneHotEncoder ile çok kullanışlı ve ileri özellikler sunuyor. R’da muhakkak vardır ancak hiç karşılaşmadım.
  • Pipeline ve Pipeline’ları bir araya getiren FeaturedUnion özelliği’de Scikit’de sevdiğim özellikler’den. R’da görmedim.
  • GridSearch özelliğine yani en iyi kombinasyonun da bi zahmet makine tarafından bulunması (Hyperparameter Tuning) özelliğine bayıldım.

R’ın artıları:

  • Jupyter Notebook halen R Studio’nun yanından geçmez.
  • SciKit NumPy üzerinde çalışıyor ancak Pandas data frameleri üzerinde çalışmıyor. Bu bir ayıp. R’da makine öğrenme modelleri benim kullandığım caret kütüphanesi üzerinde data frame’de çalışıyor.

Her ikisinde de mevcut olanlar:

  • K-Folding R’da Caret kütüphesinde de var.

 

 

Bulk replacing Turkish characters in R


Turkish character sometimes became the menace for the data scientist. To avoid the risks you may want to change it with safe characters. To do that you can use this code:

#turkce karakter donusumu
to.plain <- function(s) {

# 1 character substitutions
old1 <- “çğşıüöÇĞŞİÖÜ”
new1 <- “cgsiuocgsiou”
s1 <- chartr(old1, new1, s)

# 2 character substitutions
old2 <- c(“œ”, “ß”, “æ”, “ø”)
new2 <- c(“oe”, “ss”, “ae”, “oe”)
s2 <- s1
for(i in seq_along(old2)) s2 <- gsub(old2[i], new2[i], s2, fixed = TRUE)

s2
}
df$source=as.vector(sapply(df$source,to.plain))