
2 / лр3
.pdfМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
Кафедра проблемно-ориентированных вычислительных комплексов Арифметические операции
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
Доцент,кандидат технических наук |
|
|
|
Чернышев С.А. |
|
|
|
|
|
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
Лабораторная работа № 3
по дисциплине: Технологии программирования
РАБОТУ ВЫПОЛНИЛА |
|
|
|
|
|
|
СТУДЕНТКА ГР. № |
Z0411 |
24.05.2023 |
|
М. В. Карелина |
||
|
|
|
|
|
|
|
|
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Студенческий билет № |
|
2020/3477 |
|
|
|
|
Санкт-Петербург
2023

Цель работы:
познакомиться с основными способами работы с excel-файлами и графиками в Python.
Вариант 8.
Скачайте с сайта с сайта ЕМИСС (ГОСУДАРСТВЕННАЯ СТАТИСТИКА) данные по средним потребительским ценам на товары,
реализуемых на розничных рынках Российской Федерации с 2007 по 2015 год
(https://www.fedstat.ru/indicator/37055). Выведите динамику цен по продукту
«Масло подсолнечное» и «Сахар-песок». Найдите среднее значение цены,
медиану за весь период, а также посчитайте отклонения месячных цен от среднего и медианы. Для наглядности используйте графики.
Рисунок 1 - Сайт fedstat.ru
Рисунок 2 - Данные по заданным параметрам
Код программы:
import pandas as pd
import matplotlib.pyplot as plt
# Чтение файла
df_orders= pd.read_excel('data.xls', header=None)
#Выделение строк с годами, месяцами и данными по продуктам years = df_orders.iloc[0, 1:].tolist()
months = df_orders.iloc[1, 1:].tolist() oil_data = df_orders.iloc[2, 1:].tolist() sugar_data = df_orders.iloc[3, 1:].tolist()
#преобразование строк в числа
oil_data_numeric = pd.to_numeric(oil_data)
mean_oil = pd.Series(oil_data_numeric).mean() # вычисление статистических

показателей
median_oil = pd.Series(oil_data_numeric).median()# вычисление статистических показателей
std_oil = pd.Series(oil_data_numeric).std()# вычисление статистических показателей
# преобразование строк в числа sugar_data_numeric = pd.to_numeric(sugar_data)
mean_sugar = pd.Series(sugar_data_numeric).mean()# вычисление статистических показателей
median_sugar = pd.Series(sugar_data_numeric).median()# вычисление статистических показателей
std_sugar = pd.Series(sugar_data_numeric).std()# вычисление статистических показателей
# Создание списка с названиями точек
labels = [str(years[i]) + str(months[i]) for i in range(len(years))]
# Создание графика с 240 точками
plt.plot(labels, oil_data, '.', label='Масло подсолнечное, кг') plt.plot(labels, sugar_data, '.', label='Сахар-песок, кг') plt.xticks(rotation=90)
#Добавление заголовка и подписей осей plt.title('Динамика цен на продукты') plt.xlabel('Год и месяц') plt.ylabel('Цена, р')
#Добавление легенды
plt.legend()
#Отображение графика plt.show()
#Вывод статистических показателей
print('Cреднее значение цены на масло подсолнечное:', mean_oil) print('Cреднее значение цены на сахар-песок:', mean_sugar) print('Медиана цены на масло подсолнечное:', median_oil) print('Медиана цены на сахар-песок:', median_sugar) print('Стандартное отклонение цен на масло подсолнечное:', std_oil) print('Стандартное отклонение цен на сахар-песок:', std_sugar)
Выполнение программы:
Рисунок 3 - График динамики цены

Рисунок 4 - Выполнение программы, подсчет статистических параметров
Тесты программы:
import pandas as pd import unittest import os
class TestProductPrices(unittest.TestCase): def setUp(self):
# Создание тестовых данных
self.years = ['2019', '2020', '2021'] self.months = ['Январь', 'Февраль', 'Март'] self.oil_data = [50, 70, 60] self.sugar_data = [100, 150, 120]
self.expected_labels = ['2019Январь', '2020Февраль', '2021Март'] self.expected_mean_oil = sum(self.oil_data) / len(self.oil_data) self.expected_mean_sugar = sum(self.sugar_data) /
len(self.sugar_data) self.expected_median_oil = 60 self.expected_median_sugar = 120
self.expected_std_oil = pd.Series(self.oil_data).std() self.expected_std_sugar = pd.Series(self.sugar_data).std()
# Создание тестового файла с данными self.filename = 'test_data.xls'
df_orders = pd.DataFrame({'years': self.years, 'months': self.months, 'oil_data': self.oil_data, 'sugar_data':
self.sugar_data})
df_orders.to_excel(self.filename, index=False, header=False)
def tearDown(self):
# Удаление тестового файла os.remove(self.filename)
def test_labels(self):
# Проверка создания списка с названиями точек df_orders = pd.read_excel(self.filename, header=None)
labels = [str(df_orders.iloc[i, 0]) + str(df_orders.iloc[i, 1]) for i in range(0, len(self.years))]
self.assertEqual(self.expected_labels, labels)
def test_statistics(self):
# Проверка вычисления статистических показателей df_orders = pd.read_excel(self.filename, header=None) oil_data = df_orders.iloc[0:, 2].tolist()
sugar_data = df_orders.iloc[0:, 3].tolist() oil_data_numeric = pd.to_numeric(oil_data) sugar_data_numeric = pd.to_numeric(sugar_data) mean_oil = pd.Series(oil_data_numeric).mean() mean_sugar = pd.Series(sugar_data_numeric).mean() median_oil = pd.Series(oil_data_numeric).median() median_sugar = pd.Series(sugar_data_numeric).median()

std_oil = pd.Series(oil_data_numeric).std() std_sugar = pd.Series(sugar_data_numeric).std()
self.assertAlmostEqual(self.expected_mean_oil, mean_oil) self.assertAlmostEqual(self.expected_mean_sugar, mean_sugar) self.assertEqual(self.expected_median_oil, median_oil) self.assertEqual(self.expected_median_sugar, median_sugar) self.assertAlmostEqual(self.expected_std_oil, std_oil) self.assertAlmostEqual(self.expected_std_sugar, std_sugar)
if __name__ == '__main__': unittest.main()
Выполнение тестов:
Выводы В ходе данной лабораторной работы мы научились импортировать и
экспортировать excel-файлы, получили навыки построения графиков при помощи Python и познакомились с библиотекой Pandas.