В 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