2011-10-31 99 views
2

我目前正在跨文本信息的大型數據庫(大約分佈在307個文本文件中的大約108MB)中顯示詞和詞組的頻率。我的目標是想方設法快速查看哪些文件是最相關的,並且具有視覺吸引力的格式(儘管此項目可能還會證明只是具有文本表示總是更清楚)。使用BarChart []工具提示來說明數據來自何處

現在我有以下:

SetDirectory["/MYMATHEMATICADIRECTORY/"]; 
filelist = FileNames[]; 
viewerCount1 = {0}; 
viewerCount2 = {0}; 
word1 = "freedom"; 
word2 = "liberty"; 
Do[ 
    searchDB = StringSplit[Import[filename]]; 
    AppendTo[viewerCount1, Count[searchDB, word1]]; 
    AppendTo[viewerCount2, Count[searchDB, word2]]; 
, {filename, filelist}] 

list3 = Take[viewerCount1, {2, -1}] 
list4 = Take[viewerCount2, {2, -1}] 

文件名[]產生一個列表,諸如:{ 「001ABbenevolat.txt-cleaned.txt」, 「002abnature.txt-cleaned.txt」,「 003aboriginaldocs.txt-cleaned.txt「,」004ABpresse.txt-cleaned.txt「,」005acadian.txt-cleaned.txt「,」006acadiedelile.txt-cleaned.txt「,」007acfa.txt-cleaned.txt「} [除了307個條目,全部編號]。

項目list3生成列表,例如:{0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,100 2,0,0,0,10, 1,7,0,0,0,0,23,3,0,0,0,0,0,0,0,0,2,0,0,0,9,0,1,0,1, 0,5,0,13,0,0,0,0,0,0,0,0,0,0,1,0,2,0,4,0,0,0,1,11,0, 2,0,0,2,7,1,4,1,0,0,0,0,0,0,0,0,13,...}等等。

命令:

BarChart3D[{list3, list4}, BarSpacing -> {0.5, 0}, ChartLayout -> "Grid"] 

生成一些接近我想要的(想象它們作爲文件夾豎起)。但是,我想添加有意義的工具提示。默認情況下,它出現頻率。會不會有一種快捷的方法來包含頻率所附的文件名以及頻率?即一個提示'007acfa.txt-cleaned.txt - 32'的工具提示,其中32個出現在文件7中?

+0

是否有一個字符的'sortedfrequency'計算中的第二個參數'Sort'失蹤?另外,如果用'{}'初始化'viewerCount#',則不需要'Take'來構造'list3'等... –

+1

因此,list3中的* i * th數字對應於* i * th文件中的單詞? –

+0

@BrettChampion'sortedfrequency'是一個多餘的命令 - 我編輯刪除它。感謝「Take」建議,我知道肯定有比我更好的方法。 –

回答

6

舉個例子,假設你的數據是一樣的東西

list3 = RandomInteger[30, 30]; 
list4 = RandomInteger[30, 30]; 
filelist = Table["file " <> ToString[i], {i, 30}]; 

然後,你可以做這樣的事情

BarChart3D[{ 
    MapThread[Tooltip[#2, Row[{#, " -- ", #2}]] &, {filelist, list3}], 
    MapThread[Tooltip[#2, Row[{#, " -- ", #2}]] &, {filelist, list4}]}, 
BarSpacing -> {0.5, 0}, ChartLayout -> "Grid"] 

編輯另一種方法是使用LabelingFunction

BarChart3D[{list3, list4}, 
LabelingFunction -> 
    (Placed[Row[{filelist[[Last[#2]]], " -- ", #1}], Tooltip] &), 
ChartLayout -> "Grid", BarSpacing -> {0.5, 0}] 
+0

第二次編輯是完美的,謝謝。 –

3

這應該工作:

BarChart3D[{list3, list4}, 
    ChartLabels -> Placed[filelist, Tooltip], 
    ChartLayout -> "Grid", 
    BarSpacing -> {0.5, 0}] 

編輯

忘了你的提示也,而您希望使用LabelingFunction想要的高度。讓我們繼續前進,包括還這個詞本身:

BarChart3D[{list3, list4}, 
    ChartLabels -> {Placed[{word1, word2}, None], Placed[filelist, None]}, 
    ChartLayout -> "Grid", 
    BarSpacing -> {0.5, 0}, 
    LabelingFunction -> (Tooltip[Row[Flatten[{#3, #1}], " - "]] &) 
    ] 
+0

這也是一個很好的解決方案,謝謝。 –

相關問題