Праздник для молодоженов В канун Рождества Дима и Зина отмечают годовщину своей свадьбы. «Квартирный вопрос» вместе с декоратором Натальей Шиловой сделали им отличный подарок — яркий, веселый и динамичный интерьер в европейском молодежном стиле. Театральный декор Саша и Наташа нашли отличное и очень рациональное решение для своей маленькой квартиры. Детская переехала в кухню, для которой выделили другое пространство — на возвышении в комнате родителей. Декоратор Инна Никифорова отделила его золотым занавесом и превратила эту комнату в небольшой театр! Легкий хай-тек Мария Котляр переделывает комнату 14-тилетнего Андрея в стиле «легкий хай-тек». А тем временем Марат Гельман показывает «Квартирному вопросу» свою новою квартиру — мини-галерею для его личной коллекции современного искусства. Бабочки на кухне В кухне Лилии и Равиля не появилось ни одного нового предмета, за исключением светильника. Игорь Кочанов наглядно продемонстрировал, что полностью преобразить пространство типовой гостиной можно, пользуясь лишь декораторскими приемами. Причем многие из них настолько просты, что повторить сможет любой! 6 детей и гостиная-спальня Катрина Ершова и Мария Александрова переделывают комнату для большой семьи — здесь должны расположиться одновременно и гостиная, и спальня. Дизайнерам удалось найти отличный способ зонирования пространства, который привел все семейство в восторг. В стиле домино Контраст — основной прием, который применила Елена Белоусова в оформлении этой гостиной. Классическое сочетание черного и белого преобразило этот интерьер! Вместе с Вероникой Блумгрен Михаил колдует над собственной гостиной, чтобы преподнести подарок супруге на 8-ое марта. Создать праздник в одной отдельно взятой комнате удалось исключительно декоративными приемами! Стол для восточной трапезы Ильдар и Татьяна — интернациональная семья. Поэтому в переделке гостиной дизайнер Юля Сысоева постаралась учесть ее уклад и традиции и создала необычный интерьер с восточно-азиатскими мотивами. Подушки-травинки от Надежды Щукиной Дизайнер по текстилю Надежда Щукина продемонстрировала, как вырастить на подушках самые настоящие травинки. И превратить диван в зеленый оазис для отдыха и расслабления! Установка раздвижной двери Раздвижная дверь – отличный способ экономии драгоценного пространства. Если расположение проемов не позволяет установить распашные двери, раздвижная конструкция обеспечит максимум удобства. Установку раздвижной двери можно произвести и самостоятельно. Понадобится: дверное полотно с пазами под установку фурнитуры, комплект направляющих и кареток, монтажный брус и ручки-купе. Сухая стяжка Сухая стяжка – самый быстрый способ выравнивания полов и отличная альтернатива традиционному «мокрому» методу. Для ее устройства используются листы ГВЛ и керамзитовый песок. Основание получится таким же ровным, как и при заливке жидкого состава, и подойдет для укладки любого финишного покрытия — паркетной и массивной доски, линолеума, плитки и ковролина. Монтаж французского окна Наиболее эффектной деталью переделки «Пастельный этюд» стала двустворчатая балконная дверь со стеклами в пол – так называемое французское окно. Через него спальню наполняют потоки солнечного света, а уличный пейзаж превращается в органичную часть интерьера. Молодой и очень успешный дизайнер мебели Оу Бахалудин поселился в пентхаусе на последнем этаже известного в Лондоне здания Хай-Пойнт. Оно спроектировано в 30-е годы русским архитектором Любеткиным. Им же создан интерьер этой квартиры, а теперь и то, и другое находится под охраной государства, поэтому нынешний хозяин квартиры не в праве здесь что-либо менять. Но своего рода музейным смотрителем Бахалудин стал по доброй воле. И экскурсоводом оказался замечательным! Парижские мансарды – это особый мир, загадочный и поэтический, который живет по своим собственным законам. В одной из таких мансард в самом сердце города живет и работает художник и дизайнер Лоран де Камин. Его квартира-мастерская – полное отражение вкусов и пристрастий хозяина. Жестким минималистичным интерьерам современности он предпочитает изысканность и утонченность прошлого. И выстраивает его из тех предметов, которые создал сам. Мансарда в центре Берлина Сейчас уже трудно поверить, что несколько месяцев назад здесь был обыкновенный обшарпанный и захламленный чердак. Несмотря на непритязательный облик, это пространство тогда сразу приглянулось нынешним хозяевам – Сибилле и Хагену. А все из необыкновенной красоты вида, который открывается с мансарды. Петр КОстелов создал ультрасовременную «умную» кухню — с брутальным дизайном и обилием разнообразной техники. За год хозяева освоили все новинки и прекрасно обжились в деревянно-каменном пространстве. Море, кораллы и роза ветров Эта переделка вызвала неоднозначную зрительскую реакцию, однако это не помешало хозяевам оценить замысел Марии Ватолиной по достоинству. Улётная гостиная Игорь и Ника Шашкова создали для семьи Ефимовых очень совершенно космическую гостиную. Хозяева по достоинству оценили смелость выбранного решения — комната стала самой любимой в доме и сподвигла на продолжение переделки. |
|
2 Введение в R | Наука о данных в R для программы Цифровых гуманитарных исследований
2.
1 Наука о данныхНаука о данных — это новая область знаний, которая активно развивается в последнее время. Она находиться на пересечении компьютерных наук, статистики и математики, и трудно сказать, действительно ли это наука. При этом это движение развивается в самых разных научных направлениях, иногда даже оформляясь в отдельную отрасль:
- биоинформатика
- вычислительная криминалистика
- цифровые гуманитарные исследования
- датажурналистика
- …
Все больше книг “Data Science for …”:
- psychologists (Hansjörg 2019)
- immunologists (Thomas and Pallett 2019)
- business (Provost and Fawcett 2013)
- public policy (Brooks and Cooper 2013)
- fraud detection (Baesens, Van Vlasselaer, and Verbeke 2015)
- …
Среди умений датасаентистов можно перечислить следующие:
- сбор и обработка данных
- трансформация данных
- визуализация данных
- статистическое моделирование данных
- представление полученных результатов
- организация всей работы воспроизводимым способом
Большинство этих тем в той или иной мере будет представлено в нашем курсе.
2.2 Установка R и RStudio
В данной книге используется исключительно R (R Core Team 2019), так что для занятий понадобятся:
- R
- на Windows
- на Mac
- на Linux, также можно добавить зеркало и установить из командной строки:
sudo apt-get install r-cran-base
- RStudio — IDE для R (можно скачать здесь)
- и некоторые пакеты на R
Часто можно увидеть или услышать, что R — язык программирования для “статистической обработки данных.” Изначально это, конечно, было правдой, но уже давно R — это полноценный язык программирования, который при помощи своих пакетов позволяет решать огромный спектр задач. В данной книге используется следующая версия R:
## [1] "R version 4.1.0 (2021-05-18)"
Некоторые люди не любят устанавливать лишние программы себе на компьютер, несколько вариантов есть и для них:
- RStudio cloud — полная функциональность RStudio, пока бесплатная, но скоро это исправят;
- RStudio on rollApp — облачная среда, позволяющая разворачивать программы.
Первый и вполне закономерный вопрос: зачем мы ставили R и отдельно еще какой-то RStudio? Если опустить незначительные детали, то R — это сам язык программирования, а RStudio — это среда (IDE), которая позволяет в этом языке очень удобно работать.
2.3 Полезные ссылки
В интернете легко найти документацию и туториалы по самым разным вопросам в R, так что главный залог успеха — грамотно пользоваться поисковиком, и лучше на английском языке.
- книга (Wickham and Grolemund 2016) является достаточно сильной альтернативой всему курсу
- stackoverflow — сервис, где достаточно быстро отвечают на любые вопросы (не обязательно по R)
- RStudio community — быстро отвечают на вопросы, связанные с R
- русский stackoverflow
- R-bloggers — сайт, где собираются новинки, связанные с R
- чат, где можно спрашивать про R на русском (но почитайте правила чата, перед тем как спрашивать)
- чат по визуализации данных, чат датажурналистов
- канал про визуализацию, дата-блог “Новой газеты”, …
2.
4 RstudioКогда вы откроете RStudio первый раз, вы увидите три панели: консоль, окружение и историю, а также панель для всего остального. Если ткнуть в консоли на значок уменьшения, то можно открыть дополнительную панель, где можно писать скрипт.
Существуют разные типы пользователей: одни любят работать в консоли (на картинке это 2 — R Console), другие предпочитают скрипты (1 — Code Editor). Консоль позволяет использовать интерактивный режим команда-ответ, а скрипт является по сути текстовым документом, фрагменты которого можно для отладки запускать в консоли.
3 — Workspace and History: Здесь можно увидеть переменные. Это поле будет автоматически обновляться по мере того, как Вы будете запускать строчки кода и создавать новые переменные. Еще там есть вкладка с историей последних команд, которые были запущены.
4 — Plots and files: Здесь есть очень много всего. Во-первых, небольшой файловый менеджер, во-вторых, там будут появляться графики, когда вы будете их рисовать. 0.5
## [1] 4
Ну а если нет, то можете воспользоваться специальной функцией: это обычно какие-то буквенные символы с круглыми скобками сразу после названия функции. Мы подаем на вход (внутрь скобочек) какие-то данные, внутри этих функций происходят какие-то вычисления, которые выдают в ответ какие-то другие данные (или же функция записывает файл, рисует график и т.д.).
Данные на входе называются аргументом функции, а иногда — параметром функции. В обыденной речи часто говорят инпут (калька с английского input).
Вот, например, функция для корня:
sqrt(16)
## [1] 4
R — case-sensitive язык, т.е. регистр важен.
SQRT(16)
не будет работать.
А вот так выглядит функция логарифма:
log(8)
## [1] 2.079442
Так, вроде бы все нормально, но… Если Вы еще что-то помните из школьной математики, то должны понимать, что что-то здесь не так. 3 = 8\)
Только наша функция считает все как-то не так.
Чтобы понять, что происходит, нам нужно залезть в хэлп этой функции:
Справа внизу в RStudio появится вот такое окно:
Действительно, у этой функции есть еще аргумент base =
. По умолчанию он равен числу Эйлера (2.7182818…), т.е. функция считает натуральный логарифм.
В большинстве функций R есть какой-то основной инпут — данные в том или ином формате, а есть и дополнительные параметры, которые можно прописывать вручную, если параметры по умолчанию вас не устраивают.
log(x = 8, base = 2)
## [1] 3
…или просто (если Вы уверены в порядке аргументов):
log(8, 2)
## [1] 3
Более того, Вы можете использовать результат выполнения одних функций в качестве аргумента для других:
log(8, sqrt(4))
## [1] 3
Если эксплицитно писать имена аргументов, то их порядок в функции не важен:
log(base = 2, x = 8)
## [1] 3
А еще можно недописывать имена аргументов, если они не совпадают с другими:
log(b = 2, x = 8)
## [1] 3
Мы еще много раз будем возвращаться к функциям. и т.д. называются операторами и на самом деле тоже являются функциями:
'+'(3,4)
## [1] 7
2.5.3 Переменные
Важная штука в программировании на практически любом языке — возможность сохранять значения в переменных. В R это обычно делается с помощью вот этих символов: <-
(но можно использовать и обычное =, хотя это не очень принято). Для этого есть удобное сочетание клавиш: нажмите одновременно Alt -
(или option -
на Маке).
a <- 2 a
## [1] 2
Справа от <-
находится значение, которое вы хотите сохранить, или же какое-то выражение, результат которого вы хотите сохранить в эту переменную1:
a <- log(9, 3)
Слева от <-
находится название будущей переменной. Название переменных может быть самым разным. Есть несколько ограничений для синтаксически валидных имен переменных: они должны включать в себя буквы, цифры, .
или _
, начинаться на букву (или точку, за которой не будет следовать цифра), не должны совпадать с коротким списком зарезервированных слов. Короче говоря, название не должно включать в себя пробелы и большинство других знаков.
Нельзя:
— new variable
— _new_variable
— .1var
— v-r
Можно:
— new_variable
— .new.variable
— var_2
Обязательно делайте названия переменных осмысленными! Старайтесь делать при этом их понятными и короткими, это сохранит вам очень много времени, когда вы (или кто-то еще) будете пытаться разобраться в написанном ранее коде. Если название все-таки получается длинным и состоящим из нескольких слов, то лучше всего использовать нижнее подчеркивание в качестве разделителя: some_variable
2.
После присвоения переменная появляется во вкладке Environment в RStudio:
Можно использовать переменные в функциях и просто вычислениях:
b <- a ^ a + a * a b
## [1] 8
log(b, a)
## [1] 3
2.
6 Логические операторыВы можете сравнивать разные переменные:
a == b
## [1] FALSE
Заметьте, что сравнивая две переменные мы используем два знака равно ==
, а не один =
. Иначе это будет означать присвоение.
a = b #присвоение, а не сравнение! a
## [1] 8
## [1] 8
Теперь Вы сможете понять комикс про восстание роботов на следующей странице (пусть он и совсем про другой язык программирования)
Этот комикс объясняет, как важно не путать присваивание и сравнение (хотя я иногда путаю до сих пор =( ).
Иногда нам нужно проверить на неравенство:
a <- 2 b <- 3 a == b
## [1] FALSE
a != b
## [1] TRUE
Восклицательный язык в программировании вообще и в R в частности стандартно означает отрицание.
Еще мы можем сравнивать на больше/меньше:
## [1] FALSE
## [1] TRUE
a >= b
## [1] FALSE
a <= b
## [1] TRUE
Этим мы будем пользоваться в дальнейшем регулярно! Именно на таких простых логических операциях построено большинство операций с данными.
2.7 Типы данных
До этого момента мы работали только с числами (numeric):
class(a)
## [1] "numeric"
На самом деле, в R три типа numeric: integer (целые), double (дробные), complex (комплексные числа)3. R сам будет конвертировать числа в нужный тип numeric при необходимости, поэтому этим можно не заморачиваться.
Если же все-таки нужно задать конкретный тип числа эксплицитно, то можно воспользоваться функциями as.integer()
, as.double()
и as.complex()
. Кроме того, при создании числа можно поставить в конце L
, чтобы обозначить число как integer:
is.integer(5)
## [1] FALSE
is.integer(5L)
## [1] TRUE
Про double есть еще один маленький секрет. Дело в том, что дробные числа хранятся в R как числа с плавающей запятой двойной точности. Дробные числа в компьютере могут быть записаны только с определенной степенью точности, поэтому иногда встречаются вот такие вот ситуации:
sqrt(2)^2 == 2
## [1] FALSE
Это довольно стандартная ситуация, характерная не только для R. 2, 2)
## [1] TRUE
Теперь же нам нужно ознакомиться с двумя другими важными типами данных в R:
- character: строки символов. Они должны выделяться кавычками.
s <- 'Всем привет!' s
## [1] "Всем привет!"
class(s)
## [1] "character"
Можно использовать как "
, так и '
(что удобно, когда строчка внутри уже содержит какие-то кавычки).
"Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn"
## [1] "Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn"
- logical: просто
TRUE
илиFALSE
.
t1 <- TRUE f1 <- FALSE t1
## [1] TRUE
## [1] FALSE
Вообще, можно еще писать T
и F
(но не True
и False
!).
t2 <- T f2 <- F
Это дурная практика, так как R защищает от перезаписи переменные TRUE
и FALSE
, но не защищает от этого T
и F
.
TRUE <- FALSE
## Error in TRUE <- FALSE: invalid (do_set) left-hand side to assignment
## [1] TRUE
T <- FALSE T
## [1] FALSE
Мы уже встречались с логическими значениями при сравнении двух числовых переменных. Теперь вы можете догадаться, что результаты сравнения, например, числовых или строковых переменных, можно тоже сохранять в переменные!
comparison <- a == b comparison
## [1] FALSE
Это нам очень понадобится, когда мы будем работать с реальными данными: нам нужно будет постоянно вытаскивать какие-то данные из датасета, что как раз и построено на игре со сравнением переменных.
Чтобы этим хорошо уметь пользоваться, нам нужно еще освоить как работать с логическими операторами. Про один мы немного уже говорили — это логическое НЕ (!
). !
превращает TRUE
в FALSE
, а FALSE
в TRUE
:
## [1] TRUE
## [1] FALSE
!!t1 #Двойное отрицание!
## [1] TRUE
Еще есть логическое И (выдаст TRUE
только в том случае если обе переменные TRUE
):
t1 & t2
## [1] TRUE
t1 & f1
## [1] FALSE
А еще логическое ИЛИ (выдаст TRUE
в случае если хотя бы одна из переменных TRUE
):
t1 | f1
## [1] TRUE
f1 | f2
## [1] FALSE
Если кому-то вдруг понадобится другое ИЛИ (строгое ЛИБО) — есть функция xor()
, принимающая два аргумента.
Итак, мы только что разобрались с самой занудной (хотя и важной) частью — с основными типа данных в R и как с ними работать4. Пора переходить к чему-то более интересному и специфическому для R. Вперед к ВЕКТОРАМ!
2.8 Вектор
Если у вас не было линейной алгебры (или у вас с ней было все плохо), то просто запомните, что вектор (или atomic vector или atomic) — это набор (столбик) чисел в определенном порядке.
Если вы привыкли из школьного курса физики считать вектора стрелочками, то не спешите возмущаться и паниковать. Представьте стрелочки как точки из нуля координат {0,0} до какой-то точки на координатной плоскости, например, {2,3}:
Вот последние два числа и будем считать вектором. Попытайтесь теперь мысленно стереть координатную плоскость и выбросить стрелочки из головы, оставив только последовательность чисел {2,3}:
На самом деле, мы уже работали с векторами в R, но, возможно, вы об этом даже не догадывались. Дело в том, что в R нет как таковых “значений,” есть вектора длиной 1. Такие дела!
Чтобы создать вектор из нескольких значений, нужно воспользоваться функцией c()
:
c(4, 8, 15, 16, 23, 42)
## [1] 4 8 15 16 23 42
c("Хэй", "Хэй", "Ха")
## [1] "Хэй" "Хэй" "Ха"
Одна из самых мерзких и раздражающих причин ошибок в коде — это использование
с
из кириллицы вместоc
из латиницы. Видите разницу? И я не вижу. А R видит. И об этом сообщает:
с(3, 4, 5)
## Error in с(3, 4, 5): could not find function "с"
Для создания числовых векторов есть удобный оператор :
## [1] 1 2 3 4 5 6 7 8 9 10
## [1] 5 4 3 2 1 0 -1 -2 -3
Этот оператор создает вектор от первого числа до второго с шагом 1. Вы не представляете, как часто эта штука нам пригодится… Если же нужно сделать вектор с другим шагом, то есть функция seq()
:
seq(10, 100, by = 10)
## [1] 10 20 30 40 50 60 70 80 90 100
Кроме того, можно задавать не шаг, а длину вектора. Тогда шаг функция seq()
посчитает сама:
seq(1, 13, length.out = 4)
## [1] 1 5 9 13
Другая функция — rep()
— позволяет создавать вектора с повторяющимися значениями. Первый аргумент — значение, которое нужно повторять, а второй аргумент — сколько раз повторять.
rep(1, 5)
## [1] 1 1 1 1 1
И первый, и второй аргумент могут быть векторами!
rep(1:3, 3)
## [1] 1 2 3 1 2 3 1 2 3
rep(1:3, 1:3)
## [1] 1 2 2 3 3 3
Еще можно объединять вектора (что мы, по сути, и делали, просто с векторами длиной 1):
v1 <- c("Hey", "Ho") v2 <- c("Let's", "Go!") c(v1, v2)
## [1] "Hey" "Ho" "Let's" "Go!"
2.8.1 Приведение типов
Что будет, если вы объедините два вектора с значениями разных типов? Ошибка?
Мы уже обсуждали, что в atomic может быть только один тип данных. В некоторых языках программирования при операции с данными разных типов мы бы получили ошибку. А вот в R при несовпадении типов пройзойдет попытка привести типы к “общему знаменателю,” то есть конвертировать данные в более “широкий” тип.
Например:
c(FALSE, 2)
## [1] 0 2
FALSE
превратился в 0
(а TRUE
превратился бы в 1
), чтобы оба значения можно было объединить в вектор. То же самое произошло бы в случае операций с векторами:
2 + TRUE
## [1] 3
Это называется неявным приведением типов (implicit coercion).
Вот более сложный пример:
c(TRUE, 3, "Привет")
## [1] "TRUE" "3" "Привет"
У R есть иерархия приведения типов:
NULL < raw < logical < integer < double < complex < character < list < expression
.
Мы из этого списка еще многого не знаем, сейчас важно запомнить, что логические данные — TRUE
и FALSE
— превращаются в 0
и 1
соответственно, а 0
и 1
в строчки "0"
и "1"
.
Если Вы боитесь полагаться на приведение типов, то можете воспользоваться функциями as.нужныйтипданных
для явного приведения типов (explicit coercion):
as.numeric(c(T, F, F))
## [1] 0 0 0
as.character(as.numeric(c(T, F, F)))
## [1] "0" "0" "0"
Можно превращать и обратно, например, строковые значения в числовые. Если среди числа встретится буква или другой неподходящий знак, то мы получим предупреждение NA
— пропущенное значение (мы очень скоро научимся с ними работать).
as.numeric(c("1", "2", "три"))
## Warning: NAs introduced by coercion
## [1] 1 2 NA
Один из распространенных примеров использования неявного приведения типов — использования функций
sum()
иmean()
для подсчета в логическом векторе количества и долиTRUE
соответсвенно. Мы будем много раз пользоваться этим приемом в дальнейшем!
2.
m + m * (n — m)## [1] -11 5 11 7
Если применить операторы на двух векторах одинаковой длины, то мы получим результат поэлементного применения оператора к двум векторам. Это называется векторизацией (vectorization).
Если после какого-нибудь MATLAB Вы привыкли, что по умолчанию операторы работают по правилам линейной алгебры и
m*n
будет давать скалярное произведение (dot product), то снова нет. Для скалярного произведения нужно использовать операторы с%
по краям:
n %*% m
## [,1] ## [1,] 20
Абсолютно так же и с операциями с матрицами в R, хотя про матрицы будет немного позже.
В принципе, большинство функций в R, которые работают с отдельными значениями, так же хорошо работают и с целыми векторами. Скажем, Вы хотите извлечь корень из нескольких чисел, для этого не нужны никакие циклы (как это обычно делается в других языках программирования). Можно просто “скормить” вектор функции и получить результат применения функции к каждому элементу вектора:
sqrt(1:10)
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427 ## [9] 3.000000 3.162278
Таких векторизованных функций в R очень много. Многие из них написаны на более низкоуровневых языках программирования (C, C++, FORTRAN), за счет чего использование таких функций приводит не только к более элегантному, лаконичному, но и к более быстрому коду.
Векторизация в R — это очень важная фишка, которая отличает этот язык программирования от многих других. Если вы уже имеете опыт программирования на другом языке, то вам во многих задачах захочется использовать циклы типа
for
иwhile
4.2. Не спешите этого делать! В очень многих случаях циклы можно заменить векторизацией. Тем не менее, векторизация — это не единственный способ избавить от циклов типаfor
иwhile
5.5.1.
2.8.3 Ресайклинг
Допустим мы хотим совершить какую-нибудь операцию с двумя векторами. Как мы убедились, с этим обычно нет никаких проблем, если они совпадают по длине. А что если вектора не совпадают по длине? Ничего страшного! Здесь будет работать правило ресайклинга (правило переписывания, recycling rule). Это означает, что если мы делаем операцию на двух векторах разной длины, то если короткий вектор кратен по длине длинному, короткий вектор будет повторяться необходимое количество раз:
n <- 1:4 m <- 1:2 n * m
## [1] 1 4 3 8
А что будет, если совершать операции с вектором и отдельным значением? Можно считать это частным случаем ресайклинга: короткий вектор длиной 1 будет повторятся столько раз, сколько нужно, чтобы он совпадал по длине с длинным:
## [1] 2 4 6 8
Если же меньший вектор не кратен большему (например, один из них длиной 3, а другой длиной 4), то R посчитает результат, но выдаст предупреждение.
n + c(3,4,5)
## Warning in n + c(3, 4, 5): longer object length is not a multiple of shorter ## object length
## [1] 4 6 8 7
Проблема в том, что эти предупреждения могут в неожиданный момент стать причиной ошибок. Поэтому не стоит полагаться на ресайклинг некратных по длине векторов. См. здесь. А вот ресайклинг кратных по длине векторов — это очень удобная штука, которая используется очень часто.
2.8.4 Индексирование векторов
Итак, мы подошли к одному из самых сложных моментов. И одному из основных. От того, как хорошо вы научись с этим работать, зависит весь Ваш дальнейший успех на R-поприще!
Речь пойдет об индексировании векторов. Задача, которую Вам придется решать каждые пять минут работы в R — как выбрать из вектора (или же списка, матрицы и датафрейма) какую-то его часть. Для этого используются квадратные скобочки []
(не круглые — они для функций!).
Самое простое — индексировать по номеру индекса, т. е. порядку значения в векторе.
n <- 1:10 n[1]
## [1] 1
## [1] 10
Если вы знакомы с другими языками программирования (не MATLAB, там все так же) и уже научились думать, что индексация с 0 — это очень удобно и очень правильно (ну или просто свыклись с этим), то в R Вам придется переучиться обратно. Здесь первый индекс — это 1, а последний равен длине вектора — ее можно узнать с помощью функции
length()
. С обоих сторон индексы берутся включительно.
С помощью индексирования можно не только вытаскивать имеющиеся значения в векторе, но и присваивать им новые:
n[3] <- 20 n
## [1] 1 2 20 4 5 6 7 8 9 10
Конечно, можно использовать целые векторы для индексирования:
n[4:7]
## [1] 4 5 6 7
n[10:1]
## [1] 10 9 8 7 6 5 4 20 2 1
Индексирование с минусом выдаст вам все значения вектора кроме выбранных:
## [1] 2 20 4 5 6 7 8 9 10
n[c(-4, -5)]
## [1] 1 2 20 6 7 8 9 10
Минус здесь “выключает” выбранные значения из вектора, а не означает отсчет с конца как в Python.
Более того, можно использовать логический вектор для индексирования. В этом случае нужен логический вектор такой же длины:
n[c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE)]
## [1] 1 20 5 7 9
Логический вектор работает здесь как фильтр: пропускает только те значения, где на соответствующей позиции в логическом векторе для индексирования содержится TRUE
, и не пропускает те значения, где на соответствующей позиции в логическом векторе для индексирования содержится FALSE
.
Ну а если эти два вектора (исходный вектор и логический вектор индексов) не равны по длине, то тут будет снова работать правило ресайклинга!
n[c(TRUE, FALSE)] #то же самое - recycling rule!
## [1] 1 20 5 7 9
Есть еще один способ индексирования векторов, но он несколько более редкий: индексирование по имени. Дело в том, что для значений векторов можно (но не обязательно) присваивать имена:
my_named_vector <- c(first = 1, second = 2, third = 3) my_named_vector['first']
## first ## 1
А еще можно “вытаскивать” имена из вектора с помощью функции names()
и присваивать таким образом новые имена.
d <- 1:4 names(d) <- letters[1:4] d["a"]
## a ## 1
letters
— это “зашитая” в R константа — вектор букв от a до z. Иногда это очень удобно! Кроме того, есть константаLETTERS
— то же самое, но заглавными буквами. А еще в R есть названия месяцев на английском и числовая константаpi
.
Теперь посчитаем среднее вектора n
:
mean(n)
## [1] 7.2
А как вытащить все значения, которые больше среднего?
Сначала получим логический вектор — какие значения больше среднего:
larger <- n > mean(n) larger
## [1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
А теперь используем его для индексирования вектора n
:
n[larger]
## [1] 20 8 9 10
Можно все это сделать в одну строчку:
n[n>mean(n)]
## [1] 20 8 9 10
Предыдущая строчка отражает то, что мы будем постоянно делать в R: вычленять (subset) из данных отдельные куски на основании разных условий.
2.8.5 NA — пропущенные значения
В реальных данных у нас часто чего-то не хватает. Например, из-за технической ошибки или невнимательности не получилось записать какое-то измерение. Для обозначения пропущенных значений в R есть специальное значение NA
. NA
— это не строка "NA"
, не 0
, не пустая строка ""
и не FALSE
. NA
— это NA
.
Большинство операций с векторами, содержащими NA
будут выдавать NA
:
missed <- NA missed == "NA"
## [1] NA
missed == ""
## [1] NA
missed == NA
## [1] NA
Заметьте: даже сравнение NA
c NA
выдает NA
!
Иногда NA
в данных очень бесит:
n[5] <- NA n
## [1] 1 2 20 4 NA 6 7 8 9 10
mean(n)
## [1] NA
Что же делать?
Наверное, надо сравнить вектор с NA
и исключить этих пакостников. Давайте попробуем:
n == NA
## [1] NA NA NA NA NA NA NA NA NA NA
Ах да, мы ведь только что узнали, что даже сравнение NA
c NA
приводит к NA
!
Чтобы выбраться из этой непростой ситуации, используйте функцию is.na()
:
is.na(n)
## [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
Результат выполнения is.na(n)
выдает FALSE
в тех местах, где у нас числа и TRUE
там, где у нас NA
. Чтобы вычленить из вектора n
все значения кроме NA
нам нужно, чтобы было наоборот: TRUE
, если это не NA
, FALSE
, если это NA
. Здесь нам понадобится логический оператор НЕ !
(мы его уже встречали), который инвертирует логические значения:
n[!is.na(n)]
## [1] 1 2 20 4 6 7 8 9 10
Ура, мы можем считать среднее!
mean(n[!is. na(n)])
## [1] 7.444444
Теперь Вы понимаете, зачем нужно отрицание (!
)
Вообще, есть еще один из способов посчитать среднее, если есть NA
. Для этого надо залезть в хэлп по функции mean():
?mean()
В хэлпе мы найдем параметр na.rm =
, который по умолчанию FALSE
. Вы знаете, что нужно делать!
mean(n, na.rm = TRUE)
## [1] 7.444444
NA
может появляться в векторах других типов тоже. На самом деле,NA
— это специальное значение в логических векторах, тогда как в векторах других типовNA
появляется какNA_integer_
,NA_real_
,NA_complex_
илиNA_character_
, но R обычно сам все переводит в нужный формат и показывает как простоNA
.
КромеNA
есть ещеNaN
— это разные вещи.NaN
расшифровывается как Not a Number и получается в результате таких операций как0/0
.
2.8.6 В любой непонятной ситуации — ищите в поисковике
Если вдруг вы не знаете, что искать в хэлпе, или хэлпа попросту недостаточно, то ищите в поисковике!
Нет ничего постыдного в том, чтобы искать в Интернете решения проблем. Это абсолютно нормально. Используйте силу интернета во благо и да помогут вам Stackoverflow и бесчисленные R-туториалы!
Computer Programming To Be Officially Renamed “Googling Stack Overflow”
Source: http://t.co/xu7acfXvFF pic.twitter.com/iJ9k7aAVhd
— Stack Exchange July 20, 2015
Главное, помните: загуглить работающий ответ всегда недостаточно. Надо понять, как и почему он работает. Иначе что-то обязательно пойдет не так.
Кроме того, правильно загуглить проблему — не так уж и просто.
Does anyone ever get good at R or do they just get good at googling how to do things in R
— 🔬🖤Lauren M. Seyler, Ph.D.❤️⚒ href=“https://twitter.com/mousquemere/status/1125522375141883907?ref_src=twsrc%5Etfw”>May 6, 2019
Итак, с векторами мы более-менее разобрались. Помните, что вектора — это один из краеугольных камней Вашей работы в R. Если Вы хорошо с ними разобрались, то дальше все будет довольно несложно. Тем не менее, вектора — это не все. Есть еще два важных типа данных: списки (list) и матрицы (matrix). Их можно рассматривать как своеобразное “расширение” векторов, каждый в свою сторону. Ну а списки и матрицы нужны чтобы понять основной тип данных в R — data.frame.
2.9 Матрицы (matrix)
Если вдруг Вас пугает это слово, то совершенно зря. Матрица — это всего лишь “двумерный” вектор: вектор, у которого есть не только длина, но и ширина. Создать матрицу можно с помощью функции matrix()
из вектора, указав при этом количество строк и столбцов.
A <- matrix(1:20, nrow=5,ncol=4) A
## [,1] [,2] [,3] [,4] ## [1,] 1 6 11 16 ## [2,] 2 7 12 17 ## [3,] 3 8 13 18 ## [4,] 4 9 14 19 ## [5,] 5 10 15 20
Заметьте, значения вектора заполняются следующим образом: сначала заполняется первый столбик сверху вниз, потом второй сверху вниз и так до конца, т. е. заполнение значений матрицы идет в первую очередь по вертикали. Это довольно стандартный способ создания матриц, характерный не только для R.
Если мы знаем сколько значений в матрице и сколько мы хотим строк, то количество столбцов указывать необязательно:
A <- matrix(1:20, nrow=5) A
## [,1] [,2] [,3] [,4] ## [1,] 1 6 11 16 ## [2,] 2 7 12 17 ## [3,] 3 8 13 18 ## [4,] 4 9 14 19 ## [5,] 5 10 15 20
Все остальное так же как и с векторами: внутри находится данные только одного типа. Поскольку матрица — это уже двумерный массив, то у него имеется два индекса. Эти два индекса разделяются запятыми.
A[2,3]
## [1] 12
A[2:4, 1:3]
## [,1] [,2] [,3] ## [1,] 2 7 12 ## [2,] 3 8 13 ## [3,] 4 9 14
Первый индекс — выбор строк, второй индекс — выбор колонок. Если же мы оставляем пустое поле вместо числа, то мы выбираем все строки/колонки в зависимости от того, оставили мы поле пустым до или после запятой:
A[,1:3]
## [,1] [,2] [,3] ## [1,] 1 6 11 ## [2,] 2 7 12 ## [3,] 3 8 13 ## [4,] 4 9 14 ## [5,] 5 10 15
A[2:4,]
## [,1] [,2] [,3] [,4] ## [1,] 2 7 12 17 ## [2,] 3 8 13 18 ## [3,] 4 9 14 19
## [,1] [,2] [,3] [,4] ## [1,] 1 6 11 16 ## [2,] 2 7 12 17 ## [3,] 3 8 13 18 ## [4,] 4 9 14 19 ## [5,] 5 10 15 20
Если мы выберем только одну колонку/строчку, то на выходе получим уже вектор, а не матрицу:
## [1] 2 7 12 17
Это называется “схлопыванием размерности. ” Чтобы этого избежать, нужно поставить drop = FALSE
после второй запятой внутри квадратных скобок.
A[2,, drop = FALSE]
## [,1] [,2] [,3] [,4] ## [1,] 2 7 12 17
Для соединения двух или более матриц можно воспользоваться функциями rbind()
и cbind()
для соединения матриц по вертикали и по горизонтали соответственно.
rbind(A, A)
## [,1] [,2] [,3] [,4] ## [1,] 1 6 11 16 ## [2,] 2 7 12 17 ## [3,] 3 8 13 18 ## [4,] 4 9 14 19 ## [5,] 5 10 15 20 ## [6,] 1 6 11 16 ## [7,] 2 7 12 17 ## [8,] 3 8 13 18 ## [9,] 4 9 14 19 ## [10,] 5 10 15 20
cbind(A, A)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] ## [1,] 1 6 11 16 1 6 11 16 ## [2,] 2 7 12 17 2 7 12 17 ## [3,] 3 8 13 18 3 8 13 18 ## [4,] 4 9 14 19 4 9 14 19 ## [5,] 5 10 15 20 5 10 15 20
В принципе, это все, что нам нужно знать о матрицах. Матрицы используются в R довольно редко, особенно по сравнению, например, с MATLAB. Но вот индексировать матрицы хорошо бы уметь: это понадобится в работе с датафреймами.
То, что матрица — это просто двумерный вектор, не является метафорой: в R матрица — это по сути своей вектор с дополнительными атрибутами
dim
иdimnames
. Атрибуты — это неотъемлемые свойства объектов, для всех объектов есть обязательные атрибуты типа и длины и могут быть любые необязательные атрибуты. Можно задавать свои атрибуты или удалять уже присвоенные: удаление атрибутаdim
у матрицы превратит ее в обычный вектор. Про атрибуты подробнее можно почитать здесь или на стр. 99–101 книги “R in a Nutshell” (Adler 2010).
2.10 Списки (list)
Теперь представим себе вектор без ограничения на одинаковые данные внутри. И получим список!
simple_list <- list(42, "Пам пам", TRUE) simple_list
## [[1]] ## [1] 42 ## ## [[2]] ## [1] "Пам пам" ## ## [[3]] ## [1] TRUE
А это значит, что там могут содержаться самые разные данные, в том числе и другие списки и векторы!
complex_list <- list(c("Wow", "this", "list", "is", "so", "big"), "16", simple_list) complex_list
## [[1]] ## [1] "Wow" "this" "list" "is" "so" "big" ## ## [[2]] ## [1] "16" ## ## [[3]] ## [[3]][[1]] ## [1] 42 ## ## [[3]][[2]] ## [1] "Пам пам" ## ## [[3]][[3]] ## [1] TRUE
Если у нас сложный список, то есть очень классная функция, чтобы посмотреть, как он устроен, под названием str()
:
str(complex_list)
## List of 3 ## $ : chr [1:6] "Wow" "this" "list" "is" . .. ## $ : chr "16" ## $ :List of 3 ## ..$ : num 42 ## ..$ : chr "Пам пам" ## ..$ : logi TRUE
Как и в случае с векторами мы можем давать имена элементам списка:
named_list <- list(age = 24, phd_student = T, language = "Russian") named_list
## $age ## [1] 24 ## ## $phd_student ## [1] FALSE ## ## $language ## [1] "Russian"
К списку можно обращаться как с помощью индексов, так и по именам. Начнем с последнего:
named_list$age
## [1] 24
А вот с индексами сложнее, и в этом очень легко запутаться. Давайте попробуем сделать так, как мы делали это раньше:
named_list[1]
## $age ## [1] 24
Мы, по сути, получили элемент списка — просто как часть списка, т.е. как список длиной один:
class(named_list)
## [1] "list"
class(named_list[1])
## [1] "list"
А вот чтобы добраться до самого элемента списка (и сделать с ним что-то хорошее) нам нужна не одна, а две квадратных скобочки:
named_list[[1]]
## [1] 24
class(named_list[[1]])
## [1] "numeric"
Indexing lists in #rstats. Inspired by the Residence Inn pic.twitter.com/YQ6axb2w7t
— Hadley Wickham (@ href=“https://twitter.com/hadleywickham/status/643381054758363136?ref_src=twsrc%5Etfw”>September 14, 2015
Как и в случае с вектором, к элементу списка можно обращаться по имени.
named_list[['age']]
## [1] 24
Хотя последнее — практически то же самое, что и использование знака $.
Списки довольно часто используются в R, но реже, чем в Python. Со многими объектами в R, такими как результаты статистических тестов, объекты ggplot и т.д. удобно работать именно как со списками — к ним все вышеописанное применимо. Кроме того, некоторые данные мы изначально получаем в виде древообразной структуры — хочешь не хочешь, а придется работать с этим как со списком. Особенно это характерно для данных, выкачанных из веб-страниц (HTML страницы, XML данные) или полученных с помощью API различных веб-сайтов (например, в формате JSON). Но обычно после этого стоит как можно скорее превратить список в датафрейм.
2.11 Датафрейм
Итак, мы перешли к самому главному. Самому-самому. Датафреймы (data.frames). Более того, сейчас станет понятно, зачем нам нужно было разбираться со всеми предыдущими темами.
Без векторов мы не смогли бы разобраться с матрицами и списками. А без последних мы не сможем понять, что такое датафрейм.
name <- c("Ivan", "Eugeny", "Lena", "Misha", "Sasha") age <- c(26, 34, 23, 27, 26) student <- c(FALSE, FALSE, TRUE, TRUE, TRUE) df = data.frame(name, age, student) df
str(df)
## 'data.frame': 5 obs. of 3 variables: ## $ name : chr "Ivan" "Eugeny" "Lena" "Misha" ... ## $ age : num 26 34 23 27 26 ## $ student: logi FALSE FALSE TRUE TRUE TRUE
Вообще, очень похоже на список, не правда ли? Так и есть, датафрейм — это что-то вроде проименованного списка, каждый элемент которого является atomic вектором фиксированной длины. Скорее всего, список Вы представляли “горизонтально. ” Если это так, то теперь “переверните” его у себя в голове. Так, чтоб названия векторов оказались сверху, а колонки стали столбцами. Поскольку длина всех этих векторов равна (обязательное условие!), то данные представляют собой табличку, похожую на матрицу. Но в отличие от матрицы, разные столбцы могут имет разные типы данных: первая колонка — character, вторая колонка — numeric, третья колонка — logical. Тем не менее, обращаться с датафреймом можно и как с проименованным списком, и как с матрицей:
df$age[2:3]
## [1] 34 23
Здесь мы сначала вытащили колонку age
с помощью оператора $
. Результатом этой операции является числовой вектор, из которого мы вытащили кусок, выбрав индексы 2
и 3
.
Используя оператор $
и присваивание можно создавать новые колонки датафрейма:
df$lovesR <- TRUE #правило recycling - узнали? df
Ну а можно просто обращаться с помощью двух индексов через запятую, как мы это делали с матрицей:
df[3:5, 2:3]
Как и с матрицами, первый индекс означает строчки, а второй — столбцы.
А еще можно использовать названия колонок внутри квадратных скобок:
df[1:2,"age"]
## [1] 26 34
И здесь перед нами открываются невообразимые возможности! Узнаем, любят ли R те, кто моложе среднего возраста в группе:
df[df$age < mean(df$age), 4]
## [1] TRUE TRUE TRUE TRUE
Эту же задачу можно выполнить другими способами:
df$lovesR[df$age < mean(df$age)]
## [1] TRUE TRUE TRUE TRUE
df[df$age < mean(df$age), 'lovesR']
## [1] TRUE TRUE TRUE TRUE
В большинстве случаев подходят сразу несколько способов — тем не менее, стоит овладеть ими всеми.
Датафреймы удобно просматривать в RStudio. Для это нужно написать команду View(df)
или же просто нажать на названии нужной переменной из списка вверху справа (там где Environment). Тогда увидите табличку, очень похожую на Excel и тому подобные программы для работы с таблицами. Там же есть и всякие возможности для фильтрации, сортировки и поиска… Но, конечно, интереснее все эти вещи делать руками, т. е. с помощью написания кода.
На этом пора заканчивать с введением и приступать к реальным данным.
Ссылки на литературу
Adler, Joseph. 2010. R in a Nutshell: A Desktop Quick Reference. » O’Reilly Media, Inc.».
Baesens, Bart, Veronique Van Vlasselaer, and Wouter Verbeke. 2015. Fraud Analytics Using Descriptive, Predictive, and Social Network Techniques: A Guide to Data Science for Fraud Detection. John Wiley & Sons.
Brooks, Harvey, and Chester L Cooper. 2013. Science for Public Policy. Elsevier.
Hansjörg, Neth. 2019. Data Science for Psychologists. self published.
Provost, Foster, and Tom Fawcett. 2013. Data Science for Business: What You Need to Know about Data Mining and Data-Analytic Thinking. O’Reilly Media, Inc.
R Core Team. 2019. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Thomas, Niclas, and Laura Pallett. 2019. Data Science for Immunologists. CreateSpace Independent Publishing Platform.
Wickham, Hadley, and Garrett Grolemund. 2016. R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. O’Reilly Media, Inc.
Есть еще оператор
->
, который позволяет присваивать значения слева направо, но так делать не рекомендуется, хотя это бывает довольно удобным.↩︎Еще иногда используются большие буквы
SomeVariable
, но это плохо читается, а иногда — точка, но это тоже не рекомендуется.↩︎Комплексные числа в R пишутся так:
complexnumber <- 2+2i
.i
здесь — это та самая мнимая единица, которая является квадратным корнем из -1.↩︎Кроме описанных пяти типов данных (integer, double, complex, character и logical) есть еще и шестой — это raw, сырая последовательность байтов, но нам она не понадобится.↩︎
2 различных способа преобразования JPEG в векторное изображение [простой и быстрый]
У меня есть несколько изображений JPEG, и когда я изменил их размер, я обнаружил, что качество стало плохим, мой друг сказал, что я должен превратить JPEG в вектор, но я не знаю, как это сделать?
В этом цифровом мире почти все сохраняется в цифровом виде. JPEG — широко используемый формат изображений, выпущенный в 1990 году. Другими словами, этот традиционный формат не может использовать некоторые передовые технологии. С другой стороны, люди разработали JPEG для того, чтобы обмениваться большими фотографиями в Интернете, но не редактировать их. Вот почему вы должны векторизовать ваши изображения JPEG. В этом уроке вы можете найти лучшие способы, как превратить JPEG в вектор для дальнейшего редактирования.
Превратить JPEG в вектор
- Часть 1. Как конвертировать JPG в вектор с помощью Illustrator
- Часть 2: Как превратить изображение в вектор с помощью Photoshop
Часть 1. Как конвертировать JPG в вектор с помощью Illustrator
Картинка, которую вы просматриваете на вашем устройстве, состоит из пикселей, маленьких прямоугольников, окрашенных в разные цвета. Если вы увеличите изображение достаточно, вы можете увидеть их. Обрабатываете ваше изображение JPG в Adobe Illustrator? Вы можете превратить JPEG в вектор, следуя инструкциям ниже. Векторизация изображения означает преобразование его в линии и фигуры, которые не получат размытое или понижающее разрешение при изменении его размера.
Шаг 1 Откройте изображение JPG, которое вы хотите векторизовать в программу Illustrator. Вы не можете изменить все детали на вектор за один раз, поэтому выберите нужный объект за один раз, используя инструмент «Выделение».
Шаг 2 Найдите кнопку «Live Trace» на верхней ленте и нажмите маленькую кнопку рядом с ней со значком «стрелка вниз», выберите «Параметры трассировки», чтобы открыть диалоговое окно «Параметры трассировки».
Шаг 3 Установите флажок рядом с опцией «Предварительный просмотр», чтобы вы могли видеть результаты трассировки каждый раз, когда вносите изменения. Затем перетащите всплывающее диалоговое окно в нужное место, которое не накладывается на изображение. Затем, выберите опцию из выпадающего списка «Preset» для векторизации изображения определенным образом.
Примечание. Существует пять основных способов векторизации JPG: Автоцвет, Высокий цвет, Оттенки серого и Черно-белый. предустановка
Шаг 4 Нажмите на кнопку «Трассировка», чтобы подтвердить это. Чтобы закончить превращение JPEG в вектор, нажмите кнопку «Развернуть». Теперь вы можете настроить параметры для каждого пути. Например, выберите путь, откройте окно «Параметры трассировки» из меню «Предварительные настройки и параметры трассировки», затем сбросьте «Режим», «Размытие» и «Порог».
Шаг 5 Наконец, перейдите в «Файл»> «Сохранить как» и экспортируйте копию как «.ai» файл. Вы можете открыть его в Illustrator для дальнейшего редактирования. Затем сохраните векторный результат в «SVG» или «PDF». Это векторные форматы; первый используется на веб-странице, а второй для печати.
Примечание. Illustrator — это программа, выпущенная Adobe для создания векторных изображений, поэтому процесс векторизации довольно прост. Но инструменты для редактирования изображений ограничены.
Часть 2: Как превратить изображение в вектор с помощью Photoshop
Photoshop — еще одна распространенная программа для преобразования JPEG в векторные изображения. Самым большим преимуществом является то, что вы можете получить больше инструментов для редактирования изображений в профессиональном редакторе фотографий. Но рабочий процесс в Illustrator сильно отличается.
Шаг 1 Откройте ваш Photoshop с рабочего стола и перетащите JPG, чтобы превратить вектор в окно. Выберите инструмент «Быстрый выбор» из левой панели инструментов, а затем нажмите значок «Добавить в выделение», который помечен значком плюса, перекрывающим перо. Затем заключите объект, который вы хотите векторизовать, с помощью инструмента «Выделение».
Шаг 2 Нажмите и разверните меню «Окно» на самой верхней ленте и выберите «Пути», чтобы открыть окно «Пути». Затем нажмите значок «Выполнить из пути» в нижней части окна, который является четвертым значком слева. Это превратит выбранный объект в вектор.
Шаг 3 Перейдите в «Файл»> «Экспорт»> «Пути к Illustrator», введите имя для путей и нажмите «ОК», чтобы подтвердить его. По умолчанию пути будут сохранены в вашей библиотеке изображений (C: \ Users \ [имя пользователя] \ Pictures). И вы можете изменить местоположение, как вы хотите. Удалите имя файла и нажмите кнопку «Сохранить», чтобы сохранить векторный файл в формате AI после преобразования JPEG в вектор.
Файл фотошопа теряется до нажатия кнопки «Сохранить»? Восстановить файл Photoshop прямо сейчас.
Рекомендация: PDF Converter Ultimate (Конвертировать PDF в JPG)
Как видите, PDF — векторный формат. Если вы хотите конвертировать векторный PDF файл в JPG, мы рекомендуем Конвертер PDF Aiseesoft Ultimate, Основные функции включают в себя:
1. Он может превратить основанный на изображениях PDF в изображения JPG за несколько минут.
2. Если у вас есть несколько векторных изображений, сохраненных в формате PDF, этот конвертер имеет возможность пакетного преобразования.
3. Опирается на продвинутый алгоритм для оптимизации качества изображения при конвертации PDF.
4. И пользователи могут сохранить часть PDF или определенную страницу в изображение JPG.
5. Кроме того, этот вектор в JPG конвертер предоставляет более широкий диапазон изменяемых параметров для создания персонализированных результатов.
6. В дополнение к JPG и другим форматам изображений, он поддерживает текст, Word, Excel, HTML и другие форматы вывода.
7. Кроме того, он совместим с Windows 10/8 / 8.1 / 7 / XP и Mac OS.
Иногда люди хотят конвертировать PDF в JPG после преобразования JPEG в вектор и сохранения его в формате PDF. В таких случаях PDF Converter Ultimate является лучшим вариантом.
Как конвертировать PDF в JPG без потери качества
Шаг 1 Установите PDF Converter Ultimate на ваш компьютер и запустите его. Нажмите кнопку «Добавить файл», чтобы импортировать все файлы PDF, которые вы хотите преобразовать в программу.
Шаг 2 Выберите JPEG или JPG из выпадающего списка рядом с «Формат вывода», нажмите кнопку «Открыть» и выберите правильное место назначения, чтобы сохранить результаты. Настройте другие параметры в соответствии с вашими требованиями.
Подсказка. Чтобы получить дополнительные пользовательские параметры, щелкните меню «Настройки» в верхней части окна, чтобы открыть диалоговое окно «Параметры».
Шаг 3 Наконец, нажмите кнопку «Пуск», чтобы запустить процесс преобразования PDF в JPG.
Заключение
Основываясь на приведенном выше руководстве, вы можете понять, как превратить JPEG в вектор на Windows и Mac. Как видите, это довольно профессиональное задание, так как вам нужен профессиональный инструмент. Adobe Illustrator — это создатель векторов, поэтому вы можете легко превратить JPEG в вектор. С другой стороны, эта функция была интегрирована в Photoshop. Следуя нашему руководству, вы можете легко получить векторное изображение из JPG. Если у вас есть дополнительные вопросы, связанные с вектором, пожалуйста, оставьте сообщение под этой статьей.
Что вы думаете об этом посте.
- 1
- 2
- 3
- 4
- 5
Прекрасно
Рейтинг: 4.8 / 5 (на основе рейтингов 40)
31 июля 2018 г. 15:00 / Автор: Аманда Браун в Фото
Полные технические требования для широкоформатной печати — Многопрофильная типография «Быстрый Цвет»
Передача файлов
- Оригинал-макеты (ОМ) принимаются только в электронном виде (не в виде распечаток!).
- В качестве носителей информации могут использоваться диски CD и DVD диски, USB-устройства, flash-карты
- Вы также можете использовать электронную почту [email protected] для отправки ОМ. Размер одного письма не должен превышать 10 Mb. Файлы желательно упаковать любым стандартным архиватором (ZIP, RAR). Мы не принимаем самораспаковывающиеся архивы (exe).
- К ОМ должна прилагаться цветная распечатка (при отправке по e-mail – preview в формате JPG). Файл превью должен иметь соответствующее имя (например visitka_preview.jpg).
Форматы файлов (в порядке предпочтения)
- PDF/X-1a
- PDF Level 1.3
- EPS (CS5 и ниже)
- TIFF (без альфа-каналов, слоев, путей, недопустима любая компрессия)
- AI (Adobe Illustrator CS5 и ниже)
- INDD (Adobe Indesign CS5 и ниже)
- CDR (CorelDraw X5 и ниже)
Форматы файлов должны быть совместимы с ОС Windows. Файлы обязательно должны иметь расширение той программы, в которой они были созданы (ai, cdr, indd и пр. ). Прием в работу любых других форматов файлов возможен только по предварительному согласованию с менеджерами типографии, причем гарантии качественной печати файлов нестандартных форматов мы не даем.
Файлы линейки Microsoft office (Word, Excel, Publisher) не являются оригинал-макетами и требуют доработки за отдельную плату.
Общие правила верстки: размеры и вылеты
- Размер листа ОМ должен точно соответствовать обрезному формату. Вынос за обрезной формат делать не нужно! Исключением являются изделия с накаткой на твердые материалы (ПВХ, пенокартон), в этом случае вылет должен составлять 5-10 мм.
- На каждом листе в файле должен находиться только один макет. Обрезной формат должен быть указан размером листа (не используйте для этого рамки, направляющие, кресты и пр.).
- Не располагайте значимую информацию ближе 15 мм от линии реза.
- Не располагайте рамочные элементы ближе 20 мм от линии реза.
- В файле ОМ не должно быть обрезных крестов, меток и любой технической информации. Все комментарии размещайте в отдельном тестовом файле или письме.
- ОМ не должен содержать объекты за пределами макета или скрытые под макетом.
- Используйте шаблоны типографии при верстке макетов, это позволит избежать проблем с неправильными размерами изделий.
Красочность и оверпринты
- Все объекты должны быть в цветовой модели CMYK. Нежелательно использовать RGB и другие цветовые модели, это приведёт к искажению цвета.
- Сумма красок (Total ink limit) не должна превышать 300%. В противном случае мы осуществим конвертацию вашего ОМ, что может привести к искажению цветов.
- Процент содержания каждой краски должен быть не менее 5%, цветозаполнение 1-4% не гарантируется.
- Крупные по площади чёрные объекты необходимо покрасить в глубокий чёрный цвет (c35 m30 y30 k100). Запрещается окрашивать в составной чёрный мелкий текст и линии.
- По умолчанию опция Overprint при цифровой печати отключена, если требуется применение overprint`a обязательно сообщите об этом менеджеру.
- Никогда не используйте опцию Overprint для белых объектов и текста, это может привести к их пропаданию при печати.
- Градиенты – запечатка градиентов мене 5% не гарантируется, для избежания полошения рекомендуем добавлять в градиенты шум (add noise).
Растровые форматы и связанные файлы (Links)
- Разрешение картинок должно находиться в диапазоне 100–150ppi. Типография оставляет за собой право уменьшить избыточное разрешение до 150ppi.
- Нежелательно использовать шрифты и элементы с тонкими линиями, переведенные в растр. Оставляйте их в векторе (например, фон – растр с разрешением 120dpi, а текст сверху – вектор).
- Запрещается использовать OLE-объекты (таблицы Excel, текст из Word, картинки, скопированные через буфер обмена).
- Все связанные с макетом файлы (links) должны быть собраны в одну папку, эта же папка должна содержать файл верстки.
- При работе в CorelDRAW запрещается использование внешних линков (Externally linked bitmap). Все изображения должны быть внедрены в верстку.
- Нельзя сохранять в растровом файле TIFF слои (Layers), альфа-каналы (Paths) и цветовой профиль (ICC Profile). Необходимо склеить слои командой Flatten layers и отключить при записи флажок «Include ICC-profile».
- Не применяйте LZW-компрессию в изображениях. Это может привести к искажению или потере картинки.
Эффекты и обтравленные изображения
- Недопустимо использование эффектов «прозрачность», «тень», «линза», «gradient mesh», а также Pattern, Texture и Postscript заливок. Все элементы с такими эффектами и заливками необходимо растрировать с фоном в единый Bitmap.
- Все обтравленные объекты должны быть слиты с фоном.
- Не используйте прозрачность с растровыми объектами, окрашенными в спотовые (spot) цвета (Pantone, monotone, duotone и т.д.). Это может привести к пропаданию объектов.
- В CorelDRAW все векторные эффекты (Envelope, Contour и пр.) необходимо отделить от элемента / конвертировать в кривые. Нельзя снимать блокировку содержимого Powerclip`a (содержимое должно перемещаться вместе с контуром).
Линии и мелкие объекты
- Мелкие объекты, текст и тонкие линии выглядят лучше, если они окрашены только одной из четырех составляющих CMYK. Составной цвет может привести к появлению цветных ореолов вокруг покрашенных им объектов.
- Мы не рекомендуем размещать в ОМ мелкие белые объекты или текст и тонкие белые линии на фоне, состоящем из нескольких красок (выворотка), так как они могут не пропечататься или пропечататься частично.
- Толщина одноцветной линии должна быть больше 0,1 мм, линии меньшей толщины могут не пропечататься или пропечататься частично. При использовании в макете столь тонких линий учтите, что при проверке толщины всех линий могут быть автоматически увеличены. Толщина многоцветных линий и белых линий на составном фоне должна быть не меньше 0,5 мм.
Шрифты
- Наличие шрифтов допустимо только в ОМ, созданных в программе Adobe InDesign или в PS-/PDF-файлах. Во всех остальных случаях переводите шрифты в кривые. Максимальное число узлов в кривой должно составлять не более 1024.
- Не используйте системные шрифты, такие как Arial, Courier, Times, Symbol, Windings, Tahoma и т.п.
Postscript и PDF файлы
- Для генерации композитного PDF из программ Adobe рекомендуем использовать наши настройки (Job settings – FastColor Digital и FastColor Offset). Инструкцию можно скачать с нашего сайта.
- Для генерации PDF из CorelDRAW пользуйтесь стандартными установками PDF/X-1a.
- PS и PDF файл нужно сохранять без цветового профиля (ICC Profile), т.е. опция «внедрить цветовой профиль» должна была отключена.
Отделка печатной продукции
Ламинация
- Цвет после ламинации неизбежно немного меняется и становится насыщеннее — темнеет под глянцевой плёнкой и несколько тускнеет под матовой.
Внимание! Макеты, не соответствующие данным требованиям, могут быть доработаны типографией без согласования с заказчиком. При возникновении брака ввиду несоблюдения технических требований, вся ответственность ложится на сторону, предоставившую некорректный макет.
Инструкции по цветовым профилям и подготовке PDF-файлов Вы можете также скачать с нашего сайта.
Microvector — микростоки без секретов — ЖЖ
?- Микростоки без секретов. (Вся правда о микростоках)
- microvector
- 13 марта, 2013
Я Леша — стоковый иллюстратор. А этот блог — личный дневник заработка на микростоках. Пишется он для удовольствия и в благодарность тем ребятам, которые мне однажды про стоки рассказали.
Блог содержит в своих коротеньких «постах» синтез и анализ портфолио, финансовую статистику продаж, советы по делу и картинки. Я честно и открыто рассказываю обо всех аспектах взаимоотношений с фотобанками, делюсь штуками и приёмами, которые стоят внимания, даю советы, если просят.
А также публикую настоящие суммы заработка и другую информацию, о которой обычно не сильно распространяются.Портфолио: сейчас имеется пара топовых векторных студийных портфелей и пара ведомых от частных авторов.
Если хотите попробовать себя на стоках, то вот мои реферальные и не очень ссылки на стоки, которые хорошо себя зарекомендовали:
— регистрация на Adobe Stock (бывшая Fotolia) — примерно 30% выручки на «разогнавшемся» портфеле,
— регистрация на Shutterstock — в среднем приносит авторам около 25% выручки (раньше было около 50%, но эти времена прошли),
— регистрация на iStock — около 10% теперь, доля падает,
— регистрация на Creative Market — 5% (принимают не всех и не сразу + требует отдельной подготовки работ),
— регистрация на Vectorstock — 2%,
— регистрация на 123RF — 2%,
— регистрация на Dreamstime — 2%,
— регистрация на Graphicriver — 1% (продаёт нормально, но очень-очень выборочная приёмка)
+
— наносток FreePik — по доходности может доходить до 15-20%, но есть особенности использования ФриПика.Рефералам, само собой, большое спасибо и подсказки в важных мелочах. Но и всем остальным спрашивающим, конечно, тоже.
Присоединяйтесь!Дополнительный пост о том, на какие стоки стоит грузить векторщикам.
Интересное и полезное:
— Статистика по ведомому портфелю,
— Vector Inspector Pro (VIP) — бесплатный плагин для проверки стокового вектора,
— Как подобрать тему для иллюстрации,
— Грузить ли растровые копии,
— Сколько нужно рисовать для стоков,
— Что такое m-rank и зачем он нужен,
— Ссылки на уроки по Illustrator,
— Статистика по старому студийному портфелю,
— Как сделать стоковую студию,
— Подсказки Как организовать файлы, Работа с ключевыми словами, Как вести учёт продаж, Как сделать swatches, Работаем с прозрачностью в EPS10, Уменьшаем объём файла EPS, Получается бледный jpg, Об использовании текстур, О растрировании и разбиении радиальных градиентов, Как сделать фигурную тень, Полезные скрипты,
— Аналитика Сколько «живет» картинка, О падении продаж со временем, 4% портфеля дают половину выручки.Метки: обо мне, оглавление, портфолио, реферальные
- Поделиться
- Пожаловаться
- Набор векторных художников
- microvector
- 29 января, 16:37
Новой команде требуются талантливые авторы для долгосрочного сотрудничества на хороших условиях:
— стабильная удаленная занятость,
— свободный график,( Читать дальше…Свернуть )
Метки: работа
- Оставить комментарий
- Поделиться
- Пожаловаться
- Набор авторов векторной графики
- microvector
- 16 декабря, 2021
С радостью познакомимся и предложим долгосрочное сотрудничество таким вот специалистам:
( Читать дальше. ..Свернуть )
Метки: работа
- Оставить комментарий
- Поделиться
- Пожаловаться
- Ведомый портфель становится студийным
- microvector
- 25 ноября, 2021
Шесть с половиной лет работы ведомого портфеля оказались весьма успешными: сделано без малого десять тысяч векторных иллюстраций (не без помощи симилятора конечно), заработано $335k, продан почти миллион лицензий.
( Читать дальше…Свернуть )
Метки: ведомый портфель
- Оставить комментарий
- Поделиться
- Пожаловаться
- Поиск авторов векторной графики
- microvector
- 4 ноября, 2021
Уважаемые авторы векторной графики, приглашаем вас стать частью нашей команды.
Стили в которых нужно будет работать: современный флет (персонажи и предметы), реализм (предметы, органика, физика) и псевдо 3D.
( Читать дальше…Свернуть )
Метки: работа
- Оставить комментарий
- Поделиться
- Пожаловаться
- Нужен быстрый кейвордист (Закрыто)
- microvector
- 16 октября, 2021
Вакансия закрыта. Нужный специалист найден.
Мы давно и плодотворно сотрудничаем с кейвордистом для обычных работ по обычным для тщательной работы ставкам в $0,5-1 за штуку. А теперь нам нужен потоковый кейвординг для быстрых симиляров.
Требования к такому атрибутированию ощутимо проще: нужен релевантный, индивидуальный для каждой картинки, заголовок из семи слов (это в общем-то основная задача; делается быстро, если у вас хороший английский словарный запас; остальное проще и быстрее), описание делается путём прибавления к заголовку постоянного «хвоста», ключевые слова можно подбирать автоподбором, например, в СтокСабмиттере, выбрасывать очевидно не подходящие и перетаскивать на пять первых мест наиболее релевантные, если автоподбор промажет с сортировкой. Это всё.
Ставка — $0,25 за работу.
Объём — от 1000 работ в месяц. Если можете больше (а это подразумевается, если вы в состоянии организовать поточный процесс), то дадим больше.
Пишите [email protected], обсудим детали.Метки: кейвордист, работа
- Оставить комментарий
- Поделиться
- Пожаловаться
- Разыскивается креативный автор
- microvector
- 11 октября, 2021
Внимание!
Команда стоковой студии ищет талантливого cartoon-художника.Автор прекрасно владеет цветом, умеет рисовать милых персонажей в любых динамичных позах и фоновых интерьерах, изображает предметы в интересных ракурсах, знает что такое сочная подача и объем.
Осторожно!
( Читать дальше…Свернуть )
Метки: работа
- Оставить комментарий
- Поделиться
- Пожаловаться
- Стоковая студия ищет таланты
- microvector
- 11 сентября, 2021
Пополняем команду новыми авторами, ведь хороших художников много не бывает!
Ищем мастеров современного исполнения стилей cartoon и flat.
С вас креатив и желание творить прекрасное, а с нас — хорошие условия, качественная обратная связь и ламповая атмосфера командной работы.( Читать дальше…Свернуть )
Метки: вакансии, работаем
- Оставить комментарий
- Поделиться
- Пожаловаться
- Поработать иллюстратором в студии
- microvector
- 9 сентября, 2021
Уважаемые авторы векторной графики, приглашаем вас стать частью нашей команды. Нам требуются специалисты по следующим направлениям: картун, современный флэт и дудл.
— Стабильная удаленная занятость
— Ставки: 30$ за оригинальную работу, 15$ за симиляр с дополнениями, 7$ за простой симиляр
— Бонусы за 11, 22, 33, 44 … 99 сданных в месяц работ + ништячки
— Оплата по окончании месяца( Читать дальше. ..Свернуть )
Метки: вакансии, работаем
- Оставить комментарий
- Поделиться
- Пожаловаться
- Нужны хорошие авторы в стоковую студию
- microvector
- 15 июля, 2021
Набираем новую команду! Кто давно хотел попробовать — давайте к нам.
Выбирайте задание под свои умения, рисуйте и отправляйте нам картинку.( Читать дальше…Свернуть )
Метки: вакансии, работаем
- Поделиться
- Пожаловаться
- Предыдущие 10
Дизайн студия в Гатчине Reklamabar
Дизайн студия в Гатчине Reklamabar — услуги дизайна- Бизнесу
- Людям
- Портфолио
- О нас
- Контакты
8 952 261-00-44
info@reklabar. ru
(с) Reklamabar студия рекламы
Разработано в студии webink.
Бизнесу / Дизайн
Креатив так и прёт!
Придумываем, рисуем, создаем, корячимся, двигаем пиксели, играем шрифтами, подбираем цвет, наслаждаемся жизнью.
Услуги дизайн-отдела
Если же вам нужны другие изделия или нестандартные решения — обращайтесь!
Мы всегда рады интересным новым заданиям.
Творческая мастерская
Если же вы хотите создать что-то объемное: фирменный стиль, каталог продукции, рекламную кампанию или сайт, тут мы готовы разгуляться вдоволь. Мы подскажем какой материал вам нужно собрать, подберем визуалы, поможем с выбором стилистики и в заданный срок релизуем проект. Цена и срок тут конечно будут повыше, но и задачи мы с вами выполним грандиознее.
Зачем нужен дизайн или что такое «макет»?
Этот заголовок не случаен, мы часто слышим вопросы: «А что такое макет?», «Нам ведь нужны визитки, ничего не нужно верстать!», «У нас тут на салфетке нарисовано, всего лишь напечатайте. .. там 5 минут». Просто поймите: Ваши идеи должны быть нарисованы на компьютере, и здесь действовать будем мы. Вы рассказываете – мы воплощаем. Любая задача по рекламе требует грамотной и красивой визуализации. Это и есть работа дизайн-студии.
Ах да, дизайн должен быть не только красив. Фонтанируя идеями дизайнер обязан помнить и о проиозводстве конечного продукта, и уже на стадии разработки макета необходимо это понимать. Вывод: дизайн-студия с собственным производством, лучше чем просто дизайн-студия.
Почему важен дизайн?
Есть задача наивысшего порядка: восприятие вас конечным потребителем. Начиная с того, насколько удобно людям знакомиться с вашим предложением, заканчивая имиджем вашего продукта в глазах покупателей. Тысячи деталей должны образовать цельный, надежный образ. Это, конечно, колоссальная работа. И даже небольшая визитка может сказать о вас многое. А об этом позаботимся мы.
Расы и классы
Каждый должен заниматься своим делом. Не только в том смысле, что делать дизайн лучше, конечно, у нас, а не самостоятельно. Но ещё и в том, что внутри команды должны быть профессионалы конкретных направлений. Помните фильмы: взломщик, подрывник и мастер переговоров… Так вот, обращаясь за дизайном к нам, можете быть уверены, что логотип вам будет проектировать специалист по логотипам, верстать – опытный верстальщик, рисовать иллюстрации — художник, а стоять над ними всеми будет арт-директор, который всегда знает «как лучше».
Как с нами работать
Дизайн-студия рекламы – это команда квалифицированных специалистов, которая создает настоящие шедевры полиграфической продукции. Дизайнерская компания предоставляет полный спектр услуг от разработки дизайна макета рекламной продукции, до ее печати и постпечатной обработки.
Отличное предложение для компаний Санкт-Петербурга и Ленинградской области – воспользуйтесь услугами студии рекламы Рекламабар! Только у нас доступные цены, широкий перечень услуг и строгое соблюдение сроков, прописанных в договоре.
Выгодное предложение
При обращении в нашу дизайн-студию вы получите:
- Профессиональную разработку дизайна рекламных материалов, позволяющую повысить эффективность продвижения товаров и услуг.
- Отличную самопрезентацию для выхода на рынок.
- Положительную репутацию самодостаточной компании, имеющей стойкий образ в сознании целевой аудитории.
- Разработка уникального бренда, позволяющего достойно конкурировать в отрасли.
Более подробную информацию можно получить по номеру, указанному на сайте.
Дизайн-студия в Гатчине
Преимущества сотрудничества со студией рекламы Рекламабар:
- Быстро и качественно, именно так работают наши сотрудники. Гарантируется оперативное выполнение поставленной задачи.
- В работе используется совмещение новых креативных и проверенных приемов маркетинга, что позволяет создавать успешные дизайнерские решения.
- Доступные цены.
- Ответственное отношение к каждому проекту.
- Для вас работает команда настоящих профессионалов!
Дизайн рекламы – это настоящее искусство, основанное на тонком психологическом воздействии на подсознание потребителя. Команда дизайнеров студии рекламы Рекламабар в совершенстве владеет всеми современными приемами, что позволяет добиться великолепных результатов!
Наши работы
Получите консультацию
Оставьте свой номер телефона и наши менеджеры
перезвонят вам в течение 15 минут!
Это может быть интересно
Печать
баннеров
Прекрасный элемент оформления дома, квартиры или офиса. Прекрасно дополняется рамками или багетный профилем
Перейти
TVS™ Test Vector Studio — TestInsight
Снижение стоимости тестирования, ускорение разработки тестов и улучшение Покрытие с использованием специализированной графической среды
Снижение стоимости тестирования, ускорение разработки тестов и улучшение покрытия с помощью специализированного графического интерфейса
Запланировать живую демонстрацию
Комплексная разработка тестов Набор инструментов в интуитивно понятном графическом интерфейсе
Ускорение запуска и отладки шаблона ATE
Test Vector Studio (TVS) был разработан для инженеров-испытателей и инженеров по продуктам с нуля. Он сочетает в себе удобный графический интерфейс с мощными инструментами разработки шаблонов, такими как Tester Rule Check (TRC) и Test Vector Editor.
Waver — просмотр и анализ тестовых векторов
Интуитивная разработка тестов и более быстрая отладка
Графический интерфейс пользователя Waver позволяет просматривать и анализировать шаблоны ATPG и ATE как на уровне формы волны, так и на уровне исходного кода, что упрощает разработку и отладку тестов.
Комплексный набор инструментов, упакованный в интуитивно понятный графический интерфейс
Ускорение шаблона ATE Вызов
и отладка
Test Vector Studio (TVS) была разработана для инженеров-испытателей и инженеров по продуктам с нуля. Он сочетает в себе удобный графический интерфейс с мощными инструментами разработки шаблонов, такими как Tester Rule Check (TRC) и Test Vector Editor.
Проверка правила тестера (TRC) — проверка соответствия ATE
Проверка правила тестера (TRC) Проверка соответствия ATE
Улучшение рабочего процесса «от проектирования до тестирования» и сокращение накладных расходов на последующее тестирование
TRC обеспечивает раннюю проверку вектора, проверяя как статическое соответствие, так и динамические опасности с помощью специального целевого ATE. Это может предотвратить дорогостоящие сюрпризы после микросхемы и сократить накладные расходы на тестирование.
Скачать бесплатный технический документРедактор тестовых векторов — настройка, распараллеливание и сжатие
Редактор тестовых векторов: Настройка, распараллеливание и сжатие
Преимущества от большего выбора ATE, более низкой стоимости тестирования и максимального охвата
Стоимость тестирования можно снизить за счет оптимизации тестовых векторов с использованием функций TVS, таких как распараллеливание векторов и сжатие. Вы также можете сократить расходы, скорректировав векторы тестирования, чтобы обеспечить более широкий выбор ATE и переориентировать свою программу тестирования на экономически эффективные ATE.
Программируемое редактирование
Ручное редактирование тестового вектора во многих случаях может быть непрактичным, например, маскирование каждые 10 -й вектор, например. Именно здесь пригодится программируемое редактирование TVS, поскольку оно автоматизирует процесс, экономя драгоценное время и ресурсы.
Последовательное и параллельное объединение
Векторное объединение эффективно для экономии времени работы тестера; Serial Merge объединяет векторы, избавляя от необходимости загружать их по отдельности, а Parallel Merge тестирует несколько ядер параллельно, а не по одному за раз.
Сжатие без потерь
TVS обеспечивает сжатие без потерь до 98%, уменьшая размер тестового файла и количество векторов. Это может значительно снизить стоимость тестирования без снижения охвата. Он также обеспечивает удобную отладку несжатых векторов при использовании оптимизированных сжатых в рабочей среде.
Редактор тестовых векторов: настройка, распараллеливание и сжатие Максимальное покрытие
Стоимость тестирования можно снизить за счет оптимизации тестовых векторов с использованием функций TVS, таких как распараллеливание и сжатие векторов. Вы также можете сократить расходы, скорректировав векторы тестирования, чтобы обеспечить более широкий выбор ATE и переориентировать свою программу тестирования на экономически эффективные ATE.
Программируемое редактирование
Редактирование тестового вектора вручную может быть непрактичным во многих случаях, например, при маскировании каждого 10-го -го -го вектора. Именно здесь пригодится программируемое редактирование TVS, поскольку оно автоматизирует процесс, экономя драгоценное время и ресурсы.
Последовательное и параллельное объединение
Векторное объединение эффективно для экономии времени работы тестера; Serial Merge объединяет векторы, избавляя от необходимости загружать их по отдельности, а Parallel Merge тестирует несколько ядер параллельно, а не по одному за раз.
Сжатие без потерь
TVS обеспечивает сжатие без потерь до 98%, уменьшая размер тестового файла и количество векторов. Это может значительно снизить стоимость тестирования без снижения охвата. Он также обеспечивает удобную отладку несжатых векторов при использовании оптимизированных сжатых в рабочей среде.
Основные характеристики и преимущества
- Сокращение времени выхода на рынок
› Более быстрое выполнение ATE с помощью оптимизации тестового вектора
› Меньше отладки post-si с помощью Tester Rule Checker
› Более быстрая разработка тестов с помощью интуитивно понятного графического интерфейса - Сокращение затрат
› Меньше времени ATE благодаря оптимизации тестовых векторов
› Меньше человеко-часов благодаря интуитивно понятному графическому интерфейсу и программируемому редактированию тестов
› Более широкий выбор ATE с использованием манипуляций с тестовыми векторами - Улучшить качество
› Готовность к ATE с помощью Tester Rule Checker
› Улучшенные шаблоны ATE благодаря улучшенному рабочему процессу с использованием интуитивно понятного графического интерфейса
Анализ, оптимизация и перенацеливание векторов ATE
- Просмотр и анализ тестовых векторов
- Проверка соответствия ATE
- Настройка, распараллеливание и сжатие векторов ATE
Вас также может заинтересовать.
..Вас также может заинтересовать
Вас может заинтересовать…
Проверка программы раннего тестирования Использование виртуального ATE
Скачать бесплатный технический документУскорение запуска и отладки шаблона ATE
Скачать бесплатный технический документРанняя проверка программы тестирования
Использование виртуального ATE Скачать бесплатный технический документ
Ускорение шаблона ATE
Запуск и отладка Скачать бесплатный технический документ
Как использовать векторные слои в Clip Studio Paint
Векторные слои в Clip Studio Paint очень удобны в использовании, поэтому я действительно рекомендую их всем. Если вы склонны рисовать штриховые рисунки, особенно важно рисовать их в векторном слое, так вы сможете легко редактировать их, а также есть настройки, которые вы можете использовать для улучшения.
Это особенно важно, если вы новичок в цифровом рисовании и чувствуете, что вам нужна небольшая помощь, чтобы лучше рисовать линии и чувствовать себя более уверенно.
Наиболее важной причиной использования векторных слоев является то, что при редактировании и изменении размера элементов в этих слоях ваш рисунок не потеряет качества.
Векторные слои — это гораздо больше, чем это. С их помощью вы можете редактировать отдельные точки и даже создавать новые на своих линиях, чтобы редактировать и изменять их. Например, вы можете использовать векторный ластик, который поможет вам быстрее стирать линии. Здесь вы узнаете все, что вам нужно знать о векторах в Clip Studio и о том, как их использовать, так что давайте начнем!
Использование векторных слоев в Clip Studio Paint To Draw Vector
Использование векторных слоев в Clip Studio может и будет очень полезным для вас, если вы склонны часто изменять размер своей работы. Основное различие между растровым и векторным слоями заключается в том, что вы можете изменять размер рисунков в векторе столько раз, сколько пожелаете, без потери качества.
Обычно, если вы увеличиваете и уменьшаете что-либо, изображение теряет качество. Этого не произойдет, если вы нарисовали свое изображение в векторном слое. Конечно, не каждый художник будет использовать это и нуждаться в этом.
Это просто предпочтение. Например, я всегда рисую штриховые рисунки в векторных слоях. Таким образом, я уверен, что если по какой-то причине мне нужно сделать мой рисунок больше, чем ожидалось, я могу увеличить масштаб штрихового рисунка , и это сохранит качество рисунка. Таким образом, линии не будут выглядеть размытыми и не в фокусе.
Я всегда рисую свои штриховые рисунки в векторных слоях… Я могу масштабировать штриховые рисунки, и это сохранит качество рисунка.
Clip Studio также имеет некоторые опции и инструменты, которые помогут вам в рисовании. Эти варианты служат почти как трость, особенно если вы только начинаете учиться рисовать. Я собираюсь упомянуть некоторые из них позже, но важно знать, что эти инструменты существуют, чтобы помочь вам.
Не бойтесь использовать их, думая, что вы жульничаете. Нет, если они существуют и помогают вам, то используйте их! Когда я начал рисовать в цифровом виде, я часто использовал стабилизацию пера, а также векторный ластик. Я еще не полностью контролировала свои линии и инструменты, поэтому эти инструменты помогли мне чувствовать себя увереннее и лучше рисовать линии.
По мере того, как я привыкал к цифровому рисованию, я стал использовать эти инструменты все реже и реже, а сейчас это делается очень редко. Используйте этих помощников столько, сколько хотите, потому что они определенно сделают вас лучшим художником.
Теперь, как создать векторный слой в Clip Studio. Перейдите к «Слой -> Новый слой -> Векторный слой…» . Появится маленькое окошко, здесь особо ничего делать не нужно. Измените его название, если хотите и хотите иметь организованное рабочее место.
Рекомендуется всегда называть свои слои, особенно если вы склонны работать с большим их количеством, чтобы вы всегда могли легко найти то, что вам нужно!
Кроме того, вы можете перейти на вкладку слоя, обычно справа от вас, и нажать кнопку «Новый векторный слой».
Использование векторного ластика в векторных слоях
Как я уже упоминал, существуют инструменты и опции, которые помогут вам с вашими рисунками. Одним из них является векторный ластик. Вы можете использовать эту опцию, только если у вас выбран векторный слой. Так что будьте уверены, что это так.
Теперь перейдите на панель инструментов и выберите ластик. Вы также можете использовать ярлык «E» , чтобы быстрее сменить инструмент на ластик. Теперь на вкладке свойств ластика слева есть довольно много параметров, которые вы можете настроить по своему вкусу.
Включить векторный ластик. Используя векторный ластик, вы можете стереть целую линию одним простым движением ластика. Обратите внимание, что у вас есть несколько вариантов: «Стереть соприкасающуюся часть», «Стереть до пересечения» и «Общая линия». В зависимости от того, что вы выберете, линия будет стираться по-разному.
Вот несколько примеров:
Я обычно использую средний вариант, но вы можете найти другие более полезные. Как я уже сказал, это может быть очень полезно, когда вы только начинаете свое художественное путешествие и не чувствуете, что можете идеально управлять инструментами.
Но это также очень полезно, если вы хотите стереть много линий или их части, которые вам не нужны при рисовании. Это ускорит и упростит для вас процесс. Опять же, нет необходимости использовать его все время, если вы предпочитаете стирать вручную.
Сегодня я не использую его так часто, как раньше. В большинстве случаев я использую его, потому что хочу удалить хороший кусок рисунка, и это делается быстрее!
Тем не менее, попробуйте и посмотрите, как вам это покажется. Если вы все еще не привыкли рисовать в цифровом виде или к своему новому планшету для рисования, векторный ластик может вам очень помочь, и рано или поздно вы почувствуете себя более уверенно, используя обычный ластик!
И если вы ищете рекомендации по планшетам для рисования, на которые можно перейти, ознакомьтесь с этой статьей прямо здесь!
Заливка векторных слоев цветом
Это еще один очень полезный инструмент, который поможет вам работать быстро. Я часто использую это при применении базовых цветов к своим рисункам. Так все настраивается быстрее, и я вижу общий вид.
Но прежде чем вы начнете, вы можете узнать больше о том, какие цвета использовать, в этом полном руководстве по теории цвета для начинающих прямо здесь!
Когда мне нужно изменить цвета, потому что они не так сбалансированы, как хотелось бы, я могу сделать это очень легко. Затем, когда я счастлив, мне просто нужно заполнить пробелы кистью, и мы приступаем к теням!
Если вы работаете с векторными слоями, стоит предупредить, что в них нельзя использовать ни заливку, ни заливку.
Итак, прежде чем добавлять цвет к нашему штриховому рисунку, создайте новый растровый слой. Перейдите к «Слой -> Новый растровый слой» или нажмите сочетание клавиш на клавиатуре «Ctrl+Shift+N» . Теперь этот слой должен быть ниже векторного слоя, где находится ваш штриховой рисунок.
В новый слой, который вы только что создали, мы добавляем наши цвета. Теперь просто перейдите на панель инструментов и выберите Paint Bucket Tool или нажмите 9.0195 ‘G’ дважды, потому что это сокращение. Обратите внимание, что в окне свойств заливки есть несколько параметров. Выберите опцию «Ссылаться на другие слои» !
Если вы не активируете эту опцию, инструмент заливки не поймет, что вы хотите рисовать только внутри линий, которые у вас уже есть. Если вы используете ведро с краской, оно заполнит весь холст выбранным вами цветом.
Однако при активной опции «Ссылаться на другие слои» программа поймет, что пространство ограничено линиями, и заполнит только эти фигуры!
Все просто! Здесь есть и другие варианты, которые могут быть вам полезны. Как я уже сказал, мне нравится браться за кисть и закрашивать пробелы, которые пропустило ведро с краской. Но на самом деле есть еще один способ сделать это!
Выберите опцию «Закрыть и заполнить» . Здесь вам нужно только сделать выделение вокруг той части, которую вы хотите окрасить, и программа закрасит те промежутки, которые вы выбираете. Это очень легко и быстро использовать, и не стесняйтесь делать это, если вы чувствуете, что это помогает вам!
То же самое касается опции «Закрасить незаполненную область» . Вместо выделения вы используете его как кисть. Закрасьте области, которые вы хотите раскрасить, и программа добавит цвет к выбранной области.
Изменение типа кисти векторной обводки
Допустим, вы хотите изменить кисть, которую вы использовали для своих линий. Но, вы не хотите переделывать все, всю работу вы только что сделали, и вам даже понравилось, как выглядели линии!
Ну, не бойся. Это еще одна причина, почему использование векторных слоев для штриховой графики так хорошо и полезно. Перейдите на панель инструментов и выберите «Эксплуатация» инструмент. Это третий значок на панели инструментов, который выглядит как куб с маленькой стрелкой в углу.
Теперь в окнах свойств инструмента вы заметите, что у вас есть несколько параметров. Последний из них — «Форма кисти» ! Здесь вы можете изменить тип кисти, на которой ваши линии, на любой другой, сохраненный в Clip Studio!
Вы также можете изменить толщину линий, их прозрачность и цвет! Если вы нажмете на маленький значок гаечного ключа в нижней части окна, вы можете найти еще несколько настроек, которые вы можете изменить и настроить по своему желанию.
Двустороннее соединение векторных линий
Иногда при рисовании наши линии могут идти не так, как предполагалось, или мы просто решаем, что они выглядят лучше по-другому или связаны друг с другом. Мне нравится вносить эти изменения вручную, но опять же, в начале мне бы не помешала помощь.
И вы тоже можете это сделать! На самом деле есть два способа соединения векторных линий. Один очень прямой, а другой служит скорее помощником при рисовании штрихового рисунка. Помните, что для этого вам нужно рисовать линии в векторном слое.
Vector Line Connect
Допустим, вы нарисовали линию или несколько, но они не соединены. Либо потому, что вы не хотели, чтобы они подключались, либо это была просто ошибка. Итак, естественно, вы хотите соединить эти две линии вместе.
Их не нужно стирать и повторять!
Просто перейдите на панель инструментов и выберите на ней последний значок. Инструмент «Правильная линия» . Здесь довольно много вариантов, но сейчас нам нужен номер 9.0195 ‘Подключить векторную линию’ . Этот инструмент работает как кисть, аналогично тому, как мы используем параметр заливки, о котором я упоминал выше. Просто нарисуйте поверх двух линий, которые вы хотите соединить, программа распознает пустую часть и соединит обе линии.
Это очень удобно, когда вы хотите внести небольшие изменения и соединить линии, которые не соединены. Это быстро и безболезненно, а инструмент сделает так, чтобы линия осталась с той же толщиной и свойствами!
Все остальные параметры в окне вспомогательного инструмента правильной линии также могут быть весьма полезны для вас, если вы хотите внести более сложные изменения в свои линии. Например, вы хотите изменить толщину линии, но не для всех, а только для некоторых ее частей. «Правильная ширина линии» инструмент может сделать это за вас.
Возможно, вам также захочется изогнуть некоторые части ваших линий, и «Векторная линия защемления» может вам в этом очень помочь! Изучите каждый из этих инструментов и поэкспериментируйте с ними. Если вы часто редактируете свои векторные линии, я уверен, что вы найдете эти опции очень полезными!
Параметр «Векторный магнит»
«Векторный магнит» — это параметр, который необходимо активировать, если выбрано перо или кисть. Он также доступен только при использовании векторного слоя. Что это делает, так это то, что это поможет вам сделать свои линии и щелкнуть их, чтобы все они были в одном стиле и соединяли линии друг с другом.
Это очень полезно, если вы только начинаете и пробуете свои силы в цифровом и штриховом искусстве. Если вы чувствуете, что ваши линии все еще слишком дрожат и напряжены, попробуйте включить эту опцию. Это поможет вам делать более качественные линии и больше доверять им.
Я всегда рекомендую своим ученикам много практиковаться, только с практикой и повторением мы совершенствуемся. Но это не значит, что мы не можем использовать помощников, и это один из них! В нем есть разные уровни. Начните с самого высокого уровня, если это необходимо, а затем снижайте его по мере того, как вы будете чувствовать себя более уверенно.
Вы заметите, что с практикой и небольшой помощью вы станете лучше, и вскоре вам больше не понадобятся эти инструменты! Просто повеселиться!
Преобразование в вектор в Clip Studio Paint
Иногда мы слишком отвлекаемся и начинаем рисовать штриховой рисунок в растровом слое. Спустя два часа мы замечаем свою ошибку. Бывает! Это случилось со мной, и я уверен, что это произойдет снова. Не паникуйте, потому что это можно исправить!
Нет необходимости создавать новый векторный слой и переделывать все линии заново. Просто выберите слой, который у вас есть ‘Щелкните правой кнопкой мыши -> Преобразовать слой…’ . Появится небольшое окно, и теперь вы можете настроить слой так, как хотите.
Поскольку мы хотим преобразовать наш слой в векторный, выберите «Векторный слой» в меню «Тип». Теперь вы можете добавить имя к этому слою, если хотите, и изменить цветовой режим и другие.
Небольшой совет! Когда вы конвертируете слой в вектор, Clip Studio автоматически настраивает его так, чтобы содержимое слоя стало черным. Обычно я делаю свои линии черным цветом, так что это не будет проблемой, но если вы используете цвет, это может быть проблематично.
Просто нажмите кнопку «Настройка для вектора…» , и появится новое окно меньшего размера. Как видите, здесь есть некоторые настройки, которые вы можете изменить, но прямо сейчас мы хотим убрать параметр «Вывести все черным цветом» . Теперь цвета, которые вы использовали изначально, останутся при конвертации в векторный слой!
Использование инструмента «Фигура» в векторном рисунке
Как и в других программах для рисования, в Clip Studio можно создавать такие фигуры, как круги, прямоугольники и другие. Просто перейдите к его значку на панели инструментов или нажмите ‘U’ на клавиатуре. Есть несколько вариантов на выбор, включая линии, изогнутые линии и фактические формы.
Если это делается на векторном слое, вы можете управлять точками только что созданных форм или линий или даже создавать в них новые точки. В Clip Studio есть странный способ работы с вектором и векторными точками, но это все же возможно!
Чтобы отредактировать точки на фигуре, вам просто нужно перейти к инструменту «Правильная линия» , а затем выбрать первый вариант, «Контрольная точка» .
Однако стоит отметить, что если вы создаете фигуры в векторном слое, вы можете создавать только контуры этих фигур. Вы не можете создать фигуру, уже заполненную цветом. Вы могли заметить, что это действительно вариант, но он работает только с растровыми слоями.
Итак, если вы нарисовали фигуру и хотите ее раскрасить, создайте новый растровый слой под фигурой и используйте инструмент заливки, чтобы добавить цвет внутри нее.
Я настоятельно рекомендую всегда создавать свои фигуры с векторными слоями, потому что есть вероятность, что вы собираетесь изменять их размер, а в векторе вы можете увеличивать и уменьшать их столько раз, сколько пожелаете, без потери качества!
Дополнительные вопросы
Можно ли экспортировать векторные рисунки в Clip Studio Paint? К сожалению, нет. Сейчас нет возможности экспортировать векторное изображение в Clip Studio. Но кто знает, будем надеяться на это в обновлении в ближайшем будущем!
Как изменить цвет линейного изображения в программе Clip Studio Paint? Чтобы изменить цвет штрихового рисунка, выберите слой, на котором вы хотите произвести изменение. Теперь перейдите в окно свойств слоя прямо над ним. Выберите «Цвет слоя». Теперь выберите новый цвет, который вы хотите, и примените его к полосам. Ваши линии должны сразу изменить цвет!
Итак, теперь, когда вы настроили векторные слои, пришло время узнать об справочном окне в Clip Studio Paint и о том, как оно может ускорить вашу работу!
Назад к блогу
Делайте больше с R: таблицы быстрого поиска с использованием именованных векторов
Делайте больше с R
org/Person» itemprop=»author»> Шэрон Махлис, исполнительный редактор отдела данных и аналитики, ИнфоМир |видео
Узнайте, как именованные векторы предоставляют разработчикам R простые в использовании пары ключ-значение
Делайте больше с R
R Совет: таблицы быстрого поиска с именованными векторами (4:36)
Скрытые субтитры доступны на нашем канале YouTube
Изучите простой способ использования пар ключ-значение в R
Как аббревиатура штата Арканзас? Это АР? АК? В КАЧЕСТВЕ?
Возможно, у вас есть фрейм данных с информацией. Или любую информацию , где есть один столбец с категориями и другой столбец со значениями. Скорее всего, в какой-то момент вы захотите найти значение по категории, иногда называемой ключом . Во многих языках программирования есть способы работы с парами ключ-значение. Это легко сделать и в R с именованными векторами. Вот как.
У меня есть данные с названиями штатов и аббревиатурами, которые я сохранил во фрейме данных с именем postal_df
. (Код для создания этого фрейма данных находится внизу этого поста, если вы хотите продолжить).
Я запущу tail(postal_df)
, чтобы посмотреть, как это выглядит.
Почтовый Индекс штата 45 Вермонт ВТ 46 Вирджиния, Вирджиния 47 Вашингтон, Вашингтон 48 Западная Вирджиния WV 49 Висконсин, Висконсин 50 Вайоминг, штат Вайоминг,
Таблица поиска/именованный вектор содержит значения в качестве вектора и ключи в качестве имен. Итак, позвольте мне сначала сделать вектор значений, которые находятся в столбце PostalCode:
getpostalcode <- postal_df$PostalCode
Затем я добавлю имена из столбца State.
имена(getpostalcode) <- postal_df$State
Чтобы использовать этот именованный вектор в качестве таблицы поиска, формат mylookupvector['key'].
Итак, вот как получить почтовый индекс Арканзаса:
getpostalcode['Arkansas']
Если вам нужно только значение без ключа, добавьте функцию unname
к полученному значению:
unname(getpostalcode['Arkansas'])
Обновление: Вы также можете получить только одно значение, используя формат getpostalcode[['Arkansas']]
, то есть двойные скобки вместо добавления unname()
. Спасибо Питеру Харрисону за совет через Twitter. Однако Хэдли Уикхэм отмечает, что формат двойной скобки работает только для одного значения. Если вы делаете что-то вроде создания нового столбца во фрейме данных, придерживайтесь unname().
Вот и все. Я знаю, что это несколько тривиальный пример, но он имеет практическое применение. Например, у меня есть именованный вектор кодов FIPS, которые мне нужны при работе с данными переписи населения США.
Я начал с фрейма данных состояний и кодов FIPS под названием fipsdf
(код для этого ниже). Затем я создал вектор с именем getfips
из столбца кода fips фрейма данных и добавил состояния в качестве имен.
fipsdf <- rio::import("data/FIPS.csv")
getfips <- fipsdf$FIPS
name(getfips) <- fipsdf$State
Теперь, если мне нужен код FIPS для Массачусетса, я могу использовать getfips['Massachusetts']
. Я бы добавил unname(), чтобы получить только значение без имени: unname(getfips['Массачусетс'])
.
Если постоянное использование unname()
становится слишком раздражающим, вы можете даже сделать небольшую функцию из своей таблицы поиска:
get_state_fips <- function(state, lookupvector = getfips){
fipscode <- unname(lookupvector[state])
return(fipscode)
}
Здесь у меня есть два аргумента для моей функции. Один — мой «ключ», в данном случае — название штата; другой — lookupvector
, который по умолчанию соответствует моему вектору getfips
.
И вы можете видеть, как я использую эту функцию. Это просто имя функции с одним аргументом, название штата: get_state_fips("New York")
.
Я могу сделать функцию, которая выглядит более универсальной, например
get_value <- function(mykey, mylookupvector){
myvalue <- mylookupvector[mykey]
myvalue <- unname(myvalue)
return(myvalue)
}
Имеет более общее имя для функции, get_value( )
; более общее имя первого аргумента, mykey
, и второй аргумент mylookupvector
, который по умолчанию ничему не соответствует.
То же самое, что я делал все это время: получение значения из вектора поиска с помощью lookupvector['key']
, а затем запустить функцию unname()
. Но все это завернуто в функцию. Таким образом, вызов его немного более элегантен.
Я могу использовать эту функцию с любым именованным вектором, который я создал. Здесь я использую его с Арканзасом и моим вектором getpostalcode
: get_value("Arkansas", getpostalcode)
.
Легкий поиск в R! Просто помните, что имена должны быть уникальными. Вы можете повторить значений , но не ключей .
Впервые я увидел эту идею несколько лет назад в книге Хэдли Уикхема Advanced R . Я до сих пор часто им пользуюсь и надеюсь, что вы тоже найдете его полезным.
Код для создания фрейма данных с почтовыми сокращениями
postal_df <- data.frame(stringsAsFactors=FALSE,
State = c("Алабама", "Аляска", "Аризона", "Арканзас", "Калифорния",
" Колорадо», «Коннектикут», «Делавэр», «Флорида», «Джорджия»,
«Гавайи», «Айдахо», «Иллинойс», «Индиана», «Айова», «Канзас»,
«Кентукки», « Луизиана", "Мэн", "Мэриленд", "Массачусетс",
«Мичиган», «Миннесота», «Миссисипи», «Миссури», «Монтана»,
«Небраска», «Невада», «Нью-Гэмпшир», «Нью-Джерси», «Нью-Мексико»,
«Нью-Йорк» , «Северная Каролина», «Северная Дакота», «Огайо»,
«Оклахома», «Орегон», «Пенсильвания», «Род-Айленд», «Южная Каролина»,
«Южная Дакота», «Теннесси», «Техас». ", "Юта", "Вермонт",
"Вирджиния", "Вашингтон", "Западная Вирджиния", "Висконсин", "Вайоминг"),
PostalCode = c("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA",
"HI", "ID", "IL", "IN", "IA", " КС", "КЙ", "ЛА", "МЕ", "МД",
"MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ",
"NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD",
"TN", "TX", "UT", " VT", "VA", "WA", "WV", "WI", "WY")
)
Код для создания кадра данных с кодами FIPS
fipsdf <- data.frame(State = c("Alabama ", "Аляска", "Аризона", "Арканзас",
"Калифорния", "Колорадо", "Коннектикут", "Делавэр", "Флорида",
"Джорджия", "Гавайи", "Айдахо", "Иллинойс". ", "Индиана", "Айова",
"Канзас", "Кентукки", "Луизиана", "Мэн", "Мэриленд", "Массачусетс",
«Мичиган», «Миннесота», «Миссисипи», «Миссури», «Монтана»,
«Небраска», «Невада», «Нью-Гэмпшир», «Нью-Джерси», «Нью-Мексико»,
«Нью-Йорк» , «Северная Каролина», «Северная Дакота», «Огайо», «Оклахома»,
«Орегон», «Пенсильвания», «Род-Айленд», «Южная Каролина», «Южная Дакота»,
«Теннесси», «Техас».