0

データセットを (CSV として) H2O にアップロードしようとして、FirstName 列が null/missing に変換されることを発見した後、H2O の現在のバージョンはクラス文字列の列をサポートしておらず、因子は最大65k の一意の値。だから今、私はこの問題を解決する別の方法を探しています。

任意の FirstName が返されるモデルで終了したいと思います。

  • その人が男性/女性である確率 (+1.0 から -1.0)
  • 可能であれば、その人の推定年齢 (平均値、標準偏差)

これには、どの R 関数 (または packages::functions) が機能しますか? できれば、十分に文書化されたパッケージ/関数を使用して、行っていくうちにさらに学習できるようにします。

R のデータセットのサンプルを次に示します。列の種類は、数値、因子、因子、数値です。

> head(TrainingNames)

  Year FirstName Gender Freq
1 1880      Mary      F 7065
2 1880      Anna      F 2604
3 1880      Emma      F 2003
4 1880 Elizabeth      F 1939
5 1880    Minnie      F 1746
6 1880  Margaret      F 1578

> summary(TrainingNames)

      Year        FirstName       Gender           Freq        
 Min.   :1880   Francis:    268   F:1062432   Min.   :    5.0  
 1st Qu.:1948   James  :    268   M: 729659   1st Qu.:    7.0  
 Median :1981   Jean   :    268               Median :   12.0  
 Mean   :1972   Jesse  :    268               Mean   :  186.1  
 3rd Qu.:2000   Jessie :    268               3rd Qu.:   32.0  
 Max.   :2013   John   :    268               Max.   :99674.0  
                (Other):1790483                                

データ ソースをプル/処理する R コードを次に示します。

# Create data dir, download and extract data source
dir.create('Data Files', showWarnings = F)
if(!file.exists('Data Files/names.zip')) {
  download.file(url = 'http://www.ssa.gov/oact/babynames/names.zip', destfile = 'Data Files/names.zip', cacheOK = T)
  setwd('Data Files/')
  unzip(zipfile = 'names.zip')
  setwd('../') 
}

FileList <- list.files(path = "Data Files/", pattern = ".txt") # List of data files

# Create data-source of names for R/Tableau

munge <- function(f) { # Return data frame of single data file
  y <- as.numeric(gsub(pattern = '[^0-9]', replacement = "", x = f))
  l <- read.csv(file = paste0("Data Files/", f), header = F, quote = "'")
  d <- cbind(y, l)
  colnames(d) <- c("Year", "FirstName", "Gender", "Freq")
  return(data.frame(d))
}

if(!file.exists('TrainingNames.csv')) {
  pb <- txtProgressBar(min = 1, max = length(FileList), style = 3) # Start progress bar

  TrainingNames <- munge(FileList[[1]]) # Munge first data file
  for(n in 2:length(FileList)) { # Munge remaining data files
    TrainingNames <- rbind(TrainingNames, munge(FileList[[n]]))
    setTxtProgressBar(pb, n)
  }

  close(pb) # Close progress bar
  rm(n, pb)

  write.table(x = TrainingNames, file = "TrainingNames.csv", sep = ";", row.names = F, col.names = T) # Write results to CSV file
}

summary(TrainingNames)
4

1 に答える 1

1

name_statsここでは、要求どおりに機能する関数を定義しました。関数が機能する前に、最初に TrainingNames を作成するために質問のコードを実行する必要があります。

特定のニーズに合わせて好きなものを編集できます。

name_stats=function(name){
    df=subset(TrainingNames,FirstName==name)
    gender=tapply(df[,'Freq'],df[,'Gender'],sum)
    prob_male=gender['M']/sum(gender)
    prob_female=gender['F']/sum(gender)
    age=tapply(df[,'Freq'],as.factor(df[,'Year']),sum)
    dimnames(age)=list(age=round((Sys.Date()-as.Date(unlist(dimnames(age)),format='%Y'))/365))
    mean_age=mean(rep(as.numeric(unlist(dimnames(age))),age))
    sd_age=sd(rep(as.numeric(unlist(dimnames(age))),age))
    cat('Probability',name,'is male is',round(prob_male,6),'\n','Probability',name,'is female is',round(prob_female,6),'\n','Mean age of',name,'is',round(mean_age,6),'\n','SD age of',name,'is',round(sd_age,6))
}
于 2014-10-21T02:03:10.267 に答える