Найти в Дзене
Варечка Окаянная

Python МГУ МФК часть 8 осень 2023

Оглавление

python 2023 a 8 Работа с библиотекой NumPy

Введение.

Всем привет! Я тут подумала хорошо будет поделиться своими решениями по питону! Пожалуйста подпишитесь на мой канал про мою жизнь в МГУ "Варечка Окаянная")))

1. Немного статистики

В тот самый момент, когда стажер-аналитик Павел собирается пойти пообедать, директор по связям с общественностью обращается к нему с вопросом: может ли он предоставить для веб-сайта какие-нибудь примечательные факты об уровне зарплат исследователей данных? Данные имеют конфиденциальный характер, и поэтому Павла снабдили анонимным набором данных, содержащим зарплату каждого сотрудника в долларах в месяц. Но это не проблема, подумал Павел, так как достаточно будет посчитать некоторые статистические показатели по предоставленным ему данным, а именно: медиану, среднее арифметическое, а также среднеквадратическое отклонение зарплат. Помогите Павлу сделать задание и со спокойной душой пойти на перерыв.

Формат ввода
В файле input.txt дана последовательность целых чисел в диапазоне от 1000 до 10000 включительно. Числа разделены одним символом пробел. Количество чисел меньше 100000.

Формат вывода
В стандартный поток вывода или в файл output.txt выведите 3 вещественных числа (медиану, среднее арифметическое и среднеквадратическое отклонение) с точностью 2 знака после запятой, разделив их одним пробелом.

Примечания
Использование numpy является обязательным. Для нахождения статистик по данным воспользуйтесь соответствующими функциями из библиотеки numpy: numpy.median(), numpy.mean(), numpy.std(). Чтобы вывести вещественное число с двумя знаками после запятой воспользуйтесь форматированием строк: print("{:.2f}".format(3.14159)) -> 3.14. Подробнее - см. рекомендации к вводу-выводу. В задаче не разрешается использовать pandas. Для подсчёта суммы отдельно по столбцам или по строкам можно использовать numpy.sum() с указанием параметра axis (см. официальную документацию).

Ответ:

import numpy as np

# Reading data from file
with open('input.txt', 'r') as file:
data = np.fromstring(file.read(), dtype=int, sep=' ')

# Calculating statistics
median = np.median(data)
mean = np.mean(data)
std_dev = np.std(data)

# Printing results
print(f'{median:.2f} {mean:.2f} {std_dev:.2f}')

2. Мода

В один приятный вечер три подруги-модницы встретились, чтобы обсудить последние новости моды. Каждая из них пришла в платье своего цвета: Вилена пришла в зеленом платье, Марианна — в салатовом, а Снежанна — в платье цвета лесной листвы. Они принялись спорить, чей цвет моднее в этом сезоне. Для того, чтобы решить спор, подруги "откопали" 150 выпусков журнала "Мода модных модниц", и стали считать, сколько раз известные звезды появлялись в том или ином цвете. Считав массив, содержащий в себе информацию об этих подсчетах, определите, какой же цвет самый модный.

Формат ввода
В файле input.csv содержится таблица, состоящая из 150 строк и 3 столбцов. Одна строка данной таблицы относится к одному модному журналу. Каждый столбец относится к определенному цвету: 1-ый — зеленый, 2-ой — салатовый, 3-ий — цвет лесной листвы. Значение в некоторой строке i и некотором столбце j — это число, равное количеству появлений в модном журнале i звезд в цвете соответствующем столбцу j.

Формат вывода
В стандартный поток вывода или в файл output.txt необходимо вывести единственное число, равное номеру (не путайте номер с ИНДЕКСОМ) наиболее часто встречающегося цвета: 1 — для зеленого цвета, 2 — для салатового цвета, 3 — для цвета лесной листвы.

Примечания
Разделитель в файле input.csv — запятая без пробелов. Использование numpy является обязательным! Для считывания исходных данных и формирования списка можно использовать стандартную работу с файлами (open(), readlines(), split(), int()) либо метод numpy.genfromtxt().

Ответ:

import numpy as np

# Read data from a file
data = np.genfromtxt('input.csv', delimiter=',')

# Counting the sums for each color
color_counts = np.sum(data, axis=0)

# Finding the index (color) that corresponds to the maximum number of occurrences
most_frequent_color = np.argmax(color_counts) + 1 # Add 1 because indexes start from 0

# Output the result
with open('output.txt', 'w') as output_file:
output_file.write(str(most_frequent_color))


3. Две чугунные гири

В спортивном клубе "Две чугунные гири" есть два типа клиентов: одни из них всегда делают примерно одинаковое количество подходов, планомерно развивая свои физические способности, другие же часто ленятся и делают существенно меньше, чем нужно, а затем их мучает совесть, и они начинают делать существенно больше. Внимательные тренеры ведут скрупулезные и подробные записи о каждом посетителе клуба. Отличить одних от других можно при помощи подсчета стандартного отклонения по статистике количества сделанных подходов за последние дни. Нормальным разбросом вокруг среднего значения подходов для последовательных посетителей считается +/-4 подхода. По записям за последние 35 дней определите кого в клубе больше — клиентов 1 или 2 типа. Гарантируется, что одних из них строго больше.

Формат ввода
В файле input.csv содержатся записи о подходах, сделанных клиентами за последние 35 дней. Массив содержит N строк и 35 столбцов, где N — это количество спортсменов в клубе.

Формат вывода
В стандартный поток вывода или в файл output.txt запишите единственное число 1 или 2, в зависимости от Вашего решения. Если в клубе больше спортсменов, совершающих примерно одно и то же число подходов, запишите 1, иначе — запишите 2.

Примечания
Разделитель в файле input.csv — запятая без пробелов. Использование numpy является обязательным. Для подсчета разброса вокруг среднего значения подходов воспользуйтесь функцией библиотеки numpy: numpy.std().

Ответ:

import numpy as np

# Read data from a file
data = np.genfromtxt('input.csv', delimiter=',')

# Calculate the standard deviation for each client
std_devs = np.std(data, axis=1)

# Count the number of clients of each type
count_type_1 = np.sum(std_devs <= 4)
count_type_2 = np.sum(std_devs > 4)

# Determining who has more
result = 1 if count_type_1 > count_type_2 else 2

# Output the result
with open('output.txt', 'w') as output_file:
output_file.write(str(result))

4. Очистка логов

Программист Иван очень общительный человек, поэтому в рабочее время он любит общаться с друзьями в социальных сетях. Недавно программист Иван узнал, что его начальники логируют время, проведенное сотрудниками в социальных сетях, и в тот же момент понял, что его карьера висит на волоске. Он выяснил у своего друга и коллеги, как можно получить доступ к лог-файлам и в каком формате логируются данные. Оказалось, что данные логируются в виде двумерного массива размерностью 30x12, где каждый элемент массива содержит информацию о том, сколько времени сотрудник провел в социальных сетях в i-й рабочий день j-го месяца, в часах. Ради удобства начальство Ивана считает, что каждый месяц состоит ровно из 30 рабочих дней. Программист Иван знает, что начальство поймет, что что-то не так, если Иван просто обнулит все свои логи. Иван внимательно с ними ознакомился и узнал, что наибольшее время в социальных сетях он проводил по четным числам нечетных месяцев, и по нечетным числам в четные месяцы. Помогите Ивану занизить логи, уменьшив ровно в 2 раза элементы массива, имеющие один четный и один нечетный индекс.

Вам дан csv-файл с логами, его нужно считать и при помощи операций с массивами (мы рекомендуем Вам использовать присваивание в срез) изменить его так, как сказано в условии задачи. А затем сохранить результат в новый csv-файл.

Формат ввода
В файле input.csv содержится массив размерностью 30 строк на 12 столбцов с информацией о проведенных часах в социальных сетях.

Формат вывода
Сохраните модифицированный файл в output.csv.

Примечания
Использование numpy является обязательным! Данные в файле input.csv представлены в стандартном виде .csv: строки, разделённые `\n', разделитель в каждой строке - запятая без пробелов, в качестве разделителя десятичной и дробной части вещественного числа используется точка. Для вывода количества часов, проведенных в социальных сетях, воспользуйтесь форматированием: "%g". Для вывода результата можно использовать numpy.savetxt().

Ответ:

import numpy as np

# Read data from a file
data = np.genfromtxt('input.csv', delimiter=',')

# Data modification
data[1::2, ::2] /= 2 # Even rows, odd columns
data[::2, 1::2] /= 2 # Odd rows, even columns

# Saving modified data to a new file
np.savetxt('output.csv', data, fmt='%g', delimiter=',')

5. Дуэльный клуб

В выручай-комнате Гарри Поттер и его соратники тренировались сражаться на волшебных палочках, устраивая дуэли. Результаты дуэлей тщательно записывались в волшебный список. К концу месяца друзья составляли списки лучших волшебников. Однажды оказалось, что Гарри не стал лучшим волшебником, и руководство дуэльного клуба в лице Гарри и его ближайших друзей, решило, что это плохо для имиджа клуба, поэтому список нужно немного скорректировать следующим образом. В каждом месяце Гарри должен выигрывать в полтора раза больше матчей, чем ребята выигрывали в среднем (при подсчете среднего количества матчей результаты Гарри учитываются). Этот список волшебный и изменить его можно только с помощью змеиного языка Python, которым Гарри, как известно, отлично владеет. Напишите для Гарри заклинание, которое он должен произнести, чтобы имидж клуба не пострадал.

Вам дан csv-файл с количеством побед каждого из участников клуба (их 15) за каждый из 30 дней месяца. Присваиванием в срез замените значение в первой строке (конечно, эта строка принадлежит Гарри) на среднее значение побед по этому дню, умноженное на 1.5.

Формат ввода
В файле input.csv записан двумерный массив обозначенного в условии формата: количество строк в файле - 15 количество чисел в каждой строке файла - 30 файл содержит только целые числа

Формат вывода
Сохранить модифицированный массив в файл output.csv.

Примечания
Использование numpy является обязательным! Данные в файле input.csv представлены в стандартном виде .csv: строки, разделённые `\n', разделитель в каждой строке - запятая без пробелов. Обратите внимание, что значения в первой строке нужно заменять на среднее значение по дню. При вычислении среднего значения по дню нужно включать данные Гарри. После умножения среднего значения побед на 1.5 нужно отбрасывать дробную часть. Пример: 35.7 -> 35. В результирующий файл нужно записывать всю таблицу (а не только первую строку с изменёнными данными).

Ответ:

import numpy as np

# Read data from a file
data = np.genfromtxt('input.csv', delimiter=',')

# Replace the value in the first line with 1.5 * daily average
average_per_day = np.mean(data, axis=0)
data[0, :] = (1.5 * average_per_day).astype(int)

# Saving modified data to a new file
np.savetxt('output.csv', data, fmt='%d', delimiter=',')

Спасибо!

Телеграмм Свалка астронома Ai 🦄 MSU

Телеграмм Варечкин Блокнот 🌸 MSU

ВК Школа https://vk.com/mgu_gdz Физиув UwU

Дзен https://dzen.ru/varechka_uni_physics

-2


Наука
7 млн интересуются