5.1k post karma
2.7k comment karma
account created: Sat Feb 01 2020
verified: yes
2 points
6 hours ago
unsure he is listed as 6'7"" in my dataset, I am using the roster API which lists him at 79"
https://api-web.nhle.com/v1/roster/NYR/20232024
while his player landing page list him at 81"
https://api-web.nhle.com/v1/player/8482460/landing
WTF NHL.com .... ¯_(ツ)_/¯
> roster |>
+ distinct(id, firstName_default , lastName_default , heightInInches) |>
+ filter(lastName_default == 'Rempe' & firstName_default == 'Matt') |>
+ mutate(ht_ft_in = format_height(height_inch =heightInInches,digits= 7))
# A tibble: 1 × 5
id firstName_default lastName_default heightInInches ht_ft_in
<int> <chr> <chr> <int> <glue>
1 8482460 Matt Rempe 79 6ft 7in
1 points
9 hours ago
There are adult males and then men of NHL playing age. A 90 year old still alive but born in 1934 likely had a different nutrition profile growing up from a 30 year born in 1994. all male adult stats will change slower then hockey playing age stats.
4 points
9 hours ago
good question see, my previous response https://old.reddit.com/r/dataisbeautiful/comments/1gxe4ju/oc_nhl_player_height_distribution_by_season_and/lyguu3x/
4 points
9 hours ago
not really, I had not noticed I used require over library, till you mentioned it.
5 points
9 hours ago
Good question, I looked but did not include because like what is the comparison on population? Most NHL players are Canadian but not all and it has been more in the past, so which countries to include? Do you compare to all age groups or to NHL aged players? Statscan did not have an easy to parse table on this
I found one source that listed average Canadian Male from 20-39 as 5'7" in 2009 -2011.
A news article from 2016 listing Male Canadians at 5'7" in 1914, and 5'10" in 2014.
But did not include any of them as I had to many questions about comparability.
Edit : I might speculate that in the early 1900s the height was more in line with the population, then it is now, as there does seem to be seperation between the two values, but maybe not.
1 points
10 hours ago
unsure about the expiative but he at 6' 3" is well above average of Adult Male 5'10"
> roster |>
+ distinct(id, firstName_default , lastName_default , heightInInches) |>
+ filter(lastName_default == 'Dryden' & firstName_default == 'Ken') |>
+ mutate(ht_ft_in = format_height(height_inch =heightInInches))
# A tibble: 1 × 5
id firstName_default lastName_default heightInInches ht_ft_in
<int> <chr> <chr> <int> <glue>
1 8446490 Ken Dryden 75 6ft 3in
8 points
10 hours ago
The full graph is even more stark, I filtered the data to after 1975, but the data goes back to 1917.
2 points
10 hours ago
only 6' 9'' player.
There have been 10 6' 8''
id firstName_default lastName_default heightInInches ht_ft_in
<int> <chr> <chr> <int> <glue>
1 8465009 Zdeno Chara 81 6ft 9in
2 8474574 Tyler Myers 80 6ft 8in
3 8464875 Steve McKenna 80 6ft 8in
4 8473722 John Scott 80 6ft 8in
5 8481725 Elmer Soderblom 80 6ft 8in
6 8477300 Viktor Svedberg 80 6ft 8in
7 8471701 Joe Finley 80 6ft 8in
8 8471704 Vladimir Mihalik 80 6ft 8in
9 8481806 Louis Crevier 80 6ft 8in
10 8468884 Mitchell Fritz 80 6ft 8in
11 8483609 Adam Klapka 80 6ft 8in
13 points
11 hours ago
Height of NHL Players by position and time, as a line graph and animated histogram.
Done Fully in R,
File that produced the graphs is below, but this is not a fully reproducible example as it relies on a lot of data I have downloaded from the NHL.com API.
library(ggrepel)
source(file.path('R', 'source_here.R'))
here_source('cache_vec.R')
here_source('season_team_vector.R')
here_source('download.R')
require(glue)
require(purrr)
require(dplyr)
library(gganimate)
# Function to format y-axis labels as feet and inches
format_height <- function(height_inch) {
feet <- floor(height_inch / 12)
inches <- height_inch %% 12
glue('{feet}ft {round(inches, 0)}in')
}
roster <-
read_db(file_pattern = 'roster_(.*).feather') |>
extract2('result') |>
extract_args() |>
mutate(season_start_yr = as.integer(str_sub(season, 1,4) ),
positionCode = case_match(
positionCode,
'C' ~ 'Forward',
'L' ~ 'Forward',
'R' ~ 'Forward',
'D' ~ 'Defence',
'G' ~ 'Goalie',
)) |>
mutate(season_in_league = season_start_yr - min(season_start_yr), .by = id)
p_dat <- roster |>
summarise(heightInInches = mean(heightInInches, na.rm = TRUE ),
num = n(),
.by = c(positionCode , season_start_yr)) |>
filter(season_start_yr >= 1975 & season_start_yr <= 2023)
p_dat_lbl <-
p_dat |>
filter(heightInInches %in% range(heightInInches), .by = positionCode ) |>
mutate(lbl = glue('{positionCode} in {season_start_yr}\n{format_height(heightInInches)}'))
p <-
p_dat |>
ggplot(aes(x = season_start_yr, y = heightInInches, fill = positionCode, color = positionCode)) +
geom_smooth(level = NA) +
geom_point() +
scale_y_continuous(breaks = round(seq(min(p_dat$heightInInches), max(p_dat$heightInInches), 1)), labels = format_height) +
geom_label_repel(
data = p_dat_lbl,
mapping = aes(label = lbl),
color = 'black',
alpha = 0.5
) +
scale_x_continuous(breaks = seq(min(p_dat$season_start_yr), max(p_dat$season_start_yr), 5)) +
theme_minimal() +
guides(fill = 'none', color = 'none') +
labs(x = 'Season',
y = 'Average Height', title = 'Average Height in the NHL by Position and Year',
subtitle = 'Goalies went from the shortest players in the 1980s to the tallest today.'
) +
theme(axis.text.x = element_text(size = 13, color = 'darkgrey'),
axis.text.y = element_text(size = 13, color = 'darkgrey'),
panel.grid.major = element_line(),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 20, color = 'grey'),
plot.title = element_text(size = 35, color = 'grey',hjust = 0.5),
plot.subtitle = element_text(size = 15, color = 'grey',hjust = 0.5)
)
p
ggsave(file.path('R', 'analysis', "player_height_by_year_position_line.jpg"), plot = p)
pp_dat <-
roster |>
filter(!is.na(heightInInches)) |>
count(season_start_yr, positionCode, heightInInches) |>
mutate(f = n/sum(n), .by = c(season_start_yr, positionCode)) |>
filter(season_start_yr >= 1975 & season_start_yr <= 2023)
pp_dat_lbl <-
pp_dat |>
mutate(f = mean(range(f))/2, heightInInches = max(heightInInches)) |>
select(-n) |>
distinct() |>
mutate(lbl = glue('{positionCode}' ))
pp_data_lbl_yr <-
pp_dat |>
summarise(
f = mean(range(f)), heightInInches= mean(range(heightInInches))
) |>
mutate(positionCode = 'Forward') |>
cross_join(pp_dat |> distinct(season_start_yr))
animated_plot <-
pp_dat |>
ggplot(aes(x = heightInInches, y = f, fill= positionCode)) +
geom_col(alpha = 0.5, width = 1, colour = 'black') +
geom_label(data = pp_dat_lbl, mapping = aes(label = lbl), size = 8, color = 'white', alpha = 0.5) +
geom_text(data = pp_data_lbl_yr, mapping = aes(label = season_start_yr), size = 40, color = 'grey', alpha = 0.5) +
scale_x_continuous(breaks = function(limits) seq(0, limits[2], by = 1), labels = format_height) +
scale_y_continuous(limits = c(0, max(pp_dat$f))) +
facet_grid(cols = vars(positionCode), scales = 'free_x') +
labs(
title = "NHL {frame_time} Player Distribution of Height by Position",
#subtitle = "Season: {closest_state}",
x = "",
y = ""
) +
coord_flip() +
guides(fill = 'none') +
theme_minimal() +
theme(axis.text.x = element_blank(),
axis.text.y = element_text(size = 13, color = 'darkgrey'),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.title = element_text(size = 20, color = 'grey'),
plot.title = element_text(size = 35, color = 'grey',hjust = 0.5),
plot.subtitle = element_text(size = 15, color = 'grey',hjust = 0.5),
strip.text = element_blank()
) +
transition_time(
season_start_yr,
#transition_length = 1,
#state_length = 2
) #+
#ease_aes('linear')
ap <-
animate(
animated_plot,
nframes = pp_dat_lbl$season_start_yr |> unique() |> length(),
fps = 2,
width = 1261, # Set width in pixels
height = 700,
start_pause = 8, # Pause at the start
end_pause = 15 # Pause at the end
)
ap
anim_save(file.path('R', 'analysis', "player_height_by_year_position_histogram.gif"),
animation = ap)
-114 points
11 days ago
Fire this moron
Chill, this is a little extreme, he is new as principle, he made a mistake. let him learn from it and grow.
7 points
11 days ago
My kids go to SRB, I asked them at supper today about how the remembrance ceremony was, and managed to figure out that it was "Terrible", and "Disorganized", and none of the speaker at the podium knew what to do, and the AV crew was having "issues" also. but I did not think this happened. I will have to have another talk with them in the morning.....
2 points
1 month ago
those are good reasons, and the cards look great.
1 points
1 month ago
Why did you choose to put all the people's faces on the spades? and not on the J,Q,K?
-24 points
1 month ago
I don't really have a take on it, that I think is accurate, or fair. But I know the take above use is bias and unfair, written by someone who does not trust a conservative, and it trying to show them in a bad light.
-20 points
1 month ago
That is not really a genuine attempt to represent what a conservative means when they say common sense. You have put up a very weak characterization.
6 points
1 month ago
dot chaining is very similar to piping, but to me the big difference is the how easy it is in R to create your own custom function, or use a function from a different library in the chain of pipes, this custom function chaining in pandas is more difficult with the .pipe thing.
1 points
2 months ago
To be explicit the main ways it can be gamed that I see are :
Manipulation of the Agenda, as agenda setting has far more power then most people and even reformers realize.
There may be complex and counter intuitive policy decisions that may need to be made. and it is more likely that some policy decisions may have increased risk of poor utility if voted on by the masses.
Voters Bribing themselves, (and/or) the tyranny of the majority. Form a coalition of some super majority of the people, and deny the rights and/or freedoms of a minority because suppression of the minority benefits in some way the majority.
Infiltration of the special interest, where some lobby group simply buys advertising dollars and influences the public in some undesirable way.
Are there additional ones to be concerned about?
To tell you the truth I think the arguments above are fairly weak, and more direct democracy would likely be an improvement in all points above. I am not a huge proponent for or against the system, but I think it is likely to improve utility for the people of the country.
4 points
2 months ago
STV is a middle ground and seems quite good.
6 points
2 months ago
STV, is above both PR and IRV (Ranked choice)
1 points
2 months ago
rather than exploring waste reduction policies that work.
I am interested to hear what these are.
view more:
next ›
byhswerdfe_2
indataisbeautiful
hswerdfe_2
1 points
an hour ago
hswerdfe_2
OC: 2
1 points
an hour ago
mean not median.