小编Ted*_*rou的帖子

熊猫条形图更改日期格式

我有一个简单的堆叠线图,它具有我想要使用以下代码时神奇地设置的日期格式.

df_ts = df.resample("W", how='max')
df_ts.plot(figsize=(12,8), stacked=True)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

然而,当绘制与条形图相同的数据时,日期神秘地将自身转换为丑陋且不可读的格式.

df_ts = df.resample("W", how='max')
df_ts.plot(kind='bar', figsize=(12,8), stacked=True)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

原始数据进行了一些转换,以获得每周最大值.为什么自动设定日期发生了根本变化?我怎样才能拥有如上所述的格式良好的日期?

这是一些虚拟数据

start = pd.to_datetime("1-1-2012")
idx = pd.date_range(start, periods= 365).tolist()
df=pd.DataFrame({'A':np.random.random(365), 'B':np.random.random(365)})
df.index = idx
df_ts = df.resample('W', how= 'max')
df_ts.plot(kind='bar', stacked=True)
Run Code Online (Sandbox Code Playgroud)

plot matplotlib pandas

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

使用Seaborn在一个图中绘制多个不同的图

我试图从使用seaborn的统计学习简介一书中重新创建以下情节 在此输入图像描述

我特别想用seaborn lmplot来创建前两个图并boxplot创建第二个图.主要问题是lmplot facetgrid根据这个答案创建了一个强制我为盒子图添加另一个matplotlib轴.我想知道是否有更简单的方法来实现这一目标.下面,我必须进行相当多的手动操作才能获得所需的情节.

seaborn_grid = sns.lmplot('value', 'wage', col='variable', hue='education', data=df_melt, sharex=False)
seaborn_grid.fig.set_figwidth(8)

left, bottom, width, height = seaborn_grid.fig.axes[0]._position.bounds
left2, bottom2, width2, height2 = seaborn_grid.fig.axes[1]._position.bounds
left_diff = left2 - left
seaborn_grid.fig.add_axes((left2 + left_diff, bottom, width, height))

sns.boxplot('education', 'wage', data=df_wage, ax = seaborn_grid.fig.axes[2])
ax2 = seaborn_grid.fig.axes[2]
ax2.set_yticklabels([])
ax2.set_xticklabels(ax2.get_xmajorticklabels(), rotation=30)
ax2.set_ylabel('')
ax2.set_xlabel('');

leg = seaborn_grid.fig.legends[0]
leg.set_bbox_to_anchor([0, .1, 1.5,1])
Run Code Online (Sandbox Code Playgroud)

哪个收益率在此输入图像描述

DataFrames的示例数据:

df_melt = {'education': {0: '1. < HS Grad',
  1: '4. College Grad',
  2: '3. Some College', …
Run Code Online (Sandbox Code Playgroud)

python matplotlib seaborn

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

使用Cython查找数组中所有独特元素的最快方法

我试图找到最有效的方法来从NumPy数组中查找唯一值.NumPy的unique功能非常慢,在找到唯一值之前先对值进行排序.Pandas使用klib C库来散列值,这个库要快得多.我正在寻找一个Cython解决方案.

最简单的解决方案似乎是遍历数组并使用Python集添加每个元素,如下所示:

from numpy cimport ndarray
from cpython cimport set

@cython.wraparound(False)
@cython.boundscheck(False)
def unique_cython_int(ndarray[np.int64_t] a):
    cdef int i
    cdef int n = len(a)
    cdef set s = set()
    for i in range(n):
        s.add(a[i])
    return s
Run Code Online (Sandbox Code Playgroud)

我也试过c ++中的unordered_set

from libcpp.unordered_set cimport unordered_set
@cython.wraparound(False)
@cython.boundscheck(False)
def unique_cpp_int(ndarray[np.int64_t] a):
    cdef int i
    cdef int n = len(a)
    cdef unordered_set[int] s
    for i in range(n):
        s.insert(a[i])
    return s
Run Code Online (Sandbox Code Playgroud)

性能

# create array of 1,000,000
a = np.random.randint(0, …
Run Code Online (Sandbox Code Playgroud)

numpy cython pandas

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

在Cython与NumPy中总和int和浮点数时的性能差异很大

我使用Cython或NumPy对一维数组中的每个元素求和.当求和整数时, Cython的速度提高了约20%.总结浮点数时,Cython 约2.5倍.以下是使用的两个简单函数.

#cython: boundscheck=False
#cython: wraparound=False

def sum_int(ndarray[np.int64_t] a):
    cdef:
        Py_ssize_t i, n = len(a)
        np.int64_t total = 0

    for i in range(n):
        total += a[i]
    return total 

def sum_float(ndarray[np.float64_t] a):
    cdef:
        Py_ssize_t i, n = len(a)
        np.float64_t total = 0

    for i in range(n):
        total += a[i]
    return total
Run Code Online (Sandbox Code Playgroud)

计时

创建两个每个包含100万个元素的数组:

a_int = np.random.randint(0, 100, 10**6)
a_float = np.random.rand(10**6)

%timeit sum_int(a_int)
394 µs ± 30 µs per loop (mean ± std. dev. of 7 …
Run Code Online (Sandbox Code Playgroud)

python numpy cython

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

在Cython中使用小写的unicode字符串数组的最快方法

Numpy的字符串函数都非常慢,并且性能低于纯python列表.我期待使用Cython优化所有正常的字符串函数.

例如,让我们采用一个100,000个unicode字符串的numpy数组,其数据类型为unicode或object,每个字符串为lowecase.

alist = ['JsDated', '???????'] * 50000
arr_unicode = np.array(alist)
arr_object = np.array(alist, dtype='object')

%timeit np.char.lower(arr_unicode)
51.6 ms ± 1.99 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Run Code Online (Sandbox Code Playgroud)

使用列表理解同样快

%timeit [a.lower() for a in arr_unicode]
44.7 ms ± 2.69 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Run Code Online (Sandbox Code Playgroud)

对于对象数据类型,我们无法使用np.char.列表理解速度是3倍.

%timeit [a.lower() for a in arr_object]
16.1 ms ± 147 µs per loop (mean ± std. dev. of 7 …
Run Code Online (Sandbox Code Playgroud)

python unicode numpy cython

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

在python pandas中,如何重新采样和插入DataFrame?

我有一个pd DataFrame,通常采用以下格式:

   1       2          3          4  
0.1100 0.0000E+00 1.0000E+00 5.0000E+00  
0.1323 7.7444E-05 8.7935E-01 1.0452E+00  
0.1545 4.3548E-04 7.7209E-01 4.5432E-01  
0.1768 1.2130E-03 6.7193E-01 2.6896E-01  
0.1990 2.5349E-03 5.7904E-01 1.8439E-01  
0.2213 4.5260E-03 4.9407E-01 1.3771E-01 
Run Code Online (Sandbox Code Playgroud)

我想要做的是从列表中重新采样列1(索引)值,例如:

indexList = numpy.linspace(0.11, 0.25, 8)
Run Code Online (Sandbox Code Playgroud)

然后我需要从输入DataFrame线性插值第2,3和4列的值(我总是只重新采样/重新索引我的第1列) - 如果需要外推,作为我的最小值/最大值list不一定在我现有的第1列(索引)中.然而,关键点是插值部分.我是python的新手,但我正在考虑使用这样的方法:

  1. output_df = DataFrame.reindex(index = indexList) - 这将主要给出第2-4列的NaN.
  2. 对于index,output_df.iterrows()中的行
    "从DataFrame计算插值/外推值并将它们插入正确的行/列的函数"

不知何故感觉我应该能够使用.interpolate功能,但我无法弄清楚如何.我不能直接使用它 - 它太不准确了,因为在第2-4列中提到的重新索引后的大部分条目都是NaN的; 插值应该在我的初始DataFrame的两个最接近的值内完成.任何好的提示有人吗?(如果我的格式/意图不清楚,请告诉我......)

python interpolation pandas reindex

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

在 wordnet 中查找名词的同义词

我想知道是否有一种简单的方法可以获取 wordnet 中名词的同义词。看来形容词的同义词很容易找到。

for ss in wn.synsets('beautiful'):
    print(ss)
    for sim in ss.similar_tos():
        print('    {}'.format(sim))
Run Code Online (Sandbox Code Playgroud)

我从另一个 SO 问题中找到了上面的代码,它对于形容词效果很好。但当我说“汽油”或“火”时,结果就很糟糕了。理想情况下,我会得到一个与该网站非常相似的单词列表。

我尝试过的其他方法取得了良好的效果,但速度非常慢,如下:

def syn(word, lch_threshold=2.26):
for net1 in wn.all_synsets():
    try:
        lch = net1.lch_similarity(wn.synset(word))
    except:
        continue
    # The value to compare the LCH to was found empirically.
    # (The value is very application dependent. Experiment!)
    if lch >= lch_threshold:
        yield (net1, lch)

for x in syn('gasoline.n.1'):
    print  x
Run Code Online (Sandbox Code Playgroud)

这也是从另一个 SO 问题中找到的。有没有更简单的方法来获取上面提供的链接中的名词同义词?

python synonym nltk wordnet

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

SAS存储过程的XML语法

我正在尝试完成SAS BI Web服务开发人员指南第19页上的示例.我已逐字按照说明操作,但在发出帖子请求时无法获取存储过程(自动为Web服务)以返回正确的结果.我正在尝试SOAP和XML.错误是永远找不到'instream'数据源.

我要求的是有人复制示例并使用post请求(以curl的形式)提供确切的XML和/或SOAP.

这是SOAP(直接来自指南)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:sas="urn:schemas-microsoft-com:xml-analysis">
<soapenv:Header/>
<soapenv:Body>
<sas:Execute>
<sas:Command>
<StoredProcess name="/WebServicesExamples/sampMeans">
<Parameter name="tablename">InData</Parameter>
<Stream name="instream">
<Table>
<InData>
<Column1>1</Column1>
<Column2>20</Column2>
<Column3>99</Column3>
</InData>
<InData>
<Column1>50</Column1>
<Column2>200</Column2>
<Column3>9999</Column3>
</InData>
<InData>
<Column1>100</Column1>
<Column2>2000</Column2>
<Column3>1000000</Column3>
</InData>
</Table>
</Stream>
</StoredProcess>
</sas:Command>
<sas:Properties>
<PropertyList>
<DataSourceInfo>Provider=SASSPS;</DataSourceInfo>
</PropertyList>
</sas:Properties>
</sas:Execute>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

我通过curl发帖.这是我的curl命令

curl -H "Content-Type: text/xml" -X POST https://mycompany.com:port/SASBIWS/services/WebServicesExamples/sampMeans --data "@sampmeanssoap.xml"
Run Code Online (Sandbox Code Playgroud)

但这会产生错误

在执行"WebServicesExamples/sampMeans"服务期间发生了"客户端"类型的异常.例外如下:未指定预期的流'instream'.

XML产生类似的响应

<StoredProcess name="/WebServicesExamples/sampMeans">
 <Parameter name="tablename">InData</Parameter>
 <Stream name="instream">
 <Table>
 <InData>
 <Column1>1</Column1>
 <Column2>20</Column2>
 <Column3>99</Column3>
 </InData>
 <InData>
 <Column1>50</Column1>
 <Column2>200</Column2>
 <Column3>9999</Column3>
 </InData>
 <InData>
 <Column1>100</Column1> …
Run Code Online (Sandbox Code Playgroud)

sas

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

在apply中矢量化一个非常简单的pandas lambda函数

熊猫apply/map是我的克星,甚至在小数据集上也可能令人痛苦地慢.下面是一个非常简单的例子,其速度差异近3个数量级.下面我创建一个Series包含100万个值的数据,只想将大于.5的值映射到"是",将小于.5的值映射到"否".如何对此进行矢量化或显着加快速度?

ser = pd.Series(np.random.rand(1000000))

# vectorized and fast
%%timeit
ser > .5
Run Code Online (Sandbox Code Playgroud)

1000个循环,最佳3:477μs/循环

%%timeit
ser.map(lambda x: 'Yes' if x > .5 else 'No')
Run Code Online (Sandbox Code Playgroud)

1个循环,每个循环最好为3:255 ms

python vectorization apply pandas

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

Cython 中的数组求和数组

我试图找到使用 Cython 对 numpy 数组进行水平求和的最快方法。首先,假设我有一个 10 x 100,000 随机浮点数的 2D 数组。我可以创建一个object数组,每列作为数组中的一个值,如下所示:

n = 10 ** 5
a = np.random.rand(10, n)
a_obj = np.empty(n, dtype='O')
for i in range(n):
    a_obj[i] = a[:, i]
Run Code Online (Sandbox Code Playgroud)

我想做的就是找到每一行的总和。它们都可以这样简单地计算:

%timeit a.sum(1)
414 µs ± 24.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit a_obj.sum()
113 ms ± 7.01 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Run Code Online (Sandbox Code Playgroud)

对象数组慢 250 倍。

在尝试总结之前,我想对每个元素的访问时间进行计时。Cython 在直接遍历每个项目时无法加速访问对象数组的每个成员:

def access_obj(ndarray[object] …
Run Code Online (Sandbox Code Playgroud)

numpy cython

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