diff --git a/HW2 Numpy b/HW2 Numpy new file mode 100644 index 0000000..3c2cebd --- /dev/null +++ b/HW2 Numpy @@ -0,0 +1,385 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[ ]: + + +Задание 1 +Загрузите модуль pyplot библиотеки matplotlib с псевдонимом plt, а также библиотеку numpy с псевдонимом np. +Примените магическую функцию %matplotlib inline для отображения графиков в Jupyter Notebook и настройки конфигурации ноутбука со значением 'svg' для более четкого отображения графиков. +Создайте список под названием x с числами 1, 2, 3, 4, 5, 6, 7 и список y с числами 3.5, 3.8, 4.2, 4.5, 5, 5.5, 7. +С помощью функции plot постройте график, соединяющий линиями точки с горизонтальными координатами из списка x и вертикальными - из списка y. +Затем в следующей ячейке постройте диаграмму рассеяния (другие названия - диаграмма разброса, scatter plot). + + +# In[53]: + + +import numpy as np +import pandas as pd +from matplotlib import pyplot as plt + + +# In[54]: + + +get_ipython().run_line_magic('matplotlib', 'inline') + + +# In[3]: + + +x = np.arange(1, 8) + +print(x) + + +# In[4]: + + +y = np.array([3.5, 3.8, 4.2, 4.5, 5, 5.5, 7]) + +print(y) + + +# In[5]: + + +plt.plot(x, y) + +plt.show() + + +# In[6]: + + +plt.scatter(x, y) + +plt.show() + + +# In[ ]: + + +Задание 2 +С помощью функции linspace из библиотеки Numpy создайте массив t из 51 числа от 0 до 10 включительно. +Создайте массив Numpy под названием f, содержащий косинусы элементов массива t. +Постройте линейную диаграмму, используя массив t для координат по горизонтали,а массив f - для координат по вертикали. +Линия графика должна быть зеленого цвета. +Выведите название диаграммы - 'График f(t)'. Также добавьте названия для горизонтальной оси - 'Значения t' +и для вертикальной - 'Значения f'. +Ограничьте график по оси x значениями 0.5 и 9.5, а по оси y - значениями -2.5 и 2.5. + + +# In[7]: + + +t = np.linspace(0, 10, 51) +t + + +# In[8]: + + +f = np.cos(t) +f + + +# In[9]: + + +plt.plot(t, f,color="green") +plt.title("График f(t)") +plt.xlabel("Значения t") +plt.ylabel("Значения f") +plt.axis([0.5, 9.5, -2.5, 2.5]) +plt.show() + + +# In[ ]: + + +С помощью функции linspace библиотеки Numpy создайте массив x из 51 числа от -3 до 3 включительно. +Создайте массивы y1, y2, y3, y4 по следующим формулам: +y1 = x**2 +y2 = 2 * x + 0.5 +y3 = -3 * x - 1.5 +y4 = sin(x) +Используя функцию subplots модуля matplotlib.pyplot, создайте объект matplotlib.figure.Figure с названием fig +и массив объектов Axes под названием ax,причем так, чтобы у вас было 4 отдельных графика в сетке, состоящей +из двух строк и двух столбцов. В каждом графике массив x используется для координат по горизонтали. +В левом верхнем графике для координат по вертикали используйте y1,в правом верхнем - y2, в левом нижнем - y3, +в правом нижнем - y4.Дайте название графикам: 'График y1', 'График y2' и т.д. +Для графика в левом верхнем углу установите границы по оси x от -5 до 5. +Установите размеры фигуры 8 дюймов по горизонтали и 6 дюймов по вертикали. +Вертикальные и горизонтальные зазоры между графиками должны составлять 0.3. + + +# In[10]: + + +x = np.linspace(-3, 3, 51) +x + + +# In[11]: + + +y1 = x**2 +y2 = 2 * x + 0.5 +y3 = -3 * x - 1.5 +y4 = np.sin(x) + + +# In[12]: + + +fig, ax = plt.subplots(nrows=2, ncols=2) +ax1, ax2, ax3, ax4 = ax.flatten() + +fig.set_size_inches(8, 6) +fig.subplots_adjust(wspace=0.3, hspace=0.3) + +ax1.plot(x, y1) +ax1.set_title("График y1") +ax1.set_xlim([-5, 5]) +ax2.plot(x, y2) +ax2.set_title("График y2") +ax3.plot(x, y3) +ax3.set_title("График y3") +ax4.plot(x, y4) +ax4.set_title("График y4") + + +# In[ ]: + + +В этом задании мы будем работать с датасетом, в котором приведены данные по мошенничеству с кредитными данными: + Credit Card Fraud Detection (информация об авторах: Andrea Dal Pozzolo, Olivier Caelen, Reid A. Johnson and + Gianluca Bontempi. Calibrating Probability with Undersampling for Unbalanced Classification. + In Symposium on Computational Intelligence and Data Mining (CIDM), IEEE, 2015). +Ознакомьтесь с описанием и скачайте датасет creditcard.csv с сайта Kaggle.com по ссылке: +Credit Card Fraud Detection +Данный датасет является примером несбалансированных данных, так как мошеннические операции с картами встречаются реже обычных. +Импортируйте библиотеку Pandas, а также используйте для графиков стиль “fivethirtyeight”. +Посчитайте с помощью метода value_counts количество наблюдений для каждого значения целевой переменной Class и примените +к полученным данным метод plot, чтобы построить столбчатую диаграмму. Затем постройте такую же диаграмму, используя +логарифмический масштаб. +На следующем графике постройте две гистограммы по значениям признака V1 - одну для мошеннических транзакций (Class равен 1) +и другую - для обычных (Class равен 0). Подберите значение аргумента density так, чтобы по вертикали графика было расположено +не число наблюдений, а плотность распределения. Число бинов должно равняться 20 для обеих гистограмм, а коэффициент alpha +сделайте равным 0.5, чтобы гистограммы были полупрозрачными и не загораживали друг друга. Создайте легенду с двумя значениями: + “Class 0” и “Class 1”. Гистограмма обычных транзакций должна быть серого цвета, а мошеннических - красного. Горизонтальной + оси дайте название “V1” + + +# In[ ]: + + +value_counts +plt.plot(x, y, label="x^2", color="green", linestyle="dotted") + + +# In[66]: + + + +bmi_df = pd.read_excel('creditcard.xlsx') +bmi_df.iloc[:10, :4] + + +# In[ ]: + + +1)Создать одномерный массив Numpy под названием a из 12 последовательных целых чисел чисел от 12 до 24 невключительно + + +# In[24]: + + +a = np.arange(12, 24) +a + + +# In[ ]: + + +2) Создать 5 двумерных массивов разной формы из массива a. Не использовать в аргументах метода reshape число -1. + + +# In[31]: + + +b = a.reshape(2, 6) +print(b) +c = a.reshape(6, 2) +print(c) +d = a.reshape(3, 4) +print(d) +e = a.reshape(4, 3) +print(e) +f = a.reshape(12, 1) +print(f) + + +# In[ ]: + + +3) Создать 5 двумерных массивов разной формы из массива a. Использовать в аргументах метода reshape число -1 +(в трех примерах - для обозначения числа столбцов, в двух - для строк). + + +# In[35]: + + +b = a.reshape(2, -1) +print(b) +c = a.reshape(6, -1) +print(c) +d = a.reshape(3, -1) +print(d) +e = a.reshape(-1, 3) +print(e) +f = a.reshape(-1, 1) +print(f) + + +# In[ ]: + + +get_ipython().set_next_input('4) Можно ли массив Numpy, состоящий из одного столбца и 12 строк, назвать одномерным');get_ipython().run_line_magic('pinfo', 'одномерным') + + +# In[ ]: + + +Нет + + +# In[ ]: + + +5) Создать массив из 3 строк и 4 столбцов, состоящий из случайных чисел с плавающей запятой из нормального распределения со +средним, равным 0 и среднеквадратичным отклонением, равным 1.0. Получить из этого массива одномерный массив с таким же +атрибутом size, как и исходный массив. + + +# In[41]: + + +b = np.random.randn(3, 4) +a = b.flatten() +print(b.size) +print(a.size) + + +# In[ ]: + + +6) Создать массив a, состоящий из целых чисел, убывающих от 20 до 0 невключительно с интервалом 2. + + +# In[45]: + + +a = np.arange(20, 0, -2) +print(a) + + +# In[ ]: + + +7) Создать массив b, состоящий из 1 строки и 10 столбцов: целых чисел, убывающих от 20 до 1 невключительно с интервалом 2. + get_ipython().set_next_input(' В чем разница между массивами a и b');get_ipython().run_line_magic('pinfo', 'b') + + +# In[ ]: + + + + + +# In[ ]: + + +8) Вертикально соединить массивы a и b. a - двумерный массив из нулей, число строк которого больше 1 и на 1 меньше, +чем число строк двумерного массива b, состоящего из единиц. Итоговый массив v должен иметь атрибут size, равный 10. + + +# In[52]: + + +a = np.zeros((2, 2)) +b = np.ones((3, 2)) +c = np.vstack((a, b)) +c + + +# In[ ]: + + +9) Создать одномерный массив а, состоящий из последовательности целых чисел от 0 до 12. Поменять форму этого массива, чтобы +получилась матрица A (двумерный массив Numpy), состоящая из 4 строк и 3 столбцов. Получить матрицу At путем транспонирования +матрицы A. Получить матрицу B, умножив матрицу A на матрицу At с помощью матричного умножения. Какой размер имеет матрица B? +get_ipython().set_next_input('Получится ли вычислить обратную матрицу для матрицы B и почему');get_ipython().run_line_magic('pinfo', 'почему') + + +# In[ ]: + + + + + +# In[ ]: + + +10) Инициализируйте генератор случайных числе с помощью объекта seed, равного 42. + + +# In[ ]: + + + + + +# In[ ]: + + +11) Создайте одномерный массив c, составленный из последовательности 16-ти случайных равномерно распределенных целых чисел от 0 +до 16 невключительно. + + +# In[ ]: + + + + + +# In[ ]: + + +12) Поменяйте его форму так, чтобы получилась квадратная матрица C. Получите матрицу D, поэлементно прибавив матрицу B из +предыдущего вопроса к матрице C, умноженной на 10. Вычислите определитель, ранг и обратную матрицу D_inv для D. + + +# In[ ]: + + + + + +# In[ ]: + + +13) Приравняйте к нулю отрицательные числа в матрице D_inv, а положительные - к единице. Убедитесь, что в матрице D_inv остались +только нули и единицы. С помощью функции numpy.where, используя матрицу D_inv в качестве маски, а матрицы B и C - в качестве +источников данных, получите матрицу E размером 4x4. Элементы матрицы E, для которых соответствующий элемент матрицы D_inv +равен 1, должны быть равны соответствующему элементу матрицы B, а элементы матрицы E, для которых соответствующий элемент +матрицы D_inv равен 0, должны быть равны соответствующему элементу матрицы C. + + +# In[ ]: + + + + diff --git a/HW2 Pandas b/HW2 Pandas new file mode 100644 index 0000000..d525ac1 --- /dev/null +++ b/HW2 Pandas @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[29]: + + +import pandas as pd +import numpy as np + + +# In[19]: + + +a = { + "author_id": [1, 2, 3], + "author_name": ['Тургенев', 'Чехов', 'Островский'] +} + +authors = pd.DataFrame(a) + +authors + + +# In[20]: + + +a = { + "author_id": [1, 1, 1, 2, 2, 3, 3], + "book_title ": ['Отцы и дети', 'Рудин', 'Дворянское гнездо', 'Толстый и тонкий', 'Дама с собачкой', 'Гроза', 'Таланты и поклонники'], + "price": [450, 300, 350, 500, 450, 370, 290] +} + +book = pd.DataFrame(a) + +book + + +# In[21]: + + +authors_price = authors.merge(book, left_on="author_id", right_on="author_id", how="left") +authors_price + + +# In[22]: + + +top5 = authors_price.nlargest(5, "price") +top5 + + +# In[23]: + + +df1 = authors_price.groupby('author_name').agg({'price': 'min'}).rename(columns={'price':'min_price'}) +df1 +df2 = authors_price.groupby('author_name').agg({'price': 'max'}).rename(columns={'price':'max_price'}) +df2 +df3 = authors_price.groupby('author_name').agg({'price': 'mean'}).rename(columns={'price':'mean_price'}) +df3 + +authors_stat = pd.concat([df1, df2, df3], axis = 1) +authors_stat + + +# In[24]: + + +authors_price["cover"] = ['твердая', 'мягкая', 'мягкая', 'твердая', 'твердая', 'мягкая', 'мягкая'] +authors_price + + +# In[42]: + + +book_info = pd.pivot_table(authors_price, index=['author_name'], values="price", columns=['cover'], aggfunc=np.sum, + fill_value=0) +book_info + + +# In[39]: + + +get_ipython().run_line_magic('pinfo', 'pd.pivot_table') + + +# In[43]: + + +book_info.to_pickle("book_info.pkl") + + +# In[44]: + + +book_info2 = pd.read_pickle("book_info.pkl") + + +# In[45]: + + +book_info2 + + +# In[ ]: + + + + diff --git a/HW4 b/HW4 new file mode 100644 index 0000000..1d74665 --- /dev/null +++ b/HW4 @@ -0,0 +1,103 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[ ]: + + +#Импортируйте библиотеки pandas и numpy. + + +# In[1]: + + +import numpy as np +import pandas as pd + + +# In[13]: + + +#Загрузите "Boston House Prices dataset" из встроенных наборов данных библиотеки sklearn. +#Создайте датафреймы X и y из этих данных. + + +# In[7]: + + +from sklearn.datasets import load_boston +boston = load_boston() + + +# In[ ]: + + +#Разбейте эти датафреймы на тренировочные (X_train, y_train) и тестовые (X_test, y_test) с помощью функции train_test_split так, +#чтобы размер тестовой выборки + + +# In[10]: + + +X = pd.DataFrame(boston.data, columns=boston.feature_names) +y = boston.target + + +# In[ ]: + + +#составлял 30% от всех данных, при этом аргумент random_state должен быть равен 42. + + +# In[11]: + + +from sklearn.model_selection import train_test_split +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) +X_train.shape, X_test.shape, y_train.shape, y_test.shape + + +# In[ ]: + + +#Создайте модель линейной регрессии под названием lr с помощью класса LinearRegression из модуля sklearn.linear_model. + + +# In[12]: + + +from sklearn.linear_model import LinearRegression +lr = LinearRegression() + + +# In[ ]: + + +#Обучите модель на тренировочных данных (используйте все признаки) и сделайте предсказание на тестовых. + + +# In[14]: + + +lr.fit(X_train, y_train) + + +# In[20]: + + +y_pred = lr.predict(X_test) +y_pred.shape + + +# In[21]: + + + + + +# In[ ]: + + +#Вычислите R2 полученных предказаний с помощью r2_score из модуля sklearn.metrics. + + +# In[23]: \ No newline at end of file