1140 lines
95 KiB
Plaintext
1140 lines
95 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Домашнее задание 1 (Python)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Часть 1: основы работы с Python"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Задача 1\n",
|
||
"Напишите программу, которая последовательно запрашивает с клавиатуры три целых числа (после ввода каждого числа пользователь нажимает *Enter* — иными словами, каждое число вводится на отдельной строке) и выводит их произведение.\n",
|
||
"\n",
|
||
"**Пример.**\n",
|
||
"\n",
|
||
"**Входные данные:**\n",
|
||
"\n",
|
||
" 1\n",
|
||
" 2\n",
|
||
" 3\n",
|
||
"\n",
|
||
"**Выходные данные:**\n",
|
||
"\n",
|
||
" 6"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdin",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" 2\n",
|
||
" 3\n",
|
||
" 1\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\n",
|
||
" 6\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"string1 = input()\n",
|
||
"string2 = input()\n",
|
||
"string3 = input()\n",
|
||
"\n",
|
||
"print('\\n', int(string1) * int(string2) * int(string3))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Задача 2\n",
|
||
"\n",
|
||
"Напишите программу, которая последовательно запрашивает с клавиатуры два положительных числа (целых или с плавающей точкой) и выводит на экран их [среднее геометрическое](https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B5%D0%B4%D0%BD%D0%B5%D0%B5_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5). После ввода каждого числа пользователь нажимает *Enter*.\n",
|
||
"\n",
|
||
"**Примеры:**\n",
|
||
"\n",
|
||
"*Входные данные:*\n",
|
||
"\n",
|
||
" 3\n",
|
||
" 12\n",
|
||
"\n",
|
||
"*Выходные данные:*\n",
|
||
"\n",
|
||
" 6.0\n",
|
||
"\n",
|
||
"*Входные данные:*\n",
|
||
"\n",
|
||
" 5\n",
|
||
" 4 \n",
|
||
"\n",
|
||
"*Выходные данные:*\n",
|
||
"\n",
|
||
" 4.47213595499958"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdin",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" 5\n",
|
||
" 4\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"4.47213595499958\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import math\n",
|
||
"a1 = input()\n",
|
||
"a2 = input()\n",
|
||
"\n",
|
||
"g = math.sqrt(int(a1) * int(a2))\n",
|
||
"print(g)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Задача 3\n",
|
||
"\n",
|
||
"Напишите функцию `my_expo(x)`, которая принимает на вход число `x` и возвращает значение экспоненты, возведенной в степень `x`. Функция не должна ничего печатать (выводить на экран).\n",
|
||
"\n",
|
||
"**Примеры работы функции:**\n",
|
||
"\n",
|
||
"*Применение:*\n",
|
||
"\n",
|
||
" my_expo(2)\n",
|
||
" \n",
|
||
"*Результат:* \n",
|
||
"\n",
|
||
" 7.38905609893065\n",
|
||
" \n",
|
||
"*Применение:*\n",
|
||
"\n",
|
||
" my_expo(-1.5)\n",
|
||
" \n",
|
||
"*Результат:* \n",
|
||
"\n",
|
||
" 0.22313016014842982"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"0.22313016014842982\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"def my_expo(x):\n",
|
||
" return math.exp(x)\n",
|
||
"print(my_expo(-1.5))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Задача 4\n",
|
||
"\n",
|
||
"Напишите функцию `int_list(L)`, которая принимает на вход список строк `L`, представляющих собой целые числа, и возвращает новый список из целых чисел. Функция не должна ничего печатать (выводить на экран).\n",
|
||
"\n",
|
||
"**Пример работы функции:**\n",
|
||
"\n",
|
||
"*Применение:*\n",
|
||
"\n",
|
||
" int_list(['1', '3', '5', '18'])\n",
|
||
" \n",
|
||
"*Результат:* \n",
|
||
"\n",
|
||
" [1, 3, 5, 18]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[1, 3, 5, 18]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"def int_list(L):\n",
|
||
" return list(map(int, L))\n",
|
||
"\n",
|
||
"print(int_list(['1', '3', '5', '18']))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Задача 5\n",
|
||
"\n",
|
||
"Напишите функцию `ListMax(L1, L2)`, которая принимает на вход два списка чисел `L1`, `L2`и возвращает наибольшее число из этих двух списков. Склеивать списки (приписывать элементы одного списка в конец другого) нельзя, использовать функцию `max()` можно. Функция не должна ничего печатать (выводить на экран).\n",
|
||
"\n",
|
||
"**Примеры работы функции:**\n",
|
||
"\n",
|
||
"*Применение:*\n",
|
||
"\n",
|
||
" ListMax([6, 8, 9], [7, 10, 2, 5])\n",
|
||
" \n",
|
||
"*Результат:* \n",
|
||
"\n",
|
||
" 10\n",
|
||
" \n",
|
||
"*Применение:*\n",
|
||
"\n",
|
||
" ListMax([0, 8, 1, 7], [8, 3, 4, 0, 5, -1])\n",
|
||
" \n",
|
||
"*Результат:* \n",
|
||
"\n",
|
||
" 8 "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"18\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"def ListMax(L1, L2):\n",
|
||
" if max(L1) > max(L2):\n",
|
||
" max_val = max(L1)\n",
|
||
" else:\n",
|
||
" max_val = max(L2)\n",
|
||
" return max_val\n",
|
||
"\n",
|
||
"print(ListMax([0, 8, 1, 7], [18, 3, 4, 0, 5, -1]))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Часть 2: библиотека `pandas`"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"В этом задании вам предлагается поработать с [таблицей](https://hubofdata.ru/dataset/mos-buildings-years), содержащей информацию о годах постройки жилых домов в Москве (можно просто скопировать эту [ссылку](https://raw.githubusercontent.com/allatambov/R-programming-3/master/seminars/sem4-08-12/moscow-buildings.csv)). Данные достаточно новые, а для вдохновения [посмотрите](http://msk.mercator.ru/), что можно получить, используя эту информацию.\n",
|
||
"\n",
|
||
"Все операции предполагают использование функций `pandas`.\n",
|
||
"\n",
|
||
"1. Загрузите базу данных `moscow-buildings.csv` и сохраните ее как `df_build`. Посмотрите на нее.\n",
|
||
"2. Удалите из базы данных строки, в которых значения года постройки не указаны («н.д.»), а после превратите столбец `house_age` в числовой.\n",
|
||
"3. Посмотрите на минимальное и максимальное значения года постройки. Разумны ли они? Если нет, уберите из базы данных \"странные\" значения годы постройки.\n",
|
||
"4. Выберите из базы данных строки, соответствующие Басманному району и сохраните их в базу `basm_data`.\n",
|
||
"5. Сгруппируйте данные в базе по районам и посмотрите, сколько домов в базе относятся к каждому району.\n",
|
||
"6. Найдите средний возраст дома (возраст - в годах, считаем от 2018) по каждому району. *Подсказка:* сначала добавьте переменную `house_age` («возраст дома»).\n",
|
||
"7. Найдите улицу с самым старым домом."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 67,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>full_address</th>\n",
|
||
" <th>city</th>\n",
|
||
" <th>address</th>\n",
|
||
" <th>street_prefix</th>\n",
|
||
" <th>street_name</th>\n",
|
||
" <th>building</th>\n",
|
||
" <th>house_id</th>\n",
|
||
" <th>area_name</th>\n",
|
||
" <th>house_year</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>area_id</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2281084</th>\n",
|
||
" <td>г Москва п Загорье д.10</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>п Загорье д.10</td>\n",
|
||
" <td>п</td>\n",
|
||
" <td>Загорье</td>\n",
|
||
" <td>д.10</td>\n",
|
||
" <td>7569627</td>\n",
|
||
" <td>муниципальный округ Бирюлево Восточное</td>\n",
|
||
" <td>1968</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281084</th>\n",
|
||
" <td>г Москва п Загорье д.3</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>п Загорье д.3</td>\n",
|
||
" <td>п</td>\n",
|
||
" <td>Загорье</td>\n",
|
||
" <td>д.3</td>\n",
|
||
" <td>7569823</td>\n",
|
||
" <td>муниципальный округ Бирюлево Восточное</td>\n",
|
||
" <td>1964</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281084</th>\n",
|
||
" <td>г Москва п Загорье д.4</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>п Загорье д.4</td>\n",
|
||
" <td>п</td>\n",
|
||
" <td>Загорье</td>\n",
|
||
" <td>д.4</td>\n",
|
||
" <td>7569840</td>\n",
|
||
" <td>муниципальный округ Бирюлево Восточное</td>\n",
|
||
" <td>1972</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281084</th>\n",
|
||
" <td>г Москва п Загорье д.5</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>п Загорье д.5</td>\n",
|
||
" <td>п</td>\n",
|
||
" <td>Загорье</td>\n",
|
||
" <td>д.5</td>\n",
|
||
" <td>7569862</td>\n",
|
||
" <td>муниципальный округ Бирюлево Восточное</td>\n",
|
||
" <td>1963</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281084</th>\n",
|
||
" <td>г Москва п Загорье д.8</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>п Загорье д.8</td>\n",
|
||
" <td>п</td>\n",
|
||
" <td>Загорье</td>\n",
|
||
" <td>д.8</td>\n",
|
||
" <td>7569888</td>\n",
|
||
" <td>муниципальный округ Бирюлево Восточное</td>\n",
|
||
" <td>1963</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281107</th>\n",
|
||
" <td>г Москва ул Короленко д.7 кор.2</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>ул Короленко д.7 кор.2</td>\n",
|
||
" <td>ул</td>\n",
|
||
" <td>Короленко</td>\n",
|
||
" <td>д.7 кор.2</td>\n",
|
||
" <td>7630827</td>\n",
|
||
" <td>муниципальный округ Сокольники</td>\n",
|
||
" <td>1926</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281107</th>\n",
|
||
" <td>г Москва ул Маленковская д.3</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>ул Маленковская д.3</td>\n",
|
||
" <td>ул</td>\n",
|
||
" <td>Маленковская</td>\n",
|
||
" <td>д.3</td>\n",
|
||
" <td>8280705</td>\n",
|
||
" <td>муниципальный округ Сокольники</td>\n",
|
||
" <td>1997</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281107</th>\n",
|
||
" <td>г Москва ул Русаковская д.31</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>ул Русаковская д.31</td>\n",
|
||
" <td>ул</td>\n",
|
||
" <td>Русаковская</td>\n",
|
||
" <td>д.31</td>\n",
|
||
" <td>7550765</td>\n",
|
||
" <td>муниципальный округ Сокольники</td>\n",
|
||
" <td>2009</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281107</th>\n",
|
||
" <td>г Москва ул Сокольническая Слободка д.3</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>ул Сокольническая Слободка д.3</td>\n",
|
||
" <td>ул</td>\n",
|
||
" <td>Сокольническая Слободка</td>\n",
|
||
" <td>д.3</td>\n",
|
||
" <td>8285714</td>\n",
|
||
" <td>муниципальный округ Сокольники</td>\n",
|
||
" <td>2005</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281107</th>\n",
|
||
" <td>г Москва ул Шумкина д.11 кор.а</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>ул Шумкина д.11 кор.а</td>\n",
|
||
" <td>ул</td>\n",
|
||
" <td>Шумкина</td>\n",
|
||
" <td>д.11 кор.а</td>\n",
|
||
" <td>8476228</td>\n",
|
||
" <td>муниципальный округ Сокольники</td>\n",
|
||
" <td>2007</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>21987 rows × 9 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" full_address city \\\n",
|
||
"area_id \n",
|
||
"2281084 г Москва п Загорье д.10 Москва \n",
|
||
"2281084 г Москва п Загорье д.3 Москва \n",
|
||
"2281084 г Москва п Загорье д.4 Москва \n",
|
||
"2281084 г Москва п Загорье д.5 Москва \n",
|
||
"2281084 г Москва п Загорье д.8 Москва \n",
|
||
"... ... ... \n",
|
||
"2281107 г Москва ул Короленко д.7 кор.2 Москва \n",
|
||
"2281107 г Москва ул Маленковская д.3 Москва \n",
|
||
"2281107 г Москва ул Русаковская д.31 Москва \n",
|
||
"2281107 г Москва ул Сокольническая Слободка д.3 Москва \n",
|
||
"2281107 г Москва ул Шумкина д.11 кор.а Москва \n",
|
||
"\n",
|
||
" address street_prefix \\\n",
|
||
"area_id \n",
|
||
"2281084 п Загорье д.10 п \n",
|
||
"2281084 п Загорье д.3 п \n",
|
||
"2281084 п Загорье д.4 п \n",
|
||
"2281084 п Загорье д.5 п \n",
|
||
"2281084 п Загорье д.8 п \n",
|
||
"... ... ... \n",
|
||
"2281107 ул Короленко д.7 кор.2 ул \n",
|
||
"2281107 ул Маленковская д.3 ул \n",
|
||
"2281107 ул Русаковская д.31 ул \n",
|
||
"2281107 ул Сокольническая Слободка д.3 ул \n",
|
||
"2281107 ул Шумкина д.11 кор.а ул \n",
|
||
"\n",
|
||
" street_name building house_id \\\n",
|
||
"area_id \n",
|
||
"2281084 Загорье д.10 7569627 \n",
|
||
"2281084 Загорье д.3 7569823 \n",
|
||
"2281084 Загорье д.4 7569840 \n",
|
||
"2281084 Загорье д.5 7569862 \n",
|
||
"2281084 Загорье д.8 7569888 \n",
|
||
"... ... ... ... \n",
|
||
"2281107 Короленко д.7 кор.2 7630827 \n",
|
||
"2281107 Маленковская д.3 8280705 \n",
|
||
"2281107 Русаковская д.31 7550765 \n",
|
||
"2281107 Сокольническая Слободка д.3 8285714 \n",
|
||
"2281107 Шумкина д.11 кор.а 8476228 \n",
|
||
"\n",
|
||
" area_name house_year \n",
|
||
"area_id \n",
|
||
"2281084 муниципальный округ Бирюлево Восточное 1968 \n",
|
||
"2281084 муниципальный округ Бирюлево Восточное 1964 \n",
|
||
"2281084 муниципальный округ Бирюлево Восточное 1972 \n",
|
||
"2281084 муниципальный округ Бирюлево Восточное 1963 \n",
|
||
"2281084 муниципальный округ Бирюлево Восточное 1963 \n",
|
||
"... ... ... \n",
|
||
"2281107 муниципальный округ Сокольники 1926 \n",
|
||
"2281107 муниципальный округ Сокольники 1997 \n",
|
||
"2281107 муниципальный округ Сокольники 2009 \n",
|
||
"2281107 муниципальный округ Сокольники 2005 \n",
|
||
"2281107 муниципальный округ Сокольники 2007 \n",
|
||
"\n",
|
||
"[21987 rows x 9 columns]"
|
||
]
|
||
},
|
||
"execution_count": 67,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"df = pd.read_csv(\"df_build.csv\", index_col = 0)\n",
|
||
"df1 = df.copy()\n",
|
||
"\n",
|
||
"# Удаление строк с \"н.д.\"\n",
|
||
"df1 = df1[df1[\"house_year\"] != \"н.д.\"]\n",
|
||
"\n",
|
||
"# Преобразование столбца \"house_year\" в int\n",
|
||
"newh = [int(i) for i in df1[\"house_year\"]]\n",
|
||
"df1[\"house_year\"] = newh\n",
|
||
"\n",
|
||
"# Удаление странных значений\n",
|
||
"df_cleaned = df1.drop(df1[(df1['house_year'] < 500) | (df1['house_year'] > 2024)].index)\n",
|
||
"df_cleaned"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 64,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>full_address</th>\n",
|
||
" <th>city</th>\n",
|
||
" <th>address</th>\n",
|
||
" <th>street_prefix</th>\n",
|
||
" <th>street_name</th>\n",
|
||
" <th>building</th>\n",
|
||
" <th>house_id</th>\n",
|
||
" <th>area_name</th>\n",
|
||
" <th>house_year</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>area_id</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>2281050</th>\n",
|
||
" <td>г Москва б-р Покровский д.14/5</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>б-р Покровский д.14/5</td>\n",
|
||
" <td>б-р</td>\n",
|
||
" <td>Покровский</td>\n",
|
||
" <td>д.14/5</td>\n",
|
||
" <td>8104093</td>\n",
|
||
" <td>муниципальный округ Басманный</td>\n",
|
||
" <td>1927</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281050</th>\n",
|
||
" <td>г Москва б-р Покровский д.14/6 строение 1</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>б-р Покровский д.14/6 строение 1</td>\n",
|
||
" <td>б-р</td>\n",
|
||
" <td>Покровский</td>\n",
|
||
" <td>д.14/6 строение 1</td>\n",
|
||
" <td>8104094</td>\n",
|
||
" <td>муниципальный округ Басманный</td>\n",
|
||
" <td>1915</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281050</th>\n",
|
||
" <td>г Москва б-р Покровский д.16/10 строение 1</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>б-р Покровский д.16/10 строение 1</td>\n",
|
||
" <td>б-р</td>\n",
|
||
" <td>Покровский</td>\n",
|
||
" <td>д.16/10 строение 1</td>\n",
|
||
" <td>8104099</td>\n",
|
||
" <td>муниципальный округ Басманный</td>\n",
|
||
" <td>1860</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281050</th>\n",
|
||
" <td>г Москва б-р Покровский д.16_18 строение 4_4А</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>б-р Покровский д.16_18 строение 4_4А</td>\n",
|
||
" <td>б-р</td>\n",
|
||
" <td>Покровский</td>\n",
|
||
" <td>д.16_18 строение 4_4А</td>\n",
|
||
" <td>8104106</td>\n",
|
||
" <td>муниципальный округ Басманный</td>\n",
|
||
" <td>1860</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2281050</th>\n",
|
||
" <td>г Москва б-р Покровский д.18/15 строение 2</td>\n",
|
||
" <td>Москва</td>\n",
|
||
" <td>б-р Покровский д.18/15 строение 2</td>\n",
|
||
" <td>б-р</td>\n",
|
||
" <td>Покровский</td>\n",
|
||
" <td>д.18/15 строение 2</td>\n",
|
||
" <td>8104113</td>\n",
|
||
" <td>муниципальный округ Басманный</td>\n",
|
||
" <td>1860</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" full_address city \\\n",
|
||
"area_id \n",
|
||
"2281050 г Москва б-р Покровский д.14/5 Москва \n",
|
||
"2281050 г Москва б-р Покровский д.14/6 строение 1 Москва \n",
|
||
"2281050 г Москва б-р Покровский д.16/10 строение 1 Москва \n",
|
||
"2281050 г Москва б-р Покровский д.16_18 строение 4_4А Москва \n",
|
||
"2281050 г Москва б-р Покровский д.18/15 строение 2 Москва \n",
|
||
"\n",
|
||
" address street_prefix street_name \\\n",
|
||
"area_id \n",
|
||
"2281050 б-р Покровский д.14/5 б-р Покровский \n",
|
||
"2281050 б-р Покровский д.14/6 строение 1 б-р Покровский \n",
|
||
"2281050 б-р Покровский д.16/10 строение 1 б-р Покровский \n",
|
||
"2281050 б-р Покровский д.16_18 строение 4_4А б-р Покровский \n",
|
||
"2281050 б-р Покровский д.18/15 строение 2 б-р Покровский \n",
|
||
"\n",
|
||
" building house_id area_name \\\n",
|
||
"area_id \n",
|
||
"2281050 д.14/5 8104093 муниципальный округ Басманный \n",
|
||
"2281050 д.14/6 строение 1 8104094 муниципальный округ Басманный \n",
|
||
"2281050 д.16/10 строение 1 8104099 муниципальный округ Басманный \n",
|
||
"2281050 д.16_18 строение 4_4А 8104106 муниципальный округ Басманный \n",
|
||
"2281050 д.18/15 строение 2 8104113 муниципальный округ Басманный \n",
|
||
"\n",
|
||
" house_year \n",
|
||
"area_id \n",
|
||
"2281050 1927 \n",
|
||
"2281050 1915 \n",
|
||
"2281050 1860 \n",
|
||
"2281050 1860 \n",
|
||
"2281050 1860 "
|
||
]
|
||
},
|
||
"execution_count": 64,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Выбор строк, где 'area_name' содержит 'Басманный район'\n",
|
||
"basm_data = df1[df1['area_name'].str.contains('Басманный', na=False)]\n",
|
||
"# Сохранение в новый CSV файл\n",
|
||
"basm_data.to_csv('basm_data.csv', index=False)\n",
|
||
"basm_data.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 68,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>area_name</th>\n",
|
||
" <th>house_count</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>муниципальный округ Алексеевский</td>\n",
|
||
" <td>212</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>муниципальный округ Алтуфьевский</td>\n",
|
||
" <td>114</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>муниципальный округ Арбат</td>\n",
|
||
" <td>134</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>муниципальный округ Аэропорт</td>\n",
|
||
" <td>186</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>муниципальный округ Бабушкинский</td>\n",
|
||
" <td>251</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" area_name house_count\n",
|
||
"0 муниципальный округ Алексеевский 212\n",
|
||
"1 муниципальный округ Алтуфьевский 114\n",
|
||
"2 муниципальный округ Арбат 134\n",
|
||
"3 муниципальный округ Аэропорт 186\n",
|
||
"4 муниципальный округ Бабушкинский 251"
|
||
]
|
||
},
|
||
"execution_count": 68,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Группировка по столбцу 'area_name' и подсчёт количества домов\n",
|
||
"house_counts = df_cleaned.groupby('area_name').size().reset_index(name='house_count')\n",
|
||
"house_counts.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 69,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>area_name</th>\n",
|
||
" <th>average_house_age</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>муниципальный округ Алексеевский</td>\n",
|
||
" <td>55.155660</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>муниципальный округ Алтуфьевский</td>\n",
|
||
" <td>46.280702</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>муниципальный округ Арбат</td>\n",
|
||
" <td>87.462687</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>муниципальный округ Аэропорт</td>\n",
|
||
" <td>55.102151</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>муниципальный округ Бабушкинский</td>\n",
|
||
" <td>50.123506</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" area_name average_house_age\n",
|
||
"0 муниципальный округ Алексеевский 55.155660\n",
|
||
"1 муниципальный округ Алтуфьевский 46.280702\n",
|
||
"2 муниципальный округ Арбат 87.462687\n",
|
||
"3 муниципальный округ Аэропорт 55.102151\n",
|
||
"4 муниципальный округ Бабушкинский 50.123506"
|
||
]
|
||
},
|
||
"execution_count": 69,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Добавление переменной house_age (2018 - house_year)\n",
|
||
"df_cleaned['house_age'] = 2018 - df_cleaned['house_year']\n",
|
||
"\n",
|
||
"# Группировка по районам и вычисление среднего возраста домов\n",
|
||
"average_age_by_area = df_cleaned.groupby('area_name')['house_age'].mean().reset_index(name='average_house_age')\n",
|
||
"\n",
|
||
"# Просмотр первых строк результата\n",
|
||
"average_age_by_area.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 70,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Год постройки: 1060\n",
|
||
"Улица с самым старым домом: ['Парковая 3-я ']\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Минимальный год постройки\n",
|
||
"oldest_year = df_cleaned['house_year'].min()\n",
|
||
"\n",
|
||
"# Все строки, где год постройки совпадает с минимальным\n",
|
||
"oldest_house_info = df_cleaned[df_cleaned['house_year'] == oldest_year]\n",
|
||
"\n",
|
||
"# Уникальные улицы с самыми старыми домами\n",
|
||
"oldest_streets = oldest_house_info['street_name'].unique()\n",
|
||
"\n",
|
||
"print(f\"Год постройки: {oldest_year}\")\n",
|
||
"print(f\"Улица с самым старым домом: {oldest_streets}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Часть 3: библиотека `numpy`"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Задача 1"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Напишите программу, которая запрашивает у пользователя размерность квадратной матрицы (двумерного массива, в котором число строк и столбцов совпадают) и создает единичную матрицу `E` (массив) соответствующей размерности. Использовать готовую функцию `np.eye()` нельзя, воспользуйтесь циклами и условиями.\n",
|
||
"\n",
|
||
"**Пример:**\n",
|
||
"\n",
|
||
"*Ввод:*\n",
|
||
"\n",
|
||
" Введите размерность матрицы: 4\n",
|
||
"\n",
|
||
"*Вывод:*\n",
|
||
"\n",
|
||
" array([[1., 0., 0., 0.],\n",
|
||
" [0., 1., 0., 0.],\n",
|
||
" [0., 0., 1., 0.],\n",
|
||
" [0., 0., 0., 1.]])\n",
|
||
"\n",
|
||
"\n",
|
||
"1. Выведите на экран число измерений (dimensions) полученного массива `E`.\n",
|
||
"\n",
|
||
"2. Выведите на экран общее число элементов в массиве `E`.\n",
|
||
"\n",
|
||
"3. Измените форму массива `E`, используя функцию `reshape()` любым корректным способом (то есть форма нового массива может быть любой в рамках того, что позволяет сделать число элементов массива)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 76,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdin",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Введите размерность матрицы: 3\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Единичная матрица:\n",
|
||
"[1.0, 0.0, 0.0]\n",
|
||
"[0.0, 1.0, 0.0]\n",
|
||
"[0.0, 0.0, 1.0]\n",
|
||
"Число измерений массива E: 3\n",
|
||
"Общее число элементов в массиве E: 9\n",
|
||
"Массив после reshape:\n",
|
||
"[1. 0. 0. 0. 1. 0. 0. 0. 1.]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"n = int(input(\"Введите размерность матрицы: \"))\n",
|
||
"\n",
|
||
"# Единичная матрица размерности n x n\n",
|
||
"E = [[1.0 if i == j else 0.0 for j in range(n)] for i in range(n)]\n",
|
||
"\n",
|
||
"print(\"Единичная матрица:\")\n",
|
||
"for row in E:\n",
|
||
" print(row)\n",
|
||
"\n",
|
||
"# Число измерений массива E\n",
|
||
"print(f\"Число измерений массива E: {len(E)}\")\n",
|
||
"\n",
|
||
"# Общее число элементов в массиве E\n",
|
||
"total_elements = n * n\n",
|
||
"print(f\"Общее число элементов в массиве E: {total_elements}\")\n",
|
||
"\n",
|
||
"# reshape\n",
|
||
"import numpy as np\n",
|
||
"\n",
|
||
"E_np = np.array(E)\n",
|
||
"reshaped_E = E_np.reshape(total_elements) # Преобразуем в одномерный массив для примера\n",
|
||
"print(\"Массив после reshape:\")\n",
|
||
"print(reshaped_E)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Задача 2\n",
|
||
"\n",
|
||
"В блоке, посвященном теории вероятностей мы познакомимся с понятием математического ожидания – средним ожидаемым значением случайной величины. Для дискретной случайной величины $X$ (множество ее значений не бесконечно) математическое ожидание считается так:\n",
|
||
"\n",
|
||
"$$E(X) = x_1 \\cdot p_1 + x_2 \\cdot p_2 + \\dots + x_k \\cdot p_k,$$\n",
|
||
"\n",
|
||
"то есть как сумма произведений значений величины на соответствующие им вероятности.\n",
|
||
"\n",
|
||
"Случайная величина $X$ принимает три значения: $-5$, $2$, $4$. Известно, что значение $-5$ случайная величина принимает с вероятностью $0.5$, значение $2$ – с вероятностью $0.2$ и значение $4$ – с вероятностью $0.3$. Посчитайте математическое ожидание $E(X)$, предварительно создав массив значений $X$ и массив вероятностей $p$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 83,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Математическое ожидание E(X): -0.9000000000000001\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Задаем массив значений X и массив соответствующих вероятностей p\n",
|
||
"X = np.array([-5, 2, 4])\n",
|
||
"p = np.array([0.5, 0.2, 0.3])\n",
|
||
"\n",
|
||
"# Вычисляем математическое ожидание\n",
|
||
"E_X = np.sum(X * p)\n",
|
||
"\n",
|
||
"# Вывод результата\n",
|
||
"print(f\"Математическое ожидание E(X): {E_X}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Часть 4: графика в `matplotlib`"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Постройте графики следующих функций (графики должны отображаться в самом ipynb-файле):\n",
|
||
"\n",
|
||
"* $f(x)=2x - 1$ на участке $-10<x<10$\n",
|
||
"* $f(x)=log(3x)$ на участке $0<x<5$.\n",
|
||
"\n",
|
||
"Поменяйте цвет и тип линии по умолчанию у каждого графика. Добавьте название графика. "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 82,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACbUUlEQVR4nOzdd3gU1dvG8e+mLQkktJAmoSkgTUBACYrUhKJYQMSGoIIiTYyIIhZQFLHy/ixgBRFQVBRREBO6BaQIIoKICoQWlCIBAskmmfePMQshCWmbzO7m/lzXXtmZnZ299xAy++ycOcdmGIaBiIiIiIiIiLicj9UBRERERERERLyVim4RERERERGRUqKiW0RERERERKSUqOgWERERERERKSUqukVERERERERKiYpuERERERERkVKioltERERERESklKjoFhERERERESklKrpFRERERERESomKbrHcjBkzsNls+d527dpVpnmuueYa6tSpU6avWRSffvopNpuNFStWWB3F46SnpzNkyBAiIyPx9fWlRYsWzsf+/fdfQkND+eijj4q83/79+3P99de7LOeGDRsYNmwYzZo1Izg4mPDwcLp27cqyZctc9hrZfv31V4YOHUpMTAwVK1bU75ZIOabjcdHoeFx8nnI8XrFiRZn9G+f1vpcsWUJsbCxRUVHY7XbCwsLo3LkzixYtKtZrHD16lCpVqjB//nwXpZbC8rM6gEi26dOnc/HFF+daHxkZaUEa8UZTp07lzTff5NVXX6VVq1ZUqlTJ+diECROIioqiX79+Rd7v+PHjufjii1m2bBmdO3cucc4PP/yQtWvXctddd9G8eXNOnjzJtGnT6NKlC++//z533HFHiV8j2/r165k/fz4tW7akS5cufPnlly7bt4h4Jh2PpbR5yvG4LOX1vg8fPkyTJk0YNGgQERERHDlyhGnTpnH11VfzwQcfcPvttxfpNapWrcoDDzzAQw89RM+ePQkICHD125D8GCIWmz59ugEY69atszqKYRiGcfXVVxu1a9e2Oka+PvnkEwMwli9fbnUUjzNo0CAjMDAw1/rDhw8bgYGBxrRp04q972uuucaIjY0tSTyngwcP5lqXkZFhXHLJJcaFF17oktfIlpmZ6byv3y2R8k3H46LR38zi85Tj8fLly8vk37go7zs9Pd244IILjPbt2xfrtZKTkw0/Pz9j9uzZxXq+FI+6l4vHyO72lpiYyJ133km1atWoWLEivXr14q+//sqxbWJiItdddx01a9akQoUKXHTRRdx7770cOnQo135fffVVoqKiqFKlCk888YRz/cyZM53r4+PjyczMdD6WX3ejrl27YrPZGD9+vHPd+PHjsdlsObb78ssvsdvtPPDAAwW+782bN9O2bVsCAwPp3LkzBw4cAOCvv/6iXbt2BAYG0qFDB3bs2OF8zt133021atVITU3Ntb/OnTvTpEkT57LNZmP48OG5tju3W9+uXbuw2WzMmDHDue7QoUNccsklNGrUiOTk5CLvE2DgwIG51v3xxx9UqFAhV3fGOnXqMHDgwBzbfvDBB9hstgK7INpsNt555x1OnTrl7CqZ/V5mzJhBRkZGjm+XDx06RHR0NO3atcPhcDjXb926lYoVK9K/f/8c++/fvz9Llizhzz//PG+OwggLC8u1ztfXl1atWrFnzx7nuh07dhASEkLfvn1zbLts2TJ8fX15/PHHC3wtHx8dBkSkaHQ81vG4vByP87NgwQJiYmIICgoiODiY2NhYVq9enWu7L774gksuuQS73U69evX4v//7vzx/D/N63/nx9/enSpUq+Pmd6bD80UcfYbPZeO2113Js++STT+Lr60tiYqJzXXh4OLGxsUybNq2ob1tKQJ+2xOPcfffd+Pj4MGfOHKZMmcLatWvp2LEj//77r3ObP//8k5iYGKZOnUpCQgJPPPEEP/74I1deeWWOP9jz589n5MiR9OjRg48//pi//vqLFStWcPDgQWbMmMH06dMZNWoU//vf/3jqqafOm+vjjz8u1DU/X331FTfeeCNDhw7llVdeOe+2qampdO/enWPHjjF79mz69evH008/DcATTzzBvffey4wZM0hKSqJHjx7O93b//fdz9OhR5syZk2N/W7duZfny5QwbNqzAnAU5dOgQnTt3xuFwsHz5ciIiIkq8z2wjR44kIyOjwO1SUlIYM2YMvr6+BW67evVqevbsSWBgIKtXr2b16tVcffXVACxcuJCWLVtSpUoV5/bZ11WtW7eOhx9+GDD/Pfr27UutWrVyHaw6duyIYRi5rrPKyMgo1M0wjPPmz8jI4Ntvv83xAa1+/fq8/fbbfPrpp/zvf/8DIDk5mVtvvZX27dvn+LApIuJqOh7reJytPB2P58yZw3XXXUdISAgffvgh7777LkePHqVjx4589913zu0WL15M7969qV69OnPnzuX555/nww8/5P3338+1z7ze99mysrLIyMhg//79PPnkk/z+++88+OCDzsdvvvlmhgwZwoMPPsj69esB8wv4iRMn8uijjxIbG5urjb7//vsc/1ellFl7ol2k8N3Zsre74YYbcqz//vvvDcCYOHFins/LysoyHA6HsXv3bgMwvvjiC+djrVq1MmJiYnJs27p1a6NatWrGiRMnnOuHDh1qhISEGMePHzcMI3d3oxMnThg1a9Y0Ro4caQDGk08+6Xzuk08+aWT/V/vyyy+NgIAAY9SoUQU3jGEYr776qgEYv/32W651H374oXPd2rVrDcB4//33nes6dOhgtGjRIsf+7rvvvhzvwzAMAzCGDRuW67XP7da3c+dOAzCmT59u/PPPP8Yll1xiXHzxxcaBAwdyPbew+zQMwxgwYECOdfPnzzd8fHyM4cOHG4Cxc+dO52O1a9c2BgwY4FweNWqUccEFFxh9+vQpVBfEAQMGGBUrVsy1PigoyBgyZEiez5k8ebIBGJ9//rkxYMAAIzAw0Ni8eXOe215wwQVGv379cqwDCnWbPn36ebOPGzfOAIz58+fneuy+++4zAgICjNWrVxudO3c2wsLCjP379593f3lRV0mR8k3H4/zpeFw+j8fn/n5lZmYaUVFRRrNmzXJcnnX8+HEjLCzMaNeunXNdmzZtjOjoaCMtLS3HdtWrV3f+HhbmfRuGYXTr1s2ZLyQkxPjss89ybXP69GmjZcuWRt26dY2tW7ca4eHhRocOHYyMjIxc2yYmJhqA8fXXX+f7muJaOtMtHue2227LsdyuXTtq167N8uXLnev+/vtvhgwZQnR0NH5+fvj7+1O7dm0Atm3bBkBmZiY///wznTp1cj7PZrMRHh5OcHAwFStWdK7v3LkzKSkp/P7773lmeuqpp3A4HOf99n3hwoX06dOHFi1aFPiNerb169cTFRVFw4YNneuyv8E++5vsNm3aEBwc7Px2E8xv1zdt2sT3338PmN9Cf/DBBwwYMCDHgCUAhmEU+pvew4cP06VLFzZv3sy8efNc+o36qVOnGDVqFPfccw+tWrU677Zbtmzhtdde46WXXsr1fori33//JTU1Nc8u3QAPPfQQV199Nbfccgvvv/8+r776Ks2aNctz27CwMPbt25dj3bp16wp169WrV74Z33nnHZ555hkefPBBrrvuulyPv/LKKzRp0oROnTqxYsUKZs2alWPAo+xvyLNvZ3fNFBEpLh2PdTyG8nU83r59O/v376d///45Ls+qVKkSffr0Yc2aNaSmpnLy5EnWr1/P9ddfn2OwskqVKuXaf0HvG8xLL9auXcsXX3xBt27d6NevHx9++GGObex2Ox9//DGHDx/m0ksvxTAMPvzwwzx7H2S/1rltJKVHRbd4nLwOKhERERw+fBgwC4y4uDg+++wzxowZw9KlS1m7di1r1qwBzAMJwD///ENGRgbBwcEFvmZISAiA8/qts23fvp1XXnmF559/nsqVK+e7j969e3PFFVewdu3aQo8QnZycXKh8AMHBwTnyXXfdddSpU4fXX38dMK8XOnnyZJ5d2d544w38/f1z3PKbjuLRRx8lPT2diIiIQl0zXBSTJk3ixIkTPPPMMwVuO2zYMNq3b1+s0U3Plv37UKFChTwft9lsDBw4kNOnTxMREZHr2rGzVahQwbm/bC1atCjUrVq1annuc/r06dx7773cc889vPDCC3luY7fbufXWWzl9+jQtWrTI1Y3sqaeeyvFve+GFF+b7HkRECkvH47zpeFw87n48Bpy/23mN5B8VFUVWVhZHjx7l6NGjGIZBeHh4ru3OXVfQ+wbzcrI2bdpw7bXX8vHHH9OlSxeGDRtGVlZWju0uuugi2rdvz+nTp7ntttvynXEg+7XObSMpPSq6xeOcPUDI2euqV68OmN+4/vzzz7zwwguMGDGCjh070qZNG+fj2UJDQ/H19c1zMJdzZW+T1weMESNGcPnllxc4jdPQoUNZtmwZt9xyC3fddVee7+Nc4eHhhcoH5oHg7Hw+Pj4MGzaMTz/9lAMHDvDGG2/QpUuXHN/SZ7vppptyfdN75ZVX5vk69erVY/ny5cyYMYPPP/+cd999t1D5CvLnn3/y/PPPM2nSpPMe8ABmz57N6tWrcw0YUhzZvxdHjhzJ8/EDBw4wbNgwWrRoweHDhxk9enS++zpy5AihoaE51p374Sm/W17XeE2fPp1BgwYxYMAApk2blmvglWxbtmzhiSeeoE2bNvz000+8/PLLOR6/5557cvzbalowEXEFHY/zpuNx8bjz8fjcjHl96bN//358fHyoWrUqVatWxWazcfDgwVzbnfv7VtD7zstll13G0aNH+eeff3Ksf+edd1i4cCGXXXYZr732Gj/++GOez89+rXPbSEqP5ukWjzN79mz69OnjXP7hhx/YvXs3gwYNAnAWJna7Pcfz3nzzzRzLfn5+NGvWLEc3OMMw+Pvvvzl+/DgnT550dmlbunQpFStWpEGDBjn28emnn7Js2TI2bNhQYO7sLmxTp07lkksuYcCAASxevDjfQgrg0ksvZebMmfzyyy/OLlTZf6zP/qP93XffkZaWxqWXXprj+YMGDWL8+PHcdtttbN++ncmTJ+f5OjVq1KB169Y51lWuXDnHSNnZHn74YSIiIoiIiGDEiBHcf//9tG/fPlfbFNX9999P8+bNufvuu8+73fHjx3nooYe4//77ady4cYleEyAgIIB69erlOcppZmYmt9xyCzabja+//prZs2czevRoOnbsSO/evXNsm5GRwZ49e+jZs2eO9evWrStUjrp16+ZYnjFjBoMGDeL222/nnXfeyff35OTJk/Tt25c6deqwfPlyHnnkER555BGuuOIKLr/8csD89j0qKqpQOURECkvHYx2Py8Px+GwNGzbkggsuYM6cOYwePdr5O3Py5EnmzZvnHNEcoHXr1syfP58XX3zR2cX8xIkTfPXVV4V+33kxDIOVK1dSpUqVHF9g/fLLL4wcOZI77riDt99+m3bt2tGvXz82btxI1apVc+wje5YBV/y7SSFZdjW5yH+KOnBLdHS0cffddxuLFy823n77bSMsLMy44IILjMOHDxuGYc5feOGFFxq1a9c25syZYyxevNgYNmyY0aBBg1yDqsydO9cAjEGDBhkJCQnG7bffblSqVMmoUKGC0blzZ+Obb74xJkyYYPj6+hqPPvqo83nZA2v4+voaI0eOzJHz3Nc4e+CWbCtXrjR8fHyMl19++bzvOXtgjsaNGxvz5s0z3nzzTSMsLMwAjJo1axozZsww5s6da9SrV8+oU6dOjsE6st13330GYNSuXTvHoB9n5y3qwC3ZTp06ZTRt2tRo3bq1kZ6enmOft912m7Ft27Yct44dOxpRUVHGtm3bnNsPGDDA8PX1NXx8fHL8DmT/e587cIuvr68RFRWVY/CZcwd/yU9+A7fcddddRmRkZK7148aNM3x8fIwlS5Y41/Xq1cuoUqWK8ddff+XYdsOGDQZgLFiwoMAcBfn4448NHx8f49JLLzW+//57Y/Xq1Tlup0+fdm57++23G0FBQcaWLVsMwzCMtLQ0o1WrVkadOnWMo0ePFvhaJ0+eND755BPjk08+MR588EEDMMaPH2988sknxqJFi0r8XkTEc+h4nD8dj8vn8Tivebpnz55tAEbPnj2NL774wvj444+NNm3aGAEBAca3337r3O7rr782fHx8jI4dOxqff/658emnnxqXX365Ubt2bcNmsxXqfV977bXG448/bsybN89YsWKFMWfOHCMuLs4AjNdff9253YkTJ4yLL77YaNy4sXPgwT///NOoXLmycd111+Xa74gRI4zq1asbWVlZJWwhKSwV3WK5oh7kExISjP79+xtVqlQxAgMDjZ49exo7duzIse3WrVuN2NhYIzg42KhatarRt29fIykpKdcB2DAM4+WXXzYiIiKMkJAQ44knnnAe3GbOnGlERkYaISEhxsiRI3McxLL/CIeFhRn//vtvjv0V5iBvGIbxyCOPGHa73di0adN53/dPP/1ktGnTxrDb7UanTp2co6W+9957RkxMjGG3240rrrjC2LZtW57PX7FihQEYzz33XJ6Pl+QgbxiG8fPPPxt2u914+OGHc+yzoFv2wXvAgAEGYNx777059pvfQZ5zRorN3kdJDvJLly41AGPt2rXOdQkJCYaPj0+u35fDhw8btWrVMtq0aZPjQ9Xjjz9uhIaG5iiIiyu7TQpqu7fffjvPf5M//vjDCAkJMa6//voCXyv73zWvW2HaVES8h47HOh7reJxTXkW3YZgju19++eVGhQoVjIoVKxpdunQxvv/++1zP//zzz41mzZoZAQEBRq1atYznnnvOGDlypFG1atUC37dhmCO2t2nTxqhatarh6+trVK9e3ejWrZvx1Vdf5dgu+wv4X3/9Ncf67FlJXnnlFee6rKwso3bt2saIESOK0SJSXCq6xWMU9sNASeU1jYY7Keq0TvHx8UZgYKBx6NCh0g1WSNkfFs4+eLuDZs2anXe6jvPJyMgw6tSpk+Psi4iIt9Lx2KTjcenw5uNxenq60bhxYyM2NjbXYyV530WxZMkSw8fHJ98vh6R0aCA1ES+1Zs0aZs6cyRtvvME999yTa+Aaq/j7+9OwYUP8/f2tjpLD888/z4wZM9i7d2+Rnztr1ixOnDjBQw89VArJRETEk+l4XDTedDy+++67+eijj1i5ciVz584lLi6Obdu2MWbMmFzbluR9F8XEiRO5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8fac+PjjjwOU+r/WrFnTIUdsbGyn+/SFukuen5shISFaunSpx/HBrPuePXv08MMPKz4+XiEhIXr77bfdrvd3zigoKND48eMVERGh8ePHq7Cw0KFbgK74On/d6rp6TqAjf9abW92WLVs0YcKEtr+Z7HK59N577wU7Vr/yyiuvKCQkRCtWrAh2lD7Nn9dTvYWmuweam5u1YMECPf300x6vb2lpUVZWlhobG7V3717l5+eroKBAK1eu7PS4K1asUGFhofLz87V37179+9//1ty5c9XS0uLEzZAkZWRk6MyZM26XJ598UmPGjNGkSZM63Xf27Nlu++3atcuxnJ15+eWX3XL88Ic/7HT8hg0btHHjRm3evFnl5eWKjY3V1772NTU0NAQosfTxxx+rtbVVr732mo4ePapNmzZp69atWr16dZf7BqPub775plasWKEf/OAHqqys1NSpUzVnzhydOHHC4/iamho99NBDmjp1qiorK7V69Wo988wzKigocDzrzcrKyrR06VIdOHBAxcXFunbtmmbOnKnGxsYu9z1+/LhbnceNGxeAxB19+ctfdstRVVXldWxfqbsklZeXu+UuLi6WJC1YsKDT/YJR98bGRk2cOFGbN2/2eL0/c8b+/fu1aNEiLVmyREeOHNGSJUu0cOFCHTx40KmbAS98nb/Q9XMCHfVkvblVJSQkaN26dTp06JAOHTqkGTNmaP78+QE/EdJflZeXa9u2bZowYUKwo/QLvrye6lWGHsvLy7OoqKgO23ft2mWhoaF26tSptm2/+c1vLCIiwi5evOjxWBcuXLCwsDDLz89v23bq1CkLDQ21P/7xj72e3Zvm5mYbOXKkvfzyy52Oy87Otvnz5wcmVCcSExNt06ZN3R7f2tpqsbGxtm7durZtV65csaioKNu6dasDCbtvw4YNlpSU1OmYYNX9/vvvt6eeesptW0pKiq1atcrj+O9///uWkpLitu273/2uTZkyxbGM3VFfX2+SrKyszOuY3bt3myQ7f/584IJ5kZubaxMnTuz2+L5adzOz5cuX29ixY621tdXj9X2l7pKssLCw7f/+zhkLFy602bNnu22bNWuWLV68uNczo3O+zl9w1/45ge7pznqDjqKjo+31118Pdow+r6GhwcaNG2fFxcU2bdo0W758ebAj9Wm+vp7qTZzpdtD+/fuVmpqq+Pj4tm2zZs1S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",
|
||
"text/plain": [
|
||
"<Figure size 1000x500 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"# Диапазоны x для функций\n",
|
||
"x1 = np.linspace(-10, 10, 400)\n",
|
||
"x2 = np.linspace(0.1, 5, 400)\n",
|
||
"\n",
|
||
"# Функции\n",
|
||
"y1 = 2 * x1 - 1\n",
|
||
"y2 = np.log(3 * x2)\n",
|
||
"\n",
|
||
"# Построение первого графика\n",
|
||
"plt.figure(figsize=(10, 5))\n",
|
||
"\n",
|
||
"plt.subplot(1, 2, 1)\n",
|
||
"plt.plot(x1, y1, 'r--', label='f(x)=2x-1')\n",
|
||
"plt.title(\"График функции f(x)=2x-1\")\n",
|
||
"plt.xlabel(\"x\")\n",
|
||
"plt.ylabel(\"f(x)\")\n",
|
||
"plt.grid(True)\n",
|
||
"plt.legend()\n",
|
||
"\n",
|
||
"# Построение второго графика\n",
|
||
"plt.subplot(1, 2, 2)\n",
|
||
"plt.plot(x2, y2, 'b-.', label='f(x)=log(3x)')\n",
|
||
"plt.title(\"График функции f(x)=log(3x)\")\n",
|
||
"plt.xlabel(\"x\")\n",
|
||
"plt.ylabel(\"f(x)\")\n",
|
||
"plt.grid(True)\n",
|
||
"plt.legend()\n",
|
||
"\n",
|
||
"# Отображение графиков\n",
|
||
"plt.tight_layout()\n",
|
||
"plt.show()"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.12.4"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|