- Оригинальный адрес:EXPLORATORY STATISTICAL DATA ANALYSIS WITH A KAGGLE DATASET USING PANDAS
- Оригинальный автор:Strikingloo
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:haiyang-tju
- Корректор:rocheers leviding
Иногда, столкнувшись с проблемой данных для набора данных, мы должны сначала вникнуть в него и понять его. Понимание его свойств, его распространения и т. д. — это область, на которой нам нужно сосредоточиться.
Сегодня мы будем использоватьPython PandasФреймворк для анализа и визуализации данных с использованием Seaborn.
Как гик-программист, у меня очень низкая эстетика. Для меня Seaborn — отличный инструмент визуализации, потому что нужны только координаты.
Он использует Matplotlib в качестве механизма построения графиков и использует стили по умолчанию для настройки графиков, благодаря чему они выглядят красивее, чем я. Давайте взглянем на набор данных, и я покажу вам интуицию при рассмотрении различных функций. Может быть, мы сможем получить некоторые идеи от него!
Вы не можете сделать омлет без яиц: набор данных.
В приведенном ниже анализе я использую120 лет Олимпийским играмНабор данных, вы можете скачать или прочитать о нем подробнее, нажав на эту ссылку.
Я скачал этот набор данных бесплатно с Kaggle. Если вам нужно получить набор данных, чтобы попробовать что-то новоеАлгоритмы машинного обучения, чтобы освежить в памяти некоторые API-интерфейсы фреймворка или просто поиграть, Kaggle — отличный сайт.
Я просто использую «athlete_events» из CSV-файла, который записывает информацию о спортсменах для всех олимпийских соревнований с 1900 года, то есть страну, где родился каждый спортсмен, выиграл ли он награду и т. д.
Интересно, в файлеmedals85% данных в столбце пусты, поэтому в среднем только 15% олимпийских спортсменов завоевали медали. Кроме того, есть спортсмены, завоевавшие более одной медали, что говорит о том, что среди немногих спортсменов олимпийского уровня меньше медалей. Так что их заслуга еще больше!
Начните анализ: как выглядит набор данных?
Во-первых, прежде чем погрузиться в набор данных, давайте получим некоторые визуальные данные, чтобы понять структуру набора данных. Например, сколько данных в наборе данных отсутствует? Сколько столбцов имеют данные? С этих вопросов я хотел бы начать свой анализ.
Я использую Jupyter Notes во время анализа и комментирую каждый фрагмент кода, который запускаю, чтобы вы могли следить за ним.
Заметки Jupyter можно найти по адресуна этом складеНайдите его, вы можете открыть его и посмотреть, и вы можете начать с любого места.
Первое, что я делаю, это использую Pandas для загрузки данных и проверки их размера.
import pandas as pd
import seaborn as sns
df = pd.read_csv('athlete_events.csv')
df.shape
#(271116, 15)
В этом примере в наборе данных 15 разных столбцов и целых 271 116 строк! Это данные более 270 000 спортсменов! Но потом мне стало интересно, сколько на самом деле разных спортсменов. Кроме того, сколько из них завоевали медали?
Чтобы просмотреть эти данные, сначала вызовите функцию «список» для набора данных слов, чтобы просмотреть данные строки. Мы можем увидеть много интересных особенностей.
list(df)
#['ID','Name','Sex','Age','Height','Weight','Team','NOC','Games','Year','Season','City',
# 'Sport','Event','Medal']
Некоторые из вещей, о которых я могу думать, это то, что мы могли бы посмотреть на средний рост и вес олимпийских спортсменов или разделить их по разным видам спорта. Мы также можем посмотреть на распределение двух переменных, зависящих от пола. Мы даже можем увидеть, сколько медалей у каждой страны, и использовать это как временной ряд, чтобы увидеть подъем и падение цивилизаций на протяжении двадцатого века.
Возможности безграничны! Но сначала давайте решим загадку: насколько полон наш набор данных?
def NaN_percent(df, column_name):
row_count = df[column_name].shape[0]
empty_values = row_count - df[column_name].count()
return (100.0*empty_values)/row_count
for i in list(df):
print(i +': ' + str(NaN_percent(df,i))+'%')
'''
0% incomplete columns omitted for brevity.
Age: 3.49444518214%
Height: 22.193821095%
Weight: 23.191180159%
Medal: 85.3262072323% --Notice how 15% of athletes did not get any medals
'''
Используйте метод подсчета Pandas для данных серии, чтобы получить количество непустых строк. И, взглянув на свойство shape, вы можете увидеть общее количество строк, независимо от того, пусты они или нет.
Дальше дело за вычитанием и делением. Мы видим, что не заполнены только четыре столбца атрибутов: рост, вес, возраст и медали.
Неполнота атрибута медали связана с тем, что спортсмен, возможно, на самом деле не выиграл медаль, поэтому ожидается, что эти данные будут неполными. Однако неполные данные создают серьезные проблемы с точки зрения веса, роста и возраста.
Я пробовал фильтровать строки данных по разным годам, но неполнота, кажется, сохраняется во времени, что заставляет меня думать, что могут быть некоторые страны, которые не предоставляют эти релевантные данные для спортсменов.
Приступим к нашему реальному анализу: как обстоят дела с медалью?
Первый вопрос, который мы задали, был: сколько разных людей завоевали медали с 1900 года? Следующий фрагмент кода отвечает на этот вопрос:
total_rows = df.shape[0]
unique_athletes = len(df.Name.unique())
medal_winners = len(df[df.Medal.fillna('None')!='None'].Name.unique())
"{0} {1} {2}".format(total_rows, unique_athletes, medal_winners)
#'271116 134732 28202'
Как видите, за последние 120 лет в Олимпиаде участвовало около 135 000 разных людей, но только более 28 000 человек завоевали хотя бы одну медаль.
Соотношение медалей примерно один к пяти, что неплохо. Но это менее оптимистично, если учесть, что многие люди на самом деле занимаются спортом сразу в нескольких категориях.
Теперь, когда мы это проанализировали, сколько медалей завоевали спортсмены за эти 120 лет?
# 查看奖牌分布
print(df[df.Medal.fillna('None')!='None'].Medal.value_counts())
# 总共多少奖牌
df[df.Medal.fillna('None')!='None'].shape[0]
'''
Gold 13372
Bronze 13295
Silver 13116
Total: 39783
'''
Неудивительно, что распределение в медальном зачете почти равномерное: разыгрывается почти одинаковое количество золотых, серебряных и бронзовых медалей.
Однако в общей сложности было вручено почти 39 000 медалей, а это означает, что если вы принадлежите к 20% спортсменов, завоевавших наибольшее количество медалей, ваше среднее количество медалей будет больше 1.
Так что насчет распределения по странам? Чтобы получить эту информацию, запустите следующий фрагмент кода:
team_medal_count = df.groupby(['Team','Medal']).Medal.agg('count')
# 按照数量进行排列
team_medal_count = team_medal_count.reset_index(name='count').sort_values(['count'], ascending=False)
#team_medal_count.head(40) 用来显示第一行
def get_country_stats(country):
return team_medal_count[team_medal_count.Team==country]
# get_country_stats('some_country') 获得对应国家的奖牌
Используя эту функцию, мы можем получить количество медалей каждого типа, которые выиграла страна, и получить заголовок кадра данных Pandas, чтобы увидеть, в какой стране больше всего медалей.
Интересно, что второе место среди стран с наибольшим количеством медалей по-прежнему занимает СССР, хотя его не было почти 20 лет.
Во всех категориях первое место у США, а третье место у Германии. Я также посмотрел на свои две страны, Аргентину и Хорватию, и был удивлен, обнаружив, что Хорватия завоевала 58 золотых медалей, хотя это с 1991 года (это были Олимпийские игры 1992 года).
Напишите фрагмент кода в качестве упражнения, чтобы получить данные о разных годах участия определенной страны в Олимпийских играх, я думаю, вы справитесь!
Участие женщин
Еще одна интересная вещь, которая приходит мне на ум, это то, как женщины выступали на Олимпийских играх на протяжении всего столетия? Этот код отвечает на вопрос:
unique_women = len(df[df.Sex=='F'].Name.unique())
unique_men = len(df[df.Sex=='M'].Name.unique())
women_medals = df[df.Sex=='F'].Medal.count()
men_medals = df[df.Sex=='M'].Medal.count()
print("{} {} {} {} ".format(unique_women, unique_men, women_medals, men_medals ))
df[df.Sex=='F'].Year.min()
#33808 100979 11253 28530
#1900
Что меня поражает, так это то, что женщины участвовали в Олимпийских играх еще в 1900 году. Исторически, однако, соотношение мужчин и женщин на Олимпийских играх было 3 к 1. Пораженный тем, что женщины участвовали в Олимпийских играх еще в 1900 году, я решил посмотреть на их количество участников за весь период времени. Наконец-то я использовал Seaborn!
Мы видим, что уровень участия женщин быстро рос за последние несколько десятилетий, почти с нуля до тысяч. Однако действительно ли их уровень участия растет быстрее, чем у мужчин? Или это просто вопрос населения мира? Чтобы решить эту проблему, я сделал второе изображение:
f_year_count = df[df.Sex=='F'].groupby('Year').agg('count').Name
m_year_count = df[df.Sex=='M'].groupby('Year').agg('count').Name
(sns.scatterplot(data= m_year_count),
sns.scatterplot(data =f_year_count))
Участие женщин (оранжевый) по сравнению с участием мужчин (синий) с течением времени.
На этот раз мы можем ясно увидеть закономерность: количество участвующих женщин на самом деле быстро приближается к количеству мужчин! Еще одна интересная вещь: видите маленькую точку внизу, справа? Я думаю, что это зимние Олимпийские игры! В любом случае, картина выглядит довольно оптимистично для женского представительства, хотя не было года, когда бы женщин-участников было больше, чем мужчин.
Дополнительный анализ: рост и вес
Я долго смотрел на графики корреляции роста и веса, но так и не пришел к каким-то интересным выводам.
- Оба свойства обычно распространены в большинстве видов спорта.
- Во всех видах спорта, которые я видел, мужчины всегда тяжелее и выше женщин.
- Единственное интересное изменение, кажется, заключается в том, насколько разница между двумя полами может быть проанализирована с точки зрения этого движения.
Дайте мне знать, если у вас есть интересные идеи для анализа данных веса и роста! Я не вникал достаточно глубоко в группы по каждому виду спорта, так что может быть некоторая неверная интерпретация. На сегодня это все, надеюсь, вам был интересен этот анализ или, по крайней мере, вы узнали что-то о Pandas или анализе данных.
я положил заметкиGitHubтак что вы можете воспроизвести проект, провести собственный анализ, а затем сделать запрос на вытягивание.
Конечно, вы получаете все кредиты! Надеюсь, вы лучше разбираетесь в графическом отображении и визуальном анализе, чем я.
Часть 2 Глубокое понимание движения можно найти здесь.
Можетследуй за мной на медиуме для получения дополнительных руководств, советов и рекомендаций, связанных с разработкой программного обеспечения и наукой о данных.Если вам действительно понравилась эта статья, поделитесь ею с друзьями!
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.