The Path to Learning Python
Anytime someone new to geospatial asks the greater GIS community what the best skill they can learn to increase their value is, the answer is the same- Python. Highly praised as flexible and easy to learn, Python is an excellent choice for those looking to bolster their resume. Of course, just because a group of computer scientists say Python is easy to learn, does not mean that the process is necessarily intuitive to those learning it as their first programming language. Everyone has their preferred style of learning. There are a huge variety of books, tutorials, and full-on web courses designed to teach Python to beginners, many of these resources are even free. Regardless of which medium you choose, it is important to start from the beginning, and dedicate some time to really understanding the fundamentals of Python. Internalizing explicit explanations of what is a variable, what is a function, what is an object, etc… lays the groundwork for the more complex concepts ahead, such as defining methods, loops, and arrays. Once you are comfortable with your knowledge of the basics, it’s time to start coding. The most important part of your Python journey is to stay excited about what’s next. Find a problem that you find super interesting, and then find as many ways as possible to solve it using Python. The motivation to answer your original question will be essential when it is time to power through the inevitable knowledge gaps and challenges you will encounter in your projects, and when solving real world problems.What is PythonMaps?
PythonMaps began as COVID lockdown project, where Dr. Symington was experimenting with creating Python-driven geo visualizations to further his own skills. As time went on, and he developed more expertise, and consequently higher and higher quality maps, he went public. Now you can find his work on Twitter, LinkedIn, and Reddit. PythonMaps is the perfect example of why it is valuable to learn Python through personal projects. When there is genuine interest driving a project, it is much easier to find the motivation to learn new technologies and skills to support it. Although Python offers thousands of libraries, only four are really used for most PythonMaps projects. These are matplotlib, geopandas, rasterio, and rioxarray. Matplotlib and geopandas are classic data visualization libraries. Matplotlib’s focus is more on traditional datasets, but it does have a number of mapping functions. You can also check out the Matplotlib Basemap Toolkit API to add additional functionality and context to your creation. Geopandas is a geospatial expansion on the highly popular pandas data science library. It provides functionality to read and write geospatial data into dataframes, as well as a slew of great options for geospatial data analysis, summation, and visualization. Where the above options are generally geared towards vector data, fear not, there are programmatic options for working with raster data in Python as well. Two useful libraries are rasterio, and rioxarray. Both of these libraries allow the reading and writing of a variety of popular raster formats, rioxarray has the added benefit of explicitly supporting cloud optimized geotiffs (COGs). These libraries can also provide core functionalities like reprojecting, resampling, and masking rasters. There are many more data vizualization libraries available, but it is worth keeping in mind that for beginners, the most popular libraries will be the easiest to work with. This is due to the larger knowledge bank of documentation, and existing troubleshooting conversations on platforms like StackExchange. Having a mission in mind and playing around with these libraries is a great way to get started on producing your own content, but if you need some specific ideas, or a bit more help, Dr.Symington has a number of tutorials here.What Are the Benefits of Mapping with Python?
In today’s information age, the power of a strong social media presence cannot be underestimated. This does not mean you need to be producing daily, or even weekly content, but it does mean that you should be investing some conscious time and effort into what does go public. Curating a professional online presence pays its own dividends, but even if you don’t get famous, your time will be far from wasted. If your goal is fame, great. As you spend some time building up your Python and cartography skills, start thinking about how you want to present your creations, and yourself. Do you want to create a brand, like MapScaping, or would you rather take the personal route and present yourself as your brand, like Joe Morrison? Building a brand allows you to distance yourself from criticism, and grow the project beyond what you alone can accomplish. On the other hand, making your brand personal may make it easier to attract a following. It also has the potential to amplify the successes, and failures, that you encounter as there is no buffer between you, your work, and the criticisms of the internet. The internet is infamous for harsh criticisms. Behind the safety of a screen, people are more willing to share their unfiltered opinions, but this is not always a bad thing. If you stay open-minded (and have a thick skin), those criticisms can be read as feedback. Paying attention to negative comments that have some substance to them can show you where you still need to improve, in the same way that praise can tell you what you are doing right. If your objective is not fame, then what does the return on investment look like here? Well, as many say, it is about the journey, not the destination. Learning Python and improving your cartography skills can do great things for your career and portfolio. It shows that you can succeed at self-directed learning, and can create value as an independent worker. Being able to communicate effectively is one of the most valuable skill sets in data science, and maps are a classic tool for visual communication. Remember to focus your projects on topics you enjoy, and no matter the outcome, it will never be time wasted.In Conversation
From Chemistry PhD to Tracking Ships
Daniel: Adam, welcome to the podcast. Can you introduce yourself and tell us how you got from a PhD in computational chemistry to working as a lead data scientist with geospatial data?
Adam: I’m Adam, lead data scientist at a UK tech company called Geollect. I did a PhD in chemistry at the University of Bath, then spent a couple of years as a postdoc in chemistry and physics. I decided academia wasn’t for me. Like any maths-heavy PhD graduate, I went into data science. This was the end of the first lockdown — jobs were scarce. I applied for a few in insurance and banking, didn’t get anything. Then a job opportunity came up at Geollect, a geospatial intelligence company. I had no idea what they did, but it sounded interesting. I applied, didn’t get it the first time, but they came back to me a few weeks later for another position and I got it on the second go.
Adam: What we do is use AIS data to track ships around the world — at any one time there are 300,000–400,000 ships transiting the world: oil tankers, container ships, fishing vessels. They constantly broadcast their positions. That data is collected and made available to whoever can pay for it, and we use it to gain insights into the shipping industry. I was thrown in the deep end — “here are a number of illegal activities shipping operators engage in; can you use this data to identify when an oil tanker in the Persian Gulf has taken on cargo it shouldn’t have, or when a fishing vessel is fishing in an area where it shouldn’t be?” From simulating chemical reactions to tracking down illegal oil shipments in the space of about two weeks. Pretty intense.
Adapting from Atoms to Lat/Longs
Daniel: What was the hardest part of the geospatial side?
Adam: Having zero experience. In my PhD I ran simulations of how atoms move around in materials — particularly batteries, where lithium moves between anode and cathode. At the end of the day all that’s happening is XY coordinates in a file being updated as the simulation progresses. What I’m doing now is looking at how lat/longs change over time. The mathematics and principles are the same — it’s the problem that’s different. What I found hardest was understanding the problem. Two ships can meet at sea — one is a sanctioned oil tanker that throws a hose over the side to offload its cargo to another ship, which then sails off and sells the oil as legitimate. Understanding when that’s illegal versus a legitimate operation is hard because you need context.
Learning Python by Solving Real Problems
Daniel: Did you already know Python before this job?
Adam: Yes — everything I did in my previous job and PhD was Python. The simulations were old bulky Fortran and C code, but the output was huge text files that needed parsing. There were existing tools, but Python is really nice because you can parse a huge dataset, analyse it, and produce a really eye-catching visualisation all in one script. I took the hit and spent evenings for six months learning Python in the first year of my PhD, then applied it to every problem. By the end I was publishing my own analysis packages on GitHub and pip, and even in open source software journals.
Daniel: Books, tutorials, mentors — what worked for you?
Adam: I tried to read a book at the start and that gives you the basic pointers — what a function is, what a variable is. Everyone needs to do that. But after that I needed real problems. I’m bad at dedicating time to pre-made tutorial problems — I don’t want to write a machine learning model that predicts the size of a butterfly’s wings. I had loads of problems in my PhD that needed solving, so I wrote Python to solve them. The advice I give everyone: find a problem that really interests you and use that as your way of writing code. It’s so much easier to learn on the job. That’s exactly how I built the skills I’m using today — making beautiful data visualisations of geospatial data was how I learned everything.
Daniel: How much room is there at Geollect to learn on the job?
Adam: Geollect is fantastic for that. As a startup competing with bigger companies, you have to invest in your staff to get the best out of them. We have four data scientists — three with PhDs in different academic fields, one with a master’s in data science — so we approach problems from different points of view, which leads to interesting solutions. Giving staff freedom to upskill only benefits the business long-term, because when that one-in-a-million problem comes along, you have the team to solve it.
What Python Maps Is
Daniel: What is Python Maps?
Adam: It started as my lockdown boredom project. I have a Twitter account called Python Maps where I post what I think are interesting and beautiful data visualisations of geospatial data. My favourite example is using AIS data to generate a shipping lanes map — if you take billions of location broadcasts and build a histogram, you get a really beautiful image of the world’s shipping lanes. You don’t even need to overlay a map of the world; the coastlines spring out from the data. It summarises a huge data source into one image.
The Toolbox: matplotlib, GeoPandas, rasterio
Daniel: What libraries do you use?
Adam: Originally just GeoPandas and matplotlib. Matplotlib is the reason I started learning Python — in my research group everyone used Excel for plots, which you can do but it takes you years. Matplotlib generates nice plots quickly and integrates with your analysis script. As I got more competent with rasters I added rasterio and rioxarray. Add Shapely and that’s pretty much it. I keep it simple — the more commonly used the library, the more information there is online, and the easier it is to debug.
Daniel: You mentioned billions of points. What environment do you run on?
Adam: Just my laptop — definitely not the correct way. At work we run everything on AWS because it’s a commercial environment with strict load times. But for personal visualisations I’m not bothered about how long something takes — I set it running and go for a run or make dinner. The AIS one was probably the worst for sheer data volume. There’s also a dataset called HydroSHEDS — every river that exists on Earth, derived from topography. There are billions of line strings in it. My laptop crashed the first time. You learn to filter cleverly — the data has metadata for discharge, width, depth, so you can filter out non-existent rivers and bring the dataset down to a manageable size. You can get away with a lot more on a standard laptop than you’d realise.
Why Publish Maps (and Why the Brand Name)
Daniel: What do you get out of publishing on Twitter and Reddit?
Adam: Honestly, I enjoy the attention — thousands of likes on Reddit feels good. But more importantly: feedback. When I look back at the maps I made at the beginning, they’re nowhere near as good as the ones I’m making now. Posting opens you up to thousands of opinions — some negative, but those are useful because you get a sense for what you’re doing wrong. My data visualisation skills at my day job have improved immensely because of the feedback loop from my hobby.
Daniel: Why “Python Maps” instead of your own name?
Adam: Honestly, a bit of fear at first. Putting yourself out there opens you up to criticism — I thought it might be embarrassing. After lots of positive feedback I rolled back on that. I’m glad I did it as Python Maps though — it’s a cool brand, removes my personality from it, and lets it exist as a standalone learning piece. People can read the writing and be inspired by the visualisations.
Daniel: I did the same with Mapscaping — having that buffer at the start made me braver. Now I’d probably attach my name to it if I could.
Adam: I agree on the long-term benefit. But the buffer point is right — having something between you and the work you’re doing helps at the start. And honestly, who cares? If people don’t like it, they don’t like it. Do something you enjoy.
The Return on Investment
Daniel: Have other opportunities come out of Python Maps?
Adam: The learning outcome is huge — hard to put a monetary value on, but significant. I don’t think I’d be a lead data scientist as opposed to just a normal data scientist if I hadn’t focused this much time on it. I could have done tutorials instead, but I just wouldn’t have. Beyond skills, other things have come up — I get requests to sell prints, freelance data visualisation work, even a DM from the CEO of a billion-dollar company about potential collaboration. As followers grow, requests grow. I haven’t seen monetary value yet but who knows. I wouldn’t worry about planning where the ROI comes from — it’s been more of a journey than a goal.
Communication, Career, and What to Learn Next
Daniel: Would you put Python Maps on a CV?
Adam: Yes — communication is key. In data science, regardless of what anyone says, communication is the most important skill. You can be the best data scientist in the world, but if you can’t communicate your ideas to the decision makers, you’re not effective. A picture paints a thousand words. We’ve been doing a lot of work on the Black Sea recently — trying to understand how the war in Ukraine has changed shipping patterns. Instead of port statistics, we took all the AIS data, made a shipping lanes map over time, and turned it into a GIF. You see the volume decrease to almost nothing. Millions of data points condensed into a single GIF that everyone instantly understands, with all the context applied. That’s a skill that’s not easy to develop but really important.
Daniel: If you had to learn another language today, which would it be?
Adam: Probably a low-level language like C. Python is high-level and very readable but quite slow because there’s a lot happening in the background — memory allocation, array definitions. R and Julia I’ve learned and they’re similar to Python so it wasn’t hard. C would be properly different — you’d have to learn to predefine variables, manage memory, optimise from a computer science perspective. The flip side: JavaScript, because I love data visualisation and I’d love to build a really cool front-end application for Python Maps. I’ve tried but I’m not skilled enough yet.
Daniel: Where can people find you?
Adam: Python Maps on Twitter (one word), or Adam Symington on LinkedIn. I respond to DMs — I genuinely enjoy answering Python queries.



