пятница, 6 июля 2018 г.

Обработка изображений и сканов документов с помощью Image Magic

ImageMagick — набор программ (консольных утилит) для чтения и редактирования файлов множества графических форматов.

Обработка изображений происходит через обращение к консольной утилите convert. Помимо преобразования изображений из одного формата в другой (например из текста pdf в картинку png) утилита может заменить графический редактор. Склейка и обрезка изображений, изменение яркости и контраста, применение фильтров - всё это умеет convert. Кроме того операции с консольной утилитой легко автоматизируются. Есть возможность создавать специальные скрипты для ImageMagic которые будут производить сложные операции с изображением.
Многие скрипты можно скачать с официального сайта.

Изменение одного из размеров..

...с сохранением соотношения сторон
# resize image to height 25, keeping aspect ratio convert -geometry x25 src/image1.png out/image1.png
Если операция требует двух параметров, то они часто разделяются символом x. В примере первый параметр (ширина) не задан.

Поворот
Повернуть по часовой стрелке на 90 градусов:

convert 1.png -rotate 90 rotated.png
Кадрирование
Равномерно обрезать изображение по всем краям оставив 90% ширины и 90% высоты
convert my_image.jpg -gravity center -crop 90% croped.jpg

Изменение DPI

Часто при преобразовании PDF в PNG программа сильно занижает DPI. Поэтому это значение стоит задать отдельно с помощью параметра -density.

convert -density 250 file.pdf new_file.png
-flatten - чтобы заменить прозрачность - белым
-transparent white - не работает

density нужно задавать до имени входного файла 

Создание pdf из изображений

convert способен и выполнять обратную операцию - создание pdf из набора изображений. Каждое изображение в примере станет отдельной страницей документа
convert 1.jpg 2.jpg 3.jpg result.pdf
Можно повернуть (или выполнить другие операции) отдельные картинки перед добавление в pdf

convert 1.jpg 2.jpg \( 3.jpg -rotate 90  \) result.pdf

Склейка изображений

Добавление изображений в вертикальную ленту: -append
Добавление изображений в горизонтальную ленту: +append
convert first.png second.png -append compare.png
convert first.png second.png +append compare.png
Повторение изображения.
convert first.png clone 0 +append first2.png
Эта команда повторит первое изображение (индекс 0) и поместит его 
 справа (+append) от оригинала.
Над копие можно производить отдельные операции, заключив эти операции и команду copy в скобки:
Копия перед добавлением к оригиналу будет повёрнута на 180 градусов:
convert 1.png  \( -clone 0 -rotate 180 \) +append 1+1.png


Размытие
Размытие по Гауссу 
-gaussian-blur 0x20

0 - радиус. лучше задавать именно 0.
20 - сигма (размер ядра?). Чем больше тем сильнее будет размыто изображение.

Медианный фильтр
-median 20

Показывать прогресс
Некоторые операции занимают заметное количество времени, поэтому чтобы не скучать можно включить отображение статуса и прогресса операции
 -monitor

Регулировка яркости и контраста
convert -brightness-contrast -10x40 2.png out_bc.png
    установить яркость -10, контраст 40. Значения изменяются в [-100, +100]

Регулировка уровней

Операция -level 25%,75% возьмёт 25% самых тёмных пикселей сделав их чёрными, а 25% (100 - 75) самых светлых сделает белыми [doc: Direct Level Adjustments]. При этом диапазон яркостей оставшихся пикселей будет масштабирован, чтобы растянуть их по всей шкале яркостей.Эта операция называется линейной коррекцией. Она призвана повысит контрастность изображения.
Исходное изображение
изображение после операций с гистограммой
На изображениях выше видно, что черного и белого цвета стало больше. А серых оттенков - меньше. Можно исходное изображение в графическом редакторе (например GIMP) и выбрав операцию Уровни подвигать ползунки под гистограммой следя как изменяется картинка.

Оттенки теперь представлены 50% всех
пикселей, остальные 50% (слева и справа)
 делят черные и белые пиксели.

Преобразовать в черно-белое

convert -type grayscale my_image.jpg gray.jpg;



Обрезка по уровню:
Более радикальный способ уменьшения числа цветов - оставить лишь два. Каждый пиксель яркостью меньше 50% будет черным, а яркостью больше - белым.

convert -evaluate Threshold 50% 1.png out1.png

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

Фильтры

Оставить только горизонтальные линии
convert source.png -morphology close:5 "1x5: 1,1,1,1,1" result.png 
Регулируя параметры фильтра, число затариваемых пикселей (здесь их пять) можно оставлять не все вертикальные линии, а определённой длинны.
Число 5 (после close)  - это количество повторений фильтра. 
Аналогично можно оставить только горизонтальные линии изменив 1x5 на 5x1.
Применение фильтров в документации: http://www.imagemagick.org/Usage/morphology/#kernel

Другой способ удаления линий: https://stackoverflow.com/questions/41619646/image-processing-to-remove-lines

Обработка сфотографированного документа. Непрактичный пример.

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

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


Исходное изображение.
Пусть исходное изображение сохранено в файле source.jpg

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

0. convert source.jpg -normalize source1.jpg

1. Выделим тень
convert source1.jpg -median 45 blur.jpg
60 - радиус в пикселях, на котором будет производится размытие вокруг данного пикселя. Подбирается экспериментально. Результирующее изображение не должно содержать заметных следов записей, только тени.

Если операция занимает много времени, то добавлением ключа -monitor можно порадовать себя информацией о прогрессе.

В результате должно получится что-то похожее:

Изображение после применения медианного фильтра. Осталось только тень.


2. Удаление тени.
Для удаление тени используем следующую формулу для яркости каждого пикселя:
R = I1 - I2 + 0.5
Здесь считаем, что яркость пикселя изменяется от 0 до 1. Потому что так считает ImageMagic.
R - яркость пикселя в результирующем изображении. I1, I2 - яркость соответствующих пикселей на входных изображениях.
0.5 добавим чтобы сильно не потерять яркость, ведь используется вычитание которое яркость уменьшит.

Чтобы задать такую операцию, которая называется Извлечение зерна (Grain extract) зададим несколько параметров программе:
  • -compose oper
будем работать с несколькими изображениями сразу, используя их пиксели в некоторой операции oper. Возможные операции смешивания изображений (слоёв) можно посмотреть в документации. Они очень похожи на те, что используются в графических редакторах. Например Gimp.

В данном случае будем использовать свою операцию, поэтому зададим значение oper как Mathematics.
Далее нужно привести параметры этой операции, которая и будет задавать нашу формулу. По умолчанию в ImageMagic используется формула:
A*I1 * I2 + B * I1 + C * I2 + D.

Её можно видоизменить задавать значение коэффициентов. A, B, C, D.
Чтобы она выглядела как формула приведённая выше зададим такие значения коэффициентов:
A = 0, B = 1, C = -1, D = 0.5.

Эти параметры операции Mathematics задаются ещё одним ключём:
  • -define compose:args='0,-1,1,0.5'
Наконец чтобы на выходе получилось одно изображение (на входе то будет два) используем ключ
  • -composite

В конце концов должна получится следующая команда:
convert -compose Mathematics -define compose:args='0,1,-1,0.5' -composite blur.jpg source1.jpg  result0.jpg


Получим такую картинку:
После извлечения зерна тень пропала!
Остаётся только подправить яркость, контраст (кому нужна серая бумага?) и немного текст. Убрать серый фон бумаги можно и подправив гистограмму, обрезав все относительно светлые пиксели.

3. Исправляем яркость и контраст.
Параметры подбираются тоже опытным путём.
convert -brightness-contrast 30x60 result0.jpg result1.jpg
Результат:

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

4. Используем нерезкую маску (Unsharpen mask) чтобы исправить это, и увеличить читаемость.
convert -brightness-contrast 30x60 result0.jpg result1.jpg




Наконец можно сравнить исходное изображение с полученным поместив их рядом:
convert +append source.jpg result1.jpg compare.jpg


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

Всё вместе

convert source.jpg -normalize source1.jpg

convert source1.jpg -median 45 blur.jpg
convert -compose Mathematics -define compose:args='0,1,-1,0.5' -composite blur.jpg source1.jpg result0.jpg
convert -brightness-contrast 30x60 result0.jpg result1.jpg
convert -brightness-contrast 30x60 result0.jpg result1.jpg

Дополнение

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

Операцию повышения яркости и контрастности можно заменить работой с гистограммой (см. -level).


Обработка сфотографированного документа. Практичный пример.

Автор не до конца понимает как это работает, но объяснить для гуманитариев попробует :)
Фильтра Гаусса используется для размытия. Он является фильтром низких частот, т.е. обрубает высокие частоты (spatial frequency). Частоту которая служит порогом можно регулировать с помощью параметра фильтра - сигмы.
Значит можно использовать один фильтр Гаусса, который отбросит высокие частоты (условно: > x1 )  и другой фильтр Гаусса, которые отбросить частоты чуть ниже (условно: >x0).
x0 > x1.
Получатся два изображения, которые не содержат частот выше x1, а одно из них не содержит частот выше x1. Значит, вычитанием второго изображения из первого можно получить частоты лежащие в диапазоне от x0 до x1.

Это свойство и использовано в фильтре "Разница по Гауссу". Этот фильтр уберет слишком крупные детали (частоты < x0) и слишком крупные (частоты > x1).

Параметры фильтра обычно побираются экспериментально, но можно использовать числа из примера. Меньшее из чисел, не стоит делать большим - от него зависит размер границ. https://docs.gimp.org/ru/plug-in-dog.html

convert source.png -morphology Convolve DoG:15,100,0 -negate -normalize -level 60%,91%,0.1 result.png
-morphology Convolve DoG:15,100,0 - применение фильтра "Разница по Гауссу" (Difference of Gaussians, IM doc).

Изображение получится инвертированным поэтому инвертируем его снова (-negate), повысим контрастность (-normalize) и, наконец, "откусим"  60% самых светлых пикселей и 9% самых тёмных, уменьшив яркость ( 0.1 ).

Фильтр Разница по Гауссу является одним из семейства фильтров, которые призваны выделять контуры. Они используются в машинном зрении, например чтобы выделить контуры номерного знака на автомобиле.

Алсо

Преобразование сканированного документа в текст
tesseract my_image.png my_text -l rus+eng
https://askubuntu.com/questions/16268/whats-the-best-simplest-ocr-solution

Ссылки


вторник, 22 августа 2017 г.

О recon-ng


recon-ng - это приложение для OSINT - Open Source INTellegence (разведки на основе открытых данных).

Кратко о recon-ng:
- осуществляет автоматизированный поиск юзернеймов, профилей, устройств, и т.д.;
- открытый исходный код;
- cli интерфейс а-ля matesploit;
- использует модули;
- написан на Python;

Установка

pip install -r REQUIREMENTS
./recon-ng

Начало работы

Для полноценной работы фреймворка нужно обеспечить ему доступ к API популярный онлайн-сервисов вроде google, linkedin, twшtter и д.р.
Но не все модули этого требуют.
Например, чтобы получить ключ для использования API google нужно зарегистрироваться и по следующей ссылке: https://console.developers.google.com/apis/dashboard 

Понадобится следующие API
  • YouTube Data API
  • Custom Search API

Полный список необходимых ключей и сервисов приведён на сайте разработчика, в разделе документации.

В программе список ключей хранится в таблице keys. 
show keys
  +------------------------------------------------------------+
  |       Name       |                  Value                  |
  +------------------------------------------------------------+
  | bing_api         |                                         |
  | builtwith_api    |                                         |
  | censysio_id      |                                         |
  | censysio_secret  |                                         |
  | flickr_api       |                                         |
  | fullcontact_api  |                                         |
  | github_api       |                                         |
  | google_api       |                                         |
  | google_cse       |                                         |
  | hashes_api       |                                         |
  | instagram_api    |                                         |
  | instagram_secret |                                         |
  | ipinfodb_api     |                                         |
  | jigsaw_api       |                                         |
  | jigsaw_password  |                                         |
  | jigsaw_username  |                                         |
  | linkedin_api     |                                         |
  | linkedin_secret  |                                         |
  | pwnedlist_api    |                                         |
  | pwnedlist_iv     |                                         |
  | pwnedlist_secret |                                         |
  | shodan_api       |                                         |
  | twitter_api      |                                         |
  | twitter_secret   |                                         |
  +------------------------------------------------------------+


Добавить ключ просто
 keys add google_api <ключ>

Источники информации
recon-ng использует множество источников информации. Это и популярные поисковые системы, социальные сети и популярные сервисы вроде github.
Среди них можно отметить специализированные поисковики:
см. таблицу выше, чтобы понять нужен ли ключ для обращения к API этих поисковиков.

 

Начало использования

Текстовый интерфейс похож на таковой Metasploit и set (Social Enginering Toolkit). Значит здесь можно создавать рабочие окружения (workspace), подключать модули, задавать их параметры и наконец запускать.  Информация будет сохранятся в БД. Для каждого рабочего окружения сохраняются свои экземпляры таблиц.
Создать рабочее место
workspace add <name>

Просмотреть основные параметры (прокси, юсерагент, и т.п.)
set

Name        Current Value  Required  Description
  ----------  -------------  --------  -----------
  NAMESERVER  8.8.8.8        yes       nameserver for DNS interrogation
  PROXY                      no        proxy server (address:port)
  THREADS     10             yes       number of threads (where applicable)
  TIMEOUT     10             yes       socket timeout (seconds)
  USER-AGENT  Recon-ng/v4    yes       user-agent string
  VERBOSITY   1              yes       verbosity level (0 = minimal, 1 = verbose, 2 = debug)


В начале хорошо бы установить правдоподобный User-Agent чтобы не банили поисковики.
Например
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
Возможно понадобится использовать прокси чтобы обойти блокировки некоторых социальных сетей или сайтов в некоторых странах.

Показать все таблицы
show schema

Показать список модулей
show modules

Использовать модуль
use <module name>

После этой команды модуль будет готов к настройке и запуску.

Посмотреть описание и настройки загруженного в данный момент модуля
show info

Как правило для работы модуля нужно задать одну или несколько начальный переменных (адрес сайта, юзернейм, и.т.д). Их название и назначение зависит от назначения модуля. По умолчанию большинство модулей используют данные из таблиц. Почти у каждого модуля есть параметр SOURCE (см. пример ниже). SOURCE = default если будут использованы данные из таблицы. Но можно брать данные, например список адресов электронной почты из фала
set SOURCE полное_имя_файла
или если нужно проверить только одно значение, то  указать его непосредственно
set SOURCE значение
После выполнения какого-нибудь модуля результаты работы обычно записываются в таблицы. 

Показать число записей в каждой таблице (это тоже отдельная таблица)
 show dashboard

Показать любую таблицу, например profiles
show profiles
Добавить запись в таблицу
add имя_таблицы поле1~поле2~поле2...
Здесь нужно правильно учесть число полей.

Примеры использования


Проверка существования почтовых адресов
Загрузим модуль командой
use recon/contacts-contacts/mailtester
или просто указав имя модуля
use mailtetser
Просмотрим параметры
show info
      Name: MailTester Email Validator
      Path: modules/recon/contacts-contacts/mailtester.py
    Author: Tim Tomes (@LaNMaSteR53)

Description:
  Leverages MailTester.com to validate email addresses.

Options:
  Name    Current Value                        Required  Description
  ------  -------------                        --------  -----------
  REMOVE  False                                yes       remove invalid email addresses
  SOURCE  default                              yes       source of input (see 'show info' for details)

Source Options:
  default        SELECT DISTINCT email FROM contacts WHERE email IS NOT NULL
  <string>       string representing a single input
  <path>         path to a file containing a list of inputs
  query <sql>    database query returning one column of inputs
Здесь сказано, что если параметр SOURCE установлен в default, то для исходных данных будут выбраны все емейлы из таблицы contacts.
Значит нужно добавить запись в эту таблицу.

add contacts ~~~адрес_эл._почты~~~

Заполнять все поля в таблице contacts не обязательно. Поэтому разделяя поля тильдой просто оставим их пустыми, кроме поля электронной почты.
Сама таблица после добавления запись будет выглядеть так
show contacts

  +------------------------------------------------------------------------------------------------------------+
  | rowid | first_name | middle_name | last_name |       email       | title | region | country |    module    |
  +------------------------------------------------------------------------------------------------------------+
  | 3     |            |             |           | адрес_эл._почты |       |        |         | user_defined |
  +------------------------------------------------------------------------------------------------------------+


Если нужно проверить одну почту удобнее указать её адрес непостредственно параметру SOURCE
set SOURCE почта

Если адресов много, то можно и файл с ними указать
set SOURCE файл-с-емейлами

Наконец запустим модуль на выполнение:
run

Проверка почтового адреса делается запросом на сервер где он зарегистрирован. Судя по сообщениям программы не все серверы поддерживают реализованную проверку (возможно нужен ключ для API?), среди них:
gmail.com и hotmail.com.
На некоторых сервисах (rambler.ru) скрипт падает.

Поиск почты в haveibeenpwned.com
use recon/contacts-credentials/hibp_breachshow
set SOURCE ...
run
    
Если адреса не найдено, то вероятно аккаунты с этим почтовым адресом не были взломаны и хэши паролей не были опубликованы.

Поиск "интересных" файлов на сайте
     use discovery/info_disclosure/interesting_files
     [recon-ng][default][interesting_files] > set SOURCE mi-al.ru
     [recon-ng][default][interesting_files] > run

[*] http://mi-al.ru:80/robots.txt => 200. 'robots.txt' found!
[*] http://mi-al.ru:80/sitemap.xml => 301
[*] http://mi-al.ru:80/sitemap.xml.gz => 301
[*] http://mi-al.ru:80/crossdomain.xml => 301
[*] http://mi-al.ru:80/phpinfo.php => 301
[*] http://mi-al.ru:80/test.php => 301
[*] http://mi-al.ru:80/elmah.axd => 301
[*] http://mi-al.ru:80/server-status => 301
[*] http://mi-al.ru:80/jmx-console/ => 404
[*] http://mi-al.ru:80/admin-console/ => 404
[*] http://mi-al.ru:80/web-console/ => 404
[*] 1 interesting files found.

Поиск юзернейма на сайтах
use profiler
set SOURCE username
run

show profiles

Алсо

Другие OSINT утилиты


Ссылки


***
***
searx - метапоисковик.

пятница, 28 июля 2017 г.

Атака на WPA2 с использованием поддельной точки доступа


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

Атакующему необходимо создать точку доступа с ESSID (именем сети), совпадающим с именем сети, от которой требуется выяснить пароль и такими же настройками безопасности. Здесь рассматриватеся только WPA2 сети.
Устройство жертвы обнаружив сеть в эфире попытается к ней подключиться, отправив MIC (Message Integrity Code) содержимое которого и будет использована для перебора. Таким образом для атаки на пароль будет необходимо перехватить только первые два этапа 4-way handshake.
Боле подробно процесс подключения клиента к сети описан в этой статье.
В конце концов, так как поддельной ТД пароль неизвестен, клиент не сможет подключится.

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

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

Для атаки (создания поддельной ТД) будем пользоваться утилитой из aircrack-ng под названием airbase-ng. Документация приведена по ссылке.

1. Создадим поддельную точку доступа


airbase-ng -c 9 -e teddy -Z 4 -W 1 wlan0mon

-c 9 - канал
-e - ESSID
-Z 4 - определяет тип защиты, здесь - WPA2
-W 1 - установить флаг WEP. Некоторые клинеты не подключаются без него.
wlan0mon - интерфейс, на базе которого создаётся ТД.

Атака на несколько ESSID одновременно.
airbase-ng может перехватывать beacon frames, содержащие ESSID, и автоматически рассылать маячковые кадры c этим именем сети. Таким образом, точка доступа будет менять имя в сети, в зависимости от того, какие сети известны устройствам поблизости.

Добавим два параметра
-P - для мимикрии под актуальные сети;
60 - число секунд, в течении которого точка доступа рассылает маячковые запросы с одним именем сети
и уберём ключ с именем сети.

airbase-ng -P -C 60 -c 9 -Z 4 -W 1 wlan0mon

2. Перехватить handshake.
Для этого можно использовать airbase добавив ключи:
airbase-ng ... -F dump -i wlan1mon
-F dump - имя файла для записи пакетов
-i wlan1mon - имя интерфейса, с которого будут записываться пакеты.

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

Другой вариант получения handshake - использовать airodump-ng также как и для атаки вблизи ТД:

airodump-ng -w dump 9 wlan1mon
Cледует проследить, что были перехвачены первые два этапа рукопожатия периодически натравливая aircarck на файл дампа или просматривая его содержимое вручную, например с помощью tshark:


3. Подбор пароля
Этот этап не отличается от аналогичного, где handshake получен при подключении клиента к настойщей ТД. Подробнее здесь.
aircrack-ng dump-01.cap -w wordlist

***

Похоже перехваченный handshake не всегда пригоден для брута [link]. Почему так происходит?

Алсо

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

Организовать первые два этапа атаки можно и средствами мощного python-пакета Scapy.

Ссылки

airbase documentation
habrahabr: Wi-Fi сети: проникновение и защита.
How to get a WPA\WPA2 keys 4-way handshake using Airbase-ng

воскресенье, 28 мая 2017 г.

Обработка статистических данных в R

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

На примере этих (и других) данных будет рассмотрены возможности языка:
X =   "181.1 167.9 170.5 194.1 171.6 168.6 180.7 184.9 165.3 165.5 171.1 174.4 175.2 180.3 181.2 168.9 176.2 167.4 165.9 177.2 180.8 173.9 163.5 175.0 171.0 177.6 173.6 185.8 184.0 178.7 174.3 170.3 178.6 172.3 162.3 166.3 160.4 163.0 174.7 183.1"

Y =  "163.3 172.6 154.3 159.8 174.0 159.0 180.1 168.9 177.0 166.4 162.7 169.3 170.3 161.8 171.9 177.3 166.8 175.5 175.1 174.8 161.0 169.8 177.9 174.3 168.7 176.6 156.3 179.3 178.3 168.7 178.5 151.0 164.0 159.5 180.9 178.7 166.0 169.5 167.0 150.4"
Данные представлены не столбцом, а строкой. Поэтому для начала разобъём её на подстроки, а потом преобразуем в вещественные числа:
X = as.double(strsplit(X,' ')[[1]])
Работа с файловой системой
list.files() # список файлов
getwd()      # полное имя текущего каталога
setwd(dir)   # изменить каталог

Загрузка данных

Текстовые файлы. Загрузить текстовый файл как список строк
x <- scan("data.txt", what="", sep="\n")
CSV файлы.
D = read.delim('stud­lab.csv',';', header=TRUE)
';' - разделитель полей;
header - есть ли заголовок.

Пример файла
N;X;Y
0;15.04;12.0
1;16.24;14.18
2;7.96;12.12
3;17.4;7.98
XLS файлы. Для загрузки из xls файла потребуется пакет gdata (см. установку пакетов) [so]
require(gdata) # подключим пакет
read.xls("file.xls")

Работа с данными

сводка по данным
summary(D)

 N               X               Y       
 Min.   : 0.00   Min.   : 6.26   Min.   : 3.74 
 1st Qu.:24.75   1st Qu.:10.54   1st Qu.: 9.33 
 Median :49.50   Median :12.27   Median :11.14 
 Mean   :49.50   Mean   :12.34   Mean   :10.91 
 3rd Qu.:74.25   3rd Qu.:14.12   3rd Qu.:12.55 
 Max.   :99.00   Max.   :20.65   Max.   :17.94 

Работа с DataFrame
names(D) - имена полей

nrow(D), ncol(D) - число строк, столбцов

Доступ к полям. Имя поля (столбца) записывается после знака $:
D$X
Доступ к даныым можно получить используя индексацию: строка, столбец. 
D[42,] - 42 строчка таблицы
D[,2] - данные из второго столбца

Указывать набор конкретных строк\столбцов можно вектором:
D[ c(1,3,7, 13), ]
исключить эти столбцы:
D[ , - c(1,2) ]
Вместо индексов столбцов можно указывать их имена (тут унарный минус не работает):
mtcars[ , c('wt', 'am')]

Создание нового поля (заполненного нулями)
D$Z = 0  
Загрузка из Интернета.
...

Среда
Самая популярная среда - R Studio.

Числовые характеристики


интервальные оценки

Графики

Диаграмма рассеивания
plot(D$X,D$X)
Дополнительные параметры функции plot:
xlab = "Ось X", ylab = "Ось Y" - подписи к осям;
col = "red" - цвет маркеров;
type = "b" - тип графика (p - точки (по умолчанию), l - линии, b - линии и точки, и т.п. см. справку по plot);
main = "Заголовок" - подпись сверху;
sub = "Подзаголовок" - подпись снизу.

Добавим координатную сетку:

grid()
Дополнительные параметры функции: nx=10,ny=10 - число делений сетки.

ggplot2
Более эстетичные графики можно построить с помощью библиотеки ggplot2
library(ggplot2)
ggplot(D, aes(x=D$X, y=D$Y))+geom_point() + xlab('X')+ylab('Y')

aes(x=D$X, y=D$Y) - задаёт соответствие осей данным
geom_point() - определяет способ отображения данных

Закрасить область
https://www.r-bloggers.com/creating-shaded-areas-in-r/

Сохранить график в файл
png('my-boxplot.png')
... Построение графика ...
dev.off()

Гистограмма

Диаграмма рассеивания

Ящик с усами или диаграмма размаха

boxplot(x,y)
Дополнительно стоит подписать каждую диаграмму, пусть это будут лаконичные имена случайных величин для которых они построены: X и Y. 
boxplot(x,y, names = c('X', 'Y') )
Дополнительные элементы графиков, такие как заголовок, подписи к осям и т.п. выполняются также как и для других графиков.

Проверка гипотез [wiki]

Для понимая нижеследующих процедур необходимы знания о процедурах проверки статистических гипотез, p-valueещё о p-value), уровне значимости и т.д.
Далее будем использовать уровень значимости α=0.05. Это самое часто используемое значение, хотя вопрос о его выборе заслуживает отдельной статьи. Для каждой проверки должны быть сформированы нулевая и альтернативные гипотезы. Часто, для краткости приводят только одну, например альтернативную: математические ожидания не равны. В таком случае оставшаяся гипотеза, например основная пряма противоположна первой: математические ожидания равны.

Проверка статистического распределения на нормальность

Требование "нормальности" часто встречается при проверке других статистических гипотез (например на равенство средних или дисперсий). Кроме того, знание о распределении может быть интересно само по себе. Или если нужно по статистическим данным получить гладкую кривую подобрав его параметры.
Используем одну из наиболее популярных в таких случаев проверок: критерий Шапиро-Уилка
Нулевая гипотеза: случайная величина распределена нормально.
Альтернативная гипотеза: случайная величина не распределена нормально.
shapiro.test(x)
Результат:
    Shapiro-Wilk normality test

data:  x
W = 0.98343, p-value = 0.2434
 Здесь мы видим два числа, W - значение критерия и p-value. Они могут использоваться независимо при проверке гипотез. 
В этом примере, p-value > α, значит принимаем нулевую гипотезу: с.в. распределена нормально.

о равенстве дисперсий

...

Гипотеза о равенстве математических ожиданий

Предположим, что по данным выборки, где известны средние требуется установить, равны ли математические ожидания в генеральных совокупностях, откуда были сделаны эти выборки. Непосредственным сравнение выборочных средних этого сделать нельзя, потому, что эти средние, например, могут отличатся. Так как сравниваются выборки, то вполне вероятно, что различия в средних получились совершенно случайно. В большинстве остальных выборок эти средние равны. Поэтому возникает вопрос: насколько можно доверять различию выборочных средних средних?
Лучше всего для этого построить доверительные интервалы для генеральных математических ожиданий.
Если изучаются различия в нормально распределенных выборках, где медиана и математическое ожидание равные, то эти различия можно оценить построив диаграмму размаха:
boxplot(x,y, names = c('X', 'Y') )
Например для выборок A и B (пусть они содержат по 100 элементов) проверку средних производить не имеет смысла. Большинство, около 3/4, значений каждой выборки расположены в разных областях числовой прямой. Выборки различны, а значит и средние значения различны.
Для следующих выборок (см. данные в начале), ответ на вопрос о равенстве средних уже не так очевиден:
Стоит помнить, что на диаграмме приводятся медианы (жирная линия) а не средние. Поэтому вычислим последние отдельно:
> mean(X); mean(Y)
[1] 173.9
[1] 168.9
Да, разница есть. Но на сколько она существенна, с учётом дисперсий и объёмов выборок?

Далее следует определится с выбором критерия (pdf), который будет применятся для сравнения. Для этого может понадобится проверить выборки на соответствие требованиям критерия.
Рассмотрим два теста (см. pdf выше): Z-тест и T-тест.
Предположим, что выборки сделаны из нормально распределенных генеральных совокупностей. То есть подходят под одноименное требование Z-теста. Однако дисперсии генеральных совокупностей неизвестны. Казалось бы, что эти величины можно заменить одноименными но для выборок, но в результате увеличится элемент случайности, который тоже нужно будет учесть. Как раз для этой задачи существует T-тест, поэтому остановим свой выбор на нём.

Нулевая гипотеза H0: M(X) = M(Y), математические ожидания генеральных совокупностей равны.
> t.test(X,Y)
    Welch Two Sample t-test

data:  X and Y
t = 2.8408, df = 77.187, p-value = 0.005753
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 1.494589 8.500411
sample estimates:
mean of x mean of y
 173.9300  168.9325 
p-value < α, значит отклоняем нулевую гипотезу. Математические ожидания генеральных совокупностей не равны.

Установка пакетов [r-bloggers]
install.packages("ggplot2")

Ссылки

stepic.org