Python 我无法理解代码的具体部分

Python 我无法理解代码的具体部分,python,python-2.7,ipython,Python,Python 2.7,Ipython,本练习的目标是生成一个如本页所示的图表:() 用于生成类似图的数据存储为XML页面,URL如下: 这里,[id]是一个唯一的整数,位于显示图形的页面URL的末尾。奥巴马-罗姆尼竞选的id是1171: import re def get_poll_xml(poll_id): url ="http://charts.realclearpolitics.com/charts/%i.xml" %int(poll_id) return requests.get(url).text d

本练习的目标是生成一个如本页所示的图表:()

用于生成类似图的数据存储为XML页面,URL如下: 这里,[id]是一个唯一的整数,位于显示图形的页面URL的末尾。奥巴马-罗姆尼竞选的id是1171:

import re 

def get_poll_xml(poll_id):
    url ="http://charts.realclearpolitics.com/charts/%i.xml" %int(poll_id)
    return requests.get(url).text

def _strip(s): # function to remove characters
    return re.sub(r'[\W_]+', '', s)

def plot_colors(xml):
    '''
    Given an XML document like the link above, returns a python dictionary
    that maps a graph title to a graph color.

    Both the title and color are parsed from attributes of the <graph> tag:
    <graph title="the title", color="#ff0000"> -> {'the title': '#ff0000'}
   '''
    dom = web.Element(xml)
    result = {}
    for graph in dom.by_tag('graph'):
        title = _strip(graph.attributes['title'])
        result[title] = graph.attributes['color']
    return result

def rcp_poll_data(xml):
    """ 
     A pandas DataFrame with the following columns:
    date: The date for each entry
    title_n: The data value for the gid=n graph 

    This DataFrame should be sorted by date

    Example
     -------
     Consider the following simple xml page:

   <chart>
   <series>
   <value xid="0">1/27/2009</value>
   <value xid="1">1/28/2009</value>
   </series>
  <graphs>
  <graph gid="1" color="#000000" balloon_color="#000000" title="Approve">
  <value xid="0">63.3</value>
  <value xid="1">63.3</value>
  </graph>
  <graph gid="2" color="#FF0000" balloon_color="#FF0000" title="Disapprove">
  <value xid="0">20.0</value>
  <value xid="1">20.0</value>
  </graph>
  </graphs>
  </chart>

  Given this string, rcp_poll_data should return
  result = pd.DataFrame({'date': pd.to_datetime(['1/27/2009', '1/28/2009']), 
                       'Approve': [63.3, 63.3], 'Disapprove': [20.0, 20.0]})
  """
    dom = web.Element(xml)
    result = {}        

    dates = dom.by_tag('series')[0]    
    dates = {n.attributes['xid']: str(n.content) for n in dates.by_tag('value')}

    keys = dates.keys()
    result['date'] = pd.to_datetime([dates[k] for k in keys]) 

    for graph in dom.by_tag('graph'):
        name = graph.attributes['title']
        data = {n.attributes['xid']: float(n.content) if n.content else np.nan for n   in graph.by_tag('value') }
        keyl = data.keys()    
        result[name] = [data[k]for k in keyl]

    result = pd.DataFrame(result)   
    result = result.sort(columns=['date'])

    return result

def poll_plot(poll_id):
    xml = get_poll_xml(poll_id)
    data = rcp_poll_data(xml)
    colors = plot_colors(xml)

    #remove characters like apostrophes
    data = data.rename(columns = {c: _strip(c) for c in data.columns})

    #normalize poll numbers so they add to 100%    
    norm = data[colors.keys()].sum(axis=1) / 100    
    for c in colors.keys():
        data[c] /= norm

    for label, color in colors.items():
        plt.plot(data.date, data[label], color=color, label=label)        

    plt.xticks(rotation=70)
    plt.legend(loc='best')
    plt.xlabel("Date")
    plt.ylabel("Normalized Poll Percentage")

poll_plot(1044)
plt.title("Obama Job Approval")

你在评论中说你想知道什么是
/=
。它被称为增广赋值,在中定义

您有一个int-var,并希望对其求和一个值

n = 1
n = n + 1
print n
2
下面是一个优化的方法

n = 1
n += 1
在循环中使用它非常有用

n = 1
while n < 10:
    n += 1

print n
10

有关增强赋值的更多信息,请查看条目。

如果您想知道语法
data[c]/=norm
的含义,它类似于更常见的
+=
运算符。它获取赋值左侧的左侧,并将该左侧的值除以右侧的值。它相当于
data[c]=data[c]/norm
。比如说

x = 6.0
x /= 2.0
现在
x
的值将为
3.0


请试着更清楚地说明您在问题中到底在问什么,并说出您不理解的代码的特定部分。

我想以前有人做过这方面的工作。也许这篇文章可以帮助你,但它不能解决我的问题。我无法理解代码的某一部分。但是解析示例完全不同,“你能为我解释一下这个代码吗?”并不是一个好问题。我们需要了解您为什么不理解它,特别是您不理解的内容,也许更重要的是,为什么您有所有这些您不理解的代码。:)我的意思是,你遇到麻烦的代码在我看来并不比你没有问题的其他代码更复杂…@KarlKnechtel我知道我在问一些愚蠢的问题,但请相信我,我是个初学者。我决心自学python。因为我想进入数据科学领域。@KarlKnechtel:我的具体问题在这一部分->对于c的颜色.keys():data[c]/=norm,data[c]/=norm是什么。请explain@JacobBower-我是一个新来的人。谢谢你的回答。你能解释一下吗。headers=table.by_tag('th')labels=[str(t.content).split('(')[0].strip()表示在headers[3:-1].…我知道split和strip的意思。但是deos split('(')[0]的意思是什么?明白了:)。headers=table.by_tag('th')labels=[str(t.content).split('('(')[0].strip()表示在headers[3:-1]]…我知道拆分和剥离是什么意思。但是deos split('(')[0]的意思是什么???-在控制台
print'123(456(789.)上试试这个。拆分('(')[0]
你就会明白。明白了。拆分函数返回一个列表,拆分[0]返回列表中的第一个元素。你可以选择一个有效的答案。
n = 4
n /= 2
print n
2

n = 10
while n > 2:
    n /= 2

print n
2
x = 6.0
x /= 2.0