小编Spi*_*or8的帖子

Python-Borders,Sync Panning,Sidelabels中的Plotly子图

下图是我尝试在Python中使用Plotly(最底层的代码)来做2x2绘图. 在此输入图像描述

我正在尝试改进图表,但我似乎无法做到以下几点:

  1. 每个子图上的边框
  2. 在所有绘图上同步平移和缩放.虽然我使用的是shared_xaxes和shared_yaxes,但它仅适用于子图的行和列.因此,如果我在左下图中平移,右上图仍然不动.
  3. 侧标签用于标记子图.参见例如在此输入图像描述

任何帮助将非常感激.以下是我的代码.

import plotly.offline as poff
import plotly.tools as tls

x = list(range(10,20))
y = x
y1 = [10-i for i in x]
y2 = [abs(i-5) for i in x]
y3 = [abs(2*i- 5) for i in x]

fig = tls.make_subplots(rows=2, cols=2, shared_xaxes=True, shared_yaxes=True,
                        vertical_spacing=0.01,
                        horizontal_spacing=0.01, print_grid=True)
fig.append_trace(go.Scatter({'x':x, 'y':y, 'name':'A1'},), 1, 1)
fig.append_trace(go.Scatter({'x':x, 'y':y1, 'name':'B2'},), 2, 2)
fig.append_trace(go.Scatter({'x':x, 'y':y2, 'name':'A2'},), 2, 1)
fig.append_trace(go.Scatter({'x':x, 'y':y3, 'name':'B1'},), 1, 2)

fig['layout'].update(title='Multiple Subplots')
url = poff.plot(fig, filename="test23.html")
Run Code Online (Sandbox Code Playgroud)

python plotly

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

Bokeh小部件 - 工作复选框组示例

我正在评估Bokeh是否已准备好进行更广泛的使用.我已经绘制了两列数据帧(最后的代码),"关闭"和"调整关闭". 在此输入图像描述

我想放入复选框来切换图中两个折线图的显示.因此,如果未选中相关复选框,则不会显示该行.http://bokeh.pydata.org/en/latest/docs/user_guide/interaction.html上的Bokeh文档确实讨论了复选框组,但未提供明确的工作示例.感谢任何有助于获取数据框列的复选框的帮助.

import pandas as pd
from bokeh.plotting import figure, output_file, show

IBM = pd.read_csv(
        "http://ichart.yahoo.com/table.csv?s=IBM&a=0&b=1&c=2011&d=0&e=1&f=2016",
        parse_dates=['Date'])

output_file("datetime.html")

p = figure(width=500, height=250, x_axis_type="datetime")

p.line(IBM['Date'], IBM['Close'], color='navy', alpha=0.5)
p.line(IBM['Date'], IBM['Adj Close'], color='red', alpha=0.5)

show(p)
Run Code Online (Sandbox Code Playgroud)

python bokeh

5
推荐指数
2
解决办法
6932
查看次数

Pandas 对现有索引进行重采样

我有一个很长的时间序列,以以下数据结尾。

               ABC     CDE
Date                      
2017-05-26  107.00  241.71
2017-05-30  107.27  241.50
2017-05-31  107.32  241.44
2017-06-01  107.10  243.36
2017-06-02  107.57  244.17
Run Code Online (Sandbox Code Playgroud)

我想对其进行重新采样,使其成为每月数据,但我有兴趣保留时间序列中实际的最后一个月日期。如果我做,

df.resample('BM').last()
Run Code Online (Sandbox Code Playgroud)

给出以下尾端输出

2017-05-31  107.32  241.44 
2017-06-30  107.57  244.17
Run Code Online (Sandbox Code Playgroud)

它没有给出数据帧的正确最后日期。重新采样的数据框中还有其他日期也已关闭。本质上,Pandas 并不使用现有的索引来查找月末,而是使用自己的工作日日历。

是否有一个选项可以输入 Pandas 重采样函数,以便它使用现有索引来实现所需的结果

2017-05-31  107.32  241.44 
2017-06-02  107.57  244.17
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Python 在 if 块中定义函数,反之亦然

我有一个功能,我想根据模式采用不同的形式。我应该将定义包含在 if 语句中还是应该将 if 放在定义中?

# Case 1
if mode == 1:
    def f(x):
        return x + 5
else:
    def f(x):
        return x - 5

# Case 2
def f(x):
    if mode == 1:
        return x + 5
    else:
        return x - 5
Run Code Online (Sandbox Code Playgroud)

我过去都做过,我的静态代码分析工具似乎没有抱怨。所以我想知道是否有 Pythonic 推荐?

编辑:从目前的评论来看,这两种情况似乎都可以接受。这取决于用例。如果模式旨在保持不变,则首选情况 1。如果不是,则情况 2。

EDIT2:这个问题实际上是在我编写函数时出现的。它接受模式作为输入,并根据模式执行类似的操作,除了它使用单独在这些操作的函数中定义的不同子函数。由于子函数在函数运行期间保持不变,情况 1 似乎更合适。

EDIT3:更正:过去,我认为 PyLint 对案例 1 不满意。这些天,我使用 PyCharm 并且似乎没有标记案例 1 的任何问题。

python

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

如何安排任务在asyncio中使其在特定日期运行?

我的程序应该运行24/7,我希望能够在某个小时/日期运行某些任务。

我已经尝试使用aiocron,但它仅支持调度功能(不支持协程),并且我读到它并不是一个很好的库。我的程序是构建的,因此我要调度的大多数(如果不是全部)任务都是在协程中构建的。

还有其他库可以进行此类任务调度吗?

否则,是否有任何使协程变形的方法,以使它们运行正常?

python scheduled-tasks python-asyncio

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

将 pandas 的skipna 全局默认设置设置为 False

对于某些 Pandas 函数,例如 sum()、cumsum() 和 cumprod(),有一个 Skipna 选项,默认设置为 True。这给我带来了问题,因为错误可能会悄悄地传播,所以我总是明确地将skipna设置为False。

sum_df = df.sum(skipna=False)
Run Code Online (Sandbox Code Playgroud)

每次出现这些函数之一时都执行此操作会使代码看起来有点笨拙。有没有办法改变 Pandas 的默认行为?

python sum pandas cumsum

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

使用多个入口点登录 Python 项目

在多模块 Python 环境中,文档建议在 Python 项目的第一个入口点运行以下代码片段来定义项目范围的日志记录。

# ABC.py
import logging

logging.basicConfig(filename='master.log', level=logging.INFO)
logging.info('Start Logging.')
Run Code Online (Sandbox Code Playgroud)

如果某个其他文件是项目的另一个潜在的第一个入口点,我是否也将相同的代码片段添加到该文件的顶部?我想要实现的目标是指定在单个中心位置进行日志记录,无论哪个文件是第一个入口点。

python logging

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

确保python中实例属性的唯一性

我编写了一个带有实例属性的类,称之为名称。确保类的所有实例都具有唯一名称的最佳方法是什么?我是否在类下创建一个集合,并且每次创建新实例时,名称都会添加到 init 定义中的集合中?由于集合是唯一元素的集合,因此我可以验证新实例的名称是否可以成功添加到集合中。

编辑:我希望能够提供名称而不是为其分配 UUID。所以 mementum 的方法似乎是最稳健的。jpkotta 的就是我会做的。

python oop

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

Selenium Python:检查 JS 变量是否为 true

我正在尝试使用 python 中的 selenium 包来加载要保存的动态网站。但我的成功有好有坏。我注意到成功保存的页面和未保存的页面之间存在差异。在成功者的 HTML 源代码中,我看到

<script language="javascript" type="text/javascript">
var PageIsReady = true;
</script>
Run Code Online (Sandbox Code Playgroud)

而对于其他情况,var PageIsReady 为 false。有没有办法可以在变量变为真后触发保存?

这个stackoverflow 问题展示了如何执行超时,但它会查找标签的存在,而我希望它触发脚本变量的值。

python web-scraping selenium-webdriver

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

NetworkX 中的边标签不正确

我在 networkx 包中看到一些奇怪的东西。这是一个最小的具体可验证示例。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()
G.add_edge('A', 'B', weight=1, title='ab', subtitle='testing')
edge_labels = nx.get_edge_attributes(G, 'title')
print(edge_labels)
Run Code Online (Sandbox Code Playgroud)

这给出了预期的输出,即边的标题属性。

{('A', 'B'): 'ab'}
Run Code Online (Sandbox Code Playgroud)

当我使用edge_labels进行绘图时,

fig = plt.figure()
ax1 = plt.subplot2grid((1, 1), (0, 0))
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True)

nx.draw_networkx_edge_labels(G, pos, labels=edge_labels)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我看到下图,其中显示了所有边缘属性。我预计只会出现标题。

在此输入图像描述

我正在构建的图表是一个逐步的过程,因此边缘标签会随着更多信息的处理而更新。如何在图形构建结束时仅使用我想要的属性来标记边?

python networkx

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

在 Python3 中使用 Selenium 抓取动态表

我试图从这个页面上刮掉符号,https://www.barchart.com/stocks/indices/sp/sp400? page =all

当我在 Firefox 浏览器中查看源代码(使用 Ctrl-U)时,没有任何符号出现。想着也许Selenium 可以获取动态表,我运行了以下代码。

sp400_url= "https://www.barchart.com/stocks/indices/sp/sp400?page=all"

from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Firefox()
driver.get(sp400_url)

html = driver.page_source
soup = BeautifulSoup(html)
print(soup)
Run Code Online (Sandbox Code Playgroud)

打印命令不会显示我们在页面上看到的任何符号。有没有办法从这个页面刮掉符号?

编辑澄清:我只对符号感兴趣,而不是价格。所以列表应该是:AAN、AAXN、ACC、ACHC、...

selenium web-scraping python-3.x

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

Crontab 电子邮件主题中的日期

我有一个 ubuntu 服务器,我在其中安排 crontab 进程,如下所示。

59 2 * * * : Backup Settings; ~/backup_settings.sh
Run Code Online (Sandbox Code Playgroud)

该过程结束时,我将收到一封主题为“备份设置...”的电子邮件。本质上,noop 函数 (:) 对“备份设置”一词不执行任何操作。我想将今天的日期添加到电子邮件主题中。自然,我尝试过

59 2 * * * : $(date +%Y%m%d) Backup Settings; ~/backup_settings.sh
Run Code Online (Sandbox Code Playgroud)

但这不会产生所需的电子邮件主题,即“20180519 备份设置”。$(...) 代码未被评估。我不想运行另一个具有电子邮件功能的脚本,然后调用 backup_settings.sh。有没有办法只使用 crontab 中的 Bash 命令来做到这一点?

bash cron no-op

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

通过选择位置模 P = Q 的行对数据帧进行采样

假设我有一个包含 N 行的数据框。我想选择行位置模 P 给出 Q 的行。所以为了具体起见,假设 P = 7 和 Q = 5。

Row 0: 0 mod 7 = 0 (not satisfied)
Row 1: 1 mod 7 = 1 (not satisfied)
...
Row 5: 5 mod 7 = 5 (satisfied)
...
Row 12: 12 mod 7 = 5 (satisfied)
Run Code Online (Sandbox Code Playgroud)

所以选择的行将是 5, 12, 19, 26 ....

如果 Q=0,则可以使用切片方法 df.iloc[::P]。对于 mod P = Q 如何做到这一点?

python pandas

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