AI Notebook 1 — Основа Python
Типы данных, условия, циклы и старт работы с NumPy.
Edit on GitHubИсточник:
pr_Python/Pr_Ai/Notebook1.ipynb
Дисциплина «Искусственный интеллект»
Рабочая тетрадь № 1. Основа Python. Библиотеки.
Петрушенко Александр Дмитриевич
Cдана 25.02.2023
1.1. Теоретический материал – Типы данных
Типы данных Все типы данных в Python относятся к одной из 2-х категорий: изменяемые (mutable) и неизменяемые (immutable). Неизменяемые объекты:
- исловые данные (int, float),
- bool,
- None,
- символьные строки (class 'str'),
- кортежи (tuple). Изменяемые объекты:
- списки (list),
- множества (set),
- словари (dict).
1.2. Пример
Задача: Выведите на печать и определите тип переменной.
x= 3+5.2*7
y= None
z= 'a',5,12.345, (2,'b')
df= [['Антонова Антонина',34,'ж'],['Борисов Борис',26,'м']]
A={1,'title',2,'content'}
print(x,'|',type(x),'\n',y,'|',type(y),'\n',df,'|',type(df),'\n',A,'|',type(A),'\n')Вывод:
39.4 | <class 'float'>
None | <class 'NoneType'>
[['Антонова Антонина', 34, 'ж'], ['Борисов Борис', 26, 'м']] | <class 'list'>
{'content', 1, 2, 'title'} | <class 'set'> 1.3. Пример
Задача: Выведите на печать и определите тип переменной.
x=5 >=2
A={ 1,3,7,8}
B={2,4,5,10,'apple'}
C=A&B
df= 'Антонова Антонина',34,'ж'
z='type'
D=[1,'title',2,'connect']
print(x,'|',type(x),'\n',A,'|',type(A),'\n',B,'|',type(B),'\n',C,'|',type(C),'\n',df,'|',type(df),'\n',z,'|',type(z),'\n',D,'|',type(D),'\n')Вывод:
True | <class 'bool'>
{8, 1, 3, 7} | <class 'set'>
{2, 'apple', 4, 5, 10} | <class 'set'>
set() | <class 'set'>
('Антонова Антонина', 34, 'ж') | <class 'tuple'>
type | <class 'str'>
[1, 'title', 2, 'connect'] | <class 'list'> 2.1. Теоретический материал – Условный оператор
If – Условный оператор
В коде часто приходится проверять выполнимость или невыполнимость каких-то условий. Синтаксис:
if условие1 (булевское выражение) :
код, который выполнится, если условие верно
elif условие2 (булевское выражение):
код, который выполнится, если условие1 было неверно, а условие2 верно
else:
код, который выполнится, если условие1 и условие2 были неверны
Обратите внимание, что код, который должен выполняться внутри каждого условия, записывается с отступом в 4 пробела от уровня if, elif и else: в питоне области видимости переменных обозначаются отступами.
То есть, отступы позволяют понять, где начинается код, который должен выполняться при выполнении условия в if, и где заканчивается.
2.2. Пример
Задача:Вывести на экран является ли переменная х положительной, отрицательной или равна нулю.
x=125
if x<0:
print('x отрицательный')
elif x==0:
print('x равен 0')
else:
print('x положительный')Вывод:
x положительный2.3. Задание
Задача: Напишите код. Задается х, напечатать какому из интервалов принадлежит: (-infinity, -5), [-5, 5] или от (5, +infinity)
x=int(input())
if x < -5:
print('x пренадлежит интервалу от -бесконечности до -5')
elif -5<x<5:
print('x пренадлежит интервалу от -5 до 5')
else:
print('x пренадлежит интервалу от 5 до +бесконечности')Вывод:
45
x пренадлежит интервалу от 5 до +бесконечности3.1. Теоретический материал – Циклы, массивы, срезы
Циклы - for и while
Цикл while проверяет истинность условия, и если условие истинно, то выполняет инструкции цикла.
Синтаксис:
while условие:
инструкции
Инструкции, которые относятся к циклу while, располагаются на последующих строках и должны иметь отступ от начала ключевого слова while.
Цикл for проходит по набору значений, помещает каждое значение в переменную с которой в цикле можно производить различные действия.
Синтаксис:
for переменная in набор_значений:
инструкции
После ключевого слова for идет название переменной, в которую будут помещаться значения. После оператора in указывается набор значений и двоеточие. Инструкции, которые относятся к циклу, располагаются на последующих строках и должны иметь отступ. При создании цикла удобно пользоваться функцией range(a, b), которая создает последовательность чисел от a до b-1.
3.2.1. Пример
Задача:Вывести все числа от 1 до 10 с шагом 3.
x=1
while x <=10:
print(x)
x+=3Вывод:
1
4
7
103.2.2. Пример
Задача:Задан список. Напечатать все элементы списка.
models=['KNN','decision tree','lineral models']
for model in models:
print (model)Вывод:
KNN
decision tree
lineral models3.2.3. Пример
Задача:Создать список от 1 до 99 с шагом 7.
list_int=range(1,100,7)
print(list(list_int))Вывод:
[1, 8, 15, 22, 29, 36, 43, 50, 57, 64, 71, 78, 85, 92, 99]3.2.4. Пример
Задача:Вывести на экран числа от 5 до 105 с шагом 25, используя функцию range()
for i in range(5,106,25):
print(i)Вывод:
5
30
55
80
1053.2.5. Пример
Задача:Срез. Необходимо получить каждый k-й элемент массива a, начиная с элемента с индексом i (включительно) и заканчивая элементом с индексом j (не включительно), c шагом 2. Переставить все элементы в обратном порядке.
a=[1,2,3,4,5,6,7,8,9]
b=a[1:7:2]
c=a[::-1]
print(b)
print(c)Вывод:
[2, 4, 6]
[9, 8, 7, 6, 5, 4, 3, 2, 1]3.3.1 Задание Задача:Выведите числа из примера на while (3.2.1) в обратном порядке.
x=10
while x>=1:
print(x)
x-=3Вывод:
10
7
4
13.3.2 Задание
Задача: При решении задач машинного обучения часто в качестве объектов исследования выступает человек. Создайте список значимых характеристик (признаков), идентифицирующих человека. Выведите список на экран.
id=['Петрушенко','Александр', 'Дмиртриевич',17,'Москва']
for i in id:
print(i)Вывод:
Петрушенко
Александр
Дмиртриевич
17
Москва3.3.3 Задание
Задача:Создать список чисел от 2 до 15 с шагом 1.
a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
b=a[2:15:1]
print(b)Вывод:
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]3.3.4 Задание
Задача: Выведите числа из примера на for c функцией range() (3.2.4) в обратном порядке.
for i in range(105,4,-25):
print(i)Вывод:
105
80
55
30
53.3.5 Задание
Задача: Срез. Напишите код, который все элементы массива x с четными индексами переставит в обратном порядке. Т.е. если x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], то код должен сформировать [8, 1, 6, 3, 4, 5, 2, 7, 0, 9].
a=[0,1,2,3,4,5,7,8,9,10]
b=a[::-1]
print(b)Вывод:
[10, 9, 8, 7, 5, 4, 3, 2, 1, 0]4.1. Теоретический материал - Библиотеки
Машинное обучение опирается на фундаментальные понятия и законы математики и информатики. Библиотека математических функций (math) применяется при решении большинства прикладных задач анализа данных. Также, и некоторые другие библиотеки Python содержат математические функции (например, NumPy). Важную роль играет библиотека matplotlib, которая позволяет производить визуализацию расчетов в удобной для восприятия человеком форме: графики, диаграммы, гистограммы.
Подключение библиотек – синтаксис:
import math as m
import numpy as np
import matplotlib.pyplot as plt
etc…
Библиотеки в python содержат не только функции, позволяющие решать различные задачи, но и некоторые популярные константы, например число Эйлера.
4.2.1 Пример
Задача:Рассчитать синус от е радиан и вывести результат на экран
import math as m
print (m.sin(m.e))Вывод:
0.410781290502908854.2.2 Пример
Задача: Для функции sin〖(xe^cos〖(x)〗 )〗 на интервале [0;10] с шагом 0,05 построить график функции, закрасить площадь под ним и вычислить значение этой площади.
Для вычисления площади воспользуйтесь функцией* trapz(), вычисляющей интеграл по правилу трапеции. Для ее корректной работы необходимо подключить следующие библиотеки:
from scipy.integrate import simps
from numpy import trapz
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import simps
from numpy import trapz
x=np.arange(0.0,10,0.1)
y=np.abs(np.sin(x*np.exp(np.cos(x))))
plt.grid()
plt.plot(x,y,c='r')
plt.fill_between(x,y)
area= trapz(y)
print(area)Вывод:
73.50792907748662<Figure size 432x288 with 1 Axes>Графический вывод (изображение) опущен в версии MDX.
4.2.3 Пример
Задача:Дано некоторое распределение оценок в группе за экзамен. Нарисовать круговую и точечную диаграммы распределения.
from matplotlib import pyplot as plt
import numpy as np
marks = ['Неуд','Удовл','Хор','Отл']
data = [3,7,8,4]
fig= plt.figure(figsize=(10,7))
plt.pie(data, labels=marks)
plt.show()
plt.grid()
plt.scatter (marks,data)Вывод:
<Figure size 720x504 with 1 Axes>Графический вывод (изображение) опущен в версии MDX.
<matplotlib.collections.PathCollection at 0x7f08927ed970><Figure size 432x288 with 1 Axes>Графический вывод (изображение) опущен в версии MDX.
4.3.1 Задание
Задача: Задайте массив случайных значений из интервала (0; 1). Рассчитайте средние и медианные значения для массива, сравните результаты, какие выводы можно сделать о значениях? Постройте точечную диаграмму рассеяния полученного ряда.
import numpy as np
import matplotlib.pyplot as plt
size = 10
x = range(0, size)
random = np.random.random_sample(size = size)
average = np.average(random)
median = np.median(random)
print(random, average, median)
if average == median:
print("Средние и медианные значения массива равны")
elif average > median:
print("Среднее значение больше медианного")
else:
print("Медианное значение больше среднего")
fig, ax = plt.subplots(figsize=(10, 6))
ax.scatter(x, random)
plt.show() Вывод:
[0.58671251 0.15229019 0.62911536 0.89745994 0.8510713 0.88482478
0.71192032 0.16376609 0.76834299 0.66735921] 0.6312862696977405 0.6896397626457034
Медианное значение больше среднего<Figure size 720x432 with 1 Axes>Графический вывод (изображение) опущен в версии MDX.
4.3.2 Задание
Задача:
Дана функция Создать массив из 10 значений функции (x, например, изменяется от 1 до 10). Выделить срез первой половины массива и построить графики для основного массива, используя plt.plot(), для среза – точечный (plt.scatter()).
import numpy as np
import matplotlib.pyplot as plt
import random
max=[]
midium=[]
n=11
fig, ax = plt.subplots()
ax.set_facecolor('black')
for x in range(1, n):
max.append(((1+np.e**x**(0.5)+np.cos(x**2))**0.5/
abs(1-np.sin(x)**3))+np.log10(abs(x*2)))
print(max)
plt.plot(max)
plt.show()
for i in range (5):
midium.append(max[i])
print(midium)
plt.scatter(midium, midium, c = 'black')
plt.show() Вывод:
[5.406800311515036, 9.111356460134092, 3.1809640555540097, 2.8048252216549905, 2.7901439656964655, 4.532927745789639, 6.622770906841313, 136.6755495091847, 6.2828852716476575, 5.6493479521959165]<Figure size 432x288 with 1 Axes>Графический вывод (изображение) опущен в версии MDX.
[5.406800311515036, 9.111356460134092, 3.1809640555540097, 2.8048252216549905, 2.7901439656964655]<Figure size 432x288 with 1 Axes>Графический вывод (изображение) опущен в версии MDX.
4.3.3 Задание
Задача:
*Дана функция |cos(xe^((cos(x)+ln(x+1) ) ) ) | Построить график на интервале (0, 10) с шагом 1 с заливкой площади и найти эту площадь под ним. Для вычисления площади воспользуйтесь функцией trapz(), вычисляющей интеграл по правилу трапеции.
Для ее корректной работы необходимо подключить следующие библиотеки:
from scipy.integrate import simps
from numpy import trapz*
from scipy.integrate import simps
from numpy import trapz
import numpy as np
import matplotlib.pyplot as plt
y=[]
x=np.arange(0.0, 10, 1)
for i in range(1, 11):
y.append((np.cos(i*np.e**((np.cos(i)+np.log10(i+1))))**2)**0.5)
print(max)
plt.grid()
plt.plot(x, y, c="r")
plt.fill_between(x, y)
area=trapz(y)
print (area)Вывод:
[5.406800311515036, 9.111356460134092, 3.1809640555540097, 2.8048252216549905, 2.7901439656964655, 4.532927745789639, 6.622770906841313, 136.6755495091847, 6.2828852716476575, 5.6493479521959165]
5.05267727410855<Figure size 432x288 with 1 Axes>Графический вывод (изображение) опущен в версии MDX.
4.3.4 Задание
Задача: Откройте статистические данные по стоимости акций Apple, Microsoft, Google за 12 месяцев 2021 г. Постройте 3 графика на плоскости и оцените их динамику. Подумайте, как можно улучшить визуализацию результатов. Для начальных данных допустимо использовать следующий ресурс: https://finance.yahoo.com
import math
import numpy
import matplotlib.pyplot as plt
Apple = [167.30, 154.73, 170.09,
157.28, 137.13, 147.04,
165.35, 150.7, 140.09,
142.16, 129.62,132.62]
Microsoft = [252.75, 295.2, 294.95,
309.42, 284.47, 272.42,
259.58, 278.01, 260.04,
240.74, 228.11, 154.69]
Google = [89.70, 135.3, 134.17,
140.7, 117.16, 114.14,
109.08, 115.48, 110.55,
99.3, 90.5, 101.28]
rng = numpy.arange(12)
fig, ax = plt.subplots(figsize=(10, 5))
plt.plot(1 + rng, Microsoft, c = 'red', label = 'Microsoft')
plt.plot(1 + rng, Apple, c = 'gray', label = "Apple")
plt.plot(1 + rng, Google, c = 'blue', label = 'Google')
ax.set_xlim(xmin=1 + rng[0], xmax=1 + rng[-1])
ax.legend(loc='upper left')
plt.grid()
plt.show()Вывод:
<Figure size 720x360 with 1 Axes>Графический вывод (изображение) опущен в версии MDX.
4.3.5 Задание
Задача: Создайте простейший калькулятор, включающий основные действия для двух переменных '+','-','∙','÷', а также вычисление следующих функций: e^(x+y),sin〖(x+y)〗,cos〖(x+y)〗,x^y.
import math
x = 5
y = 12
for dev in range(0, 8):
if dev == 0:
print(x + y)
elif dev == 1:
print(x - y)
elif dev == 2:
print(x * y)
elif dev == 3:
print(x / y)
elif dev == 4:
print(math.e ** (x + y))
elif dev == 5:
print(math.sin(x + y))
elif dev == 6:
print(math.cos(x + y))
else:
print(x ** y)Вывод:
17
-7
60
0.4166666666666667
24154952.753575277
-0.9613974918795568
-0.27516333805159693
244140625