class: center, middle, inverse, title-slide # Язык R и его применение в биоинформатике ### Анастасия Жарикова, Анна Валяева ### 24.09.2021 --- # Длинный и широкий формат - Из широкого в длинный - `pivot_longer` - Из длинного в широкий - `pivot_wider` <img src="data:image/png;base64,#img/2021-09-24/wide_long.png" width="80%" style="display: block; margin: auto;" /> --- # Лемуры в широком формате ```r lemur_weights <- read_csv("data/2021-10-08/aye_weights.csv") lemur_weights ``` ``` # A tibble: 51 × 4 name weight_1 weight_2 weight_3 <chr> <dbl> <dbl> <dbl> 1 Nosferatu 2860 2505 2930 2 Poe 2700 2610 2680 3 Samantha 2242 2360 2415 4 Annabel Lee 944 1180 1689 5 Mephistopheles 2760 2520 2620 6 Endora 2600 2360 2645 7 Ozma 2500 2440 2620 8 Morticia 2700 2550 2255 9 Blue Devil 1330 1820 2460 10 Goblin 1180 1460 1150 # … with 41 more rows ``` --- # Лемуры в широком формате ```r ggplot(lemur_weights, * aes(x = weight_1, y = weight_2)) + geom_point(size = 3) + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/lemurs_wide_pl_1-1.png" width="80%" style="display: block; margin: auto;" /> --- # Лемуры в широком формате ```r ggplot(lemur_weights, aes(x = weight_1, y = weight_2, * color = name)) + geom_point(size = 3) + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/lemurs_wide_pl_2-1.png" width="80%" style="display: block; margin: auto;" /> --- # Лемуры в длинном формате ```r lemur_weights_long <- lemur_weights %>% * pivot_longer( * cols = -name, * names_to = "weight", values_to = "gram", * values_drop_na = TRUE) lemur_weights_long %>% head ``` ``` # A tibble: 6 × 3 name weight gram <chr> <chr> <dbl> 1 Nosferatu weight_1 2860 2 Nosferatu weight_2 2505 3 Nosferatu weight_3 2930 4 Poe weight_1 2700 5 Poe weight_2 2610 6 Poe weight_3 2680 ``` --- # Лемуры в длинном формате ```r lemur_weights_long %>% group_by(weight) %>% summarise( n_weight = n(), avg_weight = mean(gram)) ``` ``` # A tibble: 3 × 3 weight n_weight avg_weight <chr> <int> <dbl> 1 weight_1 37 1891. 2 weight_2 36 1715. 3 weight_3 34 1801. ``` --- # Лемуры в длинном формате ```r ggplot(lemur_weights_long, * aes(x = weight, y = gram, * group = name, color = name)) + geom_line(size = 1) + theme(legend.position = "none") + scale_x_discrete(expand = expansion(mult = .05)) ``` <img src="data:image/png;base64,#figs/lemurs_long_pl-1.png" width="80%" style="display: block; margin: auto;" /> --- # Violin plot ```r ggplot(lemur_weights_long, aes(x = weight, y = gram, color = weight)) + * geom_violin() + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/lemurs_violin-1.png" width="80%" style="display: block; margin: auto;" /> --- # Log scale .pull-left[ ```r ggplot(lemurs_weights_all_long, aes(x = weight, y = gram, color = weight)) + geom_violin() + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/lemurs_violin_all-1.png" width="100%" style="display: block; margin: auto;" /> ] .pull-right[ ```r ggplot(lemurs_weights_all_long, aes(x = weight, y = gram, color = weight)) + geom_violin() + * scale_y_log10() + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/lemurs_violin_all_log-1.png" width="100%" style="display: block; margin: auto;" /> ] --- # Линия тренда ```r ggplot(lemurs_weights_all, aes(x = weight_1, y = weight_2)) + * geom_smooth(method = "lm") + geom_point(size = 3) + scale_x_log10() + scale_y_log10() ``` <img src="data:image/png;base64,#figs/lemurs_lm-1.png" width="80%" style="display: block; margin: auto;" /> --- # Комбинирование geoms ```r ggplot(lemur_weights[1:10,]) + * geom_segment(aes(x = 1, xend = 2, y = weight_1, yend = weight_2, color = name), size = 0.5) + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/lemurs_lollipop_1-1.png" width="80%" style="display: block; margin: auto;" /> --- # Комбинирование geoms ```r ggplot(lemur_weights[1:10,]) + geom_segment(aes(x = 1, xend = 2, y = weight_1, yend = weight_2, color = name), size = 0.5) + * geom_point(aes(x = 1, y = weight_1, color = name), size = 3) + * geom_point(aes(x = 2, y = weight_2, color = name), size = 3) + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/lemurs_lollipop_2-1.png" width="80%" style="display: block; margin: auto;" /> --- # Breaks & labels ```r ggplot(lemur_weights[1:10,]) + geom_segment(aes(x = 1, xend = 2, y = weight_1, yend = weight_2, color = name), size = 0.5) + geom_point(aes(x = 1, y = weight_1, color = name), size = 3) + geom_point(aes(x = 2, y = weight_2, color = name), size = 3) + * scale_x_discrete(breaks = c(1, 2), labels = c("1st", "2nd")) + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/lemurs_lollipop_bl-1.png" width="80%" style="display: block; margin: auto;" /> --- # Lollipop plot ```r lemur_weights[1:10,] %>% ggplot() + * ggalt::geom_lollipop(aes(x = name, y = weight_1, color = name)) + theme(legend.position = "none", axis.text.x = element_text(angle = 30, hjust = 1)) ``` <img src="data:image/png;base64,#figs/lemurs_lollipop_3-1.png" width="80%" style="display: block; margin: auto;" /> --- # Raincloud plot ```r ggplot(lemur_weights_long, aes(x = weight, y = gram, color = weight)) + # половинка violin ggdist::stat_halfeye( adjust = 0.5, width = 0.6, .width = 0, justification = -0.2, point_colour = NA) + # боксплот geom_boxplot(width = 0.2, outlier.shape = NA) + # точки gghalves::geom_half_point(side = "l", range_scale = 0.5, alpha = 0.3) ``` <img src="data:image/png;base64,#figs/lemurs_raincloud-1.png" width="60%" style="display: block; margin: auto;" /> --- # Volcano plot Результаты анализа дифференциальной экспрессии генов (пакет `airway`). ```r degs <- read_tsv("data/2021-10-08/degs.tsv") degs ``` ``` # A tibble: 15,016 × 5 gene stat log2FC pvalue padj <chr> <dbl> <dbl> <dbl> <dbl> 1 TSPAN6 2.25 -0.384 0.0243 0.107 2 DPM1 -2.04 0.198 0.0411 0.155 3 SCYL3 -0.231 0.0285 0.817 0.924 4 C1orf112 0.401 -0.123 0.688 0.862 5 CFH -1.69 0.435 0.0901 0.268 6 FUCA2 2.14 -0.248 0.0324 0.132 7 GCLC 0.156 -0.0358 0.876 0.950 8 NFYA 2.35 -0.495 0.0188 0.0875 9 STPG1 0.851 -0.139 0.395 0.655 10 NIPAL3 0.168 -0.0488 0.867 0.947 # … with 15,006 more rows ``` --- # Volcano plot Результаты анализа дифференциальной экспрессии генов (пакет `airway`). ```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point() ``` <img src="data:image/png;base64,#figs/volcano_1-1.png" width="80%" style="display: block; margin: auto;" /> --- # Градиенты - `scale_color_gradient` - `scale_color_gradient2` - `scale_color_gradientn` ```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = log2FC)) + * scale_color_gradient2(low = "blue", mid = "lightgrey", high = "red") ``` <img src="data:image/png;base64,#figs/volcano_2-1.png" width="70%" style="display: block; margin: auto;" /> --- # Градиенты: breaks & labels - `scale_color_gradient` - `scale_color_gradient2` - `scale_color_gradientn` ```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = log2FC)) + scale_color_gradient2( low = "blue", mid = "lightgrey", high = "red", * breaks = c(-5, -2, 0, 2, 5, 9)) ``` <img src="data:image/png;base64,#figs/volcano_3-1.png" width="60%" style="display: block; margin: auto;" /> --- # Цветовые палитры - **RColorBrewer** ```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = log2FC)) + * scale_color_distiller(palette = "RdYlBu", direction = -1, limits = c(-10, 10)) ``` <img src="data:image/png;base64,#figs/volcano_4-1.png" width="80%" style="display: block; margin: auto;" /> --- # Дополнительные линии - `geom_abline` - `geom_hline` - `geom_vline` ```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = log2FC)) + scale_color_gradient2(low = "blue", mid = "lightgrey", high = "red") + * geom_vline(xintercept = 0, linetype = "dashed") + * geom_hline(yintercept = -log10(0.05), linetype = "dashed") ``` <img src="data:image/png;base64,#figs/volcano_5-1.png" width="60%" style="display: block; margin: auto;" /> --- # xlim & ylim ```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = log2FC)) + scale_color_gradient2(low = "blue", mid = "lightgrey", high = "red") + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + * xlim(-10, 10) + ylim(-0.1, 105) ``` <img src="data:image/png;base64,#figs/volcano_6-1.png" width="80%" style="display: block; margin: auto;" /> --- # Zoom: xlim & ylim ```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = log2FC)) + scale_color_gradient2(low = "blue", mid = "lightgrey", high = "red") + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + * xlim(-5, 5) + ylim(-0.1, 30) ``` <img src="data:image/png;base64,#figs/volcano_7-1.png" width="80%" style="display: block; margin: auto;" /> --- # Безопасный zoom ```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = log2FC)) + scale_color_gradient2(low = "blue", mid = "lightgrey", high = "red") + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + * coord_cartesian(xlim = c(-5, 5), ylim = c(-0.1, 30)) ``` <img src="data:image/png;base64,#figs/volcano_z-1.png" width="80%" style="display: block; margin: auto;" /> --- # Несколько легенд
```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + * geom_point(aes(color = log2FC, size = -log10(padj))) + guides( * size = guide_legend(order = 1, title = "significance"), * color = guide_colorbar(order = 2, title = "effect")) + scale_color_gradient2(low = "blue", mid = "lightgrey", high = "red") + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + xlim(-5, 5) + ylim(-0.1, 30) ``` <img src="data:image/png;base64,#figs/volcano_8-1.png" width="65%" style="display: block; margin: auto;" /> --- # Несколько легенд
```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = log2FC, size = -log10(padj))) + * guides(size = guide_legend("significance"), color = "none") + scale_color_gradient2(low = "blue", mid = "lightgrey", high = "red") + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + xlim(-5, 5) + ylim(-0.1, 30) ``` <img src="data:image/png;base64,#figs/volcano_9-1.png" width="75%" style="display: block; margin: auto;" /> --- # Несколько легенд
```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = log2FC, size = -log10(padj))) + * guides(size = guide_legend(reverse = TRUE), color = "none") + scale_color_gradient2(low = "blue", mid = "lightgrey", high = "red") + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + xlim(-5, 5) + ylim(-0.1, 30) ``` <img src="data:image/png;base64,#figs/volcano_10-1.png" width="75%" style="display: block; margin: auto;" /> --- # Цвет по условию ```r ggplot(degs, aes(x = log2FC, y = -log10(padj))) + * geom_point(aes(color = (padj < 0.05 & abs(log2FC) >= 1))) + scale_color_manual( * values = c("red", "lightgrey"), * breaks = c(TRUE, FALSE), * labels = c("DE", "non DE"), * name = "padj < 0.05 & abs(log2FC) >= 1") + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + xlim(-10, 10) + ylim(-0.1, 105) + theme(legend.position = "top") ``` <img src="data:image/png;base64,#figs/volcano_11-1.png" width="60%" style="display: block; margin: auto;" /> --- # Цвет по условию... ```r degs_col <- degs %>% mutate(cols = case_when( (padj < 0.05 & log2FC >= 1) ~ "up", (padj < 0.05 & log2FC <= (-1)) ~ "down", TRUE ~ "no")) degs_col %>% head ``` ``` # A tibble: 6 × 6 gene stat log2FC pvalue padj cols <chr> <dbl> <dbl> <dbl> <dbl> <chr> 1 TSPAN6 2.25 -0.384 0.0243 0.107 no 2 DPM1 -2.04 0.198 0.0411 0.155 no 3 SCYL3 -0.231 0.0285 0.817 0.924 no 4 C1orf112 0.401 -0.123 0.688 0.862 no 5 CFH -1.69 0.435 0.0901 0.268 no 6 FUCA2 2.14 -0.248 0.0324 0.132 no ``` --- # Цвет по условию...
```r cols <- c("down" = "blue", "up" = "red", "no" = "lightgrey") ggplot(degs_col, aes(x = log2FC, y = -log10(padj))) + * geom_point(aes(color = cols)) + * scale_color_manual(values = cols) + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + xlim(-10, 10) + ylim(-0.1, 105) + theme(legend.position = "top") ``` <img src="data:image/png;base64,#figs/volcano_13-1.png" width="70%" style="display: block; margin: auto;" /> --- # Цвет по условию...
```r ggplot(degs_col, aes(x = log2FC, y = -log10(padj))) + * geom_point(aes(color = cols, shape = log2FC > 5)) + * scale_color_manual(values = cols) + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + xlim(-10, 10) + ylim(-0.1, 105) + theme(legend.position = "top") ``` <img src="data:image/png;base64,#figs/volcano_14-1.png" width="80%" style="display: block; margin: auto;" /> --- # Подписи ```r top10 <- degs_col %>% slice_min(padj, n = 10) ggplot(degs_col, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = cols)) + scale_color_manual(values = cols) + * geom_text(top10, mapping = aes(x = log2FC, y = -log10(padj), label = gene), size = 3) + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + xlim(-10, 10) + ylim(-0.1, 105) + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/volcano_15-1.png" width="57%" style="display: block; margin: auto;" /> --- # Подписи с ggrepel
```r ggplot(degs_col, aes(x = log2FC, y = -log10(padj))) + geom_point(aes(color = cols)) + scale_color_manual(values = cols) + * ggrepel::geom_text_repel(top10, mapping = aes(x = log2FC, y = -log10(padj), label = gene), size = 3) + geom_vline(xintercept = 0, linetype = "dashed") + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + xlim(-10, 10) + ylim(-0.1, 105) + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/volcano_16-1.png" width="70%" style="display: block; margin: auto;" /> --- # Тепловая карта - `geom_tile` из **ggplot2** - `heatmap.2` из **gplots** - `pheatmap` из **pheatmap**
- `Heatmap` из **ComplexHeatmap**
```r counts <- read_tsv("data/2021-10-08/top10_counts.tsv") str(counts) ``` ``` spec_tbl_df [10 × 9] (S3: spec_tbl_df/tbl_df/tbl/data.frame) $ gene : chr [1:10] "COL1A1" "ARHGEF2" "MT2A" "PHC2" ... $ SRR1039508: num [1:10] 140478 3132 1624 1464 1868 ... $ SRR1039509: num [1:10] 58436 1579 6720 3667 790 ... $ SRR1039512: num [1:10] 134136 3096 1166 1519 1610 ... $ SRR1039513: num [1:10] 55271 1407 5777 4103 756 ... $ SRR1039516: num [1:10] 155948 2869 1155 1663 2025 ... $ SRR1039517: num [1:10] 68299 1559 6314 3913 726 ... $ SRR1039520: num [1:10] 146175 2997 1294 1433 2014 ... $ SRR1039521: num [1:10] 51431 1412 5225 4163 667 ... - attr(*, "spec")= .. cols( .. gene = col_character(), .. SRR1039508 = col_double(), .. SRR1039509 = col_double(), .. SRR1039512 = col_double(), .. SRR1039513 = col_double(), .. SRR1039516 = col_double(), .. SRR1039517 = col_double(), .. SRR1039520 = col_double(), .. SRR1039521 = col_double() .. ) - attr(*, "problems")=<externalptr> ``` --- # `geom_tile` ```r counts %>% pivot_longer(cols = -gene, names_to = "sample") %>% ggplot() + scale_fill_gradient(low = "grey", high = "red") + * geom_tile(aes(x = sample, y = gene, fill = value)) ``` <img src="data:image/png;base64,#figs/geom_tile-1.png" width="80%" style="display: block; margin: auto;" /> --- # Heatmap ## Нужна матрица ```r counts_mtx <- counts %>% select(where(is.numeric)) %>% as.matrix() rownames(counts_mtx) <- counts$gene counts_mtx_sc <- t(scale(t(counts_mtx))) counts_mtx[1:5, 1:5] ``` ``` SRR1039508 SRR1039509 SRR1039512 SRR1039513 SRR1039516 COL1A1 140477.665 58436.2485 134136.258 55271.1550 155947.929 ARHGEF2 3131.918 1579.4488 3096.441 1406.9456 2869.119 MT2A 1624.394 6719.6537 1166.380 5777.1396 1155.321 PHC2 1464.312 3667.0974 1518.848 4102.8445 1663.492 FAM171B 1867.955 790.2841 1609.945 755.7478 2025.010 ``` --- # pheatmap ```r library(pheatmap) pheatmap(counts_mtx, scale = "row", cluster_cols = TRUE, cluster_rows = TRUE) ``` <img src="data:image/png;base64,#figs/ph_1-1.png" width="80%" style="display: block; margin: auto;" /> --- # Аннотации ```r meta <- read_tsv("data/2021-10-08/meta.tsv") meta ``` ``` # A tibble: 8 × 3 Run cell dex <chr> <chr> <chr> 1 SRR1039508 N61311 untrt 2 SRR1039509 N61311 trt 3 SRR1039512 N052611 untrt 4 SRR1039513 N052611 trt 5 SRR1039516 N080611 untrt 6 SRR1039517 N080611 trt 7 SRR1039520 N061011 untrt 8 SRR1039521 N061011 trt ``` --- # Аннотации ```r meta_ann <- meta %>% as.data.frame() rownames(meta_ann) <- meta$Run meta_ann <- meta_ann %>% select(-Run) # color scheme ann_color <- list(cell = c("N61311" = "#95b8d1", "N052611" = "#b8e0d2", "N080611" = "#d6eadf", "N061011" = "#eac4d5"), dex = c("untrt" = "#06d6a0", "trt" = "#ef476f")) ``` --- # pheatmap ```r pheatmap(counts_mtx, scale = "row", cluster_cols = TRUE, cluster_rows = TRUE, annotation_col = meta_ann, annotation_colors = ann_color) ``` <img src="data:image/png;base64,#figs/ph_3-1.png" width="80%" style="display: block; margin: auto;" /> --- # ComplexHeatmap ```r library(ComplexHeatmap) *Heatmap(counts_mtx_sc, name = "Z-score") ``` <img src="data:image/png;base64,#figs/ch_1-1.png" width="80%" style="display: block; margin: auto;" /> --- # ComplexHeatmap - цвета ```r col_fun <- circlize::colorRamp2(c(-2, 0, 2), c("purple", "white", "red")) Heatmap(counts_mtx_sc, name = "Z-score", * col = col_fun, column_title = "Purple-Red palette") ``` <img src="data:image/png;base64,#figs/ch_2-1.png" width="80%" style="display: block; margin: auto;" /> --- # Дендрограммы ```r Heatmap(counts_mtx_sc, name = "Z-score", col = col_fun, * cluster_rows = FALSE, cluster_columns = FALSE, column_title = "No clustering") ``` <img src="data:image/png;base64,#figs/ch_4-1.png" width="80%" style="display: block; margin: auto;" /> --- # Дендрограммы ```r Heatmap(counts_mtx_sc, name = "Z-score", col = col_fun, * row_dend_side = "right", column_dend_side = "bottom", * row_dend_width = unit(3, "cm"), column_title = "No clustering") ``` <img src="data:image/png;base64,#figs/ch_5-1.png" width="80%" style="display: block; margin: auto;" /> --- # Аннотации ```r meta_ha <- HeatmapAnnotation(cell = meta_ann$cell, dex = meta_ann$dex, col = list(cell = c("N61311" = "#95b8d1", "N052611" = "#b8e0d2", "N080611" = "#d6eadf", "N061011" = "#eac4d5"), dex = c("untrt" = "#06d6a0", "trt" = "#ef476f"))) ``` --- # Аннотации ```r Heatmap(counts_mtx_sc, name = "Z-score", col = col_fun, column_title = "Column annotation", top_annotation = meta_ha) ``` <img src="data:image/png;base64,#figs/ch_7-1.png" width="80%" style="display: block; margin: auto;" /> --- # Диаграмма Венна
- `VennDiagram` из **VennDiagram** - `euler` из **eulerr** --- # Подготовка к КР - На всякий случай проверьте доступ к RStudio на kodomo. - Писать контрольную работу можно только очно со своей группой. - Оформление контрольной работы: **Ivanov_KR1.R** --- # Подготовка к КР Пример задания: сделайте ряд манипуляций с данными, выведите количество строк получившегося набора данных. При манипуляции с данными – используйте средства **tidyverse**! Какой должен быть код: - Будут проверяться только задания с указанным номером задания. ```r #1 Code length(a) # засчитано ``` - Если нет кода, выводящего ответ, задание не будет засчитано. - Если код выдает ошибку при запуске, задание не будет засчитано. --- # Подготовка к КР **Бонусы** за: - использование `%>%` - короткое решение **Штрафы** за: - отсутствие воспроизводимости - неуместные сложные конструкции --- # Подготовка к КР ## Что может быть в заданиях - работа с таблицами - Отсортировать по столбцу, показать n лучших/худших находок. Не забывайте класть отсортированный набор в переменную. - Профильтровать набор данных по одному или нескольким столбцам. - Выбрать четные/нечетные индексы, каждый n-тый элемент. - Выбрать случайно n строк из набора данных. - Отобрать значения, равные чему-то конкретному. --- # Подготовка к КР ## Что может быть в заданиях - работа с таблицами - Отобрать только численные столбцы. - Отобрать только столбцы, начинающиеся на word. - Создать новый столбец, перемножив 2 существующих. - Взять уникальные значения. - Подсчитать среднее по всем численным столбцам. --- # Подготовка к КР ## Какие могут быть задания Дано: 100 человек, для каждого есть информация о росте и цвете глаз. - Подсчитать средний рост для подвыборок по цвету глаз. - Подсчитать количество людей в каждой подвыборке по цвету глаз. - Нарисовать на одном рисунке распределение роста для подвыборок по цвету глаз (боксплот). - Нарисовать на разных «плашках» распределение роста для подвыборок по цвету глаз (боксплот). --- - Нарисовать барплот, отображающий количество людей в каждой подвыборке по цвету глаз. - Нарисовать барплот, отображающий средний рост людей в каждой подвыборке по цвету глаз. - Нарисовать барплот, отображающий количество людей в каждой подвыборке по цвету глаз, начиная с самой представленной группы.И наоборот. --- # Подготовка к КР ## Какие могут быть задания Напишите функцию, которая берет на вход численный вектор и название одной из метрик (среднее, медиана, минимум, максимум). На выходе нужно получить информацию о длине вектора, название метрики, значение рассчитанной метрики. По умолчанию считаем медиану. Если вектор не численный – выдаем ошибку. --- # Подготовка к КР ## Какие могут быть задания Дано: 100 человек, для каждого есть 50 разнообразных характеристик (каждая характеристика в отдельном столбце), включая, пол, вес, возраст, статус курения, цвет глаз, давление (10 измерений: day1, day2, …), район проживания, наличие домашних животных, результаты различных анализов. - Для каждого человека подсчитать среднее значение давления. - Для численных показателей подсчитать медианное значение. - Для численных показателей подсчитать медианное значения отдельно для каждого пола. - Для численных показателей подсчитать медианное значения отдельно для каждого пола и статуса курения. - Для каждого численного показателя (кроме давления) изучить распределение значений (боксплот) среди женщин и мужчин.