小编mgi*_*ert的帖子

在ggplot中混合线和散点图

我环顾四周,但我对这个感到难过.我找不到绘制与散点图无关的线的方法.以下是我的一些数据和代码,以澄清问题.我有以下表格的数据

> head(allData)
  AnnounceDate MarketProbability DealStatus binary BrierScore
1   2000-04-10         0.3333333   Complete      1  0.2340565
2   2000-06-14         0.2142857   Complete      1  0.3618200
3   2000-06-26         0.6846154   Complete      1  0.3690167
4   2000-06-16         0.1875000   Complete      1  0.4364041
5   2000-10-05         0.9555556   Complete      1  0.3078432
6   2000-10-19         0.8500000   Complete      1  0.2670799
Run Code Online (Sandbox Code Playgroud)

我想创建一个MarketProbabilities与the 的散点图AnnounceDate,并确定DealStatusCompleted或是Terminated使用颜色.

(ggplot(data=allData, aes(x=AnnounceDate, y=MarketProbability, colour=DealStatus))
 + geom_point() + scale_colour_hue(h = c(180,0)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我也想覆盖滚动的Brier得分,我试过了

(ggplot(data=allData, aes(x=AnnounceDate, y=MarketProbability, colour=DealStatus))
 + geom_point() + scale_colour_hue(h=c(180,0))
 + geom_line(aes(x=AnnounceDate, y=BrierScore))) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

Pandas DatetimeIndex和Timestamp之间的工作日数

这与这里的问题非常相似,但我想知道大熊猫是否有一种干净的方式让工作日意识到TimedeltaIndex?最终,我试图获取DatetimeIndex和Timestamp之间的工作日数(没有假日日历).根据引用的问题,这样的事情是有效的

import pandas as pd
import numpy as np
drg = pd.date_range('2015-07-31', '2015-08-05', freq='B')
A = [d.date() for d in drg]
B = pd.Timestamp('2015-08-05', 'B').date()
np.busday_count(A, B)
Run Code Online (Sandbox Code Playgroud)

这使

array([3, 2, 1, 0], dtype=int64)
Run Code Online (Sandbox Code Playgroud)

但这似乎有点笨拙.如果我尝试类似的东西

drg - pd.Timestamp('2015-08-05', 'B')
Run Code Online (Sandbox Code Playgroud)

我得到了一个TimedeltaIndex,但工作日频率被取消了

TimedeltaIndex(['-5 days', '-2 days', '-1 days', '0 days'], dtype='timedelta64[ns]', freq=None)
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有更优雅的方式来解决这个问题.

python pandas

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

dplyr在mutate中每组播放单个值

我试图做一些非常类似于相对于每组中的值的比较(通过dplyr)(但是这个解决方案似乎让R崩溃了).我想为每个组复制一个值,并添加一个重复此值的新列.作为一个例子,我有

library(dplyr)

data = expand.grid(
  category = LETTERS[1:2],
  year = 2000:2003)
data$value = runif(nrow(data))

data

  category year     value
1        A 2000 0.6278798
2        B 2000 0.6112281
3        A 2001 0.2170495
4        B 2001 0.6454874
5        A 2002 0.9234604
6        B 2002 0.9311204
7        A 2003 0.5387899
8        B 2003 0.5573527
Run Code Online (Sandbox Code Playgroud)

我想要一个类似的数据帧

data

  category year     value    value2
1        A 2000 0.6278798 0.6278798
2        B 2000 0.6112281 0.6112281
3        A 2001 0.2170495 0.6278798
4        B 2001 0.6454874 0.6112281
5        A …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

了解 Numba 性能差异

我试图了解通过使用numba算法的各种实现所看到的性能差异。特别是,我希望func1d从下面开始是最快的实现,因为它是唯一不复制数据的算法,但是从我的时间来看func1b似乎是最快的。

\n
import numpy\nimport numba\n\n\ndef func1a(data, a, b, c):\n    # pure numpy\n    return a * (1 + numpy.tanh((data / b) - c))\n\n\n@numba.njit(fastmath=True)\ndef func1b(data, a, b, c):\n    new_data = a * (1 + numpy.tanh((data / b) - c))\n    return new_data\n\n\n@numba.njit(fastmath=True)\ndef func1c(data, a, b, c):\n    new_data = numpy.empty(data.shape)\n    for i in range(new_data.shape[0]):\n        for j in range(new_data.shape[1]):\n            new_data[i, j] = a * (1 + numpy.tanh((data[i, j] / b) - c)) \n    return new_data\n\n\n@numba.njit(fastmath=True)\ndef func1d(data, a, b, c):\n …
Run Code Online (Sandbox Code Playgroud)

numpy numba

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

如果日期不是工作日,Pandas 将 DatetimeIndex 偏移到下一个业务

我有一个 DataFrame,它用一个月的最后一天编入索引。有时这个日期是工作日,有时是周末。忽略假期,如果日期在周末,我希望将日期偏移到下一个工作日,如果已经在工作日,则保持结果不变。

一些示例数据是

import pandas as pd
idx = [pd.to_datetime('20150430'), pd.to_datetime('20150531'), 
       pd.to_datetime('20150630')]
df = pd.DataFrame(0, index=idx, columns=['A'])
df

            A
2015-04-30  0
2015-05-31  0
2015-06-30  0

df.index.weekday
array([3, 6, 1], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

类似以下的工作,但是如果有人有一个更简单的解决方案,我将不胜感激。

idx = df.index.copy()
wknds = (idx.weekday == 5) | (idx.weekday == 6)
idx2 = idx[~wknds]
idx2 = idx2.append(idx[wknds] + pd.datetools.BDay(1))
idx2 = idx2.order()
df.index = idx2
df

            A
2015-04-30  0
2015-06-01  0
2015-06-30  0
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Seaborn sns.set()更改绘图背景颜色

在seaborn中使用sns.set()似乎正在改变情节的背景颜色。

import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd


df = pd.DataFrame({"type":["A", "A", "A", "A", "B", "B", "B", "B"],
                   "value":[11, 14, 13, 16, 9, 8, 6, 10],
                  "date":["t1", "t2", "t3", "t4", "t1", "t2", "t3", "t4"]})

grid = sns.FacetGrid(df, size=12.5, hue="type", aspect=2)
grid.map(plt.plot, "date", "value")
plt.show()
Run Code Online (Sandbox Code Playgroud)

seaborn1

然后,如果我运行sns.set(font_scale=2)(或仅运行sns.set()),重复得到相同的图

grid = sns.FacetGrid(df, size=12.5, hue="type", aspect=2)
grid.map(plt.plot, "date", "value")
plt.show()
Run Code Online (Sandbox Code Playgroud)

seaborn2

在我看来,这似乎有些奇怪。我希望使用第二种绘图配置,但希望获得它而不必对进行任意调用sns.set(),除非当然是推荐的方法。

相关版本信息

print("matplotlib version: %s" % matplotlib.__version__)
print("seaborn version: %s" …
Run Code Online (Sandbox Code Playgroud)

python seaborn

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

如何使用 pip install 下载 BLPAPI

我是一位新的 Bloomberg 终端用户,我尝试按照此处的说明使用 python 下载 Bloomberg API。但是,当我在命令提示符中运行以下命令时

python -m pip install --index-url=https://bloomberg.bintray.com/pip/simple blpapi
Run Code Online (Sandbox Code Playgroud)

我收到以下错误...

Could not find a version that satisfies the requirement blpapi (from versions: )
No matching distribution found for blpapi
Could not fetch URL https://bloomberg.bintray.com/pip/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='bloomberg.bintray.com', port=443): Max retries exceeded with url: /pip/simple/pip/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1056)'))) - skipping
Run Code Online (Sandbox Code Playgroud)

有人可以帮我下载这个包,以便我可以从 Bloomberg API 下载数据吗?

blpapi

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

熊猫专栏创作

我正在努力理解列命名约定背后的概念,因为以下创建新列的尝试之一似乎失败了:

from numpy.random import randn
import pandas as pd

df = pd.DataFrame({'a':range(0,10,2), 'c':range(0,1000,200)},
columns=list('ac'))
df['b'] = 10*df.a
df
Run Code Online (Sandbox Code Playgroud)

给出以下结果:

在此输入图像描述

然而,如果我试图通过替换以下行来创建列b,则没有错误消息,但数据帧df仅保留列a和c.

df.b = 10*df.a   ### rather than the previous df['b'] = 10*df.a ###
Run Code Online (Sandbox Code Playgroud)

大熊猫做了什么,为什么我的命令不正确?

python columnname pandas

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

使用matplotlib在给定域上绘制3维的函数

我试图在R ^ 3中在立方体上可视化3个参数的函数,以了解函数的平滑性.下面的示例代码中显示了此问题的一个示例

%pylab
from mpl_toolkits.mplot3d import Axes3D
import itertools

x = np.linspace(0,10,50)
y = np.linspace(0,15,50)
z = np.linspace(0,8,50)

points = []
for element in itertools.product(x, y, z):
    points.append(element)

def f(vals):
    return np.cos(vals[0]) + np.sin(vals[1]) + vals[2]**0.5

fxyz = map(f, points)
xi, yi, zi = zip(*points)

fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xi, yi, zi, c=fxyz, alpha=0.5)
plt.show()
Run Code Online (Sandbox Code Playgroud)

立方体

这种方法的问题在于立方体内部无法可视化.有没有更好的方法在一个密集的R ^ 3子集上绘制函数?

python data-visualization matplotlib mayavi

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