小编Kub*_*ba_的帖子

将 Python 函数应用于 Pandas 分组数据帧 - 加速计算的最有效方法是什么?

我正在处理相当大的 Pandas DataFrame - 我的数据集类似于以下df设置:

import pandas as pd
import numpy  as np

#--------------------------------------------- SIZING PARAMETERS :
R1 =                    20        # .repeat( repeats = R1 )
R2 =                    10        # .repeat( repeats = R2 )
R3 =                541680        # .repeat( repeats = [ R3, R4 ] )
R4 =                576720        # .repeat( repeats = [ R3, R4 ] )
T  =                 55920        # .tile( , T)
A1 = np.arange( 0, 2708400, 100 ) # ~ 20x re-used
A2 …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing pandas apache-spark dask

10
推荐指数
1
解决办法
680
查看次数

使用第三个特征作为颜色可视化大的点集 - 一种提高速度的方法

我有一个非常大5e5(x, y)坐标数据集(大约行)和附加功能z.它是这样的:

x <- rnorm(1e6, 0, 5)
y <- rnorm(1e6, 0, 10)
dist <- sqrt(x^2 + y^2)
z <- exp(-(dist / 8)^2)
Run Code Online (Sandbox Code Playgroud)

我想用一个z用作颜色美学的特征来绘制它们.但是geom_point这么简单的数据集需要一段时间:

data.frame(x, y, z) %>% 
  ggplot() + geom_point(aes(x, y, color = z)) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所以我认为我需要一种以某种方式聚合积分的方法.一种方法是将平面划分为一些小方块,并平均z位于正方形中的点的所有值.但从长远来看,它可能有点麻烦,使用一些已有的工具可能会更好.所以我认为geom_hex在我的情况下看起来很好的geom.但fill审美是count默认设置.所以我的问题是:

  • 可以将默认fillgeom_hex轻松更改为z功能的平均值吗?
  • 如果没有,我如何创建六边形而不是正方形,以便z可以在六边形内平均值然后绘制?
  • 有没有其他方法可以提高绘制这样一个数据集的速度?

编辑:

建议解决方案的比较:

library(microbenchmark)
microbenchmark(
  'stat_summary_hex' = {data.frame(x, y, z) %>%                                                                                                   
    ggplot( aes(x, y, z=z )) + …
Run Code Online (Sandbox Code Playgroud)

r data-visualization ggplot2

8
推荐指数
2
解决办法
249
查看次数

如何使用字符串连接定义收集函数的关键参数

tibble作为列名,我得到了几个因素的相互作用(参见下面两个因素的例子).

ex <- structure(list(`Monday*FALSE` = 42.74, `Monday*TRUE` = 70.68, 
`Tuesday*TRUE` = 44.05, `Tuesday*FALSE` = 51.25, `Wednesday*TRUE` = 35.57, 
`Wednesday*FALSE` = 59.24, `Thursday*TRUE` = 85.3, `Thursday*FALSE` = 59.91, 
`Friday*TRUE` = 47.27, `Friday*FALSE` = 47.44, `Saturday*TRUE` = 62.28, 
`Saturday*FALSE` = 98.8, `Sunday*TRUE` = 57.11, `Sunday*FALSE` = 65.99), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -1L))
Run Code Online (Sandbox Code Playgroud)

我想写一个允许gather这个的函数tibble,但另外key根据因子的输入名称创建一个名称.但是,以下内容无法正常工作,因为paste0返回一个字符串.

my_gather <- function(data, ...){
  vars <- enquos(...)
  data %>% 
    gather(key = paste0(!!!vars, sep = '*'), value …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyeval

7
推荐指数
1
解决办法
251
查看次数

如何制作没有coord_polar的叠加圆图

我有一个与此类似的数据集:

x <- 100 - abs(rnorm(1e6, 0, 5))
y <- 50 + rnorm(1e6, 0, 3)
dist <- sqrt((x - 100)^2 + (y - 50)^2)
z <- exp(-(dist / 8)^2)
Run Code Online (Sandbox Code Playgroud)

可以看作如下:

data.frame(x, y, z) %>%  
  ggplot() + geom_point(aes(x, y, color = z))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想做的是一个堆叠的半圆图,后续图层的平均值为z.我认为它可以与组合来实现geom_colcoord_polar(),虽然我可以得到最远

data.frame(x, y, z, dist) %>% 
  mutate(dist_fct = cut(dist, seq(0, max(dist), by = 5))) %>% 
  ggplot() + geom_bar(aes(x = 1, y = 1, fill = dist_fct), stat = 'identity', position = 'fill') +
  coord_polar()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这显然远远超出预期(图层应该是相同的大小,图应该被剪裁在右半边). …

visualization r ggplot2

6
推荐指数
1
解决办法
255
查看次数

如何在geom_col/geom_area上绘制一个因子级别作为基础

我写了以下函数来制作一个定制的堆积图:

stacked_plot <- function(data, what, by = NULL, date_col = date, date_unit = NULL, type = 'area'){

  by <- enquo(by)
  what <- ensym(what)
  date_col <- ensym(date_col)
  date_unit <- enquo(date_unit)

  if (!rlang::as_string(date_col) %in% names(data)){
    return(cat('Nie odnaleziono kolumny "', as_string(date_col), '".', sep = ''))
  }

  if (!rlang::quo_is_null(date_unit)){
    data <- data %>%
      mutate(!!date_col := floor_date(!!date_col, unit = !!date_unit, week_start = 1))
  }

  if (!rlang::quo_is_null(by)) {
    data <- data %>%
      filter(!is.na(!!by)) %>%
      group_by(!!date_col, !!by) %>%
      summarise(!!what := sum(!!what, na.rm = TRUE)) %>%
      ungroup() %>% …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 forcats geom-col

5
推荐指数
1
解决办法
162
查看次数

箭头在ggplot2中用作尺寸美学

我有包含矢量坐标及其特征的数据 - success_rate以及prop:

ex_data <- structure(list(group = c("group A", "group A", "group A", "group A", 
"group A", "group A", "group C", "group C", "group C", "group C", 
"group C", "group W", "group W", "group W", "group W", "group W"
), category = c(5, 4, 3, 2, 1, 6, 5, 1, 2, 3, 4, 1, 4, 5, 2, 
3), success_rate = c(0.816037735849057, 0.938775510204082, 0.653061224489796, 
0.985915492957746, 0.934306569343066, 1, 0.979166666666667, 0.887323943661972, 
0.319587628865979, 0.721590909090909, 0.941176470588235, 0.689320388349515, 
0.338028169014085, 0.396551724137931, 0.7375, 0.763948497854077
), …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

5
推荐指数
1
解决办法
95
查看次数

在 GitHub Pages 上包含图像的正确方法是什么?

免责声明:我搜索过SO,发现类似的问题(例如:URL),主要建议注意名称的大小写差异,但他们没有解决我的问题。

不久前,我创建了一个 GitHub 页面,写了我的第一篇文章,并在其中包含了一些图像。推荐的包含图像的方式是相对链接,例如:

<img src="./images/equation-1.gif" style="display: block; margin: auto;" />
Run Code Online (Sandbox Code Playgroud)

但是,这种方式图像仅显示在 GitHub 存储库内,而不显示在 GitHub 页面上。因此,我将它们替换为 GitHub 存储库中图像所引用的直接链接,如下所示:

<img src="https://github.com/KubaMichalczyk/kubamichalczyk.github.io/raw/master/_posts/images/equation-1.gif" style="display: block; margin: auto;" />
Run Code Online (Sandbox Code Playgroud)

它奏效了。然而,这只是乍一看,几天后所有链接都崩溃了。从那时起,这些图像大部分时间都会显示,但有时链接会损坏。不幸的是,我不知道为什么会这样,我想一劳永逸地修复它。因此,我的问题是在 GitHub 页面上包含图像的正确方法是什么?为什么相对链接实际上不起作用?存储库是私有还是公共有关系吗?

我的页面地址在这里,存储库位于这里

html github jekyll github-pages

4
推荐指数
1
解决办法
8096
查看次数

在 R 包中使用 tidy eval

我有一个stacked_plot()使用整洁评估来制作堆叠图的函数。我想将它包含在我的包中,并从该包中调用另一个函数来调用它。这是最小的例子:

stacked_plot <- function(data, what, by = NULL, date_col = date){

  by <- rlang::enquo(by)
  what <- rlang::ensym(what)
  date_col <- rlang::ensym(date_col)
  data <- data %>%
    dplyr::group_by(!!date_col, !!by) %>%
    dplyr::summarise(!!what := sum(!!what, na.rm = TRUE)) %>%
    dplyr::ungroup() %>%
    tidyr::complete(!!date_col, !!by, fill = rlang::list2(!!what := 0))

  p <- data %>%
    ggplot2::ggplot(ggplot2::aes(!!date_col, !!what, fill = !!by)) +
    ggplot2::geom_area(position = 'stack')
  print(p)
}

#' @importFrom rlang .data
call_plot <- function() {
  to_plot <- data.frame(date = rep(seq(lubridate::ymd('2020-01-01'),
                                       lubridate::ymd('2020-03-30'),
                                       by = '1 day'), each = …
Run Code Online (Sandbox Code Playgroud)

r dplyr r-package tidyeval rlang

4
推荐指数
1
解决办法
193
查看次数

dplyr函数,仅当提供参数时才具有可选分组

我需要编写一个dplyr函数来创建自定义面积图。所以这是我的尝试。

area_plot <- function(data, what, by){
  by <- ensym(by)
  what <- ensym(what)

  data %>% 
    filter(!is.na(!!by)) %>% 
    group_by(date, !!by) %>% 
    summarise(!!what := sum(!!what, na.rm = TRUE)) %>% 
    complete(date, !!by, fill = rlang::list2(!!what := 0)) %>% 
    ggplot(aes(date, !!what, fill = !!by)) +
    geom_area(position = 'stack') +
    scale_x_date(breaks = '1 month', date_labels = '%Y-%m', expand = c(.01, .01)) +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 90, vjust = .4)) +
    labs(fill = '')
}
Run Code Online (Sandbox Code Playgroud)

但是我一直想知道是否有任何默认值的by参数将输出geom_area所有组的图。我知道我可以if用来定义ggplot2首先使用的数据,然后在函数中执行以下操作: …

r metaprogramming dplyr tidyverse quasiquotes

3
推荐指数
1
解决办法
219
查看次数