Відео

Як працювати з відкритими даними Верховної Ради України в середовищі R

Громадянська мережа ОПОРА в рамках реалізації проекту “Портал відкритих даних ВРУ” за підтримки Програми розвитку ООН розробила відео-урок про роботу з відкритими парламентськими даними в середовищі R. Аналітик Павло Миронов в доступній формі розповів, яким чином завдяки відкритим даним парламентського порталу відкритих даних opendata.rada.gov.ua дізнатись, в яких комітетах законопроекти затримуються найдовше та яка фракція успішніше просуває розроблені її депутатами законопроекти.

Урок розраховано на тих, хто вже має уявлення про відкриті парламентські дані на порталі Верховної Ради, і хто вже може працював із даними в Excel, проте ще не знає про R і не працював із цією мовою.

По завершенню уроку нас очікує відповідь на дослідницькі питання:

  1. В якому комітеті законопроекти затримуються найбільше?
  2. Яка фракція найкраще просуває свої законопроекти?

Отже, що таке 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 найпопулярніших статусів законопроектів.

Бачимо, що статус “Опрацьовується в комітеті” є другим за популярністю.

Для того, аби відповісти на питання, в якому саме комітеті затримують законопроекти, потрібно:

  1. Завантажити дані про розподіл законопроектів за комітетами.
  2. Об'єднати цю таблицю із таблицею зі статусами законопроектів.
  3. Порахувати для кожного комітету відсоток законопроектів із статусом "Опрацьовується в комітеті".

Тут можна знайти скрипт, який виконує всі ці кроки. Відповідь станом на кінець липня — законопроекти найбільше затримуються у Комітеті з питань податкової та митної політики.

Якщо ж поставити питання, яка з фракцій найкраще просуває свої проекти законів, то треба зробити такі кроки:

  1. Завантажити дані про депутатів-ініціаторів законопроетів та про належність депутатів до фракцій.
  2. Об'єднати ці таблиці із таблицею зі статусами законопроектів.
  3. 3. Порахувати для кожної фракції відсоток законопроектів із статусом "Закон підписано".

Тут відповідний скрипт. Відповідь на кінець липня — найбільший відсоток доведення своїх проектів закону до статусу законів — у фракції Радикальної партії Олега Ляшка.

Автор відеоуроку — Павло Миронов.

Монтаж відео — Антон Кушнір.

Презентація — тут.

Скрипт до першого дослідницького питання.

Скрипт до другого дослідницького питання.

Звідси було взято кольорову шкалу, зручну для розуміння навіть людьми, що не розрізняють кольорів.