下图是我尝试在Python中使用Plotly(最底层的代码)来做2x2绘图.
我正在尝试改进图表,但我似乎无法做到以下几点:
任何帮助将非常感激.以下是我的代码.
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) 我正在评估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) 我有一个很长的时间序列,以以下数据结尾。
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) 我有一个功能,我想根据模式采用不同的形式。我应该将定义包含在 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 的任何问题。
我的程序应该运行24/7,我希望能够在某个小时/日期运行某些任务。
我已经尝试使用aiocron,但它仅支持调度功能(不支持协程),并且我读到它并不是一个很好的库。我的程序是构建的,因此我要调度的大多数(如果不是全部)任务都是在协程中构建的。
还有其他库可以进行此类任务调度吗?
否则,是否有任何使协程变形的方法,以使它们运行正常?
对于某些 Pandas 函数,例如 sum()、cumsum() 和 cumprod(),有一个 Skipna 选项,默认设置为 True。这给我带来了问题,因为错误可能会悄悄地传播,所以我总是明确地将skipna设置为False。
sum_df = df.sum(skipna=False)
Run Code Online (Sandbox Code Playgroud)
每次出现这些函数之一时都执行此操作会使代码看起来有点笨拙。有没有办法改变 Pandas 的默认行为?
在多模块 Python 环境中,文档建议在 Python 项目的第一个入口点运行以下代码片段来定义项目范围的日志记录。
# ABC.py
import logging
logging.basicConfig(filename='master.log', level=logging.INFO)
logging.info('Start Logging.')
Run Code Online (Sandbox Code Playgroud)
如果某个其他文件是项目的另一个潜在的第一个入口点,我是否也将相同的代码片段添加到该文件的顶部?我想要实现的目标是指定在单个中心位置进行日志记录,无论哪个文件是第一个入口点。
我编写了一个带有实例属性的类,称之为名称。确保类的所有实例都具有唯一名称的最佳方法是什么?我是否在类下创建一个集合,并且每次创建新实例时,名称都会添加到 init 定义中的集合中?由于集合是唯一元素的集合,因此我可以验证新实例的名称是否可以成功添加到集合中。
编辑:我希望能够提供名称而不是为其分配 UUID。所以 mementum 的方法似乎是最稳健的。jpkotta 的就是我会做的。
我正在尝试使用 python 中的 selenium 包来加载要保存的动态网站。但我的成功有好有坏。我注意到成功保存的页面和未保存的页面之间存在差异。在成功者的 HTML 源代码中,我看到
<script language="javascript" type="text/javascript">
var PageIsReady = true;
</script>
Run Code Online (Sandbox Code Playgroud)
而对于其他情况,var PageIsReady 为 false。有没有办法可以在变量变为真后触发保存?
这个stackoverflow 问题展示了如何执行超时,但它会查找标签的存在,而我希望它触发脚本变量的值。
我在 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)
我看到下图,其中显示了所有边缘属性。我预计只会出现标题。
我正在构建的图表是一个逐步的过程,因此边缘标签会随着更多信息的处理而更新。如何在图形构建结束时仅使用我想要的属性来标记边?
我试图从这个页面上刮掉符号,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、...
我有一个 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 命令来做到这一点?
假设我有一个包含 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 如何做到这一点?