Новини
Як працювати з відкритими даними Верховної Ради України в середовищі R
Громадянська мережа ОПОРА в рамках реалізації проекту “Портал відкритих даних ВРУ” за підтримки Програми розвитку ООН розробила відео-урок про роботу з відкритими парламентськими даними в середовищі R. Аналітик Павло Миронов в доступній формі розповів, яким чином завдяки відкритим даним парламентського порталу відкритих даних opendata.rada.gov.ua дізнатись, в яких комітетах законопроекти затримуються найдовше та яка фракція успішніше просуває розроблені її депутатами законопроекти.
Урок розраховано на тих, хто вже має уявлення про відкриті парламентські дані на порталі Верховної Ради, і хто вже може працював із даними в Excel, проте ще не знає про R і не працював із цією мовою.
По завершенню уроку нас очікує відповідь на дослідницькі питання:
- В якому комітеті законопроекти затримуються найбільше?
- Яка фракція найкраще просуває свої законопроекти?
Отже, що таке R?
R - мова програмування та програмне середовище для роботи із даними.
Безкоштовна, з відкритим кодом, з можливістю дописувати додаткові пакети. Існують версії для усіх поширених операційних систем, їх можна вільно завантажити.
RStudio - зручне середовище для роботи із мовою R та назва одноіменної компанії-розробника. Працювати у RStudio зручно, бо в одній програмі можна виконувати окремі команди, редагувати скрипти, дивитися довідки по функціям, відображати та експортувати графіки тощо.
Якщо сам по собі R — це лише сірий екран та командний рядок, то RStudio — значно приємніше для роботи середовище. Тому я дуже раджу, після того, як ви звантажити R завантажити ще й Rstudio.
Базовий об'єкт R — це вектор. Послідовність змінних одного типу (числа, символи, дати тощо). Те, що в інших мовах програмування назвали б одновимірним масивом.
Зазвичай вектор створюють функцією с(), яка приймає в якості аргументів перелік елементів вектора, або ж — для числових послідовностей — через двокрапку, із зазначенням першого і останнього елементу, наприклад, 7:17. До елементів векторів можна звертатися за їхніми номерами у квадратних дужках. Нумерація починається з одиниці.
Список — це послідовність векторів, які можуть бути векторами різної довжини та типу. Наприклад, список може складатися з двох елементів, перший з яких містить 5 чисел, а другий — 3 рядки.
Датафрейми — це напевно найбільш частовживаний об'єкт R. Це таблички, в якій кожний стовчик є вектором однакової довжини.
Для R написано багато різних бібліотек. В нашому уроці ми користуватимемося бібліотеками dplyr, ggplot2 та ggthemes. dplyr робить зручнішою роботу із датафреймами, ggplot2 — найпопулярніша бібліотека для візуалізації, а ggthemes — теми для неї. Для того, аби встановити бібліотеку, потрібно виконати команду install.packages(“<назва біблітеки>”), а для того, аби завантажити її функції в оперативну пам'ять — команду library(<назва бібліотеки>). install.packages треба виконати один раз, library виконувати кожного разу перед початком роботи.
Аби завантажити файл з порталу відкритих даних, треба виконати команду download.file(“http://opendata.rada.gov.ua/sites/default/files/bills_bills_8_1.csv”, “bills.csv”), де “http://opendata.rada.gov.ua/sites/default/files/bills_bills_8_1.csv” - адреса файлу на порталі, а “bills.csv” - назва, з якою ми його зберігаємо на комп'ютері.
Завантажені .csv-файли треба читати за допомогою функції read.csv(), де першим і єдиним аргументом є назва файлу.
Перед початком роботи із датафреймом треба зрозуміти його основні характеристики та характер даних. В цьому можуть допомогти функції:
head(), tail() - показати відповідно початок та кінець датафрейму.
str() - показати його структуру
summary() - показати прості статистичні показники по кожному стовпчику
View(), або клік на датафрейм у правому верхньому куті — переглянути датафрейм у Rstudio
Якщо скористатися останньою командою, можна побачити, що дані про поточний статус законопроектів зберігається в датафреймі bills у стовпчику із заголовком currentPhase_title. За синтаксисом R, до стовпчику можна звертатися через знак $, тобто bills$currentPhase_title.
Для того, аби визначити, які стадії законопроектів найпопулярніше, неохідно виконати таку команду:
sort(table(bills$currentPhase_title), decreasing = TRUE)[1:10]
Розберемо її по частинах:
table(bills$currentPhase_title) — створити таблицю частоти кожного значення у стовпчику currentPhase_title.
sort(table(bills$currentPhase_title), decreasing = TRUE) — відсортувати створену табличку частотою значень за кількістю разів, яку кожне значення фігурує у стовпчику. decreasing = TRUE означає, що сортуємо ми за спаданням.
[1:10] означає, що ми показуємо перші десять значень відсортованої табчики, тобто 10 найпопулярніших статусів законопроектів.
Бачимо, що статус “Опрацьовується в комітеті” є другим за популярністю.
Для того, аби відповісти на питання, в якому саме комітеті затримують законопроекти, потрібно:
- Завантажити дані про розподіл законопроектів за комітетами.
- Об'єднати цю таблицю із таблицею зі статусами законопроектів.
- Порахувати для кожного комітету відсоток законопроектів із статусом "Опрацьовується в комітеті".
Тут можна знайти скрипт, який виконує всі ці кроки. Відповідь станом на кінець липня — законопроекти найбільше затримуються у Комітеті з питань податкової та митної політики.
Якщо ж поставити питання, яка з фракцій найкраще просуває свої проекти законів, то треба зробити такі кроки:
- Завантажити дані про депутатів-ініціаторів законопроетів та про належність депутатів до фракцій.
- Об'єднати ці таблиці із таблицею зі статусами законопроектів.
- 3. Порахувати для кожної фракції відсоток законопроектів із статусом "Закон підписано".
Тут відповідний скрипт. Відповідь на кінець липня — найбільший відсоток доведення своїх проектів закону до статусу законів — у фракції Радикальної партії Олега Ляшка.
Автор відеоуроку — Павло Миронов.
Монтаж відео — Антон Кушнір.
Презентація — тут.
Скрипт до першого дослідницького питання.
Скрипт до другого дослідницького питання.
Звідси було взято кольорову шкалу, зручну для розуміння навіть людьми, що не розрізняють кольорів.