<jupyter_start><jupyter_text>Тема “Вычисления с помощью Numpy”  Задание 1Импортируйте библиотеку Numpy и дайте ей псевдоним np.Создайте массив Numpy под названием a размером 5x2, то есть состоящий из 5 строк и 2 столбцов. Первый столбец должен содержать числа 1, 2, 3, 3, 1, а второй - числа 6, 8, 11, 10, 7. Будем считать, что каждый столбец - это признак, а строка - наблюдение. Затем найдите среднее значение по каждому признаку, используя метод mean массива Numpy. Результат запишите в массив mean_a, в нем должно быть 2 элемента.<jupyter_code>import numpy as np


a = np.array([[1, 6],
              [2, 8],
              [3, 11],
              [3, 10],
              [1, 7]])
mean_a = a.mean(axis=0)
mean_a<jupyter_output><empty_output><jupyter_text>Задание 2Вычислите массив a_centered, отняв от значений массива “а” средние значения соответствующих признаков, содержащиеся в массиве mean_a. Вычисление должно производиться в одно действие. Получившийся массив должен иметь размер 5x2.<jupyter_code>a_centered = np.subtract(a, mean_a)
a_centered<jupyter_output><empty_output><jupyter_text>Задание 3Найдите скалярное произведение столбцов массива a_centered. В результате должна получиться величина a_centered_sp. Затем поделите a_centered_sp на N-1, где N - число наблюдений.<jupyter_code>a_centered_sp = np.dot(a_centered[:, 0], a_centered[:, 1]) / 4
a_centered_sp<jupyter_output><empty_output><jupyter_text>Задание 4**Число, которое мы получили в конце задания 3 является ковариацией двух признаков, содержащихся в массиве “а”. В задании 4 мы делили сумму произведений центрированных признаков на N-1, а не на N, поэтому полученная нами величина является несмещенной оценкой ковариации.Подробнее узнать о ковариации можно здесь:[Выборочная ковариация и выборочная дисперсия — Студопедия](https://studopedia.ru/9_153900_viborochnaya-kovariatsiya-i-viborochnaya-dispersiya.html)В этом задании проверьте получившееся число, вычислив ковариацию еще одним способом - с помощью функции np.cov. В качестве аргумента m функция np.cov должна принимать транспонированный массив “a”. В получившейся ковариационной матрице (массив Numpy размером 2x2) искомое значение ковариации будет равно элементу в строке с индексом 0 и столбце с индексом 1.<jupyter_code>ps = np.cov(a.T)
ps[0, 1] # значение ковариации<jupyter_output><empty_output><jupyter_text>Тема “Работа с данными в Pandas”  Задание 1* Импортируйте библиотеку Pandas и дайте ей псевдоним pd.* Создайте датафрейм authors со столбцами author_id и author_name,в которых соответственно содержатся данные:`[1, 2, 3]` и `['Тургенев', 'Чехов', 'Островский']`.* Затем создайте датафрейм `book` cо столбцами `author_id`, `book_title` и `price`,в которых соответственно содержатся данные: `[1, 1, 1, 2, 2, 3, 3]`,```['Отцы и дети', 'Рудин', 'Дворянское гнездо', 'Толстый и тонкий',    'Дама с собачкой', 'Гроза', 'Таланты и поклонники'],    [450, 300, 350, 500, 450, 370, 290].```<jupyter_code>import pandas as pd

authors = pd.DataFrame({
    "author_id": [1, 2, 3],
    "author_name": ['Тургенев', 'Чехов', 'Островский']})
authors
book = pd.DataFrame(
    {"author_id": [1, 1, 1, 2, 2, 3, 3],
    "book_title": ['Отцы и дети', 'Рудин', 'Дворянское гнездо', 'Толстый и тонкий', 'Дама с собачкой', 'Гроза', 'Таланты и поклонники'],
    "price": [450, 300, 350, 500, 450, 370, 290]})
book<jupyter_output><empty_output><jupyter_text>Задание 2Получите датафрейм authors_price, соединив датафреймы authors и books по полю author_id.<jupyter_code>authors_price = pd.merge(
    left=authors,
    right=book,
    on='author_id',
    how='outer')
authors_price<jupyter_output><empty_output><jupyter_text>Задание 3Создайте датафрейм top5, в котором содержатся строки из authors_price с пятью самыми дорогими книгами.<jupyter_code>top5 = authors_price.nlargest(5, 'price')
top5<jupyter_output><empty_output><jupyter_text>Задание 4Создайте датафрейм authors_stat на основе информации из authors_price. В датафрейме authors_stat должны быть четыре столбца:author_name, min_price, max_price и mean_price,в которых должны содержаться соответственно имя автора, минимальная, максимальная и средняя цена на книги этого автора.<jupyter_code># authors_stat =
groupby = authors_price.groupby('author_name')
t = groupby.agg({
    # "price": "min",
    "price": "max",
    # "mean_price": "mean"
})

a = pd.merge(
    groupby.agg({"price": "min"}),
    groupby.agg({"price": "max"}),
    on='author_name',
    how='outer')
a = a.merge(
    groupby.agg({"price": "mean"}),
    on='author_name',
    how='outer')
h = pd.DataFrame({
    "author_name": a.index,
    "min_price": a["price_x"],
    "max_price": a["price_y"],
    "mean_price": a["price"]
})
h<jupyter_output><empty_output><jupyter_text>Задание 5**Создайте новый столбец в датафрейме authors_price под названием cover, в нем будут располагаться данные о том, какая обложка у данной книги - твердая или мягкая. В этот столбец поместите данные из следующего списка:`['твердая', 'мягкая', 'мягкая', 'твердая', 'твердая', 'мягкая', 'мягкая']`.Просмотрите документацию по функции pd.pivot_table с помощью вопросительного знака.Для каждого автора посчитайте суммарную стоимость книг в твердой и мягкой обложке. Используйте для этого функцию pd.pivot_table. При этом столбцы должны называться "твердая" и "мягкая", а индексами должны быть фамилии авторов. Пропущенные значения стоимостей заполните нулями, при необходимости загрузите библиотеку Numpy.Назовите полученный датасет book_info и сохраните его в формат pickle под названием "book_info.pkl". Затем загрузите из этого файла датафрейм и назовите его book_info2. Удостоверьтесь, что датафреймы book_info и book_info2 идентичны.<jupyter_code>authors_price["cover"] = [
    'твердая', 'мягкая', 'мягкая', 'твердая',
    'твердая', 'мягкая', 'мягкая']
authors_price
?pd.pivot_table
book_info = pd.pivot_table(authors_price,index='author_name',columns='cover',values='price',aggfunc=np.sum)
book_info['мягкая'].fillna(0, inplace=True)
book_info['твердая'].fillna(0, inplace=True)
book_info
book_info.to_pickle('book_info.plk')
book_info2 = pd.read_pickle('book_info.plk')
book_info2<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10809050952303435, 'fraction_numerical': 0.021650659286993324, 'mean_word_length': 5.759075907590759, 'pattern_counts': {'":': 15, '<': 37, '<?xml version=': 0, '>': 37, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '650288', 'license': 'MIT', 'n_tokens_mistral': 2667, 'n_tokens_neox': 2913, 'n_words': 625, 'path': 'homeworks/lesson_2/homework_2.ipynb', 'repo_name': 'shishkinav/library_for_datasience_1', 'size': '6143'}