哪些因素决定了chunksize方法的最佳参数multiprocessing.Pool.map()?该.map()方法似乎使用任意启发式作为其默认的chunksize(如下所述); 是什么推动了这种选择,是否有基于某些特定情况/设置的更周到的方法?
示例 - 说我是:
iterable到.map()拥有约1500万个元素的元素;processes = os.cpu_count()内multiprocessing.Pool().我天真的想法是给每24个工人一个同样大小的块,即15_000_000 / 24625,000.大块应该在充分利用所有工人的同时减少营业额/管理费用.但似乎缺少给每个工人提供大批量的一些潜在缺点.这是不完整的图片,我错过了什么?
我的部分问题源于if chunksize=None:both .map()和.starmap()call 的默认逻辑,.map_async()如下所示:
def _map_async(self, func, iterable, mapper, chunksize=None, callback=None,
error_callback=None):
# ... (materialize `iterable` to list if it's an iterator)
if chunksize is None:
chunksize, extra = divmod(len(iterable), len(self._pool) * 4) # ????
if extra:
chunksize += 1
if len(iterable) == 0:
chunksize = …Run Code Online (Sandbox Code Playgroud) python parallel-processing multiprocessing python-3.x python-multiprocessing
在一个具体问题上,假设我有一个DataFrame DF
word tag count
0 a S 30
1 the S 20
2 a T 60
3 an T 5
4 the T 10
Run Code Online (Sandbox Code Playgroud)
对于每个"单词",我想找到具有最多"计数"的"标签".所以回报就像是
word tag count
1 the S 20
2 a T 60
3 an T 5
Run Code Online (Sandbox Code Playgroud)
我不关心计数列,或者订单/索引是原始的还是搞砸了.返回字典{ 'the':'S',...}就好了.
我希望我能做到
DF.groupby(['word']).agg(lambda x: x['tag'][ x['count'].argmax() ] )
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我无法访问列信息.
更抽象地说,agg(函数)中的函数看作什么?
顺便说一下,.agg()与.aggregate()相同吗?
非常感谢.
在Sublime Text 3中,我想禁用enter从自动完成下拉列表中选择项目的tab键,并且只允许键执行此操作.
我在内置Default (OSX).sublime-keymap文件中找到了这个部分:
{ "keys": ["enter"], "command": "commit_completion", "context":
[
{ "key": "auto_complete_visible" },
{ "key": "setting.auto_complete_commit_on_tab", "operand": false }
]
},
Run Code Online (Sandbox Code Playgroud)
似乎如果我从配置中删除它enter不会在下拉列表中选择项目.不幸的是,不建议更改此文件,只在我的User文件中覆盖它.我不认为我实际上可以编辑它而不修改.app内容.
我尝试通过删除不同的部分来覆盖它,并删除除了之外的所有内容"keys": ["enter"],但似乎没有任何效果.
如何在不修改内置Default (OSX).sublime-keymap且仅修改User/Default (OSX).sublime-keymap文件的情况下实现此目的?
我有一个pandas数据帧:数据.它有列["名称","A","B"]
我想做(和工作)的是:
d2 = data[data['name'] == 'fred'] #This gives me multiple rows
d2['A'] = 0
Run Code Online (Sandbox Code Playgroud)
这会将fred行上的A列设置为0.我也做了:
indexes = d2.index
data['A'][indexes] = 0
Run Code Online (Sandbox Code Playgroud)
但是,两人都给了我同样的警告:
/Users/brianp/work/cyan/venv/lib/python2.7/site-packages/pandas/core/indexing.py:128: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
Run Code Online (Sandbox Code Playgroud)
大熊猫是怎么想让我这样做的?
编辑:我强调了这个问题,因为它可能太复杂了.问题的内容在下面以粗体显示.
我想更多地了解使用时实际创建的对象DataFrame.rolling或Series.rolling:
print(type(df.rolling))
<class 'pandas.core.window.Rolling'>
Run Code Online (Sandbox Code Playgroud)
一些背景:考虑常用的替代品np.as_strided.此代码段本身并不重要,但其结果是我在提出此问题时的参考点.
def rwindows(a, window):
if a.ndim == 1:
a = a.reshape(-1, 1)
shape = a.shape[0] - window + 1, window, a.shape[-1]
strides = (a.strides[0],) + a.strides
windows = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
return np.squeeze(windows)
Run Code Online (Sandbox Code Playgroud)
这rwindows将采用1d或2d ndarray并构建等于指定窗口大小的滚动"块"(如下所示). 对象如何与下面.rolling的ndarray输出进行比较? 它是一个迭代器,是否为每个块存储了某些属性?或完全不同的东西?我已经尝试使用属性/方法(例如__dict__和)在对象上使用制表符完成,_get_index()并且它们并没有告诉我太多.我也在_create_blocks熊猫中看到过一种方法 - 它是否与该strided方法类似?
# as_strided version
a = np.arange(5)
print(rwindows(a, 3)) # 1d input
[[0 1 …Run Code Online (Sandbox Code Playgroud) 我正在研究Django文档,但是我遇到了一个我无法理解的部分:在真正的问题中如何使用命名空间的真实示例是什么.我知道语法,但我不知道这个的目的.
我得到了很好的利用了大熊猫的MovingOLS类(来源这里不推荐使用内)stats/ols模块.不幸的是,完全被大熊猫0.20摧毁了.
关于如何以有效的方式运行滚动OLS回归的问题已被多次询问(例如,这里),但在我看来,有点广泛地表达并没有得到很好的答案.
这是我的问题:
我怎样才能最好地模仿大熊猫的基本框架MovingOLS?这个类最吸引人的特点是能够将多个方法/属性视为单独的时间序列 - 即系数,r平方,t-统计等,而无需重新运行回归.例如,您可以创建类似model = pd.MovingOLS(y, x),然后调用.t_stat,.rmse,.std_err,等.在下面的示例中,相反,我没有看到被迫分别计算每个统计信息的方法.有没有一种方法不涉及创建滑动/滚动"块"(步幅)和运行回归/使用线性代数来获取每个模型参数?
更广泛地说,大熊猫在幕后发生了什么使得rolling.apply无法采用更复杂的功能?*当你.rolling用外行的术语创建一个对象时,内部发生了什么 - 它与循环每个窗口和创建一个根本不同我正在做下面的高维数组?
*即func传递给.apply:
必须从ndarray输入生成单个值*args和**kwargs传递给函数
以下是我目前处理的一些样本数据,回归贸易加权美元对利率差价和铜价的百分比变化.(这没有多大意义;只是随机选择它们.)我已经从基于类的实现中取出它并尝试将其剥离为更简单的脚本.
from datetime import date
from pandas_datareader.data import DataReader
import statsmodels.formula.api as smf
syms = {'TWEXBMTH' : 'usd',
'T10Y2YM' : 'term_spread',
'PCOPPUSDM' : 'copper'
}
start = date(2000, 1, 1)
data = (DataReader(syms.keys(), 'fred', start)
.pct_change()
.dropna())
data = data.rename(columns …Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法可以检查两个数据框是不同的副本还是不涉及操作的相同基础数据的视图?我试图抓住每一个生成的时间,并且考虑到规则似乎有多特殊,我想要一种简单的测试方法.
例如,我认为"id(df.values)"在各个视图中都是稳定的,但它们似乎不是:
# Make two data frames that are views of same data.
df = pd.DataFrame([[1,2,3,4],[5,6,7,8]], index = ['row1','row2'],
columns = ['a','b','c','d'])
df2 = df.iloc[0:2,:]
# Demonstrate they are views:
df.iloc[0,0] = 99
df2.iloc[0,0]
Out[70]: 99
# Now try and compare the id on values attribute
# Different despite being views!
id(df.values)
Out[71]: 4753564496
id(df2.values)
Out[72]: 4753603728
# And we can of course compare df and df2
df is df2
Out[73]: False
Run Code Online (Sandbox Code Playgroud)
其他答案我已经抬头试图给出规则,但似乎不一致,也不回答如何测试的问题:
当然: - http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy …
我在numpy中阅读argmin函数的文档有点困惑.它看起来应该做的工作:
读这个
返回沿轴的最小值索引.
我可能会认为
np.argmin([5, 3, 2, 1, 1, 1, 6, 1])
Run Code Online (Sandbox Code Playgroud)
将返回所有索引的数组:将是 [3, 4, 5, 7]
但不是这样,它只返回3.捕获的位置,或者我应该怎么做以获得我的结果?
我使用web服务来检索一些数据,但有时网址不起作用,我的网站没有加载.你知道我如何处理以下异常,所以如果webservice不工作,网站没有问题吗?
Django Version: 1.3.1
Exception Type: ConnectionError
Exception Value:
HTTPConnectionPool(host='test.com', port=8580): Max retries exceeded with url:
Run Code Online (Sandbox Code Playgroud)
我用了
try:
r = requests.get("http://test.com", timeout=0.001)
except requests.exceptions.RequestException as e: # This is the correct syntax
print e
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
但没有任何反应
python ×8
pandas ×5
numpy ×3
url ×2
autocomplete ×1
connection ×1
cython ×1
dataframe ×1
django ×1
django-views ×1
group-by ×1
namespaces ×1
python-2.x ×1
python-3.x ×1
statsmodels ×1
sublimetext ×1
sublimetext3 ×1