Cognitive_technologies/лр1-2/.ipynb_checkpoints/HW1-checkpoint.ipynb

1140 lines
95 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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
}