Визуализация текстовой информации. Визуализация информации в текстовых документах создание списков

Визуализация текстовой информации. Визуализация информации в текстовых документах создание списков

Визуализация информации в текстовых документах

1. Списки

Теория:

Списки позволяют человеку воспринимать информацию лучше.

Списки являются удобным вариантом форматирования абзацев по единому образцу и применяются для размещения в документе различных перечней.

Обрати внимание!

По способу оформления списки различают:

  • нумерованные;
  • маркированные.

Элементы (пункты) нумерованного списка обозначаются с помощью последовательных чисел, для записи которых могут использоваться арабские и римские цифры.

Элементы списка могут быть пронумерованы и буквами — русскими или латинскими.

Нумерованный список принято использовать в тех случаях, когда имеет значение порядок следования пунктов. Особенно часто такие списки используют для описания последовательности действий.


В дневнике обучающегося расписание уроков на каждый учебный день — это нумерованные списки.

При создании новых, удалении или перемещении существующих элементов нумерованного списка в текстовом процессоре вся нумерация списка меняется автоматически.

Элементы маркированного списка обозначаются с помощью значков-маркеров. Пользователь может выбрать в качестве маркера любой символ компьютерного и даже небольшое графическое изображение.

Маркированный список используют в тех случаях, когда порядок следования элементов в нём не важен. Например, в виде маркированного списка можно оформить перечень предметов, изучаемых вами в школе.

По структуре различают одноуровневые и многоуровневые списки.

Список, элемент которого сам является списком, называется многоуровневым.

Списки создаются в текстовом процессоре с помощью команды строки меню или кнопок панели форматирования.

2. Таблицы

Теория:

Для удобства восприятия информации часто в текстовых документах используют таблицы. Представленная в таблице информация наглядна, компактна и легкообозрима.

Таблицу используют для описания ряда объектов, обладающих одинаковыми наборами свойств. Наиболее часто используются таблицы, состоящие из столбцов (граф) и строк. Например, расписание уроков, расписание движения автобусов, самолётов, поездов и многое другое.

Обрати внимание!

Правила оформления таблиц:
1. Заголовок таблицы должен давать представление о содержащейся в ней информации.
2. Заголовки столбцов и строк должны быть краткими, не содержать лишних слов и, по возможности, сокращений.
3. В таблице должны быть указаны . Если они общие для всей таблицы, то указываются в заголовке таблицы (либо в скобках, либо через запятую после названия). Если единицы измерения различаются, то они указываются в заголовке соответствующей строки или столбца.
4. Желательно, чтобы все ячейки таблицы были заполнены. При необходимости в них заносят следующие условные обозначения:
? — данные неизвестны; х — данные невозможны;
i — данные должны быть взяты из вышележащей ячейки.

В ячейках таблиц могут быть размещены тексты, числа, изображения.

Создать таблицу можно с помощью соответствующего пункта меню или кнопки на панели инструментов, указав необходимое число столбцов и строк; в некоторых текстовых процессорах таблицу можно «нарисовать».

Созданную таблицу можно редактировать, изменяя ширину столбцов и высоту строк, добавляя и удаляя столбцы и строки, объединяя и разбивая ячейки.

Вводить информацию в ячейки можно:

  • с помощью клавиатуры;
  • копировать и вставлять заранее подготовленные фрагменты.

В текстовых процессорах есть возможность автоматически преобразовать имеющийся текст в таблицу и наоборот. Внешний вид таблицы можно оформить самостоятельно, подобрав тип, ширину и цвет границ ячеек, цвет фона ячеек, отформатировав содержимое ячеек. Кроме того, отформатировать таблицу можно автоматически.

Для изменения вида границ ячеек и заливки внутренней области, а также выполнения некоторых других действий используется панель Таблицы и границы.

Можно установить различный вид, толщину и цвет границ, а также сделать невидимыми некоторые границы ячеек или далее всей таблицы.

Обрати внимание!

Применять заливку внутренней области следует осторожно. Во-первых, не надо использовать цвет, кроме оттенков серого, если не предполагается цветной печати. Во-вторых, текст на фоне заливки должен хорошо читаться.

В узких столбцах текст трудно размещать по горизонтали, поэтому в программе предусмотрена возможность изменения направления текста в ячейке.

Во многих таблицах в первой строке располагаются заголовки столбцов. Чтобы в больших таблицах заголовки повторялись на каждом листе, надо включить для первой строки функцию повторить заголовки.

При работе в таблице на горизонтальной линейке отображается ширина текущей ячейки и маркеры отступов текста. Поэтому работа с текстом в ячейке выполняется так же, как и на обычной странице, только ширина строки существенно меньше. Для символов и абзацев можно установить все возможные значения параметров. Чтобы привязать рисунки к ячейке, они должны иметь положение «в тексте».

3. Графические изображения в текстовом документе

Теория:

Современные текстовые процессоры позволяют включать в документы различные графические изображения, созданные пользователем в других программах или найденные им в сети Интернет. Готовые графические изображения можно редактировать, изменяя их размеры, основные цвета, яркость и контрастность, поворачивая, накладывая друг на друга и т.д.

Во многих текстовых процессорах имеется возможность непосредственного создания графических изображений из наборов автофигур (графических примитивов). Также есть возможность создания красочных надписей с использованием встроенных текстовых эффектов. В состав некоторых текстовых процессоров входит коллекция картинок — стилизованных графических изображений. Большинство картинок являются объектами векторной графики.

Визуализировать числовую информацию, содержащуюся в таблице, можно с помощью диаграмм, средства создания которых также включены в текстовые процессоры.

Наиболее мощные текстовые процессоры позволяют строить разные виды графических схем, обеспечивающих текстовой информации.

Существует два способа расположения графического изображения в текстовом документе: «в тексте» и «вне текста». Если изображение имеет положение «в тексте», то оно занимает место между двумя символами. При этом может увеличиться высота строки. Поэтому в строках обычно располагаются небольшие рисунки, если рисунок большой, то его помещают в отдельной строке.

При расположении изображения «вне текста», оно может занимать любое место на листе. Изображение можно группировать с другими графическими объектами, делать надписи на рисунке.

Для изображений «вне текста» задают разные виды обтекания текстом:

  • вокруг рамки;
  • по контуру;
  • сквозное;
  • за текстом;
  • перед текстом;
  • сверху и снизу.

При оформлении страницы с иллюстрациями следует придерживаться следующих правил:

1. Для более компактного размещения рисунков использовать положение «вокруг рамки».

2. Не следует размещать рисунок посередине текста. Это затрудняет восприятие, так как строки начинаются с одной стороны рисунка, а заканчиваются с другой. Лучше сдвинуть рисунок к правой или левой границе листа.

3. Необходимо следить, чтобы внешние границы рисунка совпадали с внутренними границами полей листа.

4. Если рисунок занимает более 3/4 ширины текста, то лучше выбрать расположение текста сверху и снизу. В этом случае можно установить для рисунка положение «в тексте» и поместить его на отдельной строке (в пустом абзаце).

5. Рисунки должны быть соразмерны количеству изображенных на них элементов. Чем больше на рисунке информационных элементов, тем он должен быть крупнее.

При создании рисунка из автофигур, находящихся на панели Рисования, автоматически появляется объект «полотно» — прямоугольная рамка на всю ширину страницы. Все автофигуры, входящие в состав рисунка, должны располагаться внутри одного полотна.

Полотно — это графический объект, который имеет границы и внутреннюю область.

К полотну, как к любому графическому объекту, можно применять форматирование. Размеры полотна можно изменить по размеру рисунка, так, чтобы не оставалось много пустого пространства. Полотно с рисунком может занимать положение «в тексте» и «вне текста».

Полотно отображает переход пользователя от режима работы с текстом к режиму работы с графикой. Чтобы завершить работу над рисунком, надо щёлкнуть вне полотна, чтобы продолжить — щёлкнуть внутри полотна. Если полотно не активизировано, то для рисования новой автофигуры появится новое полотно. После завершения работы полотно вместе с расположенными на нём объектами составляет единое изображение. Имеется возможность отключить полотно.

Обрати внимание!

Однако полотно помогает «не потерять» отдельные элементы рисунка. Когда вы создаете рисунок, надо следить, чтобы все объекты находились в пределах одного полотна, то есть, чтобы оно было активизировано, пока вы не закончили создание изображения.

По окончании создания изображения, объекты изображения обычно группируют. Их можно разгруппировать и при необходимости внести изменения в изображение.

Известно, что текстовая информация воспринимается человеком лучше, если она визуализирована – организована в виде списков, таблиц, диаграмм, снабжена иллюстрациями (фотографиями, рисунками, схемами). Современные текстовые процессоры предоставляют пользователям широкие возможности визуализации информации в создаваемых документах. Рассмотрим с вами сначала списки . Запишите себе подзаголовок – «Списки» .

Всевозможные перечни в документах оформляются с помощью списков. При этом все пункты перечня рассматриваются как абзацы, оформленные по единому образцу. По способу оформления различают нумерованные и маркированные списки.

Элементы нумерованного списка обозначаются с помощью последовательных чисел, для записи которых могут использоваться арабские и римские цифры. Элементы списка могут быть пронумерованы и буквами – русскими или латинскими. Нумерованный список принято использовать в тех случаях, когда имеет значение порядок следования пунктов. Особенно часто такие списки используют для описания последовательности действий. Нумерованные списки вы регулярно создаете, заполняя в дневнике расписание уроков на каждый день.

При создании новых, удалении или перемещении существующих элементов нумерованного списка в текстовом процессоре вся нумерация списка меняется автоматически.

Элементы маркированного списка обозначаются с помощью знаков-маркеров. Пользователь может выбрать в качестве маркера любой символ компьютерного алфавита, и даже небольшое графическое изображение. С помощью маркированного списка оформлены ключевые слова в начале каждого параграфа вашего учебника.

Маркированный список используют в тех случаях, когда порядок следования элементов в нем не важен. Например, в виде маркированного списка можно оформить перечень предметов, изучаемых вами в 7 классе.

По структуре различают одноуровневые и многоуровневые списки. Списки в рассмотренных выше примерах имеют одноуровневую структуру. Список, элемент которого сам является списком, называется многоуровневым. Так оглавление вашего учебника информатики является многоуровневым списком. Списки создаются в текстовом процессоре с помощью команды строки меню или кнопок панели форматирования.

Записываем следующий подзаголовок – «Таблицы» .

Для описания ряда объектов, обладающими одинаковыми наборами свойств, наиболее часто используются таблицы, состоящие из столбцов (граф) и строк. Вам хорошо известно табличное представление расписания уроков, в табличной форме представляются расписание движения автобусов, самолетов, поездов и так далее.

Представленная в таблице информация наглядна, компактна и легко обозрима. Таблица может содержать не только символы и текст, но и какие-то графические изображения.

Создать таблицу можно с помощью соответствующего пункта меню или кнопки на панели инструментов, указав необходимое число столбцов и строк; в некоторых текстовых процессорах таблицу можно «нарисовать». Созданную таблицу можно редактировать, изменяя ширину столбцов и высоту строк, добавляя и удаляя столбцы и строки, объединяя и разбивая ячейки. Вводить информацию в таблицу можно так: с помощью клавиатуры, копировать и вставлять заранее подготовленные фрагменты.

Внешний вид таблицы можно оформить самостоятельно, подобрав тип, ширину и цвет границ ячеек, цвет фона ячеек, отформатировав содержимое ячеек.

Как я уже говорила, таблица может содержать не только текст, но и графическое изображение. Готовые графические изображения можно редактировать, изменяя их размеры, основные цвета, яркость и контрастность, поворачивая и так далее.

Во многих текстовых процессорах имеется возможность непосредственного создания графических изображений из наборов автофигур. Так же есть возможность создания красочных надписей с использованием встроенных текстовых эффектов. Визуализировать числовую информацию, содержащуюся в таблице, можно с помощью диаграмм, средства, создания которых также включены в текстовые процессоры.

Эта вся теория, которая необходима вам для визуализации информации. - Ваши вопросы, что вам непонятно? - Может что-то еще нужно повторить? (Учитель отвечает на вопросы детей).

Теперь я предлагаю вам выполнить практическую работу, на сегодняшнем уроке мы смоделируем ситуацию деловой игры.

Предположим, что некоторое издательство, выпускающее газету открывает новый отдел, которые будет готовить статьи.

Для работы отделов набран штат (по 2 человек), состоящий из редакторов, дизайнеров, художников – оформителей, журналистов. Сегодня каждый отдел должен пройти аттестацию, чтобы доказать свое право на дальнейшую работу. Для этого к концу урока нужно выполнить некоторые задания.

Аттестация отдела будет проводиться на конкурсной основе: каждый участник выполняет свое задание и передает готовую работу редактору на проверку. Результат работы всего отдела зависит от качества работы каждого сотрудника.

В русскоязычном секторе интернета очень мало учебных практических примеров (а с примером кода ещё меньше) анализа текстовых сообщений на русском языке. Поэтому я решил собрать данные воедино и рассмотреть пример кластеризации, так как не требуется подготовка данных для обучения.

Большинство используемых библиотек уже есть в дистрибутиве Anaconda 3 , поэтому советую использовать его. Недостающие модули/библиотеки можно установить стандартно через pip install «название пакета».
Подключаем следующие библиотеки:

Import numpy as np import pandas as pd import nltk import re import os import codecs from sklearn import feature_extraction import mpld3 import matplotlib.pyplot as plt import matplotlib as mpl
Для анализа можно взять любые данные. Мне на глаза тогда попала данная задача: Статистика поисковых запросов проекта Госзатраты . Им нужно было разбить данные на три группы: частные, государственные и коммерческие организации. Придумывать экстраординарное ничего не хотелось, поэтому решил проверить, как поведет кластеризация в данном случае (забегая наперед - не очень). Но можно выкачать данные из VK какого-нибудь паблика:

Import vk #передаешь id сессии session = vk.Session(access_token="") # URL для получения access_token, вместо tvoi_id вставляете id созданного приложения Вк: # https://oauth.vk.com/authorize?client_id=tvoi_id&scope=friends,pages,groups,offline&redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.21&response_type=token api = vk.API(session) poss= id_pab=-59229916 #id пабликов начинаются с минуса, id стены пользователя без минуса info=api.wall.get(owner_id=id_pab, offset=0, count=1) kolvo = (info//100)+1 shag=100 sdvig=0 h=0 import time while h70): print(h) #не обязательное условие, просто для контроля примерного окончания процесса pubpost=api.wall.get(owner_id=id_pab, offset=sdvig, count=100) i=1 while i < len(pubpost): b=pubpost[i]["text"] poss.append(b) i=i+1 h=h+1 sdvig=sdvig+shag time.sleep(1) len(poss) import io with io.open("public.txt", "w", encoding="utf-8", errors="ignore") as file: for line in poss: file.write("%s\n" % line) file.close() titles = open("public.txt", encoding="utf-8", errors="ignore").read().split("\n") print(str(len(titles)) + " постов считано") import re posti= #удалим все знаки препинания и цифры for line in titles: chis = re.sub(r"(\<(/?[^>]+)>)", " ", line) #chis = re.sub() chis = re.sub("[^а-яА-Я ]", "", chis) posti.append(chis)
Я буду использовать данные поисковых запросов чтобы показать, как плохо кластеризуются короткие текстовые данные. Я заранее очистил от спецсимволов и знаков препинания текст плюс провел замену сокращений (например, ИП – индивидуальный предприниматель). Получился текст, где в каждой строке находился один поисковый запрос.

Считываем данные в массив и приступаем к нормализации – приведению слова к начальной форме. Это можно сделать несколькими способами, используя стеммер Портера, стеммер MyStem и PyMorphy2. Хочу предупредить – MyStem работает через wrapper, поэтому скорость выполнения операций очень медленная. Остановимся на стеммере Портера, хотя никто не мешает использовать другие и комбинировать их с друг другом (например, пройтись PyMorphy2, а после стеммером Портера).

Titles = open("material4.csv", "r", encoding="utf-8", errors="ignore").read().split("\n") print(str(len(titles)) + " запросов считано") from nltk.stem.snowball import SnowballStemmer stemmer = SnowballStemmer("russian") def token_and_stem(text): tokens = filtered_tokens = for token in tokens: if re.search("[а-яА-Я]", token): filtered_tokens.append(token) stems = return stems def token_only(text): tokens = filtered_tokens = for token in tokens: if re.search("[а-яА-Я]", token): filtered_tokens.append(token) return filtered_tokens #Создаем словари (массивы) из полученных основ totalvocab_stem = totalvocab_token = for i in titles: allwords_stemmed = token_and_stem(i) #print(allwords_stemmed) totalvocab_stem.extend(allwords_stemmed) allwords_tokenized = token_only(i) totalvocab_token.extend(allwords_tokenized)

Pymorphy2

import pymorphy2 morph = pymorphy2.MorphAnalyzer() G= for i in titles: h=i.split(" ") #print(h) s="" for k in h: #print(k) p = morph.parse(k).normal_form #print(p) s+=" " s += p #print(s) #G.append(p) #print(s) G.append(s) pymof = open("pymof_pod.txt", "w", encoding="utf-8", errors="ignore") pymofcsv = open("pymofcsv_pod.csv", "w", encoding="utf-8", errors="ignore") for item in G: pymof.write("%s\n" % item) pymofcsv.write("%s\n" % item) pymof.close() pymofcsv.close()


pymystem3

Исполняемые файлы анализатора для текущей операционной системы будут автоматически загружены и установлены при первом использовании библиотеки.

From pymystem3 import Mystem m = Mystem() A = for i in titles: #print(i) lemmas = m.lemmatize(i) A.append(lemmas) #Этот массив можно сохранить в файл либо "забэкапить" import pickle with open("mystem.pkl", "wb") as handle: pickle.dump(A, handle)


Создадим матрицу весов TF-IDF. Будем считать каждый поисковой запрос за документ (так делают при анализе постов в Twitter, где каждый твит – это документ). tfidf_vectorizer мы возьмем из пакета sklearn, а стоп-слова мы возьмем из корпуса ntlk (изначально придется скачать через nltk.download()). Параметры можно подстроить как вы считаете нужным – от верхней и нижней границы до количества n-gram (в данном случае возьмем 3).

Stopwords = nltk.corpus.stopwords.words("russian") #можно расширить список стоп-слов stopwords.extend(["что", "это", "так", "вот", "быть", "как", "в", "к", "на"]) from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer n_featur=200000 tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=10000, min_df=0.01, stop_words=stopwords, use_idf=True, tokenizer=token_and_stem, ngram_range=(1,3)) get_ipython().magic("time tfidf_matrix = tfidf_vectorizer.fit_transform(titles)") print(tfidf_matrix.shape)
Над полученной матрицей начинаем применять различные методы кластеризации:

Num_clusters = 5 # Метод к-средних - KMeans from sklearn.cluster import KMeans km = KMeans(n_clusters=num_clusters) get_ipython().magic("time km.fit(tfidf_matrix)") idx = km.fit(tfidf_matrix) clusters = km.labels_.tolist() print(clusters) print (km.labels_) # MiniBatchKMeans from sklearn.cluster import MiniBatchKMeans mbk = MiniBatchKMeans(init="random", n_clusters=num_clusters) #(init="k-means++", ‘random’ or an ndarray) mbk.fit_transform(tfidf_matrix) %time mbk.fit(tfidf_matrix) miniclusters = mbk.labels_.tolist() print (mbk.labels_) # DBSCAN from sklearn.cluster import DBSCAN get_ipython().magic("time db = DBSCAN(eps=0.3, min_samples=10).fit(tfidf_matrix)") labels = db.labels_ labels.shape print(labels) # Аггломеративная класстеризация from sklearn.cluster import AgglomerativeClustering agglo1 = AgglomerativeClustering(n_clusters=num_clusters, affinity="euclidean") #affinity можно выбрать любое или попробовать все по очереди: cosine, l1, l2, manhattan get_ipython().magic("time answer = agglo1.fit_predict(tfidf_matrix.toarray())") answer.shape
Полученные данные можно сгруппировать в dataframe и посчитать количество запросов, попавших в каждый кластер.

#k-means clusterkm = km.labels_.tolist() #minikmeans clustermbk = mbk.labels_.tolist() #dbscan clusters3 = labels #agglo #clusters4 = answer.tolist() frame = pd.DataFrame(titles, index = ) #k-means out = { "title": titles, "cluster": clusterkm } frame1 = pd.DataFrame(out, index = , columns = ["title", "cluster"]) #mini out = { "title": titles, "cluster": clustermbk } frame_minik = pd.DataFrame(out, index = , columns = ["title", "cluster"]) frame1["cluster"].value_counts() frame_minik["cluster"].value_counts()
Из-за большого количества запросов не совсем удобно смотреть таблицы и хотелось бы больше интерактивности для понимания. Поэтому сделаем графики взаимного расположения запросов относительного друг друга.

Сначала необходимо вычислить расстояние между векторами. Для этого будет применяться косинусовое расстояние. В статьях предлагают использовать вычитание из единицы, чтобы не было отрицательных значений и находилось в пределах от 0 до 1, поэтому сделаем так же:

From sklearn.metrics.pairwise import cosine_similarity dist = 1 - cosine_similarity(tfidf_matrix) dist.shape
Так как графики будут двух-, трехмерные, а исходная матрица расстояний n-мерная, то придется применять алгоритмы снижения размерности. На выбор есть много алгоритмов (MDS, PCA, t-SNE), но остановим выбор на Incremental PCA. Этот выбор сделан в следствии практического применения – я пробовал MDS и PCA, но оперативной памяти мне не хватало (8 гигабайт) и когда начинал использоваться файл подкачки, то можно было сразу уводить компьютер на перезагрузку.

Алгоритм Incremental PCA используется в качестве замены метода главных компонентов (PCA), когда набор данных, подлежащий разложению, слишком велик, чтобы разместиться в оперативной памяти. IPCA создает низкоуровневое приближение для входных данных, используя объем памяти, который не зависит от количества входных выборок данных.

# Метод главных компонент - PCA from sklearn.decomposition import IncrementalPCA icpa = IncrementalPCA(n_components=2, batch_size=16) get_ipython().magic("time icpa.fit(dist) #demo =") get_ipython().magic("time demo2 = icpa.transform(dist)") xs, ys = demo2[:, 0], demo2[:, 1] # PCA 3D from sklearn.decomposition import IncrementalPCA icpa = IncrementalPCA(n_components=3, batch_size=16) get_ipython().magic("time icpa.fit(dist) #demo =") get_ipython().magic("time ddd = icpa.transform(dist)") xs, ys, zs = ddd[:, 0], ddd[:, 1], ddd[:, 2] #Можно сразу примерно посмотреть, что получится в итоге #from mpl_toolkits.mplot3d import Axes3D #fig = plt.figure() #ax = fig.add_subplot(111, projection="3d") #ax.scatter(xs, ys, zs) #ax.set_xlabel("X") #ax.set_ylabel("Y") #ax.set_zlabel("Z") #plt.show()
Перейдем непосредственно к самой визуализации:

From matplotlib import rc #включаем русские символы на графике font = {"family" : "Verdana"}#, "weigth": "normal"} rc("font", **font) #можно сгенерировать цвета для кластеров import random def generate_colors(n): color_list = for c in range(0,n): r = lambda: random.randint(0,255) color_list.append("#%02X%02X%02X" % (r(),r(),r())) return color_list #устанавливаем цвета cluster_colors = {0: "#ff0000", 1: "#ff0066", 2: "#ff0099", 3: "#ff00cc", 4: "#ff00ff",} #даем имена кластерам, но из-за рандома пусть будут просто 01234 cluster_names = {0: "0", 1: "1", 2: "2", 3: "3", 4: "4",} #matplotlib inline #создаем data frame, который содержит координаты (из PCA) + номера кластеров и сами запросы df = pd.DataFrame(dict(x=xs, y=ys, label=clusterkm, title=titles)) #группируем по кластерам groups = df.groupby("label") fig, ax = plt.subplots(figsize=(72, 36)) #figsize подбирается под ваш вкус for name, group in groups: ax.plot(group.x, group.y, marker="o", linestyle="", ms=12, label=cluster_names, color=cluster_colors, mec="none") ax.set_aspect("auto") ax.tick_params(axis= "x", which="both", bottom="off", top="off", labelbottom="off") ax.tick_params(axis= "y", which="both", left="off", top="off", labelleft="off") ax.legend(numpoints=1) #показать легенду только 1 точки #добавляем метки/названия в х,у позиции с поисковым запросом #for i in range(len(df)): # ax.text(df.ix[i]["x"], df.ix[i]["y"], df.ix[i]["title"], size=6) #показать график plt.show() plt.close()
Если раскомментировать строку с добавлением названий, то выглядеть это будет примерно так:

Пример с 10 кластерами


Не совсем то, что хотелось бы ожидать. Воспользуемся mpld3 для перевода рисунка в интерактивный график.

# Plot fig, ax = plt.subplots(figsize=(25,27)) ax.margins(0.03) for name, group in groups_mbk: points = ax.plot(group.x, group.y, marker="o", linestyle="", ms=12, #ms=18 label=cluster_names, mec="none", color=cluster_colors) ax.set_aspect("auto") labels = tooltip = mpld3.plugins.PointHTMLTooltip(points, labels, voffset=10, hoffset=10, #css=css) mpld3.plugins.connect(fig, tooltip) # , TopToolbar() ax.axes.get_xaxis().set_ticks() ax.axes.get_yaxis().set_ticks() #ax.axes.get_xaxis().set_visible(False) #ax.axes.get_yaxis().set_visible(False) ax.set_title("Mini K-Means", size=20) #groups_mbk ax.legend(numpoints=1) mpld3.disable_notebook() #mpld3.display() mpld3.save_html(fig, "mbk.html") mpld3.show() #mpld3.save_json(fig, "vivod.json") #mpld3.fig_to_html(fig) fig, ax = plt.subplots(figsize=(51,25)) scatter = ax.scatter(np.random.normal(size=N), np.random.normal(size=N), c=np.random.random(size=N), s=1000 * np.random.random(size=N), alpha=0.3, cmap=plt.cm.jet) ax.grid(color="white", linestyle="solid") ax.set_title("Кластеры", size=20) fig, ax = plt.subplots(figsize=(51,25)) labels = ["point {0}".format(i + 1) for i in range(N)] tooltip = mpld3.plugins.PointLabelTooltip(scatter, labels=labels) mpld3.plugins.connect(fig, tooltip) mpld3.show()fig, ax = plt.subplots(figsize=(72,36)) for name, group in groups: points = ax.plot(group.x, group.y, marker="o", linestyle="", ms=18, label=cluster_names, mec="none", color=cluster_colors) ax.set_aspect("auto") labels = tooltip = mpld3.plugins.PointLabelTooltip(points, labels=labels) mpld3.plugins.connect(fig, tooltip) ax.set_title("K-means", size=20) mpld3.display()
Теперь при наведении на любую точку графика всплывает текст с соотвествующим поисковым запросом. Пример готового html файла можно посмотреть здесь: Mini K-Means

Если хочется в 3D и с изменяемым масштабом, то существует сервис Plotly , который имеет плагин для Python.

Plotly 3D

#для примера просто 3D график из полученных значений import plotly plotly.__version__ import plotly.plotly as py import plotly.graph_objs as go trace1 = go.Scatter3d(x=xs, y=ys, z=zs, mode="markers", marker=dict(size=12, line=dict(color="rgba(217, 217, 217, 0.14)", width=0.5), opacity=0.8)) data = layout = go.Layout(margin=dict(l=0, r=0, b=0, t=0)) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename="cluster-3d-plot")


Результаты можно увидеть здесь: Пример

И заключительным пунктом выполним иерархическую (аггломеративную) кластеризацию по методу Уорда для создания дендограммы.

In : from scipy.cluster.hierarchy import ward, dendrogram linkage_matrix = ward(dist) fig, ax = plt.subplots(figsize=(15, 20)) ax = dendrogram(linkage_matrix, orientation="right", labels=titles); plt.tick_params(\ axis= "x", which="both", bottom="off", top="off", labelbottom="off") plt.tight_layout() #сохраним рисунок plt.savefig("ward_clusters2.png", dpi=200)
Выводы

К сожалению, в области исследования естественного языка очень много нерешённых вопросов и не все данные легко и просто сгруппировать в конкретные группы. Но надеюсь, что данное руководство усилит интерес к данной теме и даст базис для дальнейших экспериментов.

Практическая работа по теме «Визуализация информации в текстовых документах».

Дан текст:

Самые известные космонавты.

Прошло уже 55 лет с того дня, как первый человек поднялся в космос. С тех пор там побывало более 500 человек, из них - более 50 женщин. На орбите нашей планете побывали представители 36 стран.

Юрий Гагарин (1934-1968). 12 апреля 1961 года с Байконура стартовал космический корабль Восток-1 с первым в истории космонавтом на борту. На орбите Гагарин делал простейшие эксперименты - ел, пил, делал заметки. Космонавт выполнил 1 оборот вокруг Земли, что заняло 108 минут. День же исторического полета стал праздноваться, как День космонавтики. 12 апреля 1961 года навсегда изменило жизнь человечества и самого Гагарина. Он стал живым символом.

Валентина Терешкова (род.1937). Первые успешные полеты советских космонавтов зародили мысль у главного конструктора Сергея Королева запустить в космос и женщину. С 1962 года по всей стране отбирали претенденток. Из пяти подготовленных кандидатов была выбрана именно Терешкова, в том числе благодаря и своему рабочему происхождению. Свой первый полет женщина-космонавт совершила 16 июня 1963 года на корабле Восток-6. Пребывание в космосе заняло трое суток.

Алексей Леонов (род. 1934). В списке советских космонавтов у него №11. Славу Леонову принес его полет в космос в статусе второго пилота на космическом корабле «Восход-2» 18-19 марта 1961 года. Космонавт совершил первый в истории выход в открытый космос, который продлился 12 минут 9 секунд. Во время тех исторических мгновений Леонов проявил исключительное хладнокровие - ведь его скафандр разбух, что мешало выходить в космос. Приземлился корабль в глухой тайге, космонавты двое суток провели на морозе.

Нил Армстронг (род. 1930). 20 июля Нил Армстронг и пилот Эдвин Олдрин посадили свой лунный модуль в районе Моря Спокойствия. Пребывание на поверхности Луны заняло 21,5 час. Астронавты совершили также выход на лунную поверхность, длительностью 2,5 часа. Первым человеком, ступившим туда, стал именно Нил Армстронг. Встав на поверхность, космонавт произнес историческую фразу: «Это лишь один маленький шаг для человека, но огромный скачок для всего человечества.»

Сергей Крикалев (род.1958). Два человека - Джерри Росс и Франклин Чанг-Диаз побывали в космосе 7 раз. Но рекорд по времени, проведенному на орбите, принадлежит советскому и российскому космонавту. Он стартовал в небо 6 раз, проведя в космосе в общей сложности 803 дня. Свой последний полет космонавт совершил в 2005 году, прожив на МКС полгода.

Валерий Поляков (род. 1942). Профессия Полякова - врач, он стал доктором медицинских наук и профессором. В истории СССР и России Поляков стал космонавтом №66. Именно ему принадлежит рекорд наиболее длительного пребывания в космосе. На орбите Земли Поляков пробыл 437 суток 18 часов, в течение 1994-1995 годов. А свой первый полет космонавт совершил еще в 1988 году, находясь над Землей с 29 августа 1988 года по 27 апреля 1989 года. Тот полет продлился 240 суток, за что Валерий Поляков получил звание Героя Советского Союза. Всего Поляков провел в космосе 678 суток.

Согласно тексту составить:

    Нумерованный список людей побывавших в космосе, согласно дате их полета (от самого раннего);

    Проиллюстрировать текст картинками (Рабочий стол- папка Космос);

    По тексту составить таблицу типа:

4) Из папки «Оценка» выберите картинку и оцените свою практическую работу, вставив изображение под выполненной работой.

Существует два понимания понятия “визуализация текстов” . В первом понимании, визуализация текстов – это генерация изображений по входному тексту. В приводится такой пример: по тексту, представленному на Рис. 1 требуется построить изображение. При этом, система, генерирующая изображение, должна понимать, что компьютер может стоять только на столе и автоматически добавлять стол на изображение. Среди русскоязычных работ этого направления отметим работу .

Другое понимание понятие “визуализация текстов” предполагает изображение либо элементов текста, либо структур, извлеченных из текста, для образовательных или аналитических нужд. В этом понимании можно выделить несколько различных подходов.

Исторически первый – так называемое облако тегов (tag cloud) . Облако тегов представляет собой множество ключевых слов или словосочетаний – тегов, извлеченных из текста, изображенных на плоскости. Размер каждого тега зависит от частоты или любой другой частотной характеристики тега. Облако тегов может иметь любую форму: действительно облака или, например, звездочки.



Рис. 2, источник: https://uniqons.wordpress.com

Иногда цветом на облаке тегов отмечают какие-нибудь важные характеристики, например, авторство. На Рис. 3 голубым отображены слова из предвыборной программы Обамы, коричневым – Маккейна. Облака тегов позволяют получить общее представление о содержании текста или коллекции текстов. Например, в облака тегов используются для визуализации частых слов в позитивных или негативных твитах, посвященных предвыборной кампании 2012 г. в США. Одно из развитий идеи облака тегов представлено в : облака Вена , которые используются для демонстрации контраста между двумя коллекциями текстов.



Рис. 3, источник: http://www.planetizen.com/


Рис. 4, Три примера облаков Вена. В левой части частые слова из твитов, содержащих слово “Orioles” (бейсбольная команда), в правой – “Nationals”. По середине расположены общие для обеих коллекций слова.

Второй подход к визуализации текстов – это визуализация элементов текстов и теоретико-множественных, алгебраических или статистических отношений между ними. Как правило, в рамках этого подхода текст или коллекция текстов представляется графом, в котором вершины – ключевые слова или словосочетания или понятия, выделенные из текстов, соединенные ребрами по каким-то принципам. Например, в составляется панорама тем – графом из трех соединенных компонент (см. Рис. 5), каждая доля соответствует одному источнику, узлы подписаны ключевыми словами или словосочетаниям. В графе есть два типа ребер: внутри одной компоненты, соответствующей одному источнику, узлы соединены в соответствии с взаимной встречаемостью. Второй тип ребер соединяет похожие узлы из разных источников. В строится карта метро (Рис. 6) – визуализация динамических кластеров ключевых слов и словосочетаний.



Рис. 5


Рис. 6

Третий подход к визуализации текстов – это визуализация моделей скрытых тем (latent topics) . Система Serendip выделяет скрытые темы в тексте и подсвечивает слова во входном тексте цветом (Рис. 7). У каждой скрытой темы свой цвет, интенсивность цвета зависит от степени вхождения слова в тему. В скрытые темы представлены в виде облаков тегов (Рис. 8).


Рис. 7

Рис. 8

Наша работа по построению графа референций принадлежит ко второму подходу. В графе референций узлы – это ключевые слова или словосочетания, а направленные ребра вида A->B задают отношение вида “если встречается A, то встречается B”, то есть, “B встречается в контексте A”.

  1. Chang, Angel X., Manolis Savva, and Christopher D. Manning. "Semantic parsing for text to 3d scene generation." ACL 2014 (2014): 17.
  2. Усталов, Дмитрий, и Александр Кудрявцев. "Применение онтологии при синтезе изображения по тексту." Доклады всероссийской научно–практической конференции Анализ Изображений, Сетей и Текстов. М.: Национальный Открытый Университет ИНТУИТ. 2012
  3. Coupland D. (1996), Microserfs, Flamingo
  4. Wang, H., Can, D., Kazemzadeh, A., Bar, F., & Narayanan, S. (2012, July). A system for real-time twitter sentiment analysis of 2012 us presidential election cycle. In Proceedings of the ACL 2012 System Demonstrations (pp. 115-120). Association for Computational Linguistics.
  5. Coppersmith, G., & Kelly, E. (2014). Dynamic Wordclouds and Vennclouds for Exploratory Data Analysis. Sponsor: Idibon, 22.
  6. Liu, S., Wang, X., Chen, J., Zhu, J., & Guo, B. (2014, October). TopicPanorama: A full picture of relevant topics. In Visual Analytics Science and Technology (VAST), 2014 IEEE Conference on (pp. 183-192). IEEE.
  7. Shahaf, D., Yang, J., Suen, C., Jacobs, J., Wang, H., & Leskovec, J. (2013, August). Information cartography: creating zoomable, large-scale maps of information. In Proceedings of the 19th ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 1097-1105). ACM.
  8. Alexander, E., Kohlmann, J., Valenza, R., Witmore, M., & Gleicher, M. (2014, October). Serendip: Topic model-driven visual exploration of text corpora. In Visual Analytics Science and Technology (VAST), 2014 IEEE Conference on (pp. 173-182). IEEE.
  9. Smith, A., Chuang, J., Hu, Y., Boyd-Graber, J., & Findlater, L. (2014). Concurrent Visualization of Relationships between Words and Topics in Topic Models. Sponsor: Idibon, 79.
просмотров