Learn how you can become a Python programmer in just 12 weeks.

    We respect your privacy. Unsubscribe at anytime.

    Plot Tweets Locations on a Leaflet Map using Python in 3 Easy Steps

    What will we cover?

    • How to plot locations of tweets on a leaflet map using Python
    • Setup your access to the Twitter API
    • How to collect location data from Twitter and tweets.
    • Finally, how to plot it on an interactive leaflet map.

    Step 1: Getting ready to collect data from Twitter

    Twitter is an amazing place to explore data as the API is easy to get access to and the data is public available to everyone. This is also the case if you want to plot Tweet Locations on a Leaflet Map using Python.

    Using Python to interact with Twitter is easy and does require a lot to get started. I prefer to use the tweepy library, which is, as they say, “an easy-to-use Python library to accessing the Twitter API”.

    Python.org

    To install the tweepy library, simply type the following in a command shell.

    pip install tweepy
    
    Tweepy.org

    The next step is to gather your key values to access the API.

    You can get them from https://developer.twitter.com/.

    If you need help to get them, I can suggest you follow this tutorial first, which will help you set everything up correctly.

    Step 2: Collect the locations from the Tweets

    Exploring the data available on a tweet, it has a coordinates and place field.

    If you read the first word then you realize.

    • Coordinates: Nullable. Represent the geographic location of this Tweet as reported by the user or client application.
    • Place: Nullable. When present, indicates that the tweet is associated (but not necessarily originating from) a Place.

    Nullable, which mean that it can be null, i.e., have no value.

    But let us see how often they are set.

    import tweepy
    def get_twitter_api():
        # personal details
        consumer_key = "___INSERT_YOUR_VALUE_HERE___"
        consumer_secret = "___INSERT_YOUR_VALUE_HERE___"
        access_token = "___INSERT_YOUR_VALUE_HERE___"
        access_token_secret = "___INSERT_YOUR_VALUE_HERE___"
        # authentication of consumer key and secret
        auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
        # authentication of access token and secret
        auth.set_access_token(access_token, access_token_secret)
        api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
        return api
    def get_twitter_location(search):
        api = get_twitter_api()
        count = 0
        for tweet in tweepy.Cursor(api.search, q=search).items(500):
            if hasattr(tweet, 'coordinates') and tweet.coordinates is not None:
                count += 1
                print("Coordinates", tweet.coordinates)
            if hasattr(tweet, 'location') and tweet.location is not None:
                count += 1
                print("Coordinates", tweet.location)
        print(count)
    get_twitter_location("#100DaysOfCode")
    

    Which resulted in 0. I would not expect this to be the case, but you never know.

    Hence, the second best thing you can use, is then the location of the user. Most users have a location given in the user object you see the following.

    User Object from developer.twitter.com.
    User Object from developer.twitter.com.

    This results in the following way to collect it. We need to check for the object being None.

    def get_tweets(search):
        api = get_twitter_api()
        location_data = []
        for tweet in tweepy.Cursor(api.search, q=search).items(500):
            if hasattr(tweet, 'user') and hasattr(tweet.user, 'screen_name') and hasattr(tweet.user, 'location'):
                if tweet.user.location:
                    location_data.append((tweet.user.screen_name, tweet.user.location))
        return location_data
    

    Here we collect all the locations of the users of the tweets and return a list of them.

    Step 3: Plot the data on an interactive map

    The folium library is amazing to plot data on an interactive leaflet map.

    To install the folium library simply type the following command in a terminal.

    pip install folium
    

    Or read more here, on how to install it.

    We also need to find the coordinates from each location. This can be done by using the library geopy. It can be installed by typing the following command in a terminal.

    pip install geopy
    

    Or read more here.

    Given that the plotting is done by the following lines of code. Please notice, I put a try-except around the geocode call, as it tends to get an timeout.

    import folium
    from geopy.exc import GeocoderTimedOut
    from geopy.geocoders import Nominatim
    
    def put_markers(map, data):
        geo_locator = Nominatim(user_agent="LearnPython")
        for (name, location) in data:
            if location:
                try:
                    location = geo_locator.geocode(location)
                except GeocoderTimedOut:
                    continue
                if location:
                    folium.Marker([location.latitude, location.longitude], popup=name).add_to(map)
    
    if __name__ == "__main__":
        map = folium.Map(location=[0, 0], zoom_start=2)
        location_data = get_tweets("#100DaysOfCode")
        put_markers(map, location_data)
        map.save("index.html")
    

    This results in the following beautiful map.

    Interactive map.
    Interactive map.

    Want to learn more Python? Also, check out my online course on Python.

    Python for Finance: Unlock Financial Freedom and Build Your Dream Life

    Discover the key to financial freedom and secure your dream life with Python for Finance!

    Say goodbye to financial anxiety and embrace a future filled with confidence and success. If you’re tired of struggling to pay bills and longing for a life of leisure, it’s time to take action.

    Imagine breaking free from that dead-end job and opening doors to endless opportunities. With Python for Finance, you can acquire the invaluable skill of financial analysis that will revolutionize your life.

    Make informed investment decisions, unlock the secrets of business financial performance, and maximize your money like never before. Gain the knowledge sought after by companies worldwide and become an indispensable asset in today’s competitive market.

    Don’t let your dreams slip away. Master Python for Finance and pave your way to a profitable and fulfilling career. Start building the future you deserve today!

    Python for Finance a 21 hours course that teaches investing with Python.

    Learn pandas, NumPy, Matplotlib for Financial Analysis & learn how to Automate Value Investing.

    “Excellent course for anyone trying to learn coding and investing.” – Lorenzo B.

    Leave a Comment