۱۲۰ سال از بازی‌های المپیک

منتشر‌شده در towardsdatascience به تاریخ ۳۰ آگوست ۲۰۱
لینک منبع 120 years of Olympic Games

مقدمه

با پایان یافتن بازی‌های المپیک توکیو، می‌خواهم تاریخ ۱۲۰ ساله بازی المپیک مدرن را مرور کنم. بازی‌های المپیک مدرن مهم‌ترین رویدادهای ورزشی بین‌المللی هستند که در آن‌ها رقابت‌های ورزشی تابستانی و زمستانی برگزار می‌شود. این اثر از بازی‌های المپیک باستانی که در المپیا یونان از قرن هشتم پیش از میلاد تا قرن چهارم پس از میلاد برگزار شد، الهام‌گرفته شده‌است. اولین بازی‌های مدرن در سال ۱۸۹۶ در آتن برگزار شد.

آماده‌سازی داده‌ها

منبع داده

داده‌ها از این لینک کاگل دانلود می‌شوند https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results. این مجموعه داده توسط rgriffin در می ۲۰۱۸ ایجاد شد.

اکتشاف داده

دو فایل csv تحت این مجموعه داده وجود دارد. رویدادهای ورزشی شامل جزئیات ورزش‌کاران شرکت‌کننده در هر رویداد است. قد، وزن، سن و نام ورزش‌کاران، ورزش و رویداد و نتیجه آن (برنده مدال) را دارد. nocRegion شامل سه حرف نام NOC و مناطق مربوطه است. براساس اطلاعات بالا، من نمودار رابطه قطعی را به صورت زیر به دست آورده‌ام.

تجزیه و تحلیل داده‌ها

من تصمیم گرفتم از داشبورد R برای تصویرسازی این مجموعه داده استفاده کنم. چندین بسته R باید نصب و بارگیری شوند.

---

title: "Olympic Games"

output:

flexdashboard::flex_dashboard:

orientation: columns

vertical_layout: fill

social: menu

source_code: embed

---

```{r setup, include=FALSE}

library(flexdashboard)

library(tidyverse)

library(plotly)

library(treemapify)

library(gganimate)

data<-read.csv("../athlete_events.csv")

region<-read.csv("../noc_regions.csv")

```

در flexdashboard، ما می‌توانیم چندین صفحه را طراحی کنیم و هر صفحه با «=» نشان داده می‌شود. در هر صفحه، می‌توانیم از «-» برای مشخص کردن ناحیه برای نمودار استفاده کنیم. من تصمیم گرفتم از سه صفحه برای نمایش نتیجه استفاده کنم. این سه صفحه عبارتند از: ورزش و رویدادها، ورزش‌کاران و کشورهای دارای مدال. محصول نهایی را می توان در این لینک یافت.

۱. ورزش و رویدادها

من می‌خواهم نگاهی به رشد تعداد ورزش‌ها و رویدادها در بازی‌های تابستانی و زمستانی داشته باشم. من ابتدا داده‌ها را آماده کردم و آن را fig_dat1 نامگذاری کردم. سال ۱۹۰۶ حذف شد چون عموما در بازی‌های رسمی المپیک در نظر گرفته نمی‌شود. من ورزش و رویداد متمایز هر یک از بازی‌های المپیک تابستانی و زمستانی را می‌شمارم.

```{r}

# show the change of sport event

fig_dat1<-data %>% filter(Year!=1906) %>%

group_by(Year,Season) %>%

summarise(sports=n_distinct(Sport),Sport_events=n_distinct(Event))%>%

mutate(Sport=Season, Event=Season)

fig_dat1 %>% ggplot(aes(x=Year,y=Sport_events)) +

geom_line(aes(color=Event)) +

geom_point(aes(color=Event)) +

geom_bar(aes(x=Year, y=sports*1.5, fill=Sport),stat = "identity") +

scale_fill_manual(values=c("red","blue")) +

scale_colour_manual(values = c("red","blue")) +

facet_grid(Sport~., scale="free_y") +

labs(x="Year of Olympic Games") +

scale_x_continuous(breaks = seq(1890 , 2016, 12)) +

scale_y_continuous(name = "Number of Event",

sec.axis = sec_axis(~./1.5, name = "Number of Sport"))

می‌توانیم ببینیم که تعداد ورزش‌ها و رویدادها به طور قابل‌توجهی افزایش یافت. ما همچنین می‌توانیم سه بازی تابستانی گم‌شده و دو بازی زمستانی گم‌شده را در سال ۱۹۲۰، ۱۹۴۰، ۱۹۴۴ شناسایی کنیم که به خاطر جنگ جهانی اول و دوم بود.

من همچنین از نقشه درختی برای نشان دادن تعداد رویدادهای هر ورزش برای بازی‌های تابستانی 2016 و زمستان 2014 استفاده می‌کنم. من از دو جدول نمایش دو نمودار در این زمینه استفاده می‌کنم.

Column {.tabset data-width=600}

-------

### 2016 Rio Olympic Summer Games

```{r}

fig_dat2<-data %>% filter(Year==2016 & Season=="Summer") %>% group_by(Sport) %>% summarise(Sport_events=n_distinct(Event))

fig_dat2 %>% ggplot(aes(area=Sport_events, fill=Sport, label=paste(Sport, Sport_events))) +

geom_treemap() +

geom_treemap_text(colour = "white",

place = "centre",

size = 12,

reflow = TRUE) +

theme(legend.position = "none") +

labs(title="Events number under 34 sports for 2016 Rio Summer Olympic Games")

```

### 2014 Sochi Olympic Winter Games

```{r}

fig_dat3<-data %>% filter(Year==2014 & Season=="Winter") %>% group_by(Sport) %>% summarise(Sport_events=n_distinct(Event))

fig_dat3 %>% ggplot(aes(area=Sport_events, fill=Sport, label=paste(Sport, Sport_events))) +

geom_treemap() +

geom_treemap_text(colour = "white",

place = "centre",

size = 12) +

theme(legend.position = "none") +

labs(title="Events number under 15 sports for 2014 Sochi Winter Olympic Games")

۲. ورزش‌کاران

من می‌خواهم تعداد ورزش‌کاران و نسبت جنسیتی هر یک از بازی‌های المپیک را مشخص کنم. ما می‌توانیم ببینیم که ورزش‌کاران بیشتری به ویژه ورزش‌کاران زن در بازی‌های المپیک شرکت می‌کنند.

Athletes {data-icon="fa-swimmer"}

=====================================

Column {.tabset data-width=500}

-------

### Summer Olympic Games Athletes

```{r}

# show the number of athlete

fig_dat4<-data %>%

filter(Season=="Summer" & Year!=1906) %>%

group_by(Year,Sex) %>%

summarise(Athletes=n_distinct(ID))

fig4<-fig_dat4 %>% ggplot(aes(x=Year,y=Athletes, fill=Sex)) +

geom_bar(stat="identity",position = "stack") +

labs(x="Year of Olympic Games", y="Number of Athletes") +

scale_x_continuous(breaks = seq(1896 , 2016, 20))

ggplotly(fig4)

```

### Winter Olympic Games Athletes

```{r}

# show the number of athlete

fig_dat5<-data %>%

filter(Season=="Winter") %>%

group_by(Year,Sex) %>%

summarise(Athletes=n_distinct(ID))

fig5<-fig_dat5 %>% ggplot(aes(x=Year,y=Athletes, group=Sex, fill=Sex)) +

geom_bar(stat="identity",position = "stack") +

labs(x="Year of Olympic Games", y="Number of Athletes") +

scale_x_continuous(breaks = seq(1896 , 2016, 20))

ggplotly(fig5)

```

سپس می‌خواهم به همبستگی بین تعداد ورزش‌کاران و تعداد مدال‌های طلا برای هر کشور در هر دوره بازی‌های المپیک نگاهی بیندازم. من از نمودار پراکندگی استفاده کردم و هر نقطه نشان‌دهنده یک NOC است.

Column {.tabset data-width=500}

-------

### Summer Olympic Games

```{r}

sub_data1<-data %>% filter(Medal=='Gold' & Year!=1906) %>%

group_by(Year,Season, NOC) %>%

summarise(Gold_Medal_count=n_distinct(Event))

sub_data2<-data %>% filter(Year!=1906) %>%

group_by(Year,Season, NOC) %>%

summarise(athletes_count=n_distinct(ID))

fig_dat6<-merge(sub_data2,sub_data1, by=c("Year","Season","NOC"))

fig_dat6 %>% filter(Season=="Summer") %>%

ggplot(aes(x=athletes_count, y=Gold_Medal_count)) +

geom_point() +

labs(x="Number of athletes", y="Number of gold medal") +

facet_wrap(Year~.)

```

### Winter Olympic Games

```{r}

fig_dat6 %>% filter(Season=="Winter") %>%

ggplot(aes(x=athletes_count, y=Gold_Medal_count)) +

geom_point() +

labs(x="Number of athletes", y="Number of gold medal") +

facet_wrap(Year~.)

```

۳. مدال‌ها

در این بخش، می‌خواهم ببینم کدام کشور بیش‌ترین مدال طلا را در هر یک از بازی‌های المپیک به دست آورده‌است.

Medals {data-icon="fa-medal"}

=====================================

Column {.tabset data-width=500}

-------

### Summer Olympic Games Gold Medal Leader Board

```{r}

# show the country with most gold Medal for each Summer Olympic Games

fig_dat6<-data %>% filter(Medal=='Gold') %>%

filter(Season=="Summer" & Year!=1906) %>%

group_by(Year,NOC) %>%

summarise(Gold_Medal_count=n_distinct(Event)) %>%

top_n(1, Gold_Medal_count) %>% arrange(desc(Gold_Medal_count)) %>%

merge(region,by="NOC")

fig_dat6 %>% ggplot(aes(x=factor(Year), y=Gold_Medal_count, fill=region)) +

geom_bar(stat='identity',position = position_dodge()) +

geom_text(aes(x=factor(Year), y=Gold_Medal_count/2,label=NOC),size=2, position =position_dodge(width=1)) +

geom_text(aes(x=factor(Year), y=Gold_Medal_count*1.05,label=Gold_Medal_count),size=2, position =position_dodge(width=1)) +

coord_flip() +

labs(x="Year",y="Gold Medals")

```

### Winter Olympic Games Gold Medal Leader Board

```{r}

# show the country with most gold Medal for each Summer Olympic Games

fig_dat7<-data %>% filter(Medal=='Gold') %>%

filter(Season=="Winter") %>%

group_by(Year,NOC) %>%

summarise(Gold_Medal_count=n_distinct(Event)) %>%

top_n(1, Gold_Medal_count) %>% arrange(desc(Gold_Medal_count)) %>%

merge(region,by="NOC")

fig_dat7 %>% ggplot(aes(x=factor(Year), y=Gold_Medal_count, fill=region)) +

geom_bar(stat='identity',position = position_dodge()) +

geom_text(aes(x=factor(Year), y=Gold_Medal_count/2,label=NOC),size=2, position =position_dodge(width=1)) +

geom_text(aes(x=factor(Year), y=Gold_Medal_count*1.05,label=Gold_Medal_count),size=2, position =position_dodge(width=1)) +

coord_flip() +

labs(x="Year",y="Gold Medals")

```

کاملا روشن است که آمریکا بر بازی‌های تابستانی المپیک تسلط دارد. از ۲۸ بازی تابستانی المپیک، این کشور ۱۷ بار در رده اول قرار گرفته‌است. در بازی‌های زمستانی، روسیه کاملا قوی است.

من می‌خواهم هیات‌مدیره مدال برای بازی‌های تابستانی ۲۰۱۶ و بازی‌های زمستانی ۲۰۱۴ را ببینم.

Column {.tabset data-width=500}

-------

### 2016 Rio Olympic Summer Games Medals Leaderboard

```{r}

fig_dat8<-data %>% filter(Year==2016 & Season=="Summer" & Medal!="NA") %>%

group_by(NOC,Medal) %>%

summarise(Medal_count=n_distinct(Event)) %>%

mutate(total_medal=sum(Medal_count)) %>%

spread(Medal, Medal_count) %>%

arrange(desc(Gold),desc(total_medal)) %>%

head(10) %>%

ungroup() %>%

mutate(gold_rank=1:10) %>%

gather("Medal","count",-c(NOC,gold_rank,total_medal)) %>%

mutate(Medal=factor(Medal, levels=c("Gold","Silver","Bronze"))) %>%

merge(region,by="NOC")

fig_dat8 %>% ggplot(aes(x= reorder(region,-gold_rank),y=count, fill=Medal)) +

geom_bar(stat = "identity", position = position_stack(reverse = T)) +

scale_fill_manual(values=c("#FFCC33","#D7D7D7","#CC6600"))+

labs(x="", y="") +

coord_flip() +

theme(panel.grid.major = element_blank(),

panel.grid.minor = element_blank(),

panel.background = element_blank())

```

### 2014 Sochi Olympic Winter Games Medals Leaderboard

```{r}

fig_dat9<-data %>% filter(Year==2014 & Season=="Winter" & Medal!="NA") %>%

group_by(NOC,Medal) %>%

summarise(Medal_count=n_distinct(Event)) %>%

mutate(total_medal=sum(Medal_count)) %>%

spread(Medal, Medal_count) %>%

arrange(desc(Gold),desc(total_medal)) %>%

head(10) %>%

ungroup() %>%

mutate(gold_rank=1:10) %>%

gather("Medal","count",-c(NOC,gold_rank,total_medal)) %>%

mutate(Medal=factor(Medal, levels=c("Gold","Silver","Bronze"))) %>%

merge(region,by="NOC")

fig_dat9 %>% ggplot(aes(x= reorder(region,-gold_rank),y=count, fill=Medal)) +

geom_bar(stat = "identity", position = position_stack(reverse = T)) +

scale_fill_manual(values=c("#FFCC33","#D7D7D7","#CC6600"))+

labs(x="", y="") +

coord_flip() +

theme(panel.grid.major = element_blank(),

panel.grid.minor = element_blank(),

panel.background = element_blank())

```

نتیجه‌گیری

تجسم داده‌ها یک روش بسیار کارآمد برای شناسایی الگو و ترسیم بینش از داده‌ها است. R بسته‌های زیادی برای آماده‌سازی و تحلیل داده‌ها دارد. GGplot2 یک بسته بسیار قدرتمند برای رسم نمودار است و با کمک قالب داشبورد خمشی، ساخت داشبورد و استقرار در وب بسیار راحت است.

این متن با استفاده از ربات مترجم مقاله دیتاساینس ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.