Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4сем / tp_lab8_Zhovtyak

.docx
Скачиваний:
1
Добавлен:
27.08.2024
Размер:
290.74 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

доц., канд. техн. наук

А. В. Аграновский

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №8

РАБОТА С ДАННЫМ В ФОРМАТЕ CSV

по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

4016

Жовтяк М.О.

подпись, дата

инициалы, фамилия

Санкт-Петербург 2022

Вариант 15

Постановка задачи

Файл с данными – TertiaryEducation.csv. На рисунке 1 изображена часть данных этого файла.

Рисунок 1 – Файл по номеру задания

Способ отображения стран: A – Случайный выбор – страны выбираются случайным образом с использованием датчика случайных чисел.

Дополнительное задание: В – Разбиение всего временного интервала на десятилетия. Для каждого десятилетия находится k стран, имеющих самое большое значение показателя и p стран, имеющих самое низкое значение показателя (значения k и p – параметры).

Конечная цель программы: Выполнить импорт данных из csv файла, выполнить анализ этих данных и визуализировать их.

Дополнительные требования к программе не выявлены.

Математическая модель

Программа обрабатывает данные в формате csv, визуализирует избранные данные, затем по условию задачи записывает данные из основного файла в выходные csv-файлы.

В ходе задания использовались библиотеки matplotlib, pandas, numpy. Математические формулы при создании программы не использовались.

Описание разработанной программы

Первым делом, программа читает файл и преобразует данные из неё в DataFrame. После этого строится график уже со случайно выбранными странами и возраста оценивания (subject) с помощью вызова функции task_2. После этого вводятся переменные k и p, которые передаются в функцию task_3, откуда выводятся два типа файлов: файлы с именем десятилетия, где k стран с максимальным показателем; файлы с именем десятилетия, где p стран с минимальным показателем.

Таблица 1 демонстрирует список используемых переменных.

Таблица 1 - Описание переменных

Имя переменной

Тип переменной

Назначение переменной

Read_csv

TextFileReader

Хранение считанного файла

Data

Database

Хранение считываемого файла

Locations

List

Массив, хранящий уникальные страны

Number

Int

Случайное число стран

Final_country

List

Страны, выводимые на график

Subjects

List

Массив, хранящий уникальные диапазоны возрастов

Final_subject

Str

Диапазон возраста для графика

Min_count

Int

Кол-во стран для отображения с минимальным показателем

Max_count

Int

Кол-во стран для отображения с максимальным показателем

Описание алгоритма работы программы представлено в виде блок схемы на рисунке 2.

Рисунок 2 – Блок-схема алгоритма

Код программы:

import random

import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

# Ввод параметров k и p (по очереди)

def inputNumber():

while True:

number = input()

try:

int(number)

return int(number)

except ValueError:

print("Введенное значение не является числом")

# запись в cvs файлы

def task_3(data, k, p):

# Создание списка уникальных SUBJECTS

ages = data.SUBJECT.unique()

# Цикл по уникальным SUBJECTS

for age in ages:

temp_df = data[data["SUBJECT"] == age]

years = temp_df.TIME.unique()

years.sort()

# Создание списка десятилетий

decade = []

for i in range(len(years)):

decade.append((years[i] // 10) * 10)

decade = np.unique(decade)

for i in range(len(decade)):

# Определение начала и конца десятилетия

first_in_decade = decade[i]

last_in_decade = first_in_decade + 10

# Датафрейм по десятилетию

data = temp_df[(temp_df["TIME"] >= first_in_decade) &

(temp_df["TIME"] < last_in_decade)]

# Датафрейм по минимальным значениям

min_value = data.sort_values(by="Value", ascending=True)

min_value = min_value.iloc[0: p]

name_min = "Decade_" + str(first_in_decade) + "-" + str(last_in_decade) + "_values_min.csv"

min_value.to_csv(name_min)

# Датафрейм по максимальным значениям

max_value = data.sort_values(by="Value", ascending=False)

max_value = max_value.iloc[0: k]

name_max = "Decade_" + str(first_in_decade) + "-" + str(last_in_decade) + "_values_max.csv"

max_value.to_csv(name_max)

# построение графика

def task_2(data, subject, locations):

plot = pd.pivot_table(data[data["SUBJECT"] == subject], index="TIME", columns="LOCATION", values="Value",

aggfunc=sum)

axes = plot[locations].plot()

axes.set_ylabel("Показатель")

axes.set_title("График показателя уровня образования в пределах возраста " + subject)

plt.show()

# основная функция

def LAB_8_VAR_15(path):

# Чтение csv файла и преобразование данных

read_csv = pd.read_csv(path, sep=",", comment="#")

data = pd.DataFrame(read_csv)

del data["INDICATOR"]

del data['Flag Codes']

data['TIME'] = pd.to_numeric(data['TIME'])

# Построение графика с уникальными странами и уникальным subject

locations = data.LOCATION.unique()

number = np.random.randint(2, 6)

final_country = []

for i in range(number):

final_country.append(locations[np.random.randint(0, len(locations) - 1)])

subjects = data.SUBJECT.unique()

final_subject = random.choice(subjects)

final_country = np.unique(final_country)

task_2(data, final_subject, final_country)

# Ввод кол-ва стран для отображения

print("Введите кол-во стран для отображения стран с минимальным показателем: ")

min_count = inputNumber()

print("Введите кол-во стран для отображения стран с максимальным показателем: ")

max_count = inputNumber()

task_3(data, max_count, min_count)

LAB_8_VAR_15("TertiaryEducation.csv")

Примеры работы программы

Выводимый график после выполнения работы программы представлен на рисунке 3.

Рисунок 3 – Выводимый график

Ввод данных: переменных k и p, - представлен на рисунке 4.

Рисунок 4 – Ввод данных

В результате работы программы были сформированы следующие файлы с отображением десятилетия и параметром максимального или минимального значения. Это можно увидеть на рисунке 5.

Рисунок 5 – Файлы, созданные main.py

Например, на рисунке 6 можно увидеть список стран с максимальным показателем в 1980-1990 года, а на рисунке 7 можно увидеть список стран с минимальным показателем в 1990-2000 года.

Рисунок 6 – Файл “Decade_1980-1990_values_max”

Рисунок 7 – Файл “Decade_1990-2000_values_min”

Выводы:

В процессе выполнения данной лабораторной работы были изучены и выполнены следующие этапы:

1) Постановка задачи. Разделил программы на чёткие этапы для более удобного просмотра кода и работы кода с помощью простых действий. Ввёл ограничения на ввод данных и рассчитал возможные завершения программы.

2) Математическая модель. Написал код с помощью математических действий, разделив задачу на простые математические действия в цикле.

3) Описание разработанной программы. По коду программы построил блочную модель программы. Выбрал наиболее подходящий способ написания кода с помощью массивов. Изучил библиотеки для построения графиков matplotlib, pandas и numpy.

Благодаря данной работе закрепил свои навыки программирования, построения алгоритма решения задачи, разбив ее на несколько этапов, укрепил навыки работы с условными конструкциями.

Соседние файлы в папке 4сем