我想自动将我的标签包装在ggplot2中.这里写了如何为它编写函数(1),但遗憾的是我不知道labeller=label_wrap在我的代码中放入哪里(2).
(1)由hadley执行的功能
label_wrap <- function(variable, value) {
lapply(strwrap(as.character(value), width=25, simplify=FALSE),
paste, collapse="\n")
}
Run Code Online (Sandbox Code Playgroud)
(2)代码示例
df = data.frame(x = c("label", "long label", "very, very long label"),
y = c(10, 15, 20))
ggplot(df, aes(x, y)) + geom_bar(stat="identity")
Run Code Online (Sandbox Code Playgroud)
我想在这里包装一些较长的标签.
我想在熊猫上运行一个轴DataFrame,索引是两列,而不是一列.例如,年份的一个字段,月份的一个字段,显示"项目1"和"项目2"的"项目"字段和带有数值的"值"字段.我希望索引是年+月.
我设法让这个工作的唯一方法是将两个字段合并为一个,然后再将它们分开.有没有更好的办法?
下面复制的最小代码.非常感谢!
PS是的,我知道关键字'pivot'和'multi-index'还有其他问题,但我不明白他们是否/如何帮助我解决这个问题.
import pandas as pd
import numpy as np
df= pd.DataFrame()
month = np.arange(1, 13)
values1 = np.random.randint(0, 100, 12)
values2 = np.random.randint(200, 300, 12)
df['month'] = np.hstack((month, month))
df['year'] = 2004
df['value'] = np.hstack((values1, values2))
df['item'] = np.hstack((np.repeat('item 1', 12), np.repeat('item 2', 12)))
# This doesn't work:
# ValueError: Wrong number of items passed 24, placement implies 2
# mypiv = df.pivot(['year', 'month'], 'item', 'value')
# This doesn't work, either:
# df.set_index(['year', 'month'], inplace=True) …Run Code Online (Sandbox Code Playgroud) class sklearn.ensemble.RandomForestClassifier(n_estimators=10,
criterion='gini',
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_features='auto',
max_leaf_nodes=None,
bootstrap=True,
oob_score=False,
n_jobs=1,
random_state=None,
verbose=0,
warm_start=False,
class_weight=None)
Run Code Online (Sandbox Code Playgroud)
我使用的是随机森林模型,包含9个样本和大约7000个属性.在这些样本中,我的分类器识别出3个类别.
我知道这远非理想条件,但我试图找出哪些属性在特征预测中最重要.哪些参数最适合优化功能重要性?
我尝试了不同的,n_estimators并注意到"重要特征"(即feature_importances_阵列中的非零值)的数量急剧增加.
我已经阅读了文档,但如果有任何人有这方面的经验,我想知道哪些参数最适合调整,并简要说明原因.
python parameters machine-learning random-forest scikit-learn
我试图使用Pandas在每列中找到不同值的计数.这就是我做的.
import pandas as pd
import numpy as np
# Generate data.
NROW = 10000
NCOL = 100
df = pd.DataFrame(np.random.randint(1, 100000, (NROW, NCOL)),
columns=['col' + x for x in np.arange(NCOL).astype(str)])
Run Code Online (Sandbox Code Playgroud)
我需要计算每列的不同元素的数量,如下所示:
col0 9538
col1 9505
col2 9524
Run Code Online (Sandbox Code Playgroud)
最有效的方法是什么,因为此方法将应用于大小超过1.5GB的文件?
根据答案,df.apply(lambda x: len(x.unique()))是最快的(笔记本).
%timeit df.apply(lambda x: len(x.unique()))
10 loops, best of 3: 49.5 ms per loop
%timeit df.nunique()
10 loops, best of 3: 59.7 ms per loop
%timeit df.apply(pd.Series.nunique)
10 loops, best of 3: 60.3 ms per …
我有两个共享项目编号的独立数据框.在type_df,项目编号是索引.在time_df,项目编号是一列.我想计数的行数中type_df有一个Project Type的2.我正试图这样做pandas.merge().它在使用两列时效果很好,但不是索引.我不确定如何引用索引,如果merge是正确的方法来做到这一点.
import pandas as pd
type_df = pd.DataFrame(data = [['Type 1'], ['Type 2']],
columns=['Project Type'],
index=['Project2', 'Project1'])
time_df = pd.DataFrame(data = [['Project1', 13], ['Project1', 12],
['Project2', 41]],
columns=['Project', 'Time'])
merged = pd.merge(time_df,type_df, on=[index,'Project'])
print merged[merged['Project Type'] == 'Type 2']['Project Type'].count()
Run Code Online (Sandbox Code Playgroud)
错误:
名称"索引"未定义.
期望的输出:
2
Run Code Online (Sandbox Code Playgroud) 我想用千位分隔符格式化数字并指定小数位数.我知道如何分开做这些,但不能一起做.
比如,我用format每本为小数:
FormatDecimal <- function(x, k) {
return(format(round(as.numeric(x), k), nsmall=k))
}
FormatDecimal(1000.64, 1) # 1000.6
Run Code Online (Sandbox Code Playgroud)
对于千位分隔符,formatC:
formatC(1000.64, big.mark=",") # 1,001
Run Code Online (Sandbox Code Playgroud)
但这些并不能很好地融合在一起:
formatC(FormatDecimal(1000.64, 1), big.mark=",")
# 1000.6, since no longer numeric
formatC(round(as.numeric(1000.64), 1), nsmall=1, big.mark=",")
# Error: unused argument (nsmall=1)
Run Code Online (Sandbox Code Playgroud)
我该怎么1,000.6办?
编辑:这不同于这个问题,询问格式3.14为3,14(被标记为可能的重复).
我想将这些日期格式为YYYYMMDD转换为Date类.
dates <- data.frame(Date = c("20130707", "20130706", "20130705", "20130704"))
Run Code Online (Sandbox Code Playgroud)
我试过了:
dates <- as.Date(dates, "%Y%m%d")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error in as.Date.default(dates, "%Y%m%d") :
do not know how to convert 'dates' to class "Date"
Run Code Online (Sandbox Code Playgroud)
设置此格式的正确方法是什么?
我有以下代码来绘制一条线和一个点:
df = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 4, 6]})
point = pd.DataFrame({'x': [2], 'y': [5]})
ax = df.plot(x='x', y='y', label='line')
ax = point.plot(x='x', y='y', ax=ax, style='r-', label='point')
Run Code Online (Sandbox Code Playgroud)
如何显示单个数据点?
我想检查两个向量是否包含相同的元素,即使它们的顺序不同.例如,函数(让我们称之为SameElements)应满足以下条件:
SameElements(c(1, 2, 3), c(1, 2, 3)) # TRUE
SameElements(c(1, 2, 3), c(3, 2, 1)) # TRUE
SameElements(c(1, 2, 1), c(1, 2)) # FALSE
SameElements(c(1, 1, 2, 3), c(3, 2, 1)) # FALSE
Run Code Online (Sandbox Code Playgroud)
编辑1:指定当向量包含相同元素但频率不同时,该函数应返回F.
编辑2:清除问题以省略初始答案,因为现在是我的实际答案.
在给出明显等效的输入时,我试图理解这两个平滑函数的不同行为.我的理解是,locpoly只需要一个固定的带宽参数,同时locfit也可以在其平滑参数中包含一个变化的部分(最近邻分数," nn").我认为将这个变化部分设置为零locfit应该使" h"组件像所用的固定带宽一样locpoly,但显然不是这种情况.
一个工作的例子:
library(KernSmooth)
library(locfit)
set.seed(314)
n <- 100
x <- runif(n, 0, 1)
eps <- rnorm(n, 0, 1)
y <- sin(2 * pi * x) + eps
plot(x, y)
lines(locpoly(x, y, bandwidth=0.05, degree=1), col=3)
lines(locfit(y ~ lp(x, nn=0, h=0.05, deg=1)), col=4)
Run Code Online (Sandbox Code Playgroud)
产生这个情节:

locpoly给出平滑的绿线,并locfit给出摇摆的蓝线.显然,这里locfit具有较小的"有效"带宽,即使假定的带宽参数对于每个具有相同的值.
这些功能有何不同?
python ×5
r ×5
pandas ×4
class ×1
date ×1
format ×1
ggplot2 ×1
label ×1
matplotlib ×1
merge ×1
multi-index ×1
numpy ×1
parameters ×1
pivot ×1
plot ×1
python-2.7 ×1
regression ×1
scikit-learn ×1
smoothing ×1