#wolfram-mathematica #visualization
#wolfram-mathematica #визуализация
Вопрос:
В настоящее время я визуализирую частоту слов и фраз в большой базе данных текстовой информации (примерно 108 МБ, распределенных по 307 текстовым файлам).). Моя цель — иметь способ быстро увидеть, какие файлы являются наиболее релевантными и в визуально привлекательном формате (хотя этот проект, вероятно, также продемонстрирует, что простое текстовое представление всегда понятнее).
Прямо сейчас у меня есть следующее:
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}]
FileNames[ ] генерирует список, такой как: {«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’ где в файле 7 появляются 32 вхождения?
Комментарии:
1. Отсутствует ли символ во втором аргументе to
Sort
при вычисленииsortedfrequency
? Кроме того, если вы инициализируетеviewerCount#
с{}
помощью , вам не нужноTake
создаватьlist3
и т. Д…2. Итак, i -е число в
list3
соответствует вхождениям слова в i -м файле?3. @BrettChampion
sortedfrequency
Это была избыточная команда — я отредактировал ее, чтобы удалить. Спасибо заTake
совет, я знал, что должен быть лучший способ, чем мой.4. @BrettChampion Да, _i_th номер в
list3
соответствует тому, что это _i_th файл — т.Е. седьмой номер в списке3 будет файлом 007acfa.txt-cleaned.txt .
Ответ №1:
В качестве примера предположим, что ваши данные представляют собой что-то вроде
list3 = RandomInteger[30, 30];
list4 = RandomInteger[30, 30];
filelist = Table["file " <> ToString[i], {i, 30}];
Тогда вы могли бы сделать что-то вроде
BarChart3D[{
MapThread[Tooltip[#2, Row[{#, " -- ", #2}]] amp;, {filelist, list3}],
MapThread[Tooltip[#2, Row[{#, " -- ", #2}]] amp;, {filelist, list4}]},
BarSpacing -> {0.5, 0}, ChartLayout -> "Grid"]
Редактировать
Другой способ заключается в использовании LabelingFunction
:
BarChart3D[{list3, list4},
LabelingFunction ->
(Placed[Row[{filelist[[Last[#2]]], " -- ", #1}], Tooltip] amp;),
ChartLayout -> "Grid", BarSpacing -> {0.5, 0}]
Ответ №2:
Это должно сработать:
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}], " - "]] amp;)
]