Login
Order Now
Support
Python Task on Earthquakes

Python Task on Earthquakes

  • 29th Apr, 2022
  • 15:34 PM

import turtle, datetime

# copied from my lab 5 solution:
def teleport(t, x, y):
    """ Move the turtle to (x, y), ensuring that nothing is drawn along the
        way. Postcondition: the turtle's orientation and up/down state is the
        same as before.
    """
    # save the current pen state
    pen_was_down = t.isdown()
    
    # pick up pen, move to coordinates
    t.up()
    t.goto(x, y)
    
    # restore pen state
    if pen_was_down:
        t.down()

# copied from A4, with a couple slight modifications:
def turtle_setup(canv_width, canv_height):
    """ Set up the canvas and a turtle; return a turtle object in hidden
        state. The canvas has size canv_width by canv_height, with a
        coordinate system where (0,0) is in the center, and automatic
        re-drawing of the canvas is disabled. Set the background image to
        earth.png.
    """
    # create a turtle to color pixels with
    t = turtle.Turtle()
   
    # set the screen size, coordinate system, and color mode:
    screen = t.getscreen()
    screen.setup(canv_width, canv_height)
    turtle.colormode(255) # specify how colors are set: we'll use 0-255
    
    t.hideturtle() # hide the turtle triangle
    screen.tracer(0, 0) # turn off redrawing after each movement
    
    turtle.bgpic('earth.png') # set the background image
    turtle.update()
    return t

def parse_row(line):
    """ Parse a line of the csv file, returning a dict with keys
    for latitude, longitude, timestamp, and magnitude.
    Pre: line is an unprocessed string representing a line of the file.
    Post: the returned dict has the following keys with values according
          to the data in the given line of the file:
            "latitude" -> (float)
            "longitude" -> (float)
            "timestamp" -> (str)
            "magnitude" -> (float)
    """
    # the line has all the data separated by commas, so
    # split the line into its constituent numbers
    # to make it easy to access the latitude, longitude, timestamp, and magnitude values
    data = line.split(",")
    # create a dictionary
    quake_dictionary = {}
    #Populate the dictionary with the  keys and values for latitude, longitude, timestamp, magnitude
    quake_dictionary["latitude"] = float(data[0])
    quake_dictionary["longitude"] = float(data[1])
    quake_dictionary["timestamp"] = data[2]
    quake_dictionary["magnitude"] = float(data[3])
    # return the resulting dictionary
    return quake_dictionary

def main():
    """ Main function: plot a circle on a map for each earthquake """
    # we'll scale coordinates and canvas to be 720x360, double
    # the size of the range of lat/lon coordinates
    scale = 2.0
    
    # call turtle_setup to set up the canvas and get a turtle
    t = turtle_setup(scale * 360, scale * 180)
    
    # open earthquakes.csv for reading
    eq_file = open('earthquakes.csv', 'r')
     
    # make a list to store the earthquate dictionaries
    dicts = []
    # parse each line of the file using parse_row and add each returned
    # dictionary into the list (skip the headers on the first line!)
    for line in eq_file.readlines()[1:]:
        dicts.append(parse_row(line))
    # for each earthquake dictionary in the list:
    for dict in dicts:
        # if the magnitude is larger than 1.0:
        magnitude = dict['magnitude']
        if magnitude > 1.0:
            # draw a circle with radius equal to the magnitude
            # at (longitude * scale, latitude * scale).
            teleport(t, dict['longitude'] * scale, dict['latitude'] * scale)

            # (optional) color the circle by magnitude
            r = int((magnitude - 1) * 255 / 8)
            g = int((9 - magnitude) * 255 / 8)
            b = int((9 - magnitude) * 255 / 8)

            # (challenge) by date.
            # Looking at the data, you may notice that the
            # earthquakes in our dataset all happened in 2016.
            """
            dateStart = datetime.datetime(2016, 7, 1)
            date = datetime.datetime.strptime(dict['timestamp'], '%Y-%m-%d %H:%M:%S')
            delta = date - dateStart
            days = delta.days
            totalDays = 62
            r = int(days * 255 / totalDays)
            g = int((totalDays - days) * 255 / totalDays)
            b = int((totalDays - days) * 255 / totalDays)
            """

            t.pen(pencolor=(r, g, b), pensize=1)
            t.circle(magnitude)

    # update the screen so all the circles are drawn on the canvas
    turtle.update()
    input('Press a key')  # There must be a better way

if __name__ == "__main__":
    main()

Share this post

assignment helpassignment helperassignment expertsassignment writing services