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

Как вы можете использовать данные для открытия секретов бейсбола

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

от ?? Антон де Регт

Данные могут рассказать множество историй, и нахождение скрытых секретов – это как поиграть иглы в стоге сена.

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

В этом проекте я собираюсь исследовать бейсбольные данные. Чтобы быть более конкретным: данные ватина для каждого игрока, которые играли в период с 1871 и 2016 годов. Вы можете скачать весь набор данных здесь Отказ

Мой процесс:

  1. Иметь первый взгляд на данные
  2. Придумать вопрос
  3. Запутывать данные
  4. Исследуйте данные
  5. Сделать выводы/прогнозы
  6. Сообщите мои выводы

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

Antonderegt/Data-Baseball Data-Baseball – последний проект udaitygithub.com

Сначала посмотрите на данные

Первый шаг – импортировать набор данных. Для первого взгляда я собираюсь показать первые пять записей, чтобы получить представление о том, с чем я имею дело.

import matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport seaborn as sns%matplotlib inline
# Reading the batting datafilename = 'Batting.csv'batting_df = pd.read_csv(filename)
# Printing the first five entriesbatting_df.head()
# Getting some metrics on the home runs, number of games, runs batted in and the number of strikeoutsbatting_df[['HR','G', 'RBI', 'SO']].describe()

Глядя на таблицу выше, кажется, что Batters достигает в среднем 2,8 домой в сезон в сезон со средним из 51 игр.

batting_df_groupedby_year = batting_df.groupby(['yearID']).sum()homeruns_per_year = batting_df_groupedby_year[['HR']]
# Plotting the heatmap in reverse order to make it easier to see the increasesns.heatmap(homeruns_per_year.iloc[::-1])

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

Вопросов

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

  1. Какие команды имеют самые эффективные баттерки?
  2. Есть ли корреляция между забастовками и домами?
  3. Кто лучший вольер в истории (поймал воровство и. Украденные базы)?
  4. Какой регион производит лучшие баттерки (надо сливаться с другим столом для этого)?
  5. Каковы отношения между различными показателями производительности? У любого есть сильные негативные или положительные отношения?
  6. Каковы характеристики бейсболистов с самой высокой зарплатой?

Вопрос, на котором я собираюсь сосредоточиться на том: какую метрику коррелируют и какие метрики нет?

Ворсил

# Displaying the batting data for the last ten yearsbatting_last_ten_years = batting_df.groupby(['yearID'], as_index=False).sum().sort_values(by='yearID', ascending=False).head(10)batting_last_ten_years

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

Исследующий

В следующем блоке кода я рассчитаю корреляции между домашними прогонами и всеми другими метриками. Таким образом, мы можем видеть, какие метрики способствуют дому домой, а какие метрики плохие для забивания домой. Например, я ожидаю, что Batters, которые играют больше игр, чтобы набрать более домашние пробежки. Я также ожидаю, что Batters с высоким RBI набрать самые домашние пробежки.

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

Корреляция -1 является отрицательной корреляцией. Это означает, что когда одно значение увеличивает другое уменьшение.

Поскольку значение корреляции идет к 0, корреляция очень мала или несуществующая. Я позвоню положительному корреляции ++, + или + – в зависимости от силы корреляции. Никакой корреляции не будет 0, а отрицательные корреляции будут варьироваться от – +, – или – – быть сильной негативной корреляцией.

def standardize(data):    return (data - data.mean()) / data.std(ddof=0)
def pearsons_r(x, y):    return (standardize(x) * standardize(y)).mean()
# It doesn't make sense to calculate the correlation between these values and home runsleave_out = ['playerID', 'yearID', 'teamID', 'lgID', 'HR']
# Meaning of the column names in the datadictionary = {'playerID':'Player', 'yearID':'Year', 'teamID':'Team', 'lgID':'League', 'HR':'Home Runs','stint':'Stints', 'G':'Games', 'AB': 'At Bats', 'R': 'Runs', 'H':'Hits', '2B':'Doubles', '3B':'Triples', 'RBI':'Runs Batted In', 'SB':'Stolen Bases', 'CS':'Caught Stealing', 'BB':'Base on Balls', 'SO':'Strikeouts', 'IBB':'Intentional Walks', 'HBP':'Hit by pitch', 'SH':'Sacrifice hits', 'SF':'Sacrifice flies', 'GIDP':'Grounded into double plays'}
strong_positive_correlation = []strong_negative_correlation = []
def correlations_for_hr(df):    columns = list(df)    for x in columns:        if x not in leave_out:            name_of_metric = dictionary[x]            r = pearsons_r(df['HR'], df[x])                        # Calculating the strenth of the correlation            correlation = ''            if r > 0.7:                correlation = '++'                strong_positive_correlation.append(name_of_metric)            elif r > 0.5:                correlation = '+ '            elif r > 0.3:                correlation = '+-'            elif r >= -0.3:                correlation = 'O '            elif r > -0.5:                correlation = '-+'            elif r > -0.7:                correlation = '- '            elif r > -1:                correlation = '--'                strong_negative_correlation.append(name_of_metric)                            print('{} Correlation between Home runs and {}:{}'.format(correlation, name_of_metric, "%.3f"%r))            print('-----------------------------------------')            print('Correlations:')print('-----------------------------------------------------')print(correlations_for_hr(batting_df))print('\n')
print('Positive correlations: {}'.format(strong_positive_correlation))print('\n')
print('Negative correlations: {}'.format(strong_negative_correlation))

Выход:

Correlations:--------------------------------------------------------------------O  Correlation between Home runs and Stints: -0.065--------------------------------------------------------------------+  Correlation between Home runs and Games: 0.668--------------------------------------------------------------------+  Correlation between Home runs and At Bats: 0.695--------------------------------------------------------------------++ Correlation between Home runs and Runs: 0.729--------------------------------------------------------------------++ Correlation between Home runs and Hits: 0.703--------------------------------------------------------------------++ Correlation between Home runs and Doubles: 0.725--------------------------------------------------------------------+- Correlation between Home runs and Triples: 0.348--------------------------------------------------------------------++ Correlation between Home runs and Runs Batted In: 0.837--------------------------------------------------------------------O  Correlation between Home runs and Stolen Bases: 0.265--------------------------------------------------------------------+- Correlation between Home runs and Caught Stealing: 0.409--------------------------------------------------------------------++ Correlation between Home runs and Base on Balls: 0.731--------------------------------------------------------------------++ Correlation between Home runs and Strikeouts: 0.822--------------------------------------------------------------------++ Correlation between Home runs and Intentional Walks: 0.753--------------------------------------------------------------------+- Correlation between Home runs and Hit by pitch: 0.497--------------------------------------------------------------------O  Correlation between Home runs and Sacrifice hits: 0.064--------------------------------------------------------------------++ Correlation between Home runs and Sacrifice flies: 0.792--------------------------------------------------------------------++ Correlation between Home runs and Grounded into double plays: 0.767--------------------------------------------------------------------
Positive correlations: ['Runs', 'Hits', 'Doubles', 'Runs Batted In', 'Base on Balls', 'Strikeouts', 'Intentional Walks', 'Sacrifice flies', 'Grounded into double plays']
Negative correlations: []

Рассмотрение первых ожиданий

Помните мои ожидания? Я ожидал, что количество игр и оценка RBI имеет положительную корреляцию с дому домой. Согласно моим расчетам выше, количество игр имеет положительную корреляцию с R Pearson R 0668. Таким образом, игроки, которые играли больше игр в сезоне, имеют более высокое количество домов. Это звучит очень логично, поскольку Batters, которые играют больше игр, имеют больше шансов на выигрыш домой.

Мое другое ожидание было то, что высокий RBI будет означать высокое количество дому домой. Корреляция между домашними прогонами и RBI большая с .837! Это снова вполне логично, потому что домашние пробежки могут вознаградить игрока с большинством баллов RBI.

Еще одним интересным фактом является то, что нет негативных корреляций. Итак, нет метрики, который уменьшается, когда количество проходов домой увеличивается.

# HOME RUNS vs. RUNS BATTED INsns.lmplot(size=10, data=batting_df[['HR', 'RBI']], x='HR', y='RBI', x_estimator=np.mean)

График выше показывает, как домой работает соотносится на RBI. Вы можете увидеть количество домашних прогонов оси X и количество точек RBI на оси Y.

# HOME RUNS vs. STRIKEOUTSsns.lmplot(size=10, data=batting_df[['HR', 'SO']], x='HR', y='SO', x_estimator=np.mean)

Участок выше возвращает интересную корреляцию. Это корреляция между домашними прогонами и аутами. Корреляция R Pearson R составляет .822, что является почти такой же высокой, как корреляция между домашними прогонами и RBI.

Эта корреляция была более интересной для меня, потому что RBI – это прямой результат домохозяйств. Удаки, с другой стороны, имеют прямую корреляцию, чтобы потерять шанс на дому домой. Как на земле будут выходить из-за того, что выводятся в более домашние пробежки?

Как домашние пробеги и аутов

Чтобы решить эту тайну, я начал думать … Может быть, Batters, которые берут больше риска, с большей вероятностью забивают домашний пробег. Потому что они качаются даже на шариках, которые кажутся трудно ударить. Итак, если для получения больше рисков дает вам больше дома, я посмотрел на рискованные метрики. Рискованные метрики – это метрики, которые включают в себя риск, как воровство баз. Давайте посмотрим на корреляцию.

# HOME RUNS vs. CAUGHT STEALINGsns.lmplot(size=10, data=batting_df[['HR', 'CS']], x='HR', y='CS', x_estimator=np.mean)

Выше вы можете увидеть корреляцию (.409) между домашними прогонами (ось x) и количество раз, когда бегун уловит воровство (ось Y). Есть расплывная корреляция, но этого недостаточно сделать вывод. Может быть, зарабатываемым рисками очень хорошо воровство о краже баз и не поймают воровство? Давайте посмотрим на украденные базы.

# HOME RUNS vs. STOLEN BASESsns.lmplot(size=10, data=batting_df[['HR', 'SB']], x='HR', y='SB', x_estimator=np.mean)

Выше вы можете увидеть корреляцию .265 между домашними прогонами (ось x) и украденными основаниями (ось Y). Эта корреляция не существует. Таким образом, риск рисков не имеет ничего общего с участием домой.

Единственные данные не собираются раскрыть секрет забившегося домой. Мне нужно узнать больше о бейсболе, чтобы решить эту тайну. Мой следующий план атаки смотрел видео YouTube, чтобы увидеть, как ведут себя большим количеством батаров.

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

Выводы/прогнозы

Бентеры, пытаясь улучшить свою домашнюю статистику, у меня есть несколько предложений. Шаг первый в получении домашних прогонов: Играть больше игр, нет оправданий – Играть! Шаг 2: Получите некоторые вычеркивания. Это звучит контрактютивно понятно, но это увеличивает ваш номер домой. То, как это работает: он уносит кувшин и дает тесто больше времени, чтобы дождаться лучшего шага, чтобы ударить этот великолепный шлем.

Подробнее о корреляции между домашними прогонами и завещателями, прочитайте Эта статья Отказ

Или это о риски усталый кувшин

Для получения дополнительной проверки ditityanton.com и Зарегистрируйтесь Для моей еженедельной рассылки.