2016-05-17 4 views
0

私は何百もの電子メールの件名リストを持っています。件名ごとに、私は電子メールのオープンレート(開封済み電子メール/配信済み電子メール)の値を持っています。 例: list of subject linesどのように単語を文から区切り、平均するのですか?テキストマイニングR

いくつかの単語には平均開封率に影響があるかどうかわかります。

たとえば、電子メールの件名に「ありがとう」と書いても、電子メールの開封率が高くなる可能性があります。

論理的な手順を正しく理解していれば、電子メールの件名に含まれるすべての単語のリストを作成し、各単語がすべての件名間の平均を作成する必要があります。 例: average per word

誰かがRでそれを行うのを手助けできますか?私は、テキストマイニングパッケージが役に立つと思う。

ありがとうございました!

+0

'tm'パッケージをご覧ください –

+0

ありがとうございましたMhairi McNeill、もっと具体的な何か? – AsSAASA

+0

簡潔に申し訳ありません - それは大きな話題です! 「テキストマイニングをRまたはRで探す」とチュートリアル –

答えて

0

ヘッダーの単語を独立変数としてロジスティック回帰を試してみませんか?または、単語の数が少ない場合、または単語をグループ化できたかどうか、おそらく重回帰。

+0

私は分かりません。ありがとう。 – AsSAASA

+0

列0に開封率が含まれているcsvテーブルを作成します。 2列目以降には、ヘッダーに表示される頻度で分析したい単語が含まれています。そうでない場合は0が表示されます。次に、以下のコマンド、all_data < - read.table( "datass.csv"、header = TRUE、sep = "、")を試してください。 dependent_variable < - マトリックス(datas [、1]); モデル< - glm(dependent_variable〜、family = binomial(link = 'logit')、data = train); これは、開かれた率と単語の出現との間の関係を詳述する係数を持つ表を生成するはずです。 –

0

私の主な問題は、電子メールのタイトルを含む文字列を分割することです。

strsplit()関数を使用すると、そうすることができます。たとえば

yourstring <- "A string, full of punctuation ! And spaces !" tosplit <- c(" ", "!", ...) matrix <- strsplit(yourstring, tosplit)

その後、私はあなたがあなたのデータ・セットの列に行列の各単語を置くためにループを使用することができると思います。 (ご希望の場合は、すべての単語があまりにも小文字に変更する必要があり、:tolower(matrix)
その後

を、あなたのデータフレームの確実table()またはsummary()は、あなたがより良い視覚化するのに役立ちます。

テキストマイニングパッケージに関しては、私は何かを認識していませんが、いくつかあると思います。

+0

ありがとうございました! – AsSAASA

0

私はすべてのコメントを見た後、私は1つのコードに整理しようとします。私のために働く。 ありがとうございます。

SentencesVector ### vector with the sentences 
AveragesVector ### vector with the averages open rate 
SubjectLineTable = data.frame(AveragesVector,SentencesVector) 

library(tm) 
corpus <- Corpus(VectorSource(SentencesVector)) 
myTdm <- TermDocumentMatrix(corpus) 
temp <- inspect(myTdm) 
FreqMat <- data.frame(ST = rownames(temp), Freq = rowSums(temp)) 
row.names(FreqMat) <- NULL 

localAverage = 0 
counter = 0 
averageTable = 0 

for(i in 1:nrow(FreqMat)){ 
    for(j in 1:nrow(SubjectLineTable)){ 
     if(grepl(FreqMat[i,1],SubjectLineTable[j,2])){ 
      counter = counter+1 
      localAverage[counter] = SubjectLineTable[j,1]} 
    } 
    averageTable[i] = mean(localAverage) 
    localAverage = 0 
    counter = 0 
} 
FreqMat$means = averageTable 
FreqMat 

fit = step(glm(means~.,data = FreqMat)) 
summary(fit) 
関連する問題