2011-10-31 54 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

这也是一个很好的解决方案,谢谢。 –

相关问题