Рубрики
Без рубрики

Как я использовал Python, чтобы проанализировать игру престолов

Автор оригинала: FreeCodeCapm Team.

Скалистым Кевом

Я хотел учить питона в течение длительного времени, но я никогда не сможет найти причину. Когда у моей компании есть куча ежедневных отчетов, которые необходимо было создать, я понял, что у меня была возможность исследовать Python, чтобы вырезать все повторение.

Эта статья является результатом в течение нескольких недель, обучающих Python, играя в различные библиотеки и автоматизируя некоторые из моих задач на работе.

Теперь я хочу поделиться тем, на что способен Python.

А не дать Примеры, связанные с буровыми офисами Давайте поставим их в игру престола кадра!

В этом посте я буду реализовывать веб-автоматизацию с Библиотека селена , Веб-соскоб с библиотекой BeautifulSoup и Генерация отчетов с модулем CSV – Что такое имитация всех пандах/науки о науке данных Python.

И, как я уже упоминал, прежде чем -совые примеры будут использовать игру престолов.

Некоторые быстрые примечания:

  1. Вам не нужно не понадобиться опыта Python, чтобы сделать это. Я объясню код, и вам должно быть достаточно, чтобы идти.
  2. Я не супер-эксперт на Python. Это примерно несколько недель опыта Python. Это было достаточно, чтобы автоматизировать мою работу и создать эти примеры.
  3. Python это ХОРОШО ЗАДОКУМЕНТИРОВАНЫ. Есть так много бесплатных гидов, чтобы изучить Python, как Автоматизировать скучные вещи , Python для начинающих и удивительный DataQuest.io Наука данных отслеживать. Есть еще больше ссылок в FreeCodecamp база знаний.

Python, лучший компьютерный язык на основе рептилий

Для тех, которые незнакомы с программированием –

По словам Стек переполнения 2018 года обзор разработчика Python является языком, который большинство разработчиков хотят учиться (а также один из самых быстрорастущих основных языков программирования).

Сайт Python Powers, как Reddit, Instagram и Dropbox. Это также действительно читаемый язык, который имеет много мощных библиотек.

Python назван в честь Монты Питона, а не рептилий. Но – несмотря на это, это все еще самый популярный язык программирования на основе рептилий, бьет змей, Гекко, Кобру и Раптор! (Мне пришлось исследовать эту шутку!)

Если у вас есть какой-то опыт в программировании (скажем, в JavaScript) –

Некоторые вещи о Python:

  • Python использует отступ против вьющихся скобок. Проверьте пример ниже:
  • Python использует наследие на основе классовых наследований – так что это больше похоже на языки. Где, как можно JavaScript может симулировать классы.
  • Python также сильно набирается. Нет смешивания. Например, если вы добавите строку и целое число вместе, она начнет жаловаться.

Давайте прыгнем прямо в это!

Я буду нарушать это на 3 штуки.

  • Игра престолов и Python # 1 : Веб-автоматизация
  • Игра престолов и Python # 2 : Веб-соскоб
  • Игра престолов и Python # 3 : Генерация отчетов с модулем CSV

Игра престолов и Python # 1 – Web Automation

Одна из самых крутых вещей, которые вы можете сделать с Python, это Web Automation.

Например – вы можете написать сценарий Python, который:

  1. Открывает браузер
  2. Автоматически посещает определенный сайт
  3. Входит в этот сайт
  4. Идет в другую часть этого сайта
  5. Находит самое последнее сообщение в блоге.
  6. Открывает этот блог пост.
  7. Представляет комментарий, который говорит: «Отличное письмо! Высокие пять!»
  8. И, наконец, выступает из этого сайта

Это может показаться не так сложно. Это берет то, что … 20 секунд?

Но если бы вам пришлось сделать это снова и снова, он отвезет вас с ума.

Например – что, если у вас был промежуточный сайт, который все еще находится в разработке с 100 записями в блоге, и вы хотели разместить комментарий на каждой странице, чтобы проверить свою функциональность?

Это 100 сообщений в блоге * 20 секунд = примерно 33 минуты

И что, если есть несколько фаз тестирования, и вам пришлось повторить тест шесть раз больше?

Прочие случаи использования для веб-автоматизации включают :

  • Вы можете автоматизировать создания учетных записей на вашем сайте.
  • Возможно, вы захотите запустить бот, чтобы заканчивать в своем онлайн-курсе.
  • Возможно, вы захотите нажать на 100 ботов, чтобы отправить форму на вашем сайте с одним скриптом.

Что мы будем делать

Для этой части мы будем автоматизировать процесс войти во все нашу любимую игру престолов фанатов.

Разве вы не ненавидите, когда вам приходится тратить время в систему во время входа в Westeros.org, r/flefolk subreddit, winteriscoming.net и все ваши другие фан-сайты?

С помощью этого шаблона вы можете автоматически войти в разные веб-сайты!

Теперь, для игры престолов!

Код

Вам нужно будет установить Python 3, Selenium и WebDrivers Firefox, чтобы начать. Если вы хотите следовать, проверьте мой учебник на Как автоматизировать формы представления с Python Отказ

Этот может усложнить. Поэтому я настоятельно рекомендую сидеть и наслаждаться поездкой.

## Game of Thrones easy login script## ## Description: This code logs into all of your fan sites automaticallyfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.common.exceptions import TimeoutExceptionimport timedriver = webdriver.Firefox()driver.implicitly_wait(5)    ## implicity_wait makes the bot wait 5 seconds before every action    ## so the site content can load up# Define the functionsdef login_to_westeros (username, userpass):    ## Open the login page    driver.get('https://asoiaf.westeros.org/index.php?/login/')        ## Log the details    print(username + " is logging into westeros.")        ## Find the fields and log into the account.     textfield_username = driver.find_element_by_id('auth')    textfield_username.clear()    textfield_username.send_keys(username)    textfield_email = driver.find_element_by_id('password')    textfield_email.clear()    textfield_email.send_keys(userpass)    submit_button = driver.find_element_by_id('elSignIn_submit')    submit_button.click()    ## Log the details    print(username + " is logged in! -> westeros")		def login_to_reddit_freefolk (username, userpass):    ## Open the login page    driver.get('https://www.reddit.com/login/?dest=https%3A%2F%2Fwww.reddit.com%2Fr%2Ffreefolk')        ## Log the details    print(username + " is logging into /r/freefolk.")        ## Find the fields and log into the account.     textfield_username = driver.find_element_by_id('loginUsername')    textfield_username.clear()    textfield_username.send_keys(username)
    textfield_email = driver.find_element_by_id('loginPassword')    textfield_email.clear()    textfield_email.send_keys(userpass)    submit_button = driver.find_element_by_class_name('AnimatedForm__submitButton')    submit_button.click()    ## Log the details    print(username + " is logged in! -> /r/freefolk.")    ## Define the user and email combo. login_to_westeros("gameofthronesfan86", PASSWORDHERE)time.sleep(2)driver.execute_script("window.open('');")Window_List = driver.window_handlesdriver.switch_to_window(Window_List[-1])login_to_reddit_freefolk("MyManMance", PASSWORDHERE)time.sleep(2)driver.execute_script("window.open('');")Window_List = driver.window_handlesdriver.switch_to_window(Window_List[-1])## wait for 2 secondstime.sleep(2)print("task complete")

Ломать код вниз

Начать, я импортирую Селен Библиотека, чтобы помочь с тяжелым подъемом.

Я также импортировал время Библиотека, так после каждого действия, он будет ждать x секунды. Добавление ожидания позволяет странице загружать.

from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.common.exceptions import TimeoutExceptionimport time

Что такое селен?

Selenium – библиотека Python, которую мы используем для веб-автоматизации. Selenium разработал API, поэтому сторонние авторы могут разрабатывать WebDrivers к общению к браузерам. Таким образом, команда Selenium может сосредоточиться на их кодовой базе, а другая команда может сосредоточиться на промежуточной программе.

Например:

  • Команда Chromium сделала свою собственную Webdriver для Selenium под названием хромедрист Отказ
  • Команда Firefox сделала свою собственную Webdriver для Selenium под названием Геккодривер Отказ
  • Оперная команда сделала свою собственную Webdriver для Selenium под названием Operadriver Отказ
driver = webdriver.Firefox()
driver.get('

Driver.Close ()

В указанном выше коде я прошу Selenium делать такие вещи, как « Set Firefox вверх как браузер выбора », а « пройти по этой ссылке на Firefox », и, наконец, ” Закрыть Firefox “. Я использовал Geckodriver, чтобы сделать это.

Вход в сайты

Чтобы облегчить чтение, я написал отдельную функцию, чтобы войти в каждый сайт, чтобы показать шаблон, который мы производим.

def login_to_westeros (username, userpass):    ## Log in    driver.get('https://asoiaf.westeros.org/index.php?/login/')        ## Log the details    print(username + " is logging into westeros.")        ## 2) 
textfield_email = driver.find_element_by_id('password')    textfield_email.clear()    textfield_email.send_keys(userpass)    submit_button = driver.find_element_by_id('elSignIn_submit')    submit_button.click()    ## Log the details    print(username + " is logged in! -> westeros")

Если мы сломаем это еще больше – каждая функция имеет следующие элементы.

Я говорю Питона:

  1. Посетите определенную страницу. Driver.get (https://asoiaf.westeros.org/index.php?/login/')

2. Ищите вход в систему * Очистить текст, если есть * отправьте мою переменную

textfield_username = driver.find_element_by_id('auth')    textfield_username.clear()    textfield_username.send_keys(username)

3. Ищите поле пароля * Очистить текст, если есть * отправьте мою переменную

textfield_email = driver.find_element_by_id('password')    textfield_email.clear()    textfield_email.send_keys(userpass)

4. Ищите кнопку отправки и нажмите на нее

submit_button = driver.find_element_by_id('elSignIn_submit')    submit_button.click()

В качестве примечания: каждый веб-сайт имеет разные способы найти имя пользователя/пароль и отправить кнопки. Вам придется сделать немного поиска для этого.

Как найти окно входа в систему и пароль для любого сайта

Библиотека Selenium имеет кучу удобных способов найти элементы на веб-странице. Вот некоторые из тех, которые я люблю использовать.

  • find_element_by_id.
  • find_element_by_name.
  • find_element_by_xpath.
  • find_element_by_class_name.

За весь список посетите Документация Selenium Python для нахождения элементов Отказ

Использовать Asoiaf.westeros.com в качестве примера , когда я проверяю элементы – у них все IDS … Что отлично! Это облегчает мою жизнь.

Запуск кода

Наслаждаясь поездкой

С веб-автоматизацией вы играете в игру «Как я могу получить селен, чтобы найти элемент». Как только вы найдете его, вы можете манипулировать им.

Игра престолов и Python # 2 – Web Scraping

В этом составе мы будем изучать веб-соскоб.

Большой процесс изображения:

  1. У нас будет Python посетить веб-страницу.
  2. Затем мы рассмотрим эту веб-страницу с красивыми.
  3. Затем вы настроите код, чтобы схватить конкретные данные.

Например: Возможно, вы захотите схватить все теги H1. Или все ссылки. Или в нашем случае все изображения на странице.

Некоторые другие случаи использования для веб-соскоба:

  • Вы можете схватить все ссылки на веб-страницу.
  • Вы можете взять все заголовки постов в форуме
  • Вы можете использовать его, чтобы захватить ежедневное значение NASDAQ, не посещая сайт.
  • Вы можете использовать его для загрузки всех ссылок на веб-сайте, который не имеет «скачать все».

Короче говоря, Web Scropp позволяет автоматически захватить веб-контент через Python.

В целом, очень простой процесс. За исключением случаев, когда это не так!

Задача веб-соскоба для изображений

Моя цель состояла в том, чтобы превратить свои знания о контенте Web Scraping, чтобы захватить изображения.

Пока Web Scraping для ссылок, текст тела и заголовки – очень просты, Веб-соскоб для изображений значительно сложнее. Позволь мне объяснить.

В качестве веб-разработчика хостинг нескольких полноразмерных изображений на одной веб-странице замедлит всю страницу вниз. Вместо этого используйте миниатюры, а затем загружать только полноразмерное изображение, когда нажатие миниатюры.

Например: представьте, если у нас было двадцать 1 мегабайтных изображений на нашей веб-странице. При посадке посетитель придется скачать 20 мегабайт изображений! Более распространенный метод состоит в том, чтобы сделать двадцать 10 КБ миниатюрных изображений. Теперь ваша полезная нагрузка только в 200 КБ, или около 1/100 размера!

Итак, что это связано с веб-соскобными изображениями и этим руководством?

Это означает, что он довольно сложно написать Общий блок кода Это всегда работает для каждого сайта. Сайты реализуют все разные способы повернуть миниатюру на полноразмерное изображение, что делает его задачей для создания модели «один размер».

Я все еще буду научить то, что узнал. Вы все равно получите много навыков от этого. Просто осознайте, что пытается этот код на других сайтах потребует серьезных модификаций Отказ Ура для зоны проксимального развития.

Python и игра престолов

Целью этого урока является то, что мы будем собирать образы наших любимых актеров! Что позволит нам делать странные вещи, такие как заставить подростковую раздавить актер коллаж, который мы можем повесить в нашу спальню (например, так).

Для того, чтобы собрать эти изображения, мы будем использовать Python, чтобы сделать веб-соскреб. Мы будем использовать Библиотека Beautifulsoup Чтобы посетить веб-страницу и схватить все теги изображения от него.

Примечание: во многих условиях веб-сайта они запрещают любой веб-соскабливание их данных. Некоторые разрабатывают API, чтобы позволить вам подключиться к их данным. Другие нет. Кроме того, старайтесь помнить, что вы занимаетесь своими ресурсами. Итак, ищите один запрос одновременно, а не открывать многие соединения параллельно и шлифовать свой сайт до остановки.

Код

# Import the libraries neededimport requestsimport timefrom bs4 import BeautifulSoup# The URL to scrapeurl = 'https://www.popsugar.com/celebrity/Kit-Harington-Rose-Leslie-Cutest-Pictures-42389549?stream_view=1#photo-42389576'#url = 'https://www.bing.com/images/search?q=jon+snow&FORM=HDRSC2'# Connectingresponse = requests.get(url)# Grab the HTML and using Beautifulsoup = BeautifulSoup (response.text, 'html.parser')#A loop code to run through each link, and download itfor i in range(len(soup.findAll('img'))):    tag = soup.findAll('img')[i]    link = tag['src']    #skip it if it doesn't start with http    if "http" in full_link:         print("grabbed url: " + link)        filename = str(i) + '.jpg'        print("Download: " + filename)        r = requests.get(link)        open(filename, 'wb').write(r.content)    else:        print("grabbed url: " + link)        print("skip")        time.sleep(1)

Наличие Python посетить веб-страницу

Мы начнем, импортируя необходимые библиотеки, а затем сохраняя ссылку на веб-страницу в переменную.

  • Запросы библиотеки используется для выполнения всевозможных HTTP-запросов
  • Время библиотеки используется для положения 1 секунды ожидания после каждого запроса. Если бы мы не включали это, весь цикл будет стоять как можно быстрее, что не очень дружелюбно с сайтами, от которых мы соскабливаемся.
  • Библиотека Beautifulsoup используется для изучения дерева Дома проще.

Разбирайте эту веб-страницу с красивой панелью

Далее мы нажимаем наш URL в красивую подвину.

Найти содержание

Наконец, мы используем цикл для захвата контента.

Начинается с контура. BeautifulSoup предлагает какую-то классную фильтрацию, где мой код просит BeautifulSoup найти все теги IMG ‘и хранить его во временном массиве. Тогда Лен Функция просит продолжительность массива.

#A loop code to run through each link, and download itfor i in range(len(soup.findAll('img'))):

Таким образом, в человеческих словах, если массив провел 51 предмета, код будет выглядеть как Для I в пределах (50):

Далее мы вернемся к нашему объекту супа и сделайте реальную фильтрацию.

tag = soup.findAll('img')[i]   link = tag['src']

Помните, что мы находимся в цикле, поэтому [I] представляет номер.

Таким образом, мы говорим Beautifulsoup Tistratal «IMG» теги, хранят его в массиве TEMP, и ссылается на конкретный номер индекса, основанный на том, где мы находимся в цикле.

Таким образом, вместо того, чтобы вызывать массив напрямую, как ALLOFTHEIMAGES [10], мы используем SUP.findall (‘img’) [10], а затем передача его на Тег Переменная.

Данные в Тег Переменная будет выглядеть что-то вроде:

Smiley face

Вот почему следующий шаг вытягивает «SRC».

Загрузка содержимого

Наконец – это веселая часть!

Мы идем в последнюю часть цикла, с загрузкой контента.

Здесь я хочу указать несколько странных элементов дизайна.

  1. Приложение IF на самом деле является взлом, который я сделал для других сайтов, я тестировал. Были времена, когда я хватал образы, которые были частью корневого сайта (например, Favicon или иконы в социальных сетях), которые я не хотел. Поэтому, используя заявление, если позволило мне игнорировать его.
  2. Я также заставил все изображения быть .jpg. Я мог бы написать еще один кусок, если утверждения, чтобы проверить DataType, а затем добавить правильный FileType. Но это добавил значительный кусок кода, который сделал этот учебник дольше.
  3. Я также добавил все команды печати. Если вы хотите взять на себя все ссылки на веб-страницу или конкретный контент – вы можете остановиться прямо здесь! Ты сделал это!

Я также хочу указать на requests.get (ссылка) и Открыть (имя файла, «WB»). Написать (R.Content) код.

r = requests.get(link)open(filename, 'wb').write(r.content)

Как это работает:

  1. Запросы Получает ссылку.

2. Открыть Является ли функция Python по умолчанию, которая открывает или создает файл, дает IT-адрес и двоичный доступ в режиме (поскольку изображения – это всего лишь 1s и 0s), и записывает содержимое ссылки в этот файл.

#skip it if it doesn't start with http    
if "http" in full_link:         
print("grabbed url: " + link)        filename = str(i) + '.jpg'        print("Download: " + filename)        r = requests.get(link)        open(filename, 'wb').write(r.content)    else:        print("grabbed url: " + link)        print("skip")        time.sleep(1)

Веб-соскоб имеет много полезных функций.

Этот код не будет работать прямо из коробки для большинства сайтов с изображениями, но он может служить основой, чтобы схватить изображения на разные сайты.

Игра престолов и Python # 3 – Генерация отчетов и данных

Сбор данных легко. Интерпретация данных сложно. Вот почему есть огромный всплеск спроса на данные ученых, которые могут иметь смысл этих данных. И данные ученых используют языки, такие как R и Python, чтобы интерпретировать его.

В этом руководстве мы будем использовать модуль CSV, который будет достаточно для создания отчета. Если бы мы работали с огромным набором данных, то это похоже на 50 000 строк или больше, мы должны были придеться в библиотеку Pandas.

Что мы будем делать, загружая CSV, имея Python интерпретировать данные, отправлять запрос на основе того, какой вопрос мы хотим ответить, а затем ответить на отпечаток ответа.

Python VS Основные функции электронных таблиц

Вам может быть интересно:

«Почему я должен использовать Python, когда я могу легко использовать функции электронной таблицы или отфильтровать строки, которые мне не нужно вручную?»

Как и для всех других трюков автоматизации в части 1 и 2, вы определенно можете сделать это вручную.

Но представьте, что если бы вы приходили сгенерировать новый отчет ежедневно.

Например: я строю онлайн-курсы. И мы хотим ежедневный отчет о прогрессе каждого студента. Сколько студентов началось сегодня? Сколько студентов активно активно на этой неделе? Сколько студентов сделало его в модуль 2? Сколько студентов представили свой модуль 3 домашней работы? Сколько студентов нажала на кнопку завершения на мобильных устройствах?

Я могу потратить 15 минут, сортируя через данные для создания отчета для моей команды. Или напишите код Python, который делает это ежедневно.

Другие случаи использования для использования кода вместо функций электронной таблицы по умолчанию:

  • Вы можете работать с огромным набором данных (огромные, такие как 50 000 строк и 20 столбцов)
  • Вам требуются несколько ломтиков фильтров и сегментации, чтобы получить ваши ответы.
  • Вам необходимо запустить тот же запрос на набор данных, который несколько раз меняется

Генерация отчетов с игрой престолов

Каждый год Winteriscoming.net, Игра престолов Новости сайта, имеет свое ежегодное март безумие. Посетители будут голосовать за своих любимых персонажей, и победители поднимают кронштейн и соревнуются против другого человека. После 6 раундов голосов победитель объявлен.

С 2019 года все еще происходит голоса, я схватил все 6 раундов данных 2018 года и составил их в файл CSV. Чтобы увидеть, как выглядел опрос на winteriscoming.net, Нажмите здесь Отказ

Я также добавил несколько дополнительных справочных данных (например, откуда они), чтобы сделать сообщение немного более интереснее.

Задавать вопросы

Для того, чтобы создать отчет, мы должны задать несколько вопросов.

По определению : Основная обязанность отчета – ответить на вопросы.

Так что давайте сделаем их прямо сейчас.

На основании этого набора данных … вот несколько вопросов.

  1. Кто выиграл популярность голоса?
  2. Кто выиграл на основе средних?
  3. Кто самый популярный человек без Вероса? (персонажи не родились в Вестеросе)

Перед ответом на вопросы – давайте настроим свой код Python

Чтобы облегчить, я написал весь код, включая ревизии – в моем новом любимом онлайн-IDE, reft.it.

import csv# 
Import the dataf_csv = open('winter-is-coming-2018.csv')headers = next(f_csv) f_reader = csv.reader(f_csv)file_data = list(f_reader)

# Make all blank cells into zeroes# https://stackoverflow.com/questions/2862709/replacing-empty-csv-column-values-with-a-zero

for row in file_data:  for i, x in enumerate(row):    if len(x)< 1:      x = row[i] = 0

Вот мой процесс с кодом.

  1. Я импортировал модуль CSV.

2. Я импортировал файл CSV и перевернул его в тип списка, называемый «| ». file_data Отказ

  • Путь Python читает ваш файл, сначала передавая данные на объект.
  • Я удалил заголовок, так как он будет потовать данные.
  • Затем я передаю объект к читателю и, наконец, список.
  • Примечание: я только что понял, что сделал это через Python 2-й путь. Есть Очиститель способ сделать это в Python 3 Отказ Ну что ж. По-прежнему работает.

3. Чтобы подвести итоги любых итогов, я сделал все пустые клетки становятся 0.

  • Это был один из тех моментов, где нашли Переполнение стека Решение, которое было лучше, чем моя оригинальная версия.

С помощью этой настройки мы можем сейчас просмотреть список данных и отвечать на вопросы!

Вопрос № 1 – Кто выиграл голос популярности?

Метод электронной таблицы:

Самым простым способом было бы добавить каждую ячейку, используя формулу. Используя ROW 2 в качестве примера в пустой столбце, вы можете написать формулу:

=sum(E2:J2)

Затем вы можете перетащить эту формулу для других строк.

Затем сортируйте его по всемуру. И у вас есть победитель!

## Include the code from above
# Push the data to a dictionarytotal_score = {}
# Pass each character and their final score into total_score dictionaryfor row in file_data:  total = (int(row[4]) +           int(row[5]) +           int(row[6]) +           int(row[7]) +           int(row[8]) +           int(row[9]) )  total_score[row[0]] = total# Dictionaries aren't sortable by default, we'll have to borrow from these two classes.
# https://stackoverflow.com/questions/613183/how-do-i-sort-a-dictionary-by-valuefrom operator import itemgetterfrom collections import OrderedDictsorted_score = OrderedDict(sorted(total_score.items(), key=itemgetter(1) ,reverse=True))
# We get the name of the winner and their scorewinner = list(sorted_score)[0] 
#jon snowwinner_score = sorted_score[winner] #scoreprint(winner + " with " + str(winner_score))
## RESULT => Jon Snow with 12959

Шаги, которые я взял:

  1. DataSet – это только один большой список. Используя A для LOOP, вы можете получить доступ к каждой строке.
  2. В течение этого для петли я добавил каждую ячейку. (эмуляция целого (E: J) “формула)
  3. Поскольку словари не именно сотворительны, мне пришлось импортировать два класса, чтобы помочь мне сортировать словарь по их ценностям, от высокого до низкого.
  4. Наконец, я прошел победителя, и ценность победителя как текст.

Чтобы помочь понять, что петля я нарисовал диаграмму.

В целом этот процесс немного дольше по сравнению с методом электронной таблицы. Но подожди, становится легче!

Вопрос 2 – Кто выиграл на основе средних?

Возможно, вы заметили, что тот, кто был дальше в рейтинге, очевидно, получит больше голосов.

Например: если Джон Снег Получил 500 очков в раунде одного и 1000 очков в два раунде, он уже бьет Гора У кого только 1000 очков и никогда не делали его мимо его кронштейна.

Таким образом, следующее лучшее – сумма общности, а затем разделить его на основе того, сколько раундов они участвовали.

Метод электронной таблицы:

Это легко. В столбце B в том, сколько раундов они участвовали. Вы бы разделили раунды по сумме, а Presto!

## OLD CODE FROM QUESTION 
1# Pass each character and their final score into total_score dictionaryfor row in file_data:  total = (int(row[4]) +           int(row[5]) +           int(row[6]) +           int(row[7]) +           int(row[8]) +           int(row[9]) )  total_score[row[0]] = total
## NEW CODE
Pass each character and their final score into total_score dictionaryfor row in file_data:  total = (int(row[4]) +           int(row[5]) +           int(row[6]) +           int(row[7]) +           int(row[8]) +           int(row[9]) )  
# NEW LINE - divide by how many rounds  new_total = total / int(row[2])  total_score[row[0]] = new_total
# RESULT => Davos Seaworth with 2247.6666666666665

Заметил изменение? Я только что добавил одну дополнительную строку.

Это все, что нужно было ответить на этот вопрос! СЛЕДУЮЩИЙ!

Вопрос 3 – Кто самый популярный человек без Весероса?

С первыми двумя примерами довольно легко рассчитать общее количество функций электронной таблицы по умолчанию. За этот вопрос все немного сложнее.

Метод электронной таблицы:

  1. Предполагая, что у вас уже есть сумма
  2. Теперь вы должны отфильтровать его на основе, если они являются Westeros/Другое
  3. Затем сортировать по сумме
## OLD CODE FROM QUESTION
1# Pass each character and their final score into total_score dictionaryfor row in file_data:  total = (int(row[4]) +           int(row[5]) +           int(row[6]) +           int(row[7]) +           int(row[8]) +           int(row[9]) )  

# NEW LINE - divide by how many rounds  new_total = total / int(row[2])  total_score[row[0]] = new_total## NEW CODE# Pass each character and their final score into total_score dictionaryfor row in file_data:  

# Add IF-THEN statement  if (row[3] == 'other'):    total = (int(row[4]) +             int(row[5]) +             int(row[6]) +             int(row[7]) +             int(row[8]) +             int(row[9]) )  else:    total = 0  total_score[row[0]] = total

# RESULT => Missandei with 4811

Одним направлению 2, я добавил одну строку кода, чтобы ответить на этот новый вопрос.

Одним направлениею 3, я добавил оператор if-else. Если они не Westeros, тогда считать их счет. Остальное, дайте им счет 0.

Обзор этого:

Хотя метод электронной таблицы не похоже на много шагов, он наверняка намного больше кликов. Метод Python потребовался намного больше дольше, но каждый дополнительный запрос включал изменение нескольких строк кода.

Представьте, что заинтересованные стороны задали дюжину больше вопросов.

Например:

  1. Сколько очков сделали персонажи, имена которых начинаются с я?
  2. Или сколько очков все в 3 раунде 3 получают, кто жил в Вестерос?
  3. Или если бы это было 640, получили персонажей вместо всего 64?

Но и представьте это – вам дано набор данных, который примерно 50 мегабайт (наша игра престолов CSV-файла была едва 50 килобайтам – примерно 1/1000 размер). Файл 50 МБ, который большой, вероятно, будет нагружать на несколько минут. Кроме того, для данных ученых не является необычным использованием наборов данных, которые находятся в диапазоне 10 гигабайт!

В целом, как масштабы набора данных, это займет больше времени и дольше. И вот где приходит сила Питона.

Заключение

В части 1 я покрыл веб-автоматизацию с библиотекой Selenium. В части 2 я покрыл веб-соскоб с библиотекой BeautifulSoup. А в части 3 я покрыл генерирующие отчеты с модулем CSV.

Пока я накрыл их на куски – между ними также синергия. Представьте, что если у вас был проект, где вы должны были выяснить, кто умирает следующим в игре престолов на основе комментариев актеров на шоу. Вы можете начать с Web Scraping всех имен актеров от IMDB. Вы можете использовать Selenium для автоматического войти в различные платформы в социальных сетях и искать их название социальных сетей. Затем вы можете скомпилировать все данные и интерпретировать его как CSV или, если это действительно огромно, используя библиотеку Pandas.

Мы даже не попали в машинное обучение, AI, веб-разработку или десятки других людей, которые люди используют Python.

Пусть это будет шагпинг в вашем путешествии Python!

? Абсолютно огромный крик к МОРДАН Для проверки моей работы на Щенки и портфели встреча. Она одна из самых талантливых разработчиков CSS, которые я когда-либо встречал.

? Если вам нравится Nerding OUT о здании, онлайн-образовании и будущему образованию – обратитесь к мне на мой LinkedIn или Twitter Отказ