>> [Грає музика]
DUSTIN TRAN: Привіт.
Дастін Мене звуть.
Так що я буду представляти Аналіз даних в R.
Просто трохи про себе.
Я в даний час аспірант Інженерна та прикладної науки.
Я вивчаю перетин машинне навчання і статистика
так Аналіз даних в R є дійсно основне значення для
Я роблю на щоденній основі.
>> І R особливо добре для аналізу даних
тому що це дуже добре для прототипування.
І, як правило, коли ви робите якісь аналізу даних, багато проблем
збираються пізнавальною.
І так ви просто хочете мати деякі дійсно гарна мова, що
це просто добре для цього вбудовані функції, на відміну
для того, щоб мати справу з низькими речей рівня.
Таким чином, на самому початку, я просто хочу, ввести те, що R, то чому б
Ви хочете, щоб використовувати його, і потім переходять в якийсь демо,
і просто піти далі.
>> Так що ж таке R?
R тільки мову розвинувся для статистичних розрахунків
і візуалізація.
Так що ж це означає, що це дуже хороший мову
для будь-якого роду речі, що має справу з невпевненість або візуалізації даних.
Так що ви повинні все це імовірнісних розподілів.
Там збираються бути вбудовані функції.
Ви також будете мати відмінний побудова пакетів.
>> Python є ще одним конкуруючих мова для даних.
І ще одна річ, яку я знаходжу, що R набагато краще візуалізація.
Так що ви побачите в демо як а просто дуже інтуїтивним мову
, Який просто працює дуже добре.
Це також є безкоштовним і відкритим вихідним кодом, а будь-який інший хороший мову, я думаю.
>> І ось, купа всього Ключові слова кинуті на вас.
Це динамічний, тобто якщо у вас є Конкретний тип присвоєно об'єкту
ніж просто змінити його на льоту.
Це ледачий, так що це розумно, про як він це робить розрахунки.
Функціональне значення це може дійсно працювати засновані від функцій, так anything--
будь-який вид маніпуляцій ви робити, він буде заснований офф функцій.
>> Так бінарні оператори, наприклад, просто за своєю суттю функції.
І все, що Ви збираєтеся зробити, це
буде бігти функції самостійно.
А потім об'єктно-орієнтована, а також.
>> Так от сюжет XKCD.
Не тільки тому, що я відчуваю, що XKCD має фундаментальне значення для будь-якого виду
презентації, а тому, що Я відчуваю, що це дійсно
молотки пункт, що багато час, коли ви робите якісь дані
аналіз, проблема полягає не в так як швидко він працює,
але як довго це буде вас програмувати завдання.
Так от, це просто аналізуючи чи Стратегія або б є більш ефективним.
Це буде те, що ви
матимемо справу багато з в Сортувати низькорівневі мови
де ви маєте справу з SEG несправностей, виділення пам'яті, ініціалізація,
навіть роблячи вбудовані функції.
І цей матеріал все обробляється дуже, дуже елегантно в R.
>> Так що просто забити цей Справа, найвужче місце
буде пізнавальним.
Так аналіз даних дуже складна проблема.
Якщо ви робите машинне навчання, або ви
робити просто якесь Основна розвідка даних
Ви не хочете, щоб взяти документ
а потім скомпілювати те, що кожен раз, коли ви
хочу подивитися, що колона виглядає, які саме записи в матриці
виглядає.
Таким чином, ви просто хочете мати деякі дійсно приємний інтерфейс
Ви можете запустити просту функцію що індекси до того, що
Ви хотіли б і просто запустити його звідти.
І ви повинні домен конкретні мови для цього.
І R дійсно допоможе вам визначити Проблема і вирішити цю проблему таким чином.
>> Так ось графік, що показує програмування Популярність R, як це пішло з плином часу.
Отже, як ви бачите, як 2013 або так що просто підірвали надзвичайно.
І це був тільки через це Величезний тенденція в індустрії високих технологій
про великі даних.
Крім того, не тільки технологія промисловість, але насправді
Будь-яка галузь that--, тому що багато галузей
є свого роду основою для намагаються вирішити ці проблеми.
І, як правило, ви можете мати деякі хороші спосіб вимірювання цих проблем
або навіть визначаючи їх або їх вирішення, використовуючи дані.
Так що я думаю, зараз R є 11- найпопулярніший мову на Tiobe
і це зростає з тих пір.
>> Так ось деякі більш особливості R. Він має
Величезна кількість пакетів і для всіх цих різних речей.
Так в будь-який час у вас є певна проблема, більшість
Час R матиме що функція для вас.
Так ви хочете, щоб побудувати якесь машини
Алгоритм навчання називається Випадкові Ліс або дерева рішень,
або навіть намагаються взяти середнє функція або який-небудь з цього матеріалу,
R буде мати це.
>> І якщо ви робите ви дбаєте про оптимізація, одна річ, яка загальна
є те, що після того як ви зробили прототипи якась мові високого рівня,
ви будете кидати, що in-- Ви просто порт, який більш
в якусь мову низького рівня.
Те, що добре про R є те, що, як тільки ви зроблено прототипів, ви можете запустити C ++,
або Fortran, або будь-який з них нижні рівня безпосередньо в R.
Так ось один дійсно круто особливістю R,
Якщо ви дійсно дбаєте про Справа в оптимізації.
>> І це теж дуже добре для веб-візуалізації.
Так D3.js, наприклад, Я думаю, ще один семінар
що ми представили сьогодні.
І це дійсно дивним для робити інтерактивні візуалізації.
І D3.js припускає, що у вас є свого роду даних, які будуть нанесені
і R є відмінним способом, щоб бути здатним робити Аналіз даних, перш ніж експортувати його
до D3.js або навіть просто працювати D3.js команд в самій R,
а також всі ці інші бібліотеки, а також.
>> Так що просто впровадження що R і чому його можна використовувати.
Так, ми сподіваємося, у мене переконані, що ви щось
про просто намагаюся побачити, що це таке.
Так що я збираюся йти вперед і пройти через деякі основи про об'єкти R
і те, що ви дійсно можете зробити.
>> Так от просто купа команд математику.
Так кажуть you're-- ви хочете побудувати мову самостійно, і ви просто хочете
мати купу різних інструментів.
Будь-який вид роботи ви думаєте, ви хочу в значній мірі буде в R.
>> Так от 2 плюс 2.
Ось два рази пі.
R має купу вбудованих констант що ви будете часто використовувати як пі, е.
>> І потім, ось 7 плюс runif, так runif 1.
Це функція, яка генерує одне випадкове рівномірне від 0 до 1.
А тут ще від 3 до ступеня 4.
Там це квадратні корені.
>> Там же журналу.
Так, авторизуйтесь буде робити базу Експонентний сам по собі.
І потім, якщо ви вкажете базу, то Ви можете робити все, що база ви хочете.
І тоді, ось деякі інші команди.
Так що ви повинні 23 мод 2.
Тоді у вас є залишок.
Тоді у вас є науково позначення, якщо ви також
хочу зробити просто більше і більш складні речі.
>> Так от призначення.
Так типові завдання в R виконується зі стрілкою
так що це менше, ніж а потім дефіс.
Так от, я просто призначення 3 зі змінною Вал.
>> І тоді я друкую Val а потім виводить три.
За умовчанням в R перекладача, його друкуватиме речі для вас
так що вам не потрібно вказувати друку Val в будь-який час ви хочете, щоб щось надрукувати.
Ви можете просто зробити Вел і то він буде робити це за вас.
>> Крім того, ви можете використовувати дорівнює технічно як оператор присвоювання.
Є невеликі тонкощі між використанням стрілку
оператор і рівності Оператор для виконання завдань.
В основному відповідно до Конвенції, все просто використовувати оператор стрілки.
>> І ось, я задаю це косою позначення називається 1 двокрапка 6.
Це генерує вектор від 1 до 6.
І це дуже приємно, тому що тоді Ви просто призначити вектор Валь
і що працює сама по собі.
>> Так що це вже відбувається з single-- дуже інтуїтивний даних
Структура просто двійник деякий тип типу в вектор
і який буде збирати всі скалярні значення для вас.
Таким чином, після переходу від скалярного, ви є об'єкти R, і це вектор.
Вектор будь-який вид Збір і того ж типу.
Так ось купа векторів.
>> Так що це цифри.
Числовий, є спосіб R спосіб сказати два рази.
І так за замовчуванням, будь число буде в два рази.
>> Так що, якщо у вас є з 1,1, 3, негативною 5,7, C є функцією.
Це об'єднує всі три числа у векторі.
І це буде be-- так що якщо Ви помітили, 3 само по собі,
як правило, ви б припустити, що це, як ціле,
а тому, що всі вектори той же самий тип,
це вектор парному розряді або цифровий в цьому випадку.
>> RNorm є функцією, яка створює стандартна нормальна variables--
або стандартні нормальні значення.
І я, вказавши дві з них.
Так що я роблю RNorm 2, призначення, що Розробники, а потім я друкую деви.
Таким чином, ці тільки два Випадкові нормальні значення.
>> А потім цілих чисел, якщо ви Ви дбаєте про цілих чисел.
Так що це просто про пам'ять розподіл і збереження обсяг пам'яті.
Таким чином, ви повинні додати ваші номери по столиці Л.
>> Загалом, це Історичний позначення R в
для того, що називається довге ціле.
Тому більшу частину часу, ви будете мати справу з двійниками.
І якщо ви коли-небудь буде пізно на оптимізувати свій код,
Ви можете просто додати їх у L'років після або під час нього
якщо ви, як віщі про те, що Ви збираєтеся зробити ці змінні.
>> Так ось векторний характер.
Так, знову ж таки, я об'єднання три струни на цей раз.
Зверніть увагу, що подвійні струни і поодинокі рядки же в R.
Так що в мене Артур і Марвін і так коли я друкую це, всі вони
збираємося показати подвійними струнами.
І якщо ви також хочете, щоб включити подвійний або одинарної рядки
в ваших персонажів, то ви можете або чергувати ваші рядки.
>> Так Марвін для Другий елемент, це
збирається show-- вас просто подвійними струнами
а потім один рядок так що це змінного.
В іншому випадку, якщо ви хочете використовувати двічі Рядок оператор в двомісному рядки
коли ви оголосивши її, а потім ви просто використовуєте оператор втечі.
Так що вам зворотний слеш подвійний рядок.
>> І, нарешті, ми також є логічні вектори.
Так logical-- так вірно і FALSE, і вони
буде все великі літери.
А потім, знову ж таки, я об'єднання їх, а потім призначати їх BOOLS.
Так Bools збирається показати Ви TRUE, FALSE, і TRUE.
>> Так ось векторизация індексації.
Таким чином, на початку, я беру function--
це називається sequence-- Послідовність від 2 до 12.
І я беру послідовність, 2.
Так це буде робити 2, 4, 6, 8, 10 і 12.
І потім, я індексування щоб отримати третій елемент.
>> Таким чином, одна річ, щоб мати на увазі, що г індекси, починаючи з 1.
Так Вальс 3 даватиме Ви Третій елемент.
Це свого роду відрізняється від інших мови, в яких він починається з нуля.
Таким чином, в C або C ++, наприклад, ви збирається отримати четвертий елемент.
>> А ось вальс від 3 до 5.
Таким чином, одна річ, яка дійсно здорово, що ви
може генерувати тимчасові змінні всередині а потім просто використовувати їх на льоту.
Так от 3 до 5.
Так я генерації вектор 3, 4 і 5, а потім
Я індексації, щоб отримати третину, четвертий і п'ятий елементи.
>> Отже, подібним чином, ви можете Анотація просто зробити
будь-який вид вектора Це дає вам індексацію.
Так ось вальс, а потім перший, третій, шостий і елементи.
І потім, якщо ви хочете зробити доповнення,
так що ви просто зробити мінус після цього і що буде
дати вам все, що не перший, третій, шостий і елемент.
Таким чином, це буде 4, 8 і 10.
>> І якщо ви хочете отримати навіть більш просунуті,
Ви можете об'єднати логічні вектори.
Так цей показник буде давати вам це булева вектора довжини 6.
Так представник TRUE, кома 3.
Це буде повторювати ІСТИНА три рази.
Так що це дасть вам вектор TRUE, TRUE, TRUE.
>> представник FALSE 4-- це відбувається, щоб дати вам вектор FALSE, FALSE, FALSE, FALSE.
І тоді з об'єднуватиме ці два Логічні разом.
Таким чином, ви збираєтеся отримати три Істини, а потім чотири FALSEs.
>> Так що, коли ви форумів вальс, ви збирається отримати TRUE, TRUE, TRUE.
Так от хочу сказати, так, Я хочу, щоб ці три елементи.
А потім FALSE, FALSE, БРЕХНЯ, БРЕХНЯ збирається
щоб сказати ні, я не хочу, щоб ці елементи так що не збирається їх повернути.
>> І я думаю, є насправді опечатка тут тому що це говорить повторіть TRUE, 3
і повторювати брехливі 4, і технічно, вам тільки шість елементів, так повторювати брехливі,
вона повинна бути повтор FALSE 3.
Я думаю, що R також досить такий шикарний що якщо ви просто вказуєте 4 тут, то
Це не буде навіть без помилок.
Це буде просто дати вам цю величину.
Так це буде просто ігнорувати, що в четвертому БРЕХНЯ.
>> Так ось векторизация призначення.
Так set.seed-- це тільки встановлює насіння псевдовипадкових чисел.
Так я встановлюю насіння з 42, це означає, що, якщо я можу генерувати
три випадкових нормально значення, а потім, якщо вас
запустити set.seed на свій розсуд комп'ютер, використовуючи той же значення 42,
то ви також отримуєте Ті ж три випадкові нормалей.
>> Так що це дуже добре відтворюваності.
Зазвичай, коли ви робите деякі Сортувати наукового аналізу,
Ви хотіли б встановити насіння.
Таким чином, інші вчені можуть просто відтворити точно такий же код, який ви
зроблено тому, що вони мають точне ж випадкові величини that-- або випадкова
значення, які ви взяли, як добре.
>> І так векторизованних призначення тут показує Вальс з 1 по 2.
Так що займає перші два елементи з вальсу, а потім привласнює їх 0.
І потім, ви також можете просто зробити Подібна річ з перемикачів.
>> Так вальс не дорівнює 0-- цю волю дати вам вектор БРЕХНЯ, БРЕХНЯ, ІСТИНА
в цьому випадку.
І потім, це буде говорити будь з тих індексів, які були щирими,
то це буде призначити що 5.
Так він приймає третій елемент тут, а потім привласнює його 5.
>> І це дуже приємно в порівнянні з низькорівневих мовах
де ви повинні використовувати для петель зробити все це векторизованних речі
тому що це просто дуже інтуїтивним і це єдиний один вкладиш.
І те, що є великим про векторизация позначення
в тому, що в R, це свого роду вбудовані таким чином, що вони майже так само швидко,
як робити на мові низького рівня, як на відміну від рішень для петлі в R
, А потім з його робити Сам динамічний індексації.
І це буде повільніше, ніж робити Цей вид векторизованних речі
де він може зробити це паралельно, де він робить це в заправці в принципі.
>> Так ось векторизуется операцій.
Так я генерації значення 1 до 3, призначаючи що vec1, від 3 до 5, vec2,
складаючи їх разом.
Він додає їм покомпонентно так це 1 плюс 3, 2 плюс 4, і так далі.
>> vec1 раз vec2.
Це примножує два ціннісний компонент мудрим.
Так що це один раз 3, 2 рази 4, а потім 3 рази 5.
>> А потім, так само ви можете також зробити comparisons-- логічне порівняння.
Так що це БРЕХНЯ БРЕХНЯ ІСТИНА в цьому так, бо один не більше, ніж 3,
2 максимум, ніж 4.
Це, я думаю ,, інший опечатка, 3 безумовно не більше, ніж 5.
Так.
І тому ви можете просто зробити все Ці прості операції
тому що їх у спадщину від самих класів.
>> Так що було просто вектор.
І це свого роду найбільш фундаментальним R об'єкт, тому що заданий вектор,
Ви можете побудувати більш складні об'єкти.
>> Так ось матриця.
Це, по суті абстракція що матриця сама по собі.
Таким чином, в цьому випадку, це три різні вектори, де кожен з колонки,
або ви можете розглядати його як кожного з них ряд.
>> Так що я зберігаю матрицю від 1 до 9, а потім я зазначенням 3 рядків.
Так з 1 по 9 дасть вам вектор 1, 2, 3, 4, 5, 6, і аж до 9.
>> Одна річ, щоб мати на увазі, що R зберігає значення в стовпці-майор форматі.
Отже, іншими словами, коли ви бачите 1 9, це буде зберігати them--
це буде 1, 2, 3 в першому стовпці,
а потім він буде робити 4, 5, 6 у другому стовпці,
а потім 7, 8, 9, в третьому стовпці.
>> А ось деякі інші загальні функції, які ви можете використовувати.
Так тьмяний мат, це дасть вам розміри матриці.
Це буде повертати вас вектор розмірності.
Таким чином, в цьому випадку, оскільки наша матриця 3 на 3,
це буде давати вам цифрова векторна це 3 березня.
>> А ось просто показує множення матриць.
Так зазвичай, якщо ви просто робите asterisk-- так килимок зірочка mat--
це буде покомпонентно робота
або те, що називається продукт Адамара.
Так це буде робити кожен елемент покомпонентно.
Тим не менше, якщо ви хочете матриця multiplication--
так множення перший раз рядків Перший стовпець другого матриці в
і так on-- ви повинні використовувати цей відсоток операція.
>> І т мату просто Робота для транспозиції.
Так що я кажу, прийняти транспонування в матриця, помножити його на матрицю
Сам.
І тоді це буде повернутися до вас ще 3
на 3 матриці показу продукт, який ви хотіли.
>> І так, щоб було матриця.
Ось те, що називається кадр даних.
Кадр даних ви можете думати про якість матриця, а сама кожен стовпець
буде іншого типу.
>> Так що дійсно здорово про дані кадри, що в аналізі даних самого,
Ви будете мати все це гетерогенні дані і все це насправді
брудні речі, де кожна з колон самі по собі можуть бути різних типів.
Так от я і кажу створити кадр даних, зробити цілими від 1 до 3,
а потім також векторний характер.
Так що я можу індекс через кожен з цих колонок
і тоді я отримаю самі значення.
І ви також можете зробити якийсь операцій з фреймів даних.
І більшу частину часу, коли ви робити аналіз даних або якийсь
попередньої обробки, ви будете працювати з цими структурами даних
де кожен стовпець щоб бути іншого типу.
>> Нарешті, так що це в основному тільки чотири основні об'єкти до Списку Р.
буде просто збирати будь інші об'єкти, які ви хочете.
Так він буде зберігати це в одному змінна, яку можна легко отримати доступ.
>> Так от, я беру список.
Я кажу речі дорівнює 3.
Так що я буду мати один елемент у Список, і це називається матеріал,
і це буде мати значення 3.
>> Я можу також створити матрицю.
Так що це від 1 до 4 і кінцевого поспіль дорівнює 2, так що матриця 2 × 2.
Крім того, в списку, і це називається мат.
moreStuff, рядок символів, і навіть один список сам по собі.
>> Так що це список, це 5 і ведмедя.
Так що має значення 5 і його має символьного рядка ведмедя
і це список всередині списку.
Таким чином, ви можете мати це рекурсивні речей, де
у вас є another-- А введіть в межах типу.
Отже, подібним чином, ви можете мати матрицю в іншій матриці і так далі.
І список просто хороший спосіб збору та агрегування
всі ці різні об'єкти.
>> І, нарешті, тут просто допоможе у випадку Це було якраз перейшли дуже швидко.
Так в будь-який час ви заплуталися про якусь функції,
Ви можете зробити допомогу цієї функції.
Таким чином, ви можете зробити довідкову матрицю або знак питання матриця.
І допомога і знак питання є тільки обраховувати за те ж саме
так що вони псевдоніми.
>> ЛМ функція, яка просто робить лінійна модель.
Але якщо ви просто поняття не маю, як це Роботи, ви можете просто зробити допомогу лм
і це дасть вам деякі Сортувати документації, яка
виглядає ніби як Людина сторінки в Unix, де
у вас є короткий опис того, що він робить, і те, що її аргументи,
що це повертається, і всього порад про те, щоб використовувати його, і деякі приклади.
>> Отже, дозвольте мені йти вперед і шоу деякі демо за допомогою Р. OK.
Так що я пішов на дуже швидко тільки дані
структури і якийсь op-- деякі операції.
Ось деякі функції.
>> Так от я просто хочу, визначити функцію.
Так я також використовую Оператор присвоювання тут,
і тоді я говорю, оголосити його як функцію.
І він приймає значення х.
Так що це якесь значення ви хочете і я збираюся повернутися х сам по собі.
Так що це функція тотожності.
>> І те, що це круто про це в порівнянні з іншими мовами
а інший з низьким рівнем мов полягає в тому х
може бути самою різних типів і вона поверне цей тип.
Таким чином, ви можете imagine-- так що давайте мені просто запустити це швидко.
Вибачте.
>> Таким чином, одна річ, яку я повинен також згадати, є те, що цей редактор я використовую
називається RStudio.
Це те, що називається IDE.
І одна річ, яка дуже приємно про це
є те, що вона включає в себе безліч речі, які ви хочете зробити в R само по собі
просто дуже інтуїтивно.
>> Так ось пульт перекладача.
Отже, подібним чином, ви також можете отримати це Консоль сировини просто робити великої літери
І це саме те, Те ж саме, як консоль.
Так що я можу робити документа функція х, х, х.
І then--, а потім, що буде прекрасно себе.
>> Так RStudio великий тому що вона має консоль.
Вона також має документи Ви хотіли б працювати на.
І тоді вона має деякі змінні що ви можете побачити в навколишньому середовищі.
І потім, якщо у вас є зробити ділянки, то вам
можна просто бачити його тут, на відміну від управління всі ці різні вікна
самі по собі.
>> Я насправді особисто використовую Vim, але я відчуваю, що RStudio відмінно просто
для отримання хорошою ідеєю про те, як використовувати R. Зазвичай
коли ви намагаєтеся дізнатися деякі нові завдання,
Ви не хочете обробляти занадто багато речей відразу.
Так R просто very-- RStudio це дуже хороший спосіб навчання R
без необхідності мати справу з всі ці інші речі.
>> Так от я біжу ID Hello.
Це повертає привіт.
ID 123.
Ось вектор цілих чисел.
Отже, подібним чином, тому що ви можете приймати будь-які якусь цінність,
Ви можете зробити повернення ідентифікатор х, так що повертається 1234 і 5.
>> І дозвольте мені показати вам, що це дійсно ціле число.
І точно так само, якщо ви клас ID х, це буде ціле число.
І потім, ви також можете порівняти два і це правда.
Так я перевіряю, якщо ідентифікатор X дорівнює дорівнює х і повідомлення
що вона дає вам два істини.
Так що це не говорить, є два об'єкти ідентичні,
але кожен з записів в вектори збігаються.
>> Ось bounded.compare.
Так що це трохи складніше тим, що він має, і якщо умова ще
а потім він приймає два Аргументи в той час.
Так х будь-якого типу.
І я кажу це Другий аргумент.
Це може бути що завгодно, як добре.
Але за умовчанням, це займе 5, якщо ви не вкажете що-небудь.
>> Так от я хочу сказати, якщо х більше.
Так що, якщо я не вказую, його говорить, що якщо х більше, ніж 5,
потім я збираюся повернутися TRUE.
ще, я збираюся повернутися FALSE.
Отже, дозвольте мені йти вперед і визначити це.
>> А тепер я збираюся запустити bounded.compare 3.
Так він говорить в 3 менше, than-- 3 більше, ніж 5.
Ні, це не так FALSE.
>> І bounded.compare 3, і я збираюся порівняти його з допомогою дорівнює 2.
Так що тепер я кажу так, тепер я хочу, щоб щось інше.
Так що я збираюся сказати, ви повинні бути 2.
>> Я можу або робити такого роду позначення або я кажу дорівнює 2.
Це більш читабельним в тому, що, коли ви
Дивлячись на ці дійсно складні функції, які
взяти кілька arguments-- і це може бути десятки oftentimes-- просто кажу,
дорівнює 2 є більш читабельним для Ви, щоб потім в майбутньому
Ви будете знати, що ви робите.
>> Таким чином, в цьому випадку, я приказка 3 більше, ніж 2.
Та це так.
І точно так само, я можу просто видалити це і говорять, 3 більше, ніж 2
де дорівнює 2.
І це теж правда.
Так?
>> АУДИТОРІЯ: Ви виконання построчно?
>> DUSTIN TRAN: Так, я.
Так, що я роблю тут сприймає текст document--
і те, що є великим про RStudio в тому, що Я можу просто запустити short-- ключову ярлик.
Так що я роблю Control-Enter.
>> І потім, я везу рядок у текстовому документі
а потім покласти в консолі.
Так от я й кажу, bounded.compare і я роблю Control-X.
Так що я можу просто запустити тут.
І тоді візьму лінії, а потім помістити його тут.
А потім так само, я можу біжать тут.
І тоді це буде просто тримати визначення лінії в консолі, як, що.
>> І якщо ви також помітите, кучеряве брекети там так само, як в синтаксисі C.
x-- якщо якщо умова також збираєтеся використовувати дужки, а потім
Ви можете використати в іншому місці.
Ще один ще, якщо.
Так що це буде х дорівнює дорівнює, наприклад.
А потім я збираюся повернути щось тут.
>> Зверніть увагу, що є два різних речі, які тут відбувається.
По-перше, тут я з зазначенням повернутися значення ІСТИНА.
Тут я просто кажу х.
Так R буде зазвичай за замовчуванням взяти останній arguments--
або взяти останній рядок коду, і це буде те, що він повернувся.
Так от, це ж річ, як робити зворотний х.
>> І просто щоб показати вам.
І потім, він буде працювати саме так.
Отже, дозвольте мені продовжити з цим.
>> Так ще, якщо.
І справді, я можу повернутися все, що я хотів би.
Так що я навіть не доведеться Зворотні Логічні весь час,
Я можу просто повернути щось інше.
Так що я можу зробити зворотний ведмедя.
>> Так що, якщо х дорівнює одно, це збирається повернутися ведмедя.
В іншому випадку, це буде повернути TRUE.
Я також можу зробити вектор або дійсно що-небудь.
>> І звичайно в статично типізованих мовах,
ви повинні вказати тип тут.
І зауважте, що це може бути просто що-небудь.
І R досить розумний, що він просто це зробити, і вона буде прекрасно працювати.
>> Отже, дозвольте мені визначити це.
Unexpected-- ех шкода.
Вона повинна бути фігурна дужка тут.
ОК.
Круто.
Добре.
Так що тепер давайте порівняємо 3 і дорівнює 3.
Так воно і повинно return-- yeah-- значення ведмедя.
>> Так що тепер більш загальний Справа в тому, як як щодо інших структур даних.
Так що ви повинні цю функцію.
Це буде працювати на будь-якої вартості, як 3 або будь-яку цифрову,
Іншими словами, в два рази.
>> Але те, що про щось, як вектора.
Так що ж відбувається, якщо ви do-- тому я збирається призначити Вал, скажімо, від 4 до 6.
Так що, якщо я повернуся це, це є вектором з 4, 5, 6.
>> Тепер давайте подивимося, що відбувається якщо я bounded.compare Вал.
Так що це буде давати вам 15 1251.
Отже, іншими словами, це говорить якщо ви подивитеся на цього умови
так він говорить х менше ніж або чогось.
Так що це трохи в оману, оскільки в даний час
ви просто не знаєте, що відбувається.
Так що я думаю, одна річ, яка дійсно добре про просто намагаюся налагоджувати
є те, що ви можете просто зробити Val більше чим і подивитися, що там відбувається.
>> Так val-- за замовчуванням 5 так давайте просто Валь більше, ніж 5.
Так що це вектор БРЕХНЯ БРЕХНЯ ІСТИНА.
Так що тепер, коли ви дивитеся на це, скаже, якщо,
а потім він збирається дати вам це є вектор помилкових помилкових TRUE.
>> Тому, коли ви проходите це в R, R не має ні найменшого уявлення, що ви робите.
Тому що він очікує один сингл значення, яке є логічним, а тепер
Ви даєте йому вектор логічних значень.
Тому за замовчуванням R просто хочу сказати, що, чорт візьми,
Я буду вважати, що ви збирається взяти перший елемент тут.
Так що я збираюся say-- я збираюся припустити, що це невірно.
Так що збирається сказати Ні, це не правильно.
>> Крім того, він збирається бути Val дорівнює дорівнює.
Ні, вибачте 5.
І це також буде хибним, а також.
Так що скаже ні, Це не правда, а тому
збирається повернути цю останню.
>> Так це чи добре чи погано що, залежно від того, як ви його перегляду.
Тому що, коли ви створення цих функцій,
Ви насправді не знаю, що відбувається.
Так що іноді ви хотіли б помилку, або, може бути, ви просто хочете попередження.
У цьому випадку, R не робити.
Так що це дійсно до Ви засновані від того, що
Ви думаєте, що мову повинен робити в цьому випадку
якщо ви проходите у векторі Booleans коли ви робите, якщо умови.
>> Отже, давайте говорити, що у вас оригінал один з тим, якщо ще повертає істину, і ви
збирається повернутися FALSE.
Так один із способів абстрагування це сказати, що я
навіть не потрібно цю умовну річ.
Інша справа, що я можу зробити, це просто повернення самі значення.
Так що, якщо ви помітили, якщо ви Do Val більше, ніж 5,
це збирається повернутися вектор БРЕХНЯ БРЕХНЯ ІСТИНА.
>> Може бути, це те, що ви хочу на bounded.compare.
Ви хочете, щоб повернутися вектор логічних значень, де він порівнює кожне з значень
до себе.
Таким чином, ви можете просто bounded.compare функція х, дорівнює 5.
І тоді замість того, щоб робити це, якщо ще умову,
Я просто хочу, щоб повернутися х більше 5.
Так що, якщо це правда, то це збирається повертатися TRUE.
І потім, якщо це не так, це збирається повернутися FALSE.
>> І це буде працювати для будь-який з цих структур.
Так що я можу bounded.compare з 1 6 або 9 і тоді я буду говорити дорівнює 6,
наприклад.
І тоді це буде дати вам право Boolean
вектор, ви розробляєте.
>> Так що ті просто функції і тепер мені просто
показати вам деякі інтерактивні візуальні ефекти.
Я не думаю, що я насправді є Wi-Fi тут, так що дозвольте мені йти вперед
і пропустити цей я думаю.
>> Але одна річ, яка круто хоча те, що, якщо ви просто
хочете перевірити купу різні команди даних,
є купа різних наборів даних які вже попередньо завантажуються в R.
Таким чином, одна з них називається набір даних ірис.
Це одна з найбільш добре відомих ті, у машинному навчанні.
Ви, як правило, тільки робити якісь тестів, щоб побачити, якщо ваш код працює.
Так що давайте просто перевірити, що райдужна оболонка.
>> Так що ця справа буде бути кадр даних.
І це свого роду довго, тому що Я просто роздрукувати діафрагми.
Це роздрукувавши всю річ.
Так що є всі ці різні назви.
Так діафрагми колекція різних кольорів.
У цьому випадку, це говорить Ви вид з нього,
всі ці різної ширини і Довжини чашолистків і пелюсток.
>> І так нормально, якщо Ви хочете, щоб роздрукувати діафрагми,
Наприклад, ви не хочете, щоб він робити все це, тому що це може взяти на себе
Вся ваша консоль.
Таким чином, одна річ, яка дійсно приємно, функція глава.
Так що, якщо ви просто робите голову ірис, це дасть вам
Перші п'ять рядків, або шість років, я думаю.
І тоді добре, ви можна просто вказати тут.
Так 20-- це дасть Ви перші 20 рядків.
І я насправді був добрий здивований, що це
дав мені шість, тому дозвольте мені йти вперед і перевірте iris-- або голову, вибачте.
І ось він дасть Ви документація
що значення глава робить.
Так вона повертає перший або останній з об'єкта.
А потім я збираюся подивитися на значення за замовчуванням.
І тоді він каже за замовчуванням Метод глава х і н дорівнює 6L.
Так що це повертає перші шість елементів.
І точно так само, якщо ви помітили тут, я не потрібно вказувати N дорівнює 6.
За замовчуванням він використовує шість, я думаю.
І потім, якщо я хочу, щоб вказати впевнений, значення, то я можу подивитися, що добре.
>> Так що кілька простих команд і ось ще один це просто-- добре,
Я can-- це насправді трохи складніше,
але це буде просто взяти клас кожного шпальти райдужної оболонки даних.
Так що це буде показати вам, що кожен з них колонки з точки зору їх типів.
Так чашелістнікі довжина цифровий, чашелістнікі ширина є числовий.
Всі ці значення є лише числовим тому що ви можете сказати з цими даними
структурувати ці всі збираємося числовий.
>> І колона Види буде фактором.
Так нормально, можна подумати, що це як рядок символів.
Але якщо ви просто робите irisSpecies, і тоді я буду робити голову 5,
і це буде роздрукувати з перших п'яти значень.
>> І зверніть увагу на те це рівні.
Так що це saying-- це спосіб R в того, категоріальні змінні.
Таким чином, замість того, щоб просто маючи символьних рядків,
вона має Налаштування рівнів які з цих речей.
>> Отже, давайте говорити irisSpecies 1.
Так що ви хочете зробити тут я підмножини в цій колонці видів.
Так це відбувається Колонка виду і потім
він індексує, щоб отримати перший елемент.
Так що це повинно дати вам setosa.
І це також дає вам рівень тут.
>> Таким чином, ви можете також порівняти це до setosa символів
і це не буде правда, тому що один
це іншого типу, ніж інші.
Або я припускаю, що це правда, тому що R розумніші, ніж це.
І він дивиться на це, а потім каже, може бути, це те, що ви хочете.
Так що скаже характер Рядок setosa є такою ж, як цей.
А потім так само, ви можете також просто захопити ці як так далі.
>> Так що це просто якесь швидких команд, набору даних.
Так ось деякі дослідження даних.
Так що це трохи більше, бере участь в аналізі даних.
І це береться з деяких Bootcamp в R для в Берклі.
>> Так бібліотека іноземної.
Так що я збираюся завантажити в бібліотека, яка називається зовнішньої.
Так що це дасть мені read.dta тому припустимо, що у мене є цей набір даних.
Це зберігається в даний час Робочий каталог моєї консолі.
Отже, давайте подивимося, що робочий каталог.
>> Отже, ось мій робочий каталог.
І читати точкові дані, це річ, каже цей файл
знаходиться в папці даних це поточний робочий каталог.
І read.dta це не Команда за замовчуванням.
Я припускаю, що я завантажив його у вже.
IEI припустив, що я навантажена в уже.
>> Але так read.dta не збирається бути команда за замовчуванням.
І ось чому ви будете мати для завантаження в цій бібліотеці package--
Цей пакет називається зовнішньої.
І якщо у вас немає Пакет, я думаю,
зовнішня є одним з вбудованих в них.
В іншому випадку, ви можете також зробити install.packages
і це буде встановити пакет.
І це дасть вам Р. Е-е, ні.
А потім я просто хочу, щоб зупинити Це тому, що я вже є.
>> Але те, що дійсно добре про R є те, що управління пакетами
Система дуже елегантно.
Тому що це буде зберігати всі дійсно добре для вас.
Таким чином, в цьому випадку, це буде для зберігання це, я вважаю, ця бібліотека тут.
>> Так в будь-який час ви хочете встановити нові пакети,
це так само просто, як робити install.packages
і R обійдеться всього пакети для вас.
Таким чином, ви не повинні робити щось в Python, де у вас є зовнішній пакет
менеджери як папір Anaconda, де ви
doing-- установки пакети поза Python
а потім спробуйте запустити їх самостійно.
Так що це дійсно хороший спосіб.
>> І install.packages потрібен доступ в Інтернет.
Вона приймає від сервера і сховище, в якому
збирає всі пакети, називається КРАН.
І ви можете визначити, який вид дзеркала Ви хочете, щоб завантажити пакети.
>> Так от, я беру цей набір даних.
Я читаю його за допомогою цієї функції.
Отже, дозвольте мені йти вперед і робити це.
>> Отже, давайте припустимо, що у вас є цей набір даних
і у вас є абсолютно Не знаю, що це таке.
І це насправді відбувається до досить часто в промисловості
де ви просто повинні це тонни і тонни брудної речі
і вони неймовірно немічених.
Так от у мене є це набір даних, і я не знаю,
що це таке, так що я просто показуючи, щоб перевірити його.
>> Так що я збираюся зробити з головою.
Так що я перевірити перші шість колони, що це набір даних.
Так що це держава, pres04, а потім Всі ці різні роду стовпців.
І що цікаво, тут, я думаю, є те, що вам
було б припустити, що це виглядає як свого роду виборів.
І я думаю, тільки з дивлячись на файл
назвати це якийсь колекції даних про кандидатів або виборців
хто голосував за конкретних президентів або президента кандидати
для обрання в 2004 році.
>> Так от значення 1, 2 так один спосіб зберігання
кандидати президент їхні імена.
У цьому випадку, схоже, вони просто цілі значення.
Так 2004 році він був Буш в порівнянні з Керрі я вірю.
А тепер, припустимо, що ви просто не знаєте, Чи 1 відповідає Буша або 2
відповідає Керрі або й так далі, і так далі, чи не так?
>> І це, тільки мені, досить поширена проблема.
Так що ви можете робити в цьому випадку?
Так давайте перевіримо всі ці інші речі.
>> стан, я припускаю, що це приходить з різних держав.
partyid, дохід.
Давайте подивимося на partyid.
Так, може бути, одна річ, ви можете зробити це розглянемо кожен з спостережень
які мають partyid республіканського або демократ або щось.
Так що давайте просто подивимося на те, що partyid є.
>> Так що я збираюся взяти DAT, а потім я йду
зробити це знак долара оператор, що я зробив раніше
і це буде підмножина в цьому стовпці.
А потім я збираюся очолити це 20, просто щоб подивитися, як це виглядає.
>> Так що це просто купа NAS.
Отже, іншими словами, у вас є відсутні дані про ці хлопців.
Але ви також помітите, це DAT partyid є фактором
так що це дає вам різні категорії.
Отже, іншими словами, partyid може зайняти Демократ, республіканець, незалежна,
або щось ще.
>> Так що давайте йти вперед і давайте дізнатися, які з них is-- О, добре.
Так що я збираюся підмножини в partyid, а потім
подивитися на ті, які є Демократ, наприклад.
Це буде давати вам логічний, Величезний Boolean істин і FALSEs.
>> А тепер, давайте говорити, що я хочу подмножеству з цими хлопцями.
Так що це збираюся прийняти мої DAT і підмножина до якого б спостереження
є partyid рівних одно демократ.
І це досить довго, тому що є так багато з них.
Так що тепер, я збираюся очолити це в 20.
>> І, як ви помітили, приймається рівним рівних Цікаво, що ви
already-- ви також включає NAS.
Таким чином, в цьому випадку, ви все одно не можете отримати будь-яка інформація, тому що тепер у вас є NAS
і ви просто хочете, щоб побачити, які з спостереження відповідають демократ
а не ці відсутні себе цінує.
Так як же позбутися від цих ВПЛ?
>> Так от я тільки за допомогою клавішу вгору на моєму курсора, а потім кажуть пересуватися.
А потім ось я просто хочу, сказати is.na datpartyid.
Так це і та буде приймати два різних булеві вектори
і сказати, що це буде ІСТИНА і НЕПРАВДА наприклад.
Так що буде робити цей компонент Мудрий.
Так от я і кажу взяття кадр даних, підмножини
на ті, які відповідають демократ, і видалити будь-який з них, які не є NA.
>> Так що це will-- повинні дати вам щось.
Давайте подивимося, is.na.
Давайте спробуємо is.na datpartyid.
І це повинно дати you-- sorry-- тільки логічне вектор.
І потім, тому що це так довго, Я збираюся підмножина до 20.
ОК.
Так що це має працювати.
>> І на цей раз також буде істин.
Ах, так моя помилка в тому, що I'm-- Я використовувати C ++ і R взаємозамінні, так що я зробити
ця помилка весь час.
І оператор насправді той, який ви хочете.
Ви ж не хочете, щоб використовувати два амперсанди, просто один.
ОК.
>> Отже, давайте подивимося.
Таким чином, ми subsetted в partyid, де вони демократ
і вони не вистачає значень.
А тепер давайте подивимося на які вони голосували.
Так що, схоже, як і більшість з них проголосували за 1.
Так що я збираюся йти вперед і сказати, що Керрі.
>> І точно так само, ви можете також піти в Республіканський
і, сподіваюся, це повинно дати вам 2.
Це просто купа різних колонках.
І справді, це два.
Так partyid всіх республіканських, більшість з них голосують за 2.
>> Так що схоже, просто дивлячись на це,
Республіканський буде very-- або partyid
буде дуже важливим фактором у визначенні
який кандидат вони збирається голосувати.
І це, очевидно, вірно в цілому.
І це відповідає вашому інтуїція, звичайно.
Так що, схоже, як ніби я не вистачає часу, щоб
дозвольте мені йти вперед і показати кілька швидких знімків.
Так от те, що це трохи Чим складніше з візуалізацією.
Таким чином, в цьому випадку, це дуже Простий аналіз просто перевірка, що
Президент '04 є.
>> Таким чином, в цьому випадку, припустимо, що ви хотів відповісти на це питання.
Тому припустимо, що ми хотіли знати голосування поведінку в 2004 виборів президента
і як це залежить від раси.
Так що не тільки ви хочете подивитися поведінку голосування,
але ви хочете, щоб підмножина друг раси і роду резюмувати, що.
І можна тільки сказати, цієї комплексної записи
що це свого роду отримання туманними.
>> Отже, один з більш просунутих R пакети, які також вид недавнє
називається dplyr.
Так що це прямо тут.
І ggg-- ggplot2 просто приємно спосіб зробити краще візуалізації
ніж вбудована в одному.
>> Так що я збираюся завантажити Ці дві бібліотеки.
І потім, я збираюся піти вперед і виконайте наступну команду.
Ви можете розглядати це як чорний ящик.
>> Що відбувається, що цю трубу Оператор проходить у цій суперечці
в тут.
Так що я кажу, групу, DAT Гонка, а потім президентом 04.
І потім, всі ці інші команди фільтруються, а потім підведення підсумків
де я роблю лічильник і то я в змові його тут.
ОК здорово.
Так що давайте йти вперед і см, як це виглядає.
>> Так, що тут відбувається, що я просто нанесені кожної з рас, а потім
які вони голосували.
І ці два різних значення відповідають 2 і 1.
Якщо ви хочете бути більш елегантний, ви також можете
просто вказати, що 2 Kerry-- або 2 Буш, а потім 1 Керрі.
І ви також можете мати що в свою легенду.
>> І ви також можете розділити ці гістограми.
Тому що одна справа що, якщо ви помітили,
це не дуже легко визначити який з цих двох значень більше.
Таким чином, одна річ, яку ви хотіли б зробити, це прийняти цю синю область
і просто перемістити його сюди, щоб ви Можна порівняти ці два пліч-о-пліч.
І я думаю, що це те, що я не було часу, щоб зробити прямо зараз,
але це також дуже легко зробити.
Ви можете просто подивитися в в людино сторінки ggplot.
Таким чином, ви можете просто ggplot як що і читати в цьому довідкової сторінці.
>> Так дозвольте мені швидко показати вам деякі цікаві речі.
Давайте йти вперед і йти to-- тільки Застосування машинного навчання.
Так що давайте, у нас є ці три пакети, так що я збираюся завантажити їх в.
Так що це просто виводить деякі Інформація після того як я завантажений в речі.
Так що я кажу це read.csv, Цей набір даних, і тепер
Я збираюся йти вперед і дивитися і подивитися, що всередині цього набору даних.
>> Таким чином, перші 20 спостережень.
Так що я просто X1, X2, і Y. Таким чином, Схоже, купою цих значень
які, можливо, в межах від 20 до 80 або близько того.
А потім так само для X2, а потім Цей Y мабуть, етикетки 0 і 1.
>> Щоб переконатися в цьому, я можу просто робити зведені дані X1.
А потім так само для всі ці інші стовпці.
Так короткий виклад швидкий спосіб просто показуючи вам швидко значення.
Ех, шкода.
Це треба бути Y.
>> Таким чином, в цьому випадку, дає квантилі, медіана, вичерпаний, а також.
У цьому випадку, dataY, ви можете побачити що це просто буде 0 і 1.
Також середня говорить 0,6, означає лише те, що воно
Схоже, у мене є ще 1с, ніж 0s.
>> Отже, дозвольте мені йти вперед і шоу Ви, як це виглядає.
Так що я просто хочу, щоб побудувати це.
Давайте подивимося, як очистити цей.
Про OK.
ОК.
>> Так що це, як він виглядає.
Так що схоже жовтих Я зазначених 0, а потім червоний я вказав у вигляді 1.
Так от, схоже, точки міток і це
Схоже, ви просто хотіли деякі Сортувати кластеризації з цього питання.
>> І дозвольте мені просто йти вперед і шоу вам деякі з цих вбудованих функцій.
Так ось лм.
Так що це просто намагається щоб відповідати рядок до цього.
Так що кращий спосіб що я можу відповідати лінії таких
що він буде краще розділити Цей вид кластеризації.
А в ідеалі, ви можете просто подивитися що я просто запустити всі ці команди
а потім, я збираюся вперед і додайте рядок.
>> Так це здається найбільш ймовірне припущення.
Це займає найкраще, що зводить до мінімуму Помилка при спробі, щоб відповідати цій лінії.
Очевидно, що це виглядає начебто добре, але це не найкраще.
І лінійні моделі, в взагалі, буде
дійсно відмінно підходить для теорії, так і тільки вид будівельних основ машини
навчання.
Але на практиці, ви збираєтеся хочу зробити щось більш загальне.
>> Таким чином, ви можете просто спробувати запустити те, що називається нейронної мережі.
Ці речі більшого поширення.
І вони просто працюють фантастично для великих наборів даних.
Таким чином, в цьому випадку, ми тільки have-- давайте see-- у нас є nrow.
Так nrow просто говорю число рядків.
Таким чином, в цьому випадку, я є 100 спостережень.
>> Отже, дозвольте мені йти вперед і зробити нейронну мережу.
Так що це дуже приємно тому що я можу тільки сказати, Nnet
а потім я регрес Y. Так Y є те, що колонка.
А потім регрес його на дві інші змінні.
Так що це коротше Позначення X1 і X2.
>> Так що давайте йти вперед і запуску цього.
Ех, шкода.
Мені потрібно, щоб запустити всю цю справу.
І це тільки друк позначення про те, як швидко чи нешвидко вона
сходилися.
Так це виглядає, як це було сходяться.
Отже, дозвольте мені йти вперед і друку , Що це виглядає.
>> См ось картина й тут Контур показує, наскільки добре вона підходить.
І це просто-- ви можете побачити це, що це дуже, дуже приємно.
Це може бути навіть перенавчання, але ви також можете
доводиться це з іншими такі методи, як крос-перевірки.
І це також вбудовані в R.
>> І дозвольте мені показати вам, Машина опорних векторів.
Це ще один дуже поширений Техніка в машинному навчанні.
Це дуже схоже на лінійних моделей, а він використовує те, що називається метод ядра.
І давайте подивимося, як добре, що робить.
Таким чином, це одна дуже схожа на те а Нейронні мережі виконує,
але це набагато більш гладкою.
І це базується з подав що хау SVMs роботу.
>> Так що це просто дуже короткий огляд деяких
з вбудованих функцій ви можете зробити а також деякі з дослідження даних.
Отже, дозвольте мені просто йти вперед і повернутися до слайдів.
>> Так очевидно, що це не надто всеосяжний характер.
І це насправді просто тизер показуючи вам, що ви дійсно можете зробити в R.
Так що якщо ви просто хотів щоб дізнатися більше, тут
купа різних ресурсів.
>> Так що якщо ви любите підручників або ви просто люблю читати речі в Інтернеті,
то це фантастичний один Хедлі Уікхемом,
який також створив все це дійсно здорово пакети.
Якщо ви любите відео, то Berkeley має відмінну буткемп
це several-- це якісь довгі.
І він буде вчити вас майже все, що ви хотіли б знати про R.
>> І точно так само, є Codeacademy і все це іншого роду
інтерактивних веб-сайтів.
Вони також отримують common-- більш і більш поширеним.
Таким чином, це дуже схоже на Codeacademy.
І, нарешті, якщо ви просто хочете співтовариства і допомогти,
це купа речі, які ви можете піти.
Очевидно, що ми досі використовувати поштові розсилки, просто
як і майже всі інші мова програмування спільноти.
І #rstats, це Наше співтовариство Twitter.
Це насправді досить поширеним явищем.
І тоді користувач!
Це просто наша конференція.
>> І тоді, звичайно, ви можете використовувати всі ці інші Q & A речі,
як переповнення стека, Google, а потім GitHub.
Оскільки більшість з цих пакетів і багато спільноти
буде зосереджена навколо розробки Код, бо це з відкритим вихідним кодом.
І це дуже-дуже хороший на GitHub.
І, нарешті, ви можете зв'язатися зі мною, якщо ви просто є які-небудь простих питань.
Таким чином, ви можете знайти мене на Twitter тут, мій сайт, і тільки мою адресу електронної пошти.
Так, ми сподіваємося, що було something-- тільки короткий тизер
чого R дійсно здатний.
І ми сподіваємося, Ви просто перевірити ці три посилання
і подивитися, що можна зробити ще більше.
І я думаю, що це якраз про це.
Спасибо.
>> [Оплески]