def from_json(cls, data):
        """Create an analysis period from a dictionary.
        Args:
            data: {
            st_month: An integer between 1-12 for starting month (default = 1)
            st_day: An integer between 1-31 for starting day (default = 1).
                    Note that some months are shorter than 31 days.
            st_hour: An integer between 0-23 for starting hour (default = 0)
            end_month: An integer between 1-12 for ending month (default = 12)
            end_day: An integer between 1-31 for ending day (default = 31)
                    Note that some months are shorter than 31 days.
            end_hour: An integer between 0-23 for ending hour (default = 23)
            timestep: An integer number from 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60
            }
        """
        keys = ('st_month', 'st_day', 'st_hour', 'end_month',
                'end_day', 'end_hour', 'timestep', 'is_leap_year')
        for key in keys:
            if key not in data:
                data[key] = None

        return cls(
            data['st_month'], data['st_day'], data['st_hour'], data['end_month'],
            data['end_day'], data['end_hour'], data['timestep'],
            data['is_leap_year'])