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

Так что Малкольм Гладэлл получил данные все не так … или он?

Автор оригинала: David Clinton.

В этой статье я поделюсь некоторые исследования Newbie, которые я сделал в областях аналитики данных и профессионального хоккета.

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

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

Но Части моей работы требуют, чтобы я внимательно следил за большими развивающимися тенденциями технологии Отказ И данные большие. В течение многих лет я наблюдал за всеми (ООН) классными детьми, играющими с числами, которые делают современную мировую работу и, честно говоря, я завидую.

Так вот я иду. Я собираюсь бросаться через некоторую очень незнакомую территорию, сделать несколько тупых ошибок и веселиться. Хочешь присоединиться ко мне?

Эта статья не начнется с абсолютного Базовый Основы. Если вы все еще хотите взять на себя первые шаги в Python, Проверьте это Отказ И если вы хотите знать, как начать работу с программированной средой, такими как ноутбуки Jupyter, я использую, посмотрите здесь Отказ Я предполагаю, что вам уже комфортно со всеми.

Делают дни рождения материи в спорте?

Я начну с вопроса, который я собираюсь попытаться ответить:

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

У молодого возраста эти месяцы могут иметь очень большую разницу в физической силе, размере и координации. Если бы вы были тренером Малой лиги, который хочет инвестировать в талант для лучшей команды в более сильной лиге, кто бы вы выбрали? И кто выиграл бы в долгосрочной перспективе от вашего дополнительного внимания?

Это то, где приходит знаменитый писатель, мыслитель, (и товарищеский канадский) Малкольм Гладэлл. Глаталлелл не был на самом деле оригинальным источником этого понимания, хотя он самый часто связанный с ним.

Скорее, эти отличия падают к психологу Роджеру Барнесско, который заметил странно распределенный шаблон рождения среди игроков в элитной юниорской хоккейной игре, которую он посещал. Почему было так много из этих талантливых спортсменов, рожденных в начале года? Гладэлл только что упомянул о проницательности Барнесского в своей книге Выбросы , который был там, где я наткнулся на него.

Но все это правда? Было ли наблюдение в Барнселе просто интригующим угадающим, или реальные данные несут его?

Где NHL скрывает свои данные?

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

https://statsapi.web.nhl.com/api/v1/teams/15/roster

… Например, создаст набор данных с форматом JSON, содержащий официальный текущий реестр вашинтонов. Изменение этого 15 в URL, скажем, 10 , даст вам такую же информацию о Торонто кленовых листьев.

Есть много, много таких конечных точек как часть API. Многие из этих конечных точек могут, кроме того, могут быть изменены с использованием синтаксиса расширения URL.

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

Знание всего этого, я мог бы высказать конечную точку для реестра каждую команды для идентификационного номера каждого игрока, а затем использовать эти идентификаторы, чтобы запросить уникальную конечную точку каждого игрока и прочитать его рождение. Затем я мог извлечь месяц рождения от каждого игрока NHL в PandaFrame PandaS, где весь набор может быть вычислен и отображается в виде гистограммы.

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

import pandas as pd
import requests
import json
import matplotlib.pyplot as plt
import numpy as np

df3 = pd.DataFrame(columns=['months'])
for team_id in range(1, 11, 1):
    url = 'https://statsapi.web.nhl.com/api/v1/teams/{}/roster'.format(team_id)
    r = requests.get(url)
    roster_data = r.json()
    df = pd.json_normalize(roster_data['roster'])
    for index, row in df.iterrows():
        newrow = row['person.id']
        url = 'https://statsapi.web.nhl.com/api/v1/people/{}'.format(newrow)
        newerdata = requests.get(url)
        player_stats = newerdata.json()
        birthday = (player_stats['people'][0]['birthDate'])
        newmonth = int(birthday.split('-')[1])
        df3 = df3.append({'months': newmonth}, ignore_index=True)
df3.months.hist()

Прежде чем двигаться дальше, я должен добавить несколько заметок:

  • Будьте осторожны, как часто вы используете этот код. Там вложены для/петли, поэтому запуск скрипта даже один раз наступит в API NHL с более чем тысячей запросов. И это предполагает, что все идет так, как он должен. Если вы ошиблись, вы можете в конечном итоге действительно раздражать людей, которых вы не хотите раздражать.
  • Этот код ( для Team_id в диапазоне (1, 11, 1): ) фактически только царапает данные из 11 команд NHL 30. По какой-то причине определенные конечные точки списка API не смогли ответить на мои запросы и фактически разбили скрипт. Итак, чтобы получить столько данных, сколько я мог, я провел скрипт несколько раз. Этот был первым из этих пробежек. Если вы хотите попробовать это сами, удалите df3.dataframe (столбцы = ['месяцы']) Строка от последующих итераций, поэтому вы не случайно сбросите значение вашего DataFrame на ноль.
  • Как только вы успешно соскреблируете ваши данные, используйте что-то вроде df3.to_csv ('player_data.csv') Чтобы скопировать данные в файл CSV, что позволяет вам дополнительно проанализировать содержимое, даже если исходное dataframe потеряно. Всегда приятно, чтобы не разместить ненужную нагрузку на происхождение API.

Как визуализировать необработанные данные

ОК. Где был я? Верно. У меня есть свои данные – рождение месяцев почти 1100 текущих игроков NHL – и я хочу посмотреть, как выглядит. Ну, ждать больше не, вот во всем его славе:

Что у нас сюда? Похоже на меня, как январские рождения, действительно, приходится непропорционально высокое количество игроков, но, а затем, так что роды декабря. И, в целом, я просто не вижу образец, которую предсказала идею Гладивелла. Ага! Сбил в огне. Никогда, никогда не доверяю интеллектуалу!

Ошибаться Не так быстро, молодой. Мы уверены, что мы правильно читаем эту гистограмму? Помните: я просто начинаю в этом поле и изучаю на «работе».

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

Что тут происходит?

Что действительно говорят гистограммы?

Давайте посмотрим на фактические числа за этой гистограммой. Вы можете получить эти номера, загрузка файла CSV, который вы могли бы раньше экспортировать использование df3.to_csv ('player_data.csv') Отказ Вот как вы могли бы сделать это сделать:

import pandas as pd
df = pd.read_csv('player_data.csv')
df['months'].value_counts()

И вот как выглядел мой выход (я добавил заголовки столбцов вручную):

Month Frequecy
5     127
2     121
3     111
1     104
4      99
7      98
10     79
8      76
12     75
6      71
11     69
9      63

Похоже, в мае 121 года в феврале было 127 рождений 127 лет, а 111 в марте. Декабрь было только 75.

Упс Извини Малкольм. У меня должно было быть больше веры. Посмотрите, как пять месяцев с высочайшими частотами рождения являются первыми пять месяцев года? Теперь это точно Что ожидает прогноз Гладэлла. Итак, то что случилось с гистограммой?

Давайте запустим его снова, но на этот раз я уточню 12 банок, а не по умолчанию.

import pandas as pd
df = pd.read_csv('player_data.csv')
df.hist(column='months', bins=12);

«Bin» на самом деле является приближением статистически подходящего интервала между наборами ваших данных. Бункеры пытаются угадать на Функция плотности вероятности (PDF) Это будет лучше всего представлять значения, которые вы на самом деле используете. Но они могут не отображать именно так, как вы думаете – особенно когда вы идете с по умолчанию. Вот что мы показаны, используя 12 Bins:

Это, вероятно, показывает нам точное представление наших данных, как мы рассчитываем, чтобы увидеть это. Я говорю «, вероятно,», потому что могут быть некоторые особенности, с тем, как гистограммы разделяют их мусорные баки, я не знаю.

Обязательно используйте правильные инструменты для работы

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

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

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

df.groupby('months').count().plot(kind='bar')

Бег, который даст нам что-то немного легче читать, это также более интуитивно надежно:

Это лучше, нет? Мы видим, что пять месяцев с высочайшими частотами месяца рождения находятся в начале года.

Мораль этой истории? Данные хорошие. Гистограммы хороши. Но также приятно знать, как их читать и когда их использовать.

В форме книг, курсов и статей гораздо больше в форме книг, курсов и статей, доступных сайт: bootstrap-it.com .