tl;dr — Мы используем R и Python, чтобы сделать следующую гистограмму.
Фича, а не баг
Люди говорят мне, когда я говорю о бейсболе, что это скучно. Если вы не знаете, что происходит в бейсболе, это скучно. Чем больше вы занимаетесь бейсболом, тем больше нюансов игры раскрывается перед вами.
То, как бейсбол расширяет время, является одной из его лучших особенностей. Я люблю показывать игру по телевизору или радио и позволять летнему полудню задержаться на краю вечности.
Экзистенциальное понимание дополнительных оснований.
Один из самых больших выводов из бейсбола — это соотношение успеха и неудачи. Когда моя жизнь становится тяжелой, я думаю о том, со сколькими трудностями мне придется столкнуться, чтобы добиться одного успеха. Я постоянно напоминаю себе, что в бейсболе 30% успеха — это карьера в зале славы. Путь к бейсбольному величию усеян бесчисленными неудачами и несбывшимися надеждами.
Пережив особенно тяжелые времена в своей жизни, я задавался вопросом, сколько аутов мне придется пережить, чтобы добиться хоумрана. Я мог бы построить график хоум-ранов и страйк-аутов для нападающих высшей лиги, чтобы получить ответ.
Python и R вместе
Одна из причин, по которой я решил изучить R после изучения Python, — это количество доступных пакетов для бейсбола. Как только я познакомился с синтаксисом R, я был очарован пакетом ggplot. Язык для построения графиков в R — одна из областей, в которой я вижу более интуитивный подход, чем Python.
Р магия
При работе с R и Python я предпочитаю работать в блокноте Jupyter. Магия Jupyter позволяет довольно легко переключаться между языками. Чтобы приспособиться к этому, я создал виртуальную среду на python и установил свои пакеты, включая rpy2. Я также установил библиотеки, которые буду использовать в R. Подробности этих шагов выходят за рамки этой статьи, но я предоставил ссылки, чтобы вы могли начать.
Виртуальные среды на python
Установка библиотек на R
Магии Jupyter (Ipython)
Начнем с загрузки расширения rpy2 с помощью строки magic
Затем мы можем использовать магию ячейки R для загрузки наших пакетов.
Мы хотим получить статистику игроков за последние пять лет. Я также хочу исключить укороченный сезон 2020 года. По состоянию на 15.02.2023 сезон 2022 недоступен для нас с использованием пакета Lahman
. Нам придется использовать пакет baseballr
, написанный Биллом Петти, чтобы получить эту информацию.
Пять лучших HR-хиттеров 2022 года
Здесь мы загрузим информацию для сезона 2022 года и получим пятерку лучших, используя baseballr
.
Вывод наших данных так же прост, как добавление флага -o
и данных после магии строки R.
Я могу вызывать функции Python прямо на выходное имя.
Batting dimensions: (699, 30)
Batting columns: ['bbref_id', 'season', 'Name', 'Age', 'Level', 'Team', 'G', 'PA', 'AB', 'R', 'H', 'X1B', 'X2B', 'X3B', 'HR', 'RBI', 'BB', 'IBB', 'uBB', 'SO', 'HBP', 'SH', 'SF', 'GDP', 'SB', 'CS', 'BA', 'OBP', 'SLG', 'OPS']
bbref_id season Name Age Level Team G PA \
1 682928 2022 Rhys Hoskins 29.0 Maj-NL Philadelphia 173.0 745.0
2 547989 2022 Kyle Schwarber 29.0 Maj-NL Philadelphia 172.0 743.0
3 660670 2022 Aaron Judge 30.0 Maj-AL New York 166.0 734.0
AB R ... HBP SH SF GDP SB CS BA OBP SLG \
1 658.0 90.0 ... 6.0 0.0 4.0 14.0 2.0 1.0 0.237 0.320 0.459
2 632.0 113.0 ... 6.0 0.0 4.0 10.0 13.0 1.0 0.218 0.330 0.508
3 606.0 138.0 ... 6.0 0.0 5.0 14.0 17.0 3.0 0.300 0.412 0.663
OPS
1 0.779
2 0.838
3 1.076
[3 rows x 30 columns]
Я знаю, что мне нужны пять лучших сотрудников отдела кадров за каждый год. Я уже знаю, какими будут заголовки столбцов для моего окончательного фрейма данных, поэтому я обрежу данные 2022 года, прежде чем продолжить.
Name Year AB H SO HR
3 Aaron Judge 2022 606.0 182.0 190.0 64.0
2 Kyle Schwarber 2022 632.0 138.0 218.0 52.0
19 Pete Alonso 2022 607.0 165.0 132.0 41.0
136 Mike Trout 2022 438.0 124.0 139.0 40.0
56 Yordan Alvarez 2022 522.0 154.0 122.0 40.0
Теперь обратимся к базе данных Lahman, чтобы получить годы до сезона 2022 года. Нам понадобятся таблицы Batting и People из базы данных Lahman, чтобы создать фрейм данных, соответствующий тому, который мы использовали для baseballr.
Снова простой синтаксис вывода.
Вызов функций pandas прямо в выходной переменной.
Batting dimensions: (6304, 6)
Batting columns: ['playerID', 'yearID', 'AB', 'H', 'SO', 'HR']
playerID yearID AB H SO HR
102832 abadfe01 2017 0 0 0 0
102833 abreujo02 2017 621 189 119 33
102834 adamecr01 2017 13 0 6 0
Здесь я выбираю годы с 2017 по 2021 год и опускаю укороченный сезон 2020 года.
playerID yearID AB H SO HR
102832 abadfe01 2017 0 0 0 0
102833 abreujo02 2017 621 189 119 33
102834 adamecr01 2017 13 0 6 0
Я использовал понимание списка, чтобы получить 5 лучших итоговых показателей HR (nlargest
) за год. Затем я объединил список кадров данных. Я уверен, что есть лучший способ сделать это.
playerID yearID AB H SO HR
109897 ohtansh01 2021 537 138 189 46
110174 semiema01 2021 652 173 146 45
110289 tatisfe02 2021 478 135 153 42
Мне понадобится кадр данных People, который я загрузил ранее для пакетов R Lahman, чтобы получить имена игроков.
People columns : ['playerID', 'birthYear', 'birthMonth', 'birthDay', 'birthCountry', 'birthState', 'birthCity', 'deathYear', 'deathMonth', 'deathDay', 'deathCountry', 'deathState', 'deathCity', 'nameFirst', 'nameLast', 'nameGiven', 'weight', 'height', 'bats', 'throws', 'debut', 'finalGame', 'retroID', 'bbrefID', 'deathDate', 'birthDate']
Обрезка кадра данных для того, что мне нужно
playerID nameFirst nameLast
1 aardsda01 David Aardsma
2 aaronha01 Hank Aaron
3 aaronto01 Tommie Aaron
Слияние обратно в мой кадр данных HR с некоторыми домашними делами.
playerID Year AB H SO HR nameFirst nameLast Name 0 stantmi03 2017 597 168 163 59 Giancarlo Stanton Giancarlo Stanton 1 judgeaa01 2017 542 154 208 52 Aaron Judge Aaron Judge 2 daviskh01 2017 566 140 195 43 Khris Davis Khris Davis
Я объединим первый фрейм данных, который я сделал, обратно в свой HR_top_five.
Я должен добавить год, чтобы имена лидеров частых хоум-ранов не перекрывались в качестве переменных. Затем я упрощаю фрейм данных, чтобы передать его обратно в R.
Name Year AB H SO HR \ NameIndex 0 Giancarlo Stanton 2017 597.0 168.0 163.0 59.0 \ 2017 Giancarlo Stanton 1 Aaron Judge 2017 542.0 154.0 208.0 52.0 \ 2017 Aaron Judge 2 Khris Davis 2017 566.0 140.0 195.0 43.0 \ 2017 Khris Davis
Наконец, мы импортируем наши данные обратно в R, используя флаг -i
после магии R с именем переменной. Мы создадим гистограмму с итоговыми значениями HR и SO рядом друг с другом.
Теперь мы можем сделать то же самое с AB и H.
Трудно вспомнить, трудно представить
В школьном детстве величие измерялось в девяностом процентиле. Чтобы получить пятерку, учащийся должен был правильно набрать большинство баллов за задание.
Это не работает, когда конкуренция увеличивается.
Мне приходится постоянно напоминать себе, что настоящий успех заключается в совершении ошибок снова и снова, пока я не достигну успеха. Спасибо гигантам Высшей бейсбольной лиги за то, что они напомнили мне, что путь к величию со всех сторон проходит через неудачи.
Лучший способ поддержать меня — это -› ☕ Купи мне кофе. ☕
Вы также можете поддержать меня, подписавшись на Medium.