小编Eri*_*lts的帖子

更改pandas中日期时间列的时区并添加为分层索引

我的数据带有UTC时间戳.我想将此时间戳的时区转换为"US/Pacific",并将其作为分层索引添加到pandas DataFrame中.我已经能够将时间戳转换为索引,但是当我尝试将其添加回DataFrame时,它会丢失时区格式,无论是作为列还是作为索引.

>>> import pandas as pd
>>> dat = pd.DataFrame({'label':['a', 'a', 'a', 'b', 'b', 'b'], 'datetime':['2011-07-19 07:00:00', '2011-07-19 08:00:00', '2011-07-19 09:00:00', '2011-07-19 07:00:00', '2011-07-19 08:00:00', '2011-07-19 09:00:00'], 'value':range(6)})
>>> dat.dtypes
#datetime    object
#label       object
#value        int64
#dtype: object
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试直接转换系列,我会遇到错误.

>>> times = pd.to_datetime(dat['datetime'])
>>> times.tz_localize('UTC')
#Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
#  File "/Users/erikshilts/workspace/schedule-detection/python/pysched/env/lib/python2.7/site-packages/pandas/core/series.py", line 3170, in tz_localize
#    raise Exception('Cannot tz-localize non-time series')
#Exception: Cannot tz-localize non-time series
Run Code Online (Sandbox Code Playgroud)

如果我将其转换为索引,那么我可以将其作为时间序列进行操作.请注意,索引现在具有太平洋时区.

>>> times_index = …
Run Code Online (Sandbox Code Playgroud)

python timezone multi-index dataframe pandas

30
推荐指数
2
解决办法
4万
查看次数

从ggplot2图表中删除图层

我想从ggplot2创建的网格对象中删除layer(在本例中为结果geom_ribbon).一旦它已经成为对象的一部分,有没有办法可以删除它?

library(ggplot2)
dat <- data.frame(x=1:3, y=1:3, ymin=0:2, ymax=2:4)
p <- ggplot(dat, aes(x=x, y=y)) + geom_ribbon(aes(ymin=ymin, ymax=ymax), alpha=0.3) 
     + geom_line()

# This has the geom_ribbon
p

# This overlays another ribbon on top
p + geom_ribbon(aes(ymin=ymin, ymax=ymax, fill=NA))
Run Code Online (Sandbox Code Playgroud)

我希望这个功能允许我在不那么复杂的情节之上构建更复杂的图.我正在使用返回网格对象的函数,然后在完全组装后打印出最终的图.基础图有一条线,geom_ribbon周围有相应的误差条().较复杂的绘图将具有多条线,并且多个重叠geom_ribbon对象分散注意力.我想从多行的图中删除它们.此外,我将能够使用facet或其他ggplot2功能快速创建替代版本.


编辑:接受@ mnel的答案,因为它有效.现在我需要确定如何动态地访问geom_ribbon层,这是在SO问题捕获这里.


编辑2:为了完整性,这是我为解决这个问题而创建的函数:

remove_geom <- function(ggplot2_object, geom_type) {
  layers <- lapply(ggplot2_object$layers, function(x) if(x$geom$objname == geom_type) NULL else x)
  layers <- layers[!sapply(layers, is.null)]

  ggplot2_object$layers <- layers
  ggplot2_object
}
Run Code Online (Sandbox Code Playgroud)

编辑3: …

r ggplot2

29
推荐指数
4
解决办法
5186
查看次数

是否有任何R包存储库管理工具?

我正在创建一个自定义R包存储库,并希望复制CRAN存档结构,从而将旧版本的包存储在src/contrib/Archive/packageName/目录中.我想install_version这里使用函数devtools(source here),但该函数依赖于具有类似CRAN的归档结构而不是所有的软件包版本src/contrib/.

是否有任何R包存储库管理工具可以帮助创建此目录结构和其他相关任务(例如更新Archive.rds文件)?

如果管理工具处理type存储库端的包逻辑以便我可以在Linux服务器上使用与本地Mac上相同install.packages()install_version()代码(也就是说我不必使用type="both"type="source"在本地安装苹果电脑).

r repository package cran

16
推荐指数
1
解决办法
645
查看次数

使用Vim-R-plugin在vim中更改R缩进样式

我正在使用Vim-R-plugin和Vim为我的R代码提供语法高亮.常规缩进样式在括号开头的函数中对齐参数.我想将其更改为更像花括号内的代码,其中新行缩进两个空格而不是用花括号内联.

我的函数名称往往是冗长的,默认缩进样式会将所有参数一直推到屏幕右侧.

以下是一些例子:

# Default indentation style
result <- fun(
              par1 = "abc",
              par2 = "def",
              par3 = 3
              )
Run Code Online (Sandbox Code Playgroud)

所需的样式模仿for循环和函数定义的缩进样式.

# Desired indentation style
result <- fun(
  par1 = "abc",
  par2 = "def",
  par3 = 3
)

# Similar to for loop indentation
for(i in 1:10) {
  print(i)
}

# ... and function definitions
fun <- function(par1 = 1) {
 print(par1 + 1)
}
Run Code Online (Sandbox Code Playgroud)

我查看了Vim-R-plugin代码,但它太密集了,我无法理解.有没有办法让我改变它?

vim r

12
推荐指数
2
解决办法
1283
查看次数

如何确定ggplot2对象的每一层的geom类型?

作为从我已经创建的绘图(此处为 SO链接)中删除特定geom的努力的一部分,我想动态确定ggplot2对象的每个层的geom类型.

假设我不知道添加图层的顺序,有没有办法动态查找具有特定geom的图层?如果我像下面那样打印出图层,我可以看到图层存储在列表中,但我似乎无法访问geom类型.

library(ggplot2)
dat <- data.frame(x=1:3, y=1:3, ymin=0:2, ymax=2:4)
p <- ggplot(dat, aes(x=x, y=y)) + geom_ribbon(aes(ymin=ymin, ymax=ymax), alpha=0.3) + geom_line()
p$layers

[[1]]
mapping: ymin = ymin, ymax = ymax 
geom_ribbon: na.rm = FALSE, alpha = 0.3 
stat_identity:  
position_identity: (width = NULL, height = NULL)

[[2]]
geom_line:  
stat_identity:  
position_identity: (width = NULL, height = NULL)
Run Code Online (Sandbox Code Playgroud)

我不熟悉原型对象,我从原型文档中尝试的东西似乎不起作用(例如p$layers[[1]]$str()).


感谢下面的答案,我能够提出一个动态删除图层的功能:

remove_geom <- function(ggplot2_object, geom_type) {
  layers <- lapply(ggplot2_object$layers, function(x) if(x$geom$objname == geom_type) NULL else x)
  layers <- layers[!sapply(layers, …
Run Code Online (Sandbox Code Playgroud)

r layer ggplot2 proto ggproto

9
推荐指数
1
解决办法
1024
查看次数

TFRecordReader似乎非常慢,多线程读取不起作用

我的训练过程使用tfrecord格式表示训练和评估数据集.

我测试了阅读器的基准,只有8000记录/秒.和io速度(参见iotop命令)只需400KB-500KB/s.

我在这里使用protobuf的cpp版本

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/get_started/os_setup.md#protobuf-library-related-issues

如果可能的话,提供一个可重复性最小的示例(我们通常没有时间阅读数百行代码)

def read_and_decode(filename_queue):
     reader = tf.TFRecordReader()
    _, serialized_example = reader.read(filename_queue)
    return serialized_example
  serialized_example = read_and_decode(filename_queue)
  batch_serialized_example = tf.train.shuffle_batch(
      [serialized_example],
      batch_size=batch_size,
      num_threads=thread_number,
      capacity=capacity,
      min_after_dequeue=min_after_dequeue)
  features = tf.parse_example(
      batch_serialized_example,
      features={
          "label": tf.FixedLenFeature([], tf.float32),
          "ids": tf.VarLenFeature(tf.int64),
          "values": tf.VarLenFeature(tf.float32),
      })
Run Code Online (Sandbox Code Playgroud)

您尝试了哪些其他尝试的解决方案?

我尝试在tf.train.shuffle_batch中设置num_threads但不起作用.

似乎当设置为2个线程时,它工作在8000records/s,当放大线程数时,它会变慢.(我删除所有花费cpus的操作.只需读取数据.)

我的服务器是24核心cpu.

python tensorflow

9
推荐指数
2
解决办法
2662
查看次数

无法从Rscript批处理文件中调用roxygenize函数

我正在编写一个使用roxygen2自动对我的包进行氧气化的脚本.我希望它是可执行的,这样它就可以成为准备和安装软件包的一个更大的脚本的一部分,但由于某些原因我不能使它与Rscript一起工作.

这是代码:

#!/usr/bin/env Rscript
library(roxygen2)
roxygenize('.', copy=FALSE)
Run Code Online (Sandbox Code Playgroud)

如果我启动交互式R会话或使用R CMD BATCH提交代码,这可以正常工作.但是,如果我通过Rscript将脚本作为可执行文件直接运行,我得到此输出和错误(无论脚本是在当前目录还是bin中,我都会收到错误).

bin/roxygenize.R 
Loading required package: digest
Warning message:
package 'roxygen2' was built under R version 2.13.2 
Error in parse.files(r_files) : could not find function "setPackageName"
Calls: roxygenize -> parse.files
Execution halted
Run Code Online (Sandbox Code Playgroud)

看起来setPackageName在基数R中,所以我无法弄清楚为什么它不在那里.另外,我在许多其他情况下使用Rscript,这似乎是唯一失败的地方.

任何帮助深表感谢.

r rscript roxygen2

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

如何使用rgdal包将NAD 83坐标转换为纬度和经度?

我有坐标,所有这些都应该位于DC中,但是我无法弄清楚如何将它们从NAD 83转换为R中的纬度和经度.我正在使用spTransform()rgdal包中的函数并得到关于不符合的错误数据.

library(rgdal)
nad83_coords <- data.frame(x=c(396842.6, 397886.9, 398315.5, 398154.3, 398010.3), y=c(140887.1, 139847.0, 138743.9, 139534.5, 138697.3))
coordinates(nad83_coords) <- c('x', 'y')
proj4string(nad83_coords) <- CRS("+init=epsg:4269")
Error in `proj4string<-`(`*tmp*`, value = <S4 object of class "CRS">) : 
  Geographical CRS given to non-conformant data: 398315.5 140887.1
Run Code Online (Sandbox Code Playgroud)

proj4strings的其他组合产生相同的错误.我相信错误是因为坐标太大,但我不确定为什么会这样.坐标文档如下:

值在马里兰州立方米米NAD 83地图投影中.

我对绘图和投影很新,任何帮助都表示赞赏.

mapping r projection rgdal

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

如何将java.util.List [java.lang.Double]转换为Scala的List [Double]?

我想以有效的方式将Java双打的Java列表(java.util.List [java.lang.Double])转换为Scala双精度的Scala列表(List [Double]).

目前我正在映射将每个Double值转换为Scala Double的列表.我不想映射每个值,我正在寻找一种更有效的方法.

import collection.JavaConversions._
import collection.mutable.Buffer

val j: java.util.List[java.lang.Double] = Buffer(new java.lang.Double(1.0), new java.lang.Double(2.0))
val s: List[Double] = ...
Run Code Online (Sandbox Code Playgroud)

我已经看过来自Scala的文档 - > Java,但没有太多其他方式.

java scala implicit-conversion

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

HowTo的基准:阅读数据

我正在使用tensorflow 0.10,我正在对官方HowTo中读取数据的示例进行基准测试.本文介绍了使用相同的MNIST示例将数据移动到tensorflow的不同方法.

我对结果感到惊讶,我想知道是否有人有足够的低层次理解来解释正在发生的事情.

在HowTo中,基本上有3种方法可以读入数据:

  • Feeding:在python中构建迷你批处理并传递它 sess.run(..., feed_dict={x: mini_batch})
  • Reading from files:使用tf操作打开文件并创建小批量.(在python中绕过处理数据.)
  • Preloaded data:将所有数据加载到单个tf变量或常量中,并使用tf函数将其分解为小批量.变量或常量固定到cpu,而不是gpu.

我用来运行基准测试的脚本位于tensorflow中:

我没有修改这些脚本,除了最后两个因为它们崩溃 - 至少版本0.10 - 除非我添加一个额外的sess.run(tf.initialize_local_variables()).

主要问题

在GTX1060上运行100个小批量100个示例的时间:

  • Feeding: ~0.001 s
  • Reading from files: ~0.010 s
  • Preloaded data (constant): ~0.010 s
  • Preloaded data (variable): ~0.010 s

这些结果对我来说非常令人惊讶.我Feeding原本期望它是最慢的,因为它在python中几乎完成所有操作,而其他方法使用较低级别的tensorflow/C++来执行类似的操作.这与我的预期完全相反.有谁知道发生了什么?

次要问题 …

python tensorflow

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

如何在服务器上设置共享R包目录?

我在服务器上有一个共享的R包目录,以便为所有用户维护一致的包版本.当有人试图安装另一个用户最初安装的新版本的软件包时,或者当该软件包在其他地方加载时,他们会尝试安装它.在这些实例中,R在共享包目录中创建00LOCK-PackageName目录,并且权限使得安装程序不具有对目录中的许多文件的写访问权.这需要几个人chmod-ind目录,以允许它被删除,或让我们的系统管理员做同样的事情.

这是一个特别严重的问题,因为我们使用R包来维护和部署我们的报告基础架构.这是我们不断更新和部署到我们的共享服务器的东西.

是否有促进共享R包管理的设置或程序?任何一般提示?

r updates package

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

如何更改ggplot图表上直接标签的文字大小?

我试图用directlabels如图所示将标签应用于套索情节在这里.我可以在页面上放置标签,但无法更改大小.在列表中传递其他参数允许我更改其他元素,但不能更改文本大小.

require(ggplot2)
require(directlabels)
dat_test <- data.frame(x=1:10, value=c(sin(1:10), cos(1:10), tan(1:10)), fun=rep(c('sin', 'cos', 'tan'), each=10))
p <- ggplot(dat_test, aes(x=x, y=value, group=fun, colour=fun)) + geom_line()

direct.label(p, 'last.qp') # adds labels
direct.label(p, list('last.qp', size=2)) # does not work, same as above
direct.label(p, list('last.qp', rot=30)) # correct rotates text
Run Code Online (Sandbox Code Playgroud)

是否可以更改直接标签的文字大小?

r ggplot2 direct-labels

2
推荐指数
1
解决办法
1417
查看次数

从不正确的.Rbuildignore文件构建后,包中缺少Collat​​e字段中的文件

我的包中的一个函数在构建时拒绝添加到包源,然后在运行R CMD检查时失败.

我的包位于github 这里.文件compute_latitude_and_longitude.R当然存在于R目录中:

$ ls R  
calculate_latitude_and_longitude.R clean_coordinates_XBLOCK.R  clean_crime_data.R
load_crime_data_by_ward.R clean_coordinates.R
clean_coordinates_YBLOCK.R dccrimedata-package.R
Run Code Online (Sandbox Code Playgroud)

我能够构建包,但由于某种原因,构建不包括文件calculate_latitude_and_longitude.R.我可以通过浏览tar球中的R目录来验证它是否跳过此文件.

安装或运行后,R CMD check dccrimedata_0.1.tar.gz我在00install.log文件中收到以下错误:

Error in .install_package_code_files(".", instdir) :
files in 'Collate' field missing from '/Users/erikshilts/workspace/dc_crime_data/dccrimedata.Rcheck/00_pkg_src/dccrimedata/R':
  calculate_latitude_and_longitude.R
ERROR: unable to collate and parse R files for package ‘dccrimedata’
Run Code Online (Sandbox Code Playgroud)

我已经尝试重命名该函数,创建一个新文件,注释掉行,删除roxygen标签等,但没有一个有助于将该函数放入包中.

知道出了什么问题吗?

该函数的完整代码如下:

#' Calculate Latitude and Longitude
#'
#' Calculates latitude and longitude from XBLOCK AND YBLOCK coordinates.
#' The coordinates are given in the NAD 83 projection, Maryland state plane,
#' with …
Run Code Online (Sandbox Code Playgroud)

r build package

2
推荐指数
1
解决办法
1225
查看次数