Skip to content

Latest commit

 

History

History
69 lines (52 loc) · 7.67 KB

assignment_3.md

File metadata and controls

69 lines (52 loc) · 7.67 KB
Практична робота №3

Робота з текстовими даними

Мета роботи:

На практиці спробувати використати Python для обробки текстових даних, навчитись працювати з файлами.

Загальний опис

В інтернеті існує достатньо багато джерел, де можна знайти підготовлені для аналізу набори даних ("датасети", datasets). В цій роботі ми будемо працювати зі справжньою базою даних олімпійських атлетів за останні 120 років з сайту Kaggle. Дані скачані з сайту та лежать в цьому репозиторії, готові для обробки. Крім того, я імпортував дані в гуглдок

Дані знаходяться у форматі .csv - це один з найпростіших форматів для даних. Його суть описана в назві - CSV - comma separated values - "значення розділені комою". Фактично, ви можете відкрити такий файл будь-яким текстовим редактором та побачите напступне:

CSV

В першому рядку вказані назви стовбчиків, а в наступних - значення. Зауважу, що не дивлячись на назву у .csv можуть бути і інші розідльники, не тільки кома

Завдання

Як і в минулих роботах, завдання має різні рівні складності. Але, в цій роботі рівні слід виконувати послідовно, тобто найбільш повна програма матиме всередині себе всі три рівні

1 рівень. Напишіть програму, що приймає наступні аргументи командного рядка:

  1. Адреса файлу з даними;
  2. Завжди -medals
  3. Країна (назва може вводитись як за повною назвою, так і за кодом)
  4. Рік проведення Олімпіади
  5. (Опціонально) -output
  6. (Опціонально) файл для виведення результатів

Наприклад, olympics.py data.csv -medals USA 1996, або olympics.py data.csv -medals AUT 1976 -output result.txt

Програма має обробити наданий файл та вивести в стовбчик перші десять медалістів з цієї країни на заданій олімпіади (у форматі "ім'я - дисципліна - тип медалі"), а під цим - сумарну кількість медалей за типом (золоті, срібні та бронзові) у цієї країни. Програма має коректно обробляти крайні випадки (у заданої країни менше 10 медалей, введена країна не існує або у введений рік не проводилась олімпіада). Якщо користувач ввів параметр -output, то результат має бути виведений не тільки на екран, а і у вказаний файл

2 рівень. Додайте до програми підтримку іншої команди - -total, за якою аргументом йде рік. Наприклад, olympics.py data.csv -total 1972. Після цього програма має вивести на екран дані про всі країни, що здобули на цій олімпіаді хоча б одну медаль у форматі "країна - золото - срібло - бронза"

3 рівень. Додайте до програми підтримку іншої команди - -overall, за яким йде довільна кількість країн. Наприклад, olympics.py data.csv -overall Ukraine Ireland Canada. Програма має вивести на екран для кожної з введених країн рік в якій вона здобула найбільшу кількість медалей та це число

Як виконувати

  1. Повторіть, якщо не пам'ятаєте, string slicing, це може спростити життя в даній роботі
  2. На лекції ми розглядали наступний формат зчитування даних з файлу:
file = open(path, 'r')
lines = file.readlines()

Проте, цей формат може бути повільним та не зручним для роботи з великими файлами. Наприклад, наш набір даних містить 41Мб (інші набори можуть містити сотні Мб або Гб), і зчитувати всі 40 мільйонів символів у масив перед початком роботи не раціонально. Замість цього, можна у циклі використовувати метод file.readline(), який буде повертати щоразу наступний рядок з файла, поки файл не закінчиться, після чого буде повернуто порожній рядок

next_line = file.readline()
while next_line:
    # do stuff with line
    next_line = file.readline()
  1. В цій роботі, особливо на етапах починаючи з другого, вам може знадобитись нова структура даних - словник (dictionary). Якщо список збергіає певну множину значень до якої можна доступатись за номером елемента, то словник зберігає множину пар "ключ-значення", коли за будь-яким ключем можна дістати віповідне значення. Приклад - телефонна книга.
phone_book = {
  "Ann": "095-150-23-34",
  "Bob": "063-456-12-43",
  "Charlie": "050-123-12-56"
}

Для того щоб дістати телефон Ann, достатньо викликати phone_book["Ann"]. Детальніше можна почитати тут або тут. У цій роботі ви можете використовувати словник для того щоб, наприклад, накопичувати медалі по країнам (словник країна -> кількість медалей)

Оцінювання

Максимальний бал - 5:

  • 1 бал - першій рівень
  • 1 бал - другий рівень
  • 1 бал - третій рівень
  • 1 бал - відповіді на питання при здачі
  • 1 бал - виконання додаткового практичного завдання при здачі