Жизнь непредсказуема. Иногда хорошие вещи выходят из синего, как вы найдете 100 долларов на полу. И иногда случаются плохие вещи, как ваш рейс отменяется из-за плохой погоды.
Большинство языков программирования имеют модуль для разоблачения случайности. Python не является исключением, приходящим с модулем с именем Случайные
И в этой статье мы будем смотреть на самые важные функции, которые вам нужно использовать.
Абсолютные основы
Прежде чем использовать любую функцию из случайного модуля, мы должны импортировать его.
import random
Поскольку мы имеем дело с компьютерной программой, случайные числа не имеют значения на 100%. Скорее модуль создает псевдослучайные числа, используя функцию генератора.
Функция Core Generator Pypython использует Mersenne Twister Отказ Это один из наиболее широко протестированных генераторов случайных чисел в мире. Однако случайные числа предопределены. Если кто-то видит 624 итераций подряд, они могут предсказать, с точностью 100%, что будет следующие номера. Это также повторяющаяся последовательность. К счастью, это требуется довольно много времени, чтобы повторить себя. Вы должны пройти через 2 ** 19937 – 1 номера (A Mersenne Prime , следовательно, имя), прежде чем вы снова достигнете начала последовательности.
Следовательно, вы не должны использовать случайный модуль для чего-либо, связанных с безопасностью, таких как настройки паролей. Вместо этого используйте Python Секреты модуль.
Это полезно, что случайные не создают 100% случайных чисел, потому что он позволяет нам воспроизводить наши результаты! Это невероятно важно для тех, кто работает в науке о данных.
Но как мы гарантируем, что мы можем воспроизвести наши результаты? Сначала мы должны посадить семя.
random.seed()
В начале любой работы, связанной с случайностью, хорошая практика для установки «семян». Это можно рассматривать как «начальная точка» нашей случайной последовательности. Для этого мы вводим любой поплавок или INT random.seed ()
Отказ
Давайте установим семена на 1.
import random random.seed(1)
Теперь мы будем генерировать случайные числа в диапазоне [0.0, 1.0)
Призывая Random.random ()
функционируйте несколько раз. Если вы сделаете то же самое, вы увидите, что ваши номера идентичны моему!
>>> random.random() 0.13436424411240122 >>> random.random() 0.8474337369372327 >>> random.random() 0.763774618976614
Если мы сбросим семена и позвоните Random.random ()
Опять же, мы получим то же количество.
>>> random.seed(1) >>> seed_1 = [random.random() for i in range(3)] >>> seed_1 [0.13436424411240122, 0.8474337369372327, 0.763774618976614]
Я использовал понимание списка для большей читабельности, но вы можете вручную вводить его, если вы предпочитаете.
Теперь мы можем генерировать случайные числа. Но что бы она выглядела, если мы создадим сотни тысяч из них и построим их? Подобные участки называются распределениями.
Распределение
Если мы катим одну кости, каждое число от 1 до 6 одинаково вероятно. У всех нас есть вероятность 1/6. Мы говорим, что эти вероятности равномерно распределены. Чтобы помнить это, напомнить, что группа людей, одетых в униформу все выглядит одинаково.
Если мы катим два кости и суммируйте их результаты, результаты не распространяются равномерно. Вероятность прокатки 2 и 12 составляет 1/36, но 7 имеет вероятность 1/6. В чем дело? Не все равномерно распределено.
Чтобы понять, что происходит, давайте закатите одну кубицу 100 000 раз и два кубика 100 000 раз, а затем построят результаты. Мы будем использовать Random.Choice ()
функция, чтобы помочь нам. Он принимает любую последовательность и возвращает случайно выбранный элемент – при условии равномерного распределения.
Примечание: я звоню sns.set ()
В начале использовать настройки по умолчанию по умолчанию, поскольку они выглядят намного приятнее MATPLOTLIB.
Прокат одного кости 100 000 раз
import matplotlib.pyplot as plt import seaborn as sns sns.set() # Create our data outcomes = [1, 2, 3, 4, 5, 6] one_dice = [random.choice(outcomes) for i in range(100000)] # Plot our data plt.hist(one_dice, bins=np.arange(1, 8), density=True) plt.show()
Вот идеальный пример равномерного распределения. Мы знаем, что.1666 и каждый бар примерно такой высоты.
Объясняя код
Мы используем список списков для генерации 100 000 значений. Затем сюжет его, используя PLT.Hist ()
Отказ Установить плотность = правда
Чтобы убедиться, что ось Y показывает вероятности, а не количество. Наконец, набор bin = np.arange (1, 8)
Для создания 6 бункеров ширины 1. Каждая корзина наполовину открыта – [1, 2) включает в себя 1, но не 2. Последний корпус закрыта – [6, 7] – но с 7 не является возможным результатом этого не влияет на Наши результаты. Мы можем установить BINS в целое число, но это создает график, который сложнее интерпретировать, как вы можете увидеть ниже.
Каждый бар имеет ширину ~ 0,8 и вероятность 0,2, ни один из которых мы ожидали или не хотели. Таким образом, всегда лучше вручную устанавливать BINS, используя NP.Arge ()
Отказ Если вы боретесь с Numpy Arange проверить Полное руководство функции Arge Numpy в нашем блоге !
Случайный модуль содержит функцию Random.oundiform (A, B)
Это возвращает случайно выбранные поплавки в интервале [а, б]
Отказ Если вы нарисуете 100 000 номеров и сюжет результаты, вы увидите аналогичный график для тех выше.
Прокат две кубицы 100 000 раз
Код практически идентичен первому примеру.
outcomes = [1, 2, 3, 4, 5, 6] two_dice = [random.choice(outcomes) + random.choice(outcomes) for i in range(100000)] plt.hist(two_dice, bins=np.arange(2, 14), density=True) plt.show()
Форма очень отличается от нашего первого примера и иллюстрирует то, что мы ожидали. Числа 2 и 12 имеют вероятность.0277 и 7 IS.666. Форма может напомнить вам о одном из самых известных распределений в мире: Нормальное распределение Отказ
В нормальном распределении значения рядом с центром гораздо чаще возникли, чем у крайних целей. Вы увидите это распределение много раз на протяжении всей вашей карьеры, так как его можно использовать для моделирования бесчисленных случайных событий E.g. Высота, вес и IQ.
Есть много разных распределений, и любая хорошая статистика учебник объясняет их подробно. Ознакомьтесь с списком 101 бесплатных книг Python в блоге Finxter и просто загрузите один из наших выбора.
Случайный модуль имеет функции, которые вызывают значения от наиболее распространенных. Мы просто охватываем нормальное распределение здесь для краткости.
Поскольку нормальное распределение также называется распределением гауссов, случайным образом имеет две функции для генерации образцов: Random.gausss ()
и Random.normalVariate ()
Отказ Оба принимают два параметра, мю
и Сигма
– среднее и дисперсия распределения соответственно. Для получения дополнительной информации проверить Page Wikipedia Отказ
Мы будем построить оба графика на одних и той же оси, используя следующий код.
normal = [random.normalvariate(7.5, 2.35) for i in range(100000)] plt.hist(two_dice, bins=np.arange(2, 14), density=True, alpha=0.7, label='Dice Data') sns.distplot(normal, hist=False, color='r', label='Normal Approx.') plt.legend() plt.show()
Нормальное приближение с мю = 7,5
и Sigma = 2.35
очень хорошее приближение прокатки двух кубиков. Я нашел это после попытки нескольких случайных ценностей. Мы называем его в 100 000 раз, используя понимание списка и сюжета, используя sns.distplot
Настройка hist = false
просто показать приближение.
Это очень полезно, особенно в области науки о данных. Если мы можем приблизить наши данные, используя хорошо известные и хорошо исследованные распределения, мы мгновенно знаем о наших данных.
Существует целая ветвь статистики, посвященная аппроксимации данных к известным распределениям. Может быть опасно вывод слишком много из небольшого образца данных. Способ, который мы использовали выше, не является статистически звуком, но является хорошей отправной точкой. Обратите внимание, что нормальное распределение не имеет конечного выбора значений, и он не имеет верхнего или нижнего предела. Это вряд ли Random.normalVariate (7,5, 2.35)
Может генерировать числа <2 и> 12. Таким образом, это полезно только в качестве приближения, а не как замена.
Три идеи для использования случайного модуля
Это был экскурсию Swistle-Stop из случайных модулей, и теперь у вас есть все, что вам нужно, чтобы начать использовать его. Учитывая, что лучший способ учиться заниматься проектами, вот некоторые идеи для вас, чтобы попробовать:
- Когда веб-соскоб, используйте
time.sleep ()
в сочетании сRandom.oundiform ()
ждать случайное количество времени между запросами. - Создать «Угадать номер». Компьютер выбирает случайное число от 1 до 10 – используя
Random.Choice ()
– И вы угадаете разные номера свход ()
команда. Смотри это книга для большего количества идей. - Создайте список телефонных номеров и имена ваших близких. Создайте другой список любящих сообщений. Использовать Twilio отправить случайное любящее сообщение случайно выбранному человеку каждый день.
Удачи и пусть случайность будет с вами!
Атрибуция
Эта статья способна предоставлена пользователем Finxter Адам Мерфи (Ученый данные, Бабушка Python Code ):
Я являюсь самоучками программистом с первой степенью класса в математике из Университета Дарема и кодировал с июня 2019 года.
Я хорошо разбираюсь в основах SUB STRACKING и DATA SCAIL и может получить широкий спектр информации из Web очень быстро.
Недавно я счел информацию обо всех часах, которые Breitling и Rolex продают всего за 48 часов и уверены в себе, я могу доставить наборы данных подобного качества для вас, независимо от ваших потребностей.
Будучи собственным английским языком, мои навыки общения отлично, и я доступен, чтобы ответить на любые вопросы, которые вы имеете, и предоставим регулярные обновления о прогрессе моей работы.
Если вы хотите нанять Адама, проверьте его Профиль намного !
Куда пойти отсюда?
Вы хотите стать профессиональным кодером Python? Понимание оснований в Python имеет решающее значение для вашего успеха в вашей профессиональной жизни!
Как я знаю, вы заняты, я создал простой и простой для следующего курса электронной почты на основе читовных листов и ежедневной электронной почты. Один урок Python A-A-Time, вы станете отличным кодером Python!
Присоединяйтесь к десяткам тысяч амбициозных кодеров Python! Просто введите свой адрес электронной почты в поле ниже и начните новое образование Codeure:
использованная литература
[1] https://docs.cython.org/3.8/Library/random.html [2] https://en.wikipedia.org/wiki/mersenne_twister [3] https://docs.cython.org/3.8/library/secrets.html#module-secrets [4] https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.hist.html [5] https://en.wikipedia.org/wiki/normal_distribution [6] https://automatetheboringstuff.com/ [7] https://www.twilio.com/
Expert Writer & Content Creator – наука о науке и машине.
–
Я помогаю образовательным компаниям создавать привлечение в блоге и видеоконтентах преподавания данных науки для начинающих. В отличие от моих конкурентов, я узнаю новые концепции каждый день и так понимаю, что это нравится быть студентом.
Мои статьи легко понять, эффективны и приятно читать. Мои видео достойны, участвуют и подробно.
–
Работать со мной, пожалуйста, обратитесь к Upwork
https://tinyurl.com/hire-adam-murphy.