Finding recessions in US GDP data using PANDAS












1












$begingroup$


For an assignment, I am identifying the first quarter of the 2008 recession in the United States. The Excel data I'm using can be downloaded here: gdplev.xls. How can I improve this pandas code to make it more idiomatic or optimized?



def get_recession_start():
'''Returns the year and quarter of the recession start time as a
string value in a format such as 2005q3'''
GDP_df = pd.read_excel("gdplev.xls",
names=["Quarter", "GDP in 2009 dollars"],
parse_cols = "E,G",
skiprows = 7)
GDP_df = GDP_df.query("Quarter >= '2000q1'")
GDP_df["Growth"] = GDP_df["GDP in 2009 dollars"].pct_change()
GDP_df = GDP_df.reset_index(drop=True)
# recession defined as two consecutive quarters of negative growth
GDP_df["Recession"] = (GDP_df.Growth < 0) & (GDP_df.Growth.shift(-1) < 0)
return GDP_df.iloc[GDP_df["Recession"].idxmax()]["Quarter"]
get_recession_start()









share|improve this question









New contributor




Jeremy Hadfield is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$

















    1












    $begingroup$


    For an assignment, I am identifying the first quarter of the 2008 recession in the United States. The Excel data I'm using can be downloaded here: gdplev.xls. How can I improve this pandas code to make it more idiomatic or optimized?



    def get_recession_start():
    '''Returns the year and quarter of the recession start time as a
    string value in a format such as 2005q3'''
    GDP_df = pd.read_excel("gdplev.xls",
    names=["Quarter", "GDP in 2009 dollars"],
    parse_cols = "E,G",
    skiprows = 7)
    GDP_df = GDP_df.query("Quarter >= '2000q1'")
    GDP_df["Growth"] = GDP_df["GDP in 2009 dollars"].pct_change()
    GDP_df = GDP_df.reset_index(drop=True)
    # recession defined as two consecutive quarters of negative growth
    GDP_df["Recession"] = (GDP_df.Growth < 0) & (GDP_df.Growth.shift(-1) < 0)
    return GDP_df.iloc[GDP_df["Recession"].idxmax()]["Quarter"]
    get_recession_start()









    share|improve this question









    New contributor




    Jeremy Hadfield is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.







    $endgroup$















      1












      1








      1





      $begingroup$


      For an assignment, I am identifying the first quarter of the 2008 recession in the United States. The Excel data I'm using can be downloaded here: gdplev.xls. How can I improve this pandas code to make it more idiomatic or optimized?



      def get_recession_start():
      '''Returns the year and quarter of the recession start time as a
      string value in a format such as 2005q3'''
      GDP_df = pd.read_excel("gdplev.xls",
      names=["Quarter", "GDP in 2009 dollars"],
      parse_cols = "E,G",
      skiprows = 7)
      GDP_df = GDP_df.query("Quarter >= '2000q1'")
      GDP_df["Growth"] = GDP_df["GDP in 2009 dollars"].pct_change()
      GDP_df = GDP_df.reset_index(drop=True)
      # recession defined as two consecutive quarters of negative growth
      GDP_df["Recession"] = (GDP_df.Growth < 0) & (GDP_df.Growth.shift(-1) < 0)
      return GDP_df.iloc[GDP_df["Recession"].idxmax()]["Quarter"]
      get_recession_start()









      share|improve this question









      New contributor




      Jeremy Hadfield is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      $endgroup$




      For an assignment, I am identifying the first quarter of the 2008 recession in the United States. The Excel data I'm using can be downloaded here: gdplev.xls. How can I improve this pandas code to make it more idiomatic or optimized?



      def get_recession_start():
      '''Returns the year and quarter of the recession start time as a
      string value in a format such as 2005q3'''
      GDP_df = pd.read_excel("gdplev.xls",
      names=["Quarter", "GDP in 2009 dollars"],
      parse_cols = "E,G",
      skiprows = 7)
      GDP_df = GDP_df.query("Quarter >= '2000q1'")
      GDP_df["Growth"] = GDP_df["GDP in 2009 dollars"].pct_change()
      GDP_df = GDP_df.reset_index(drop=True)
      # recession defined as two consecutive quarters of negative growth
      GDP_df["Recession"] = (GDP_df.Growth < 0) & (GDP_df.Growth.shift(-1) < 0)
      return GDP_df.iloc[GDP_df["Recession"].idxmax()]["Quarter"]
      get_recession_start()






      python python-3.x homework pandas






      share|improve this question









      New contributor




      Jeremy Hadfield is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      Jeremy Hadfield is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 12 mins ago









      200_success

      129k15153415




      129k15153415






      New contributor




      Jeremy Hadfield is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 45 mins ago









      Jeremy HadfieldJeremy Hadfield

      111




      111




      New contributor




      Jeremy Hadfield is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Jeremy Hadfield is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Jeremy Hadfield is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          1 Answer
          1






          active

          oldest

          votes


















          0












          $begingroup$


          • Running this through flake8 and pycodestyle would give you some tips, such as variable naming conventions and spacing.

          • Names like pd and GDP_df are really unhelpful. Each line should be comprehensible on its own, without having to dig backwards to figure out what a variable really is.

          • You'll want and instead of & here. & is bitwise AND.





          share









          $endgroup$













            Your Answer





            StackExchange.ifUsing("editor", function () {
            return StackExchange.using("mathjaxEditing", function () {
            StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
            StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
            });
            });
            }, "mathjax-editing");

            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "196"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });






            Jeremy Hadfield is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f213500%2ffinding-recessions-in-us-gdp-data-using-pandas%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0












            $begingroup$


            • Running this through flake8 and pycodestyle would give you some tips, such as variable naming conventions and spacing.

            • Names like pd and GDP_df are really unhelpful. Each line should be comprehensible on its own, without having to dig backwards to figure out what a variable really is.

            • You'll want and instead of & here. & is bitwise AND.





            share









            $endgroup$


















              0












              $begingroup$


              • Running this through flake8 and pycodestyle would give you some tips, such as variable naming conventions and spacing.

              • Names like pd and GDP_df are really unhelpful. Each line should be comprehensible on its own, without having to dig backwards to figure out what a variable really is.

              • You'll want and instead of & here. & is bitwise AND.





              share









              $endgroup$
















                0












                0








                0





                $begingroup$


                • Running this through flake8 and pycodestyle would give you some tips, such as variable naming conventions and spacing.

                • Names like pd and GDP_df are really unhelpful. Each line should be comprehensible on its own, without having to dig backwards to figure out what a variable really is.

                • You'll want and instead of & here. & is bitwise AND.





                share









                $endgroup$




                • Running this through flake8 and pycodestyle would give you some tips, such as variable naming conventions and spacing.

                • Names like pd and GDP_df are really unhelpful. Each line should be comprehensible on its own, without having to dig backwards to figure out what a variable really is.

                • You'll want and instead of & here. & is bitwise AND.






                share











                share


                share










                answered 8 mins ago









                l0b0l0b0

                4,3641023




                4,3641023






















                    Jeremy Hadfield is a new contributor. Be nice, and check out our Code of Conduct.










                    draft saved

                    draft discarded


















                    Jeremy Hadfield is a new contributor. Be nice, and check out our Code of Conduct.













                    Jeremy Hadfield is a new contributor. Be nice, and check out our Code of Conduct.












                    Jeremy Hadfield is a new contributor. Be nice, and check out our Code of Conduct.
















                    Thanks for contributing an answer to Code Review Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    Use MathJax to format equations. MathJax reference.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f213500%2ffinding-recessions-in-us-gdp-data-using-pandas%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    404 Error Contact Form 7 ajax form submitting

                    How to know if a Active Directory user can login interactively

                    TypeError: fit_transform() missing 1 required positional argument: 'X'