Кубок мира: анализ популярных команд-победителей чемпионата с помощью Python — (с исходным кодом)

задняя часть Python анализ данных pandas

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

Есть способ получить исходный код этой статьи в тексте.

Благодаря анализу данных можно получить много интересных результатов, таких как:

Узнайте, какие команды - это темные лошади, вступающие в Кубок мира впервые

До 2018 года он вошел в топ 32 в Кубке мира, чтобы узнать, но в чемпионате мира не выиграл гоночную команду

Конечно, наша главная задача на этот раз — спрогнозировать фаворитом команду на победу в ЧМ-2018 с помощью анализа данных.

Данные для этого анализа взяты из Kaggle, включая данные с 1872 года по этот год, включая матчи чемпионата мира, отборочные матчи чемпионата мира, Кубок Азии, Кубок Европы, товарищеские матчи между странами и другие игры, всего около 40 000 игр.

На этот раз окружающая среда

система виндовс 7

python 3.6

Jupyter Notebook

pandas version 0.22.0

Давайте сначала посмотрим на данные:

%matplotlib inlineimport pandas as pdimport matplotlib.pyplot as pltplt.style.use('ggplot')df = pd.read_csv('results.csv')df.head()скопировать код

Информация о столбцах данных, содержащихся в этом наборе данных, выглядит следующим образом:

Дата

название домашней команды

название выездной команды

Голы хозяев поля (без пенальти)

Количество голов, забитых командой гостей (без пенальти)

вид соревнования

Город матча

страна соревнований

нейтральный

Результат выглядит следующим образом:

1. Получить данные обо всех матчах чемпионата мира (кроме отборочных)

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

df_FIFA_all = df[df['tournament'].str.contains('FIFA', regex=True)]df_FIFA = df_FIFA_all[df_FIFA_all['tournament']=='FIFA World Cup']df_FIFA.head()скопировать код

Результат выглядит следующим образом:

Сделать предварительную расстановку данных,

df_FIFA.loc[:,'date'] = pd.to_datetime(df_FIFA.loc[:,'date'])df_FIFA['year'] = df_FIFA['date'].dt.yeardf_FIFA['diff_score'] = df_FIFA['home_score']-df_FIFA['away_score']df_FIFA['win_team'] = ''df_FIFA['diff_score'] = pd.to_numeric(df_FIFA['diff_score'])скопировать код

Создайте новый столбец данных, содержащий информацию о команде-победителе.

# The first method to get the winnersdf_FIFA.loc[df_FIFA['diff_score']> 0, 'win_team'] = df_FIFA.loc[df_FIFA['diff_score']> 0, 'home_team']df_FIFA.loc[df_FIFA['diff_score']< 0, 'win_team'] = df_FIFA.loc[df_FIFA['diff_score']< 0, 'away_team']df_FIFA.loc[df_FIFA['diff_score']== 0, 'win_team'] = 'Draw'df_FIFA.head()# The second method to get the winnersdef find_win_team(df):    winners = []    for i, row in df.iterrows():        if row['home_score'] > row['away_score']:            winners.append(row['home_team'])        elif row['home_score'] < row['away_score']:            winners.append(row['away_team'])        else:            winners.append('Draw')    return winners        df_FIFA['winner'] = find_win_team(df_FIFA)df_FIFA.head()скопировать код

Результат выглядит следующим образом:

2. Получить 20 лучших данных всех матчей чемпионата мира.

2.1 Получите данные о 20 лучших с наибольшим количеством побед во всех матчах чемпионата мира
s = df_FIFA.groupby('win_team')['win_team'].count()s.sort_values(ascending=False, inplace=True)s.drop(labels=['Draw'], inplace=True)скопировать код

Визуализируйте это с пандами следующим образом:

Гистограмма

s.head(20).plot(kind='bar', figsize=(10,6), title='Top 20 Winners of World Cup')скопировать код

горизонтальная гистограмма

s.sort_values(ascending=True,inplace=True)s.tail(20).plot(kind='barh', figsize=(10,6), title='Top 20 Winners of World Cup')скопировать код

Круговая диаграмма

s_percentage = s/s.sum()s_percentages_percentage.tail(20).plot(kind='pie', figsize=(10,10), autopct='%.1f%%',startangle=173, title='Top 20 Winners of World Cup', label='')скопировать код

Вывод анализа 1:

Судя по количеству выигранных игр, Бразилия, Германия, Италия и Аргентина входят в четверку сильнейших команд.

С помощью приведенного выше анализа мы также можем проверить победы некоторых стран.

s.get('China', default = 'NA')s.get('Japan', default = 'NA')s.get('Korea DPR', default = 'NA')s.get('Korea Republic', default = 'NA')s.get('Egypt', default = 'NA')скопировать код

Текущие результаты: «Н/П», 4, 1, 5, «Н/П» соответственно.

Судя по результатам, сборная Китая еще не побеждала на чемпионате мира (без учета квалификаций). Конечно,本次世界杯的黑马-埃及队,之前两度进入世界杯上,但也没有赢过~~

Приведенный выше анализ — это количество выигранных игр, давайте посмотрим на общее количество голов.

2.2 Общее количество голов в разных сборных

df_score_home = df_FIFA[['home_team', 'home_score']]column_update = ['team', 'score']df_score_home.columns = column_updatedf_score_away = df_FIFA[['away_team', 'away_score']]df_score_away.columns = column_updatedf_score = pd.concat([df_score_home,df_score_away], ignore_index=True)s_score = df_score.groupby('team')['score'].sum()s_score.sort_values(ascending=False, inplace=True)s_score.sort_values(ascending=True, inplace=True)s_score.tail(20).plot(kind='barh', figsize=(10,6), title='Top 20 in Total Scores of World Cup')скопировать код

Вывод анализа 2:

По общему количеству голов Германия, Бразилия, Аргентина и Италия входят в четверку сильнейших команд.

Приведенный выше анализ представляет собой данные всех команд с 1872 года. Ниже мы сосредоточимся на анализе данных 32 лучших команд ЧМ-2018.

3. Анализ 32 лучших на ЧМ-2018

Группировки на ЧМ-2018 выглядят следующим образом:

Первая группа: Россия, Германия, Бразилия, Португалия, Аргентина, Бельгия, Польша, Франция.

Группа 2: Испания, Перу, Швейцария, Англия, Колумбия, Мексика, Уругвай, Хорватия.

Группа 3: Дания, Исландия, Коста-Рика, Швеция, Тунис, Египет, Сенегал, Иран.

Группа 4: Сербия, Нигерия, Австралия, Япония, Марокко, Панама, Южная Корея, Саудовская Аравия.

Получите все данные для топ-32

Во-первых, определите, впервые ли команда вышла на чемпионат мира.

team_list = ['Russia', 'Germany', 'Brazil', 'Portugal', 'Argentina', 'Belgium', 'Poland', 'France',             'Spain', 'Peru', 'Switzerland', 'England', 'Colombia', 'Mexico', 'Uruguay', 'Croatia',            'Denmark', 'Iceland', 'Costa Rica', 'Sweden', 'Tunisia', 'Egypt', 'Senegal', 'Iran',            'Serbia', 'Nigeria', 'Australia', 'Japan', 'Morocco', 'Panama', 'Korea Republic', 'Saudi Arabia']for item in team_list:    if item not in s_score.index:        print(item)скопировать код

out:

Iceland

Panama

Приведенный выше анализ показывает, что Исландия и Панама впервые приняли участие в чемпионате мира.

Поскольку Исландия и Панама впервые участвовали в чемпионате мира, 32 лучших данных здесь фактически не содержат исторических данных этих двух команд.

df_top32 = df_FIFA[(df_FIFA['home_team'].isin(team_list))&(df_FIFA['away_team'].isin(team_list))]скопировать код

3.1 Данные о 32 лучших с 1872 г.

Количество выигрышных питчей
s_32 = df_top32.groupby('win_team')['win_team'].count()s_32.sort_values(ascending=False, inplace=True)s_32.drop(labels=['Draw'], inplace=True)s_32.sort_values(ascending=True,inplace=True)s_32.plot(kind='barh', figsize=(8,12), title='Top 32 of World Cup since year 1872')скопировать код

Статистика голов
df_score_home_32 = df_top32[['home_team', 'home_score']]column_update = ['team', 'score']df_score_home_32.columns = column_updatedf_score_away_32 = df_top32[['away_team', 'away_score']]df_score_away_32.columns = column_updatedf_score_32 = pd.concat([df_score_home_32,df_score_away_32], ignore_index=True)s_score_32 = df_score_32.groupby('team')['score'].sum()s_score_32.sort_values(ascending=False, inplace=True)s_score_32.sort_values(ascending=True, inplace=True)s_score_32.plot(kind='barh', figsize=(8,12), title='Top 32 in Total Scores of World Cup since year 1872')скопировать код

Анализ вывод 3:

С 1872 года в матчах чемпионата мира между 32 лучшими командами Германии, Бразилии и Аргентины самые сильные команды по количеству выигранных полей и количеству забитых голов.

С 1872 г. по настоящее время прошло более 100 лет, и временной отрезок относительно большой.Некоторые страны претерпели серьезные изменения.Последующий анализ соревнований с 1978 г. (около 10 сессий) и 2002 г. (около 4 сессий) .

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

3.2 Данные о 32 лучших с 1978 г.

Количество выигрышных питчей

Статистика голов

Вывод анализа 4:

С 1978 года в матчах чемпионата мира между 32 лучшими командами Аргентина, Германия и Бразилия являются сильнейшими по количеству победных полей.

С точки зрения количества голов, в топ-3 также входят эти три команды, но более очевидно преимущество данных сборной Германии.

3.3 Данные о 32 лучших с 2002 г.

Количество выигрышных питчей

Статистика голов

Анализ вывод 5:

С 2002 года в матчах чемпионата мира между 32-мя сильнейшими командами по количеству выигранных площадок и количеству забитых голов являются Германия, Аргентина и Бразилия. Среди них преимущество данных немецкой команды более очевидно.

4. Комплексные выводы

32 команды на чемпионате мира 2018 года, согласно данным предыдущего чемпионата мира, прогнозируют, что в тройку лидеров входят Германия, Аргентина и Бразилия, из которых немецкая команда должна быть самым большим фаворитом на победу в чемпионате.

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

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

загрузка кода

нажимать【公众号:Python数据之道】QR-код ответа на ключевые слова после подпискиPyDataRoad

Код для этой статьи доступен.

Путь данных Python

Making Data More Valuable