Comments 38
спасибо за статью, но после R.I.P Rowan Atkinson, полез искать что же с ним случилось :)
UFO just landed and posted this here
Я свой диплом по статистике и регрессионному анализу делал с помощью R. Отличный инструмент :)
Хороший язык для статистов
Пример с Аткинсоном вы сами придумали или перевели уже существующий текст?
Хотелось бы увидеть тестовый набор данных, чтобы самостоятельно запустить на нем предложенный Вами код.
Да, конечно, пожалуйста: данные
Действительно очень полезный наглядный пример, Оочень захотелось побаловаться с «R». Лень конечно ставить. Думаю на выходных займусь этим. Мне нужно стонить специальное чтобы к реальным данным твиттера подключиться знать?
Спасибо! Специального ничего не надо. Нужно лишь установить дополнительные библиотеки, т. к. их нет в базовом наборе. Для этой статьи это: twitteR, ggplot2, wordcloud, tm.
Устанавливается так: install.packages(«название библиотеки»)
Устанавливается так: install.packages(«название библиотеки»)
Не добрался в эти выходные до программки. Но все равно охота разобраться. Так что еще вернусь обязательно.
Мы кстати написали на хабре как у нас в команде используется твиттер, может быть тоже будет интересно.
Там как раз вопрос про кластеризацию задают. Порекомендовал им R попробывать. Вообще да нужно будет нашим прогерам рассказать им наверно это все проще будет делать. Я честно скажу вообще дестопные приложения давно не ставил, как-то меня это все ламает. браузер естьи клево.
Мы кстати написали на хабре как у нас в команде используется твиттер, может быть тоже будет интересно.
Там как раз вопрос про кластеризацию задают. Порекомендовал им R попробывать. Вообще да нужно будет нашим прогерам рассказать им наверно это все проще будет делать. Я честно скажу вообще дестопные приложения давно не ставил, как-то меня это все ламает. браузер естьи клево.
А где, собственно, анализ настроений? :)
Вообще забавно наблюдать за тенденциями в IT-мире. Буквально за последние пол года связка твиттер + анализ настроений получила ну просто дикое распространение. По крайней мере мне штук 5 приглашений на подобные проекты присылали. Что также приятно, растёт и комьюнити у R — инструмент действительно очень приятный и удобный. Расстраивает только плохая масштабируемость — для действительно больших данных (а R как статистическая тулза по идее должна специализироваться именно на них) всё равно приходится брать Mahout или что-нибудь подобное.
Вообще забавно наблюдать за тенденциями в IT-мире. Буквально за последние пол года связка твиттер + анализ настроений получила ну просто дикое распространение. По крайней мере мне штук 5 приглашений на подобные проекты присылали. Что также приятно, растёт и комьюнити у R — инструмент действительно очень приятный и удобный. Расстраивает только плохая масштабируемость — для действительно больших данных (а R как статистическая тулза по идее должна специализироваться именно на них) всё равно приходится брать Mahout или что-нибудь подобное.
Да, согласен, анализ настроений это несколько иное. В данном случае можно сказать, что это просто демонстрация скорости распространения слухов. На счет масштабируемости согласен. Хотя есть Revolution R и вроде однопользовательские лицензии для пользователей академических учреждений предоставляются бесплатно, но я пока не пробовал этот продукт.
Ну, насколько я понял, Revolution R масштабируется на несколько ядер внутри одной машины, но не на кластер. А на одной машине всё равно жёстко стоит ограничение по памяти — на моей машине с 8Gb на той же задаче анализа настроений уже при матрице документов 10k * 14k начинает лезть в своп, а документов по-хорошему нужно не 10k, а хотя бы 200-300k. Так что либо mahout, либо подключать БД и переделывать алгоритмы для инкрементальной работы.
Судя по этой публикации, поддерживается обработка данных по узлам вычислительного кластера.
Кстати, несколько замечаний для людей, заинтересовавшихся R (как раз недавно хотел об этом развёрнутую статью написать, но всё времени нет).
Во-первых, для R есть замечательная среда разработки — RStudio. Как и сам R доступна для всех трёх основных платформ, плюс есть серверная версия для работы через бразер. Преимущества — есть редактор файлов с подсветкой синтаксиса, список созданных объектов, графики и документация открываются в отдельной области, ну и в целом поприятней голой консоли.
Во-вторых, R во многом похож на Scheme, только с JavaScript-подобным синтаксисом и без макросов. Зато с такой же системой environment-ов, с такой же нежёсткой типизацией, символами (symbols) и выражениями (expressions) и т.д. Последние 2 фичи, кстати, позволяют решать многие из задач, решаемых в Лиспах за счёт макросов.
В-третьих, сразу стоит понимать, что R — язык с историей, т.е. многие его «странности» объясняются именно историческими причинами. Например, в R есть сразу 2 системы объектно-ориентированного программирования — S3 и S4 (про их отличия был вопрос на StackOverflow). При этом нельзя сказать, что одна система вляется устаревшей — отнюдь, обе используются довольно часто. Историческими же причинами объясняется и отсутствие единой конвенции кода: изначально в R было принято писать всё маленькими буквами и разделять слова точками ("." в R — вполне законный символ в имени, так же, как "_" в Си, например). Но потом пришла S3, в которой точка использовалась при диспетчеризации методов объектов, и имена функций с точками стали не очень очевидными.
В-четвёртых, типизация в R может поначалу сломать мозг. В R у каждого объекта есть как минимум 2 атрибута типа — mode и class (их можно узнать с помощью одноимённых функций — mode() и class()). Грубо говоря, class — это тип самого объекта (например, matrix или table), а mode — это тип примитивов, хранимых в объекте (например, numeric или character). При этом numeric, integer, character и т.д. — это не число, целое и чар, как это принято в других языках, а вектор этих значений. И даже `5` — это не просто число, а вектор из одно элемента. В общем, что касается типов, в R всё очень и очень необычно :)
В-пятых, в R обращение к данным производится посредствам индексации. Например, к пятому элементу (привет, Мила Йовович) вектора `x` можно обратиться как `x[5]`. Но у вектора также может быть атрибут `names`, и тогда к тому же элементу можно обратиться, например, `x[«fifth_element»]`. Кроме оператора `[ ]` есть оператор `[[ ]]` (в основном используется для поиска по спискам — lists) и оператор `$`, который работает только для обращения через имя элемента, но и то не для всех типов. Так что не удивляйтесь, а внимательно читайте документацию и/или туториалы.
Кроме того, обратите внимание, что у любого объекта кроме основного значения может быть любое количество атрибутов. Например, class и mode — это просто атрибуты объекта (которые, кстати, можно перезаписывать). Часто можно встретить и такие атрибуты как dim, names/dimnames и др.
В-шестых, R использует pass-by-promise механизм. Для тех, кто незнаком с ленивыми вычислениями поясню: в функцию передаётся не сам объект, а специальная «обёртка», которая «обещает» вычислить объект, когда он понадобится. Впрочем, данные во внутренних структурах R преобразуются настолько часто, что эффект ленивых вычислений практически незаметен и в целом механизм становится похож на pass-by-value.
Основные типы данных, на которые сразу надо обратить внимание:
* векторы (numeric, character) — на них строится всё. Пример создания числового вектора: `c(1, 2, 3, 4)`
* списки (list) — то же самое, но может хранить элементы любого типа
* матрицы и дейта фреймы (matrix и data.frama, соответственно) — для хранения двумерных данных. Матрицы быстрее и «легче», но могут хранить только один тип данных. Дейта фреймы просто удобней — в разных колонках можно хранить разные типы, плюс можно обращаться к колонкам по имени, плюс ещё несколько приятностей. Про сравнение матриц и дейта фреймов можно также почитать на StackOverflow.
* факторы (factor) — для представления категориальных данных. Например, есть у вас данные о нарушениях ПДД с колонкой «цвет сфетофора», которые могут принимать всего три значения — green, yellow и red. Вы можете создать фактор с тремя «уровнями» (не спрашивайте почему такие названия — это что-то из глубоких понятий статистики):
factor(«green», c(«green», «yellow», «red»))
[1] green
Levels: green yellow red
[1] green — [одномерный] строковый вектор green — значение вектора
Levels: green yellow red — уровни фактора
* выражения (expressions) — обычно вводятся с помощью символа тильды (~). Например, если вы видите выражение `z ~ x + log(y)`, это значит, что мы задаём зависимость переменной `z` от `x` и `y` как сумму первого и логарифм от второго. Смотрите примеры, будет понятней.
Топ-10 функций R, которые лучше выучить сразу:
mode
class
print
summary
attributes и attr
apply и sapply
plot
library и install.package
dim
[], [[]], $
Приятного изучения :)
Во-первых, для R есть замечательная среда разработки — RStudio. Как и сам R доступна для всех трёх основных платформ, плюс есть серверная версия для работы через бразер. Преимущества — есть редактор файлов с подсветкой синтаксиса, список созданных объектов, графики и документация открываются в отдельной области, ну и в целом поприятней голой консоли.
Во-вторых, R во многом похож на Scheme, только с JavaScript-подобным синтаксисом и без макросов. Зато с такой же системой environment-ов, с такой же нежёсткой типизацией, символами (symbols) и выражениями (expressions) и т.д. Последние 2 фичи, кстати, позволяют решать многие из задач, решаемых в Лиспах за счёт макросов.
В-третьих, сразу стоит понимать, что R — язык с историей, т.е. многие его «странности» объясняются именно историческими причинами. Например, в R есть сразу 2 системы объектно-ориентированного программирования — S3 и S4 (про их отличия был вопрос на StackOverflow). При этом нельзя сказать, что одна система вляется устаревшей — отнюдь, обе используются довольно часто. Историческими же причинами объясняется и отсутствие единой конвенции кода: изначально в R было принято писать всё маленькими буквами и разделять слова точками ("." в R — вполне законный символ в имени, так же, как "_" в Си, например). Но потом пришла S3, в которой точка использовалась при диспетчеризации методов объектов, и имена функций с точками стали не очень очевидными.
В-четвёртых, типизация в R может поначалу сломать мозг. В R у каждого объекта есть как минимум 2 атрибута типа — mode и class (их можно узнать с помощью одноимённых функций — mode() и class()). Грубо говоря, class — это тип самого объекта (например, matrix или table), а mode — это тип примитивов, хранимых в объекте (например, numeric или character). При этом numeric, integer, character и т.д. — это не число, целое и чар, как это принято в других языках, а вектор этих значений. И даже `5` — это не просто число, а вектор из одно элемента. В общем, что касается типов, в R всё очень и очень необычно :)
В-пятых, в R обращение к данным производится посредствам индексации. Например, к пятому элементу (привет, Мила Йовович) вектора `x` можно обратиться как `x[5]`. Но у вектора также может быть атрибут `names`, и тогда к тому же элементу можно обратиться, например, `x[«fifth_element»]`. Кроме оператора `[ ]` есть оператор `[[ ]]` (в основном используется для поиска по спискам — lists) и оператор `$`, который работает только для обращения через имя элемента, но и то не для всех типов. Так что не удивляйтесь, а внимательно читайте документацию и/или туториалы.
Кроме того, обратите внимание, что у любого объекта кроме основного значения может быть любое количество атрибутов. Например, class и mode — это просто атрибуты объекта (которые, кстати, можно перезаписывать). Часто можно встретить и такие атрибуты как dim, names/dimnames и др.
В-шестых, R использует pass-by-promise механизм. Для тех, кто незнаком с ленивыми вычислениями поясню: в функцию передаётся не сам объект, а специальная «обёртка», которая «обещает» вычислить объект, когда он понадобится. Впрочем, данные во внутренних структурах R преобразуются настолько часто, что эффект ленивых вычислений практически незаметен и в целом механизм становится похож на pass-by-value.
Основные типы данных, на которые сразу надо обратить внимание:
* векторы (numeric, character) — на них строится всё. Пример создания числового вектора: `c(1, 2, 3, 4)`
* списки (list) — то же самое, но может хранить элементы любого типа
* матрицы и дейта фреймы (matrix и data.frama, соответственно) — для хранения двумерных данных. Матрицы быстрее и «легче», но могут хранить только один тип данных. Дейта фреймы просто удобней — в разных колонках можно хранить разные типы, плюс можно обращаться к колонкам по имени, плюс ещё несколько приятностей. Про сравнение матриц и дейта фреймов можно также почитать на StackOverflow.
* факторы (factor) — для представления категориальных данных. Например, есть у вас данные о нарушениях ПДД с колонкой «цвет сфетофора», которые могут принимать всего три значения — green, yellow и red. Вы можете создать фактор с тремя «уровнями» (не спрашивайте почему такие названия — это что-то из глубоких понятий статистики):
factor(«green», c(«green», «yellow», «red»))
[1] green
Levels: green yellow red
[1] green — [одномерный] строковый вектор green — значение вектора
Levels: green yellow red — уровни фактора
* выражения (expressions) — обычно вводятся с помощью символа тильды (~). Например, если вы видите выражение `z ~ x + log(y)`, это значит, что мы задаём зависимость переменной `z` от `x` и `y` как сумму первого и логарифм от второго. Смотрите примеры, будет понятней.
Топ-10 функций R, которые лучше выучить сразу:
mode
class
summary
attributes и attr
apply и sapply
plot
library и install.package
dim
[], [[]], $
Приятного изучения :)
Хм, в окне отправки сообщения казалось меньше текста 0_о
Полноценный пост :)
Спасибо.
Отдельный пост, с форматированием и ссылками написать стоило.
Топ-10 функций у каждого свой. У меня на первом месте str
Отдельный пост, с форматированием и ссылками написать стоило.
Топ-10 функций у каждого свой. У меня на первом месте str
Относительно небольшой пост про линейную регрессию я пишу уже 2 месяца, пост про R должен был идти следующим :)
Скажем так, это короткий список тех функций, знание которых облегчит начало работы с R. А так да, по частоте использования (особенно в консоли) str однозначно в десятке.
Скажем так, это короткий список тех функций, знание которых облегчит начало работы с R. А так да, по частоте использования (особенно в консоли) str однозначно в десятке.
В какой блог писать будете? Подпишусь на него :)
а про нелинейную регрессию будет? Там все же интереснее :)
Вообще изначально была цель создать ряд материалов по машинному обучению, которые с одной стороны будут просты для понимания, а с другой — достаточно подробны, чтобы начать применять знания без дополнительной литературы. Статья по линейной регрессии — это своеобразное введение, в котором можно рассказать про способы представления данных, функцию ошибки, методы её минимизации и т.д., при этом сохранив читабельный объём. Поэтому в ближайшей статье скорее всего нелинейная регрессия будет на уровне «совсем как линейная, только формула сложнее». Если хватит сил и времени, то позже напишу и про нелинейную, и про SVM-регрессию, и про связь с нейронными сетями и многое другое. Но там всё друг за друга цепляется — SVM-регрессию проще понять после SVM-классификатора, к классификаторам же относится и логистическая регрессия, нейронки затрагивают и регрессию, и классификацию, да ещё и кластеризацию, и всё это нужно пробовать на каких-то инструментах (R, Weka, Mahout). Так что как-то так.
впервые воспользовался функцией «избранный комментарий», спасибо!
Я, конечно, с R на «Вы», но вот тот факт, что я не смог с помощью функции searchTwitter пакета twitteR найти твиты с нужными мне словами на русском языке, несколько смущает. Притом, что с поиском английских ключевых слов всё работает прекрасно.
Прошу прощения за это упущение :) Если необходимо искать на каком-то конкретном языке нужно указывать параметр lang. Значения параметра: en, ru, de, it, etc.
Например:
> searchTwitter('Россия', n=25, lang='ru')
Например:
> searchTwitter('Россия', n=25, lang='ru')
Дома я поигрался с этим параметром, но всё равно в результатах поиска оказывался какой-то откровенный спам, а не то, что выдаёт сам твиттер на поисковый запрос.
На работе при запуске вашего скрипта получил следующую ошибку:
Ошибка в curlPerform(curl = curl, .opts = opts, .encoding = .encoding):
couldn't connect to host
Разумею, что из-за фаерволла.
На работе при запуске вашего скрипта получил следующую ошибку:
Ошибка в curlPerform(curl = curl, .opts = opts, .encoding = .encoding):
couldn't connect to host
Разумею, что из-за фаерволла.
Sign up to leave a comment.
Анализируем Twitter при помощи R