{
  "id": 2614,
  "title": "problems with import features",
  "url": "/competitions/predict-closed-questions-on-stack-overflow/discussion/2614",
  "author_name": "",
  "post_date": "2012-09-08T02:31:49.740Z",
  "votes": null,
  "comment_count": 3,
  "views": 1908,
  "content": "<p>freatures.py has a line at the top</p>\r\n<p>import features</p>\r\n<p>The download of .py files includes</p>\r\n<p>features.py and</p>\r\n<p>features</p>\r\n<p>What is features?&nbsp; I'm using Eclipse and it complains about</p>\r\n<p>import features</p>\r\n<p>If i remove it i get an error &quot;NameError: global name 'features' is not defined&quot; in the last line below is not defined.</p>\r\n<p>def extract_features(feature_names, data):<br>\r\n&nbsp;&nbsp;&nbsp; fea = pd.DataFrame(index=data.index)<br>\r\n&nbsp;&nbsp;&nbsp; for name in feature_names:<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if name in data:<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fea = fea.join(data[name])<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fea = fea.join(getattr(features, camel_to_underscores(name))(data))</p>\r\n<p>&nbsp;</p>\r\n<p>can anybody explain what the &quot;features&quot; file (withouth the .py) is for?&nbsp; There is a similarly formatted file for cu as well.</p>",
  "messages": [
    {
      "id": "14090",
      "postDate": "09/08/2012 02:31:49",
      "content": "<p>freatures.py has a line at the top</p>\r\n<p>import features</p>\r\n<p>The download of .py files includes</p>\r\n<p>features.py and</p>\r\n<p>features</p>\r\n<p>What is features?&nbsp; I'm using Eclipse and it complains about</p>\r\n<p>import features</p>\r\n<p>If i remove it i get an error &quot;NameError: global name 'features' is not defined&quot; in the last line below is not defined.</p>\r\n<p>def extract_features(feature_names, data):<br>\r\n&nbsp;&nbsp;&nbsp; fea = pd.DataFrame(index=data.index)<br>\r\n&nbsp;&nbsp;&nbsp; for name in feature_names:<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if name in data:<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fea = fea.join(data[name])<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fea = fea.join(getattr(features, camel_to_underscores(name))(data))</p>\r\n<p>&nbsp;</p>\r\n<p>can anybody explain what the &quot;features&quot; file (withouth the .py) is for?&nbsp; There is a similarly formatted file for cu as well.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "14091",
      "postDate": "09/08/2012 02:46:37",
      "content": "<p>hmm.&nbsp; I see now, below the function</p>\r\n<p>extract_features</p>\r\n<p>there is</p>\r\n<p>if __name__==&quot;__main__&quot;:<br>\r\n&nbsp;&nbsp;&nbsp; feature_names = [ &quot;BodyLength&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;NumTags&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;OwnerUndeletedAnswerCountAtPostTime&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;ReputationAtPostCreation&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;TitleLength&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;UserAge&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>\r\n&nbsp;&nbsp;&nbsp; data = cu.get_dataframe(&quot;/home/kesten/VCP/ML/StackOverflowChallenge/data/train-sample.csv&quot;)<br>\r\n&nbsp;&nbsp;&nbsp; features = extract_features(feature_names, data)<br>\r\n&nbsp;&nbsp;&nbsp; print(features)</p>\r\n<p>_____________</p>\r\n<p>so features is defined if features.py is called as main, but if it is imported then perhaps not.&nbsp; I don't know enough about python imports to say for sure.&nbsp;</p>\r\n<p>But is this a bug in features.py, or am i missing something?</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "14092",
      "postDate": "09/08/2012 04:13:49",
      "content": "<p>In python, the line</p>\r\n<blockquote>\r\n<p>import features</p>\r\n</blockquote>\r\n<p>will import the contents of features.py.</p>\r\n<p>features.py imports itself, which isn't something you would usually do. It does this so that it can convert feature names to function names via:</p>\r\n<blockquote>\r\n<pre>getattr(features, camel_to_underscores(name))(data)</pre>\r\n</blockquote>\r\n<pre>It's a little hacky, and took a while for me to understand initially.</pre>\r\n<pre>&nbsp;</pre>\r\n<pre>edit: am I missing something, or are blockquotes completely screwed up in this forum software?</pre>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "14110",
      "postDate": "09/08/2012 22:35:21",
      "content": "<p>I see, thanks.&nbsp; And despite the error in the eclipse IDE it runs just fine.</p>\r\n<p>haven't tried code blks yet :)</p>",
      "rawMarkdown": "",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 14091,
      "author_name": "darkoram",
      "author_url": "",
      "post_date": "09/08/2012 02:46:37",
      "content": "<p>hmm.&nbsp; I see now, below the function</p>\r\n<p>extract_features</p>\r\n<p>there is</p>\r\n<p>if __name__==&quot;__main__&quot;:<br>\r\n&nbsp;&nbsp;&nbsp; feature_names = [ &quot;BodyLength&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;NumTags&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;OwnerUndeletedAnswerCountAtPostTime&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;ReputationAtPostCreation&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;TitleLength&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , &quot;UserAge&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>\r\n&nbsp;&nbsp;&nbsp; data = cu.get_dataframe(&quot;/home/kesten/VCP/ML/StackOverflowChallenge/data/train-sample.csv&quot;)<br>\r\n&nbsp;&nbsp;&nbsp; features = extract_features(feature_names, data)<br>\r\n&nbsp;&nbsp;&nbsp; print(features)</p>\r\n<p>_____________</p>\r\n<p>so features is defined if features.py is called as main, but if it is imported then perhaps not.&nbsp; I don't know enough about python imports to say for sure.&nbsp;</p>\r\n<p>But is this a bug in features.py, or am i missing something?</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 14092,
      "author_name": "neggert",
      "author_url": "",
      "post_date": "09/08/2012 04:13:49",
      "content": "<p>In python, the line</p>\r\n<blockquote>\r\n<p>import features</p>\r\n</blockquote>\r\n<p>will import the contents of features.py.</p>\r\n<p>features.py imports itself, which isn't something you would usually do. It does this so that it can convert feature names to function names via:</p>\r\n<blockquote>\r\n<pre>getattr(features, camel_to_underscores(name))(data)</pre>\r\n</blockquote>\r\n<pre>It's a little hacky, and took a while for me to understand initially.</pre>\r\n<pre>&nbsp;</pre>\r\n<pre>edit: am I missing something, or are blockquotes completely screwed up in this forum software?</pre>",
      "votes": null,
      "replies": []
    },
    {
      "id": 14110,
      "author_name": "darkoram",
      "author_url": "",
      "post_date": "09/08/2012 22:35:21",
      "content": "<p>I see, thanks.&nbsp; And despite the error in the eclipse IDE it runs just fine.</p>\r\n<p>haven't tried code blks yet :)</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "14090": "",
    "14091": "",
    "14092": "",
    "14110": ""
  },
  "source": "meta"
}