Ask HN: Simple, beginner friendly ETL / Data Engineering project ideas?
Hi HN,
I'm a seasoned Python software developer. Recently I have found a new obsession with data processing, management, engineering etc ... I'd like to (eventually) branch off into that field but I find the lack of beginner friendly resources is slowing me down. All I can find is spark, hadoop related articles (I know these are prominent in the field, but I want to learn to walk before I run). So If any of you have pointers, websites, project ideas I can start to get a good grasp of all the fundamental concepts, I'd really appreciate it.
Thanks a lot in advance
77 comments
[ 3.0 ms ] story [ 156 ms ] thread[0] https://github.com/spotify/luigi
[1] https://github.com/apache/incubator-airflow
The project is just a demonstrator for the Mara framework but it gives a good overview and you could take it as a starter for something you want to build.
But since you are asking for a project, why not do something local. I.e. you could scrape some data for some time (cinemas, crime) and structure it nicely. After a few months you can start analysis. Bonus points if you make you data available.
https://www.amazon.com/gp/product/1118530802/
I learned from the second edition, but I've heard even better things about the third. As you're working through it, create a project with real data and from-scratch re-implement a data warehouse as you go. It doesn't really matter what you tackle, but I personally like ETLing either data gather from web crawling a single site[0] or push in a weekly gathered wikipedia dump. You'll learn many of the foundational reasons for all the tools the industry uses, which will make it very easy for you to get up to speed on them and to make the right choices about when to introduce them. I personally tend to favour tools that have an API or CLI so I can coordinate tasks without needing to click around, but many others like a giant GUI so they can see data flows graphically. Most good tools have at least some measure of both.
[0] Use something like Scrapy for python (or Mechanize for ruby) with CSS selectors and use the extension Inspector Gadget to quickly generate CSS selectors.
Some of the recent popular toolkits / services aren't "real" ETL -- they simply move data from one place to another. This is obviously a crucial part of ETL, but it's not the hard part. And without an understanding of data warehousing such as from this book, it will not be easy to discern the difference.
(This is based on many conversations with people on both sides of the table.)
I also second the other comment that recommends starting with basic data extraction rather than diving into Hadoop or Spark immediately. Sure, at some point, you might need to process 100 billion lines of data. But in your average business, you're far more likely to be working with thousands or millions of records on customers, sales, orders, invoices, sales leads, etc. That stuff doesn't need Hadoop/Spark, it needs a Postgres database and a DBA with a good head on their shoulders keeping everything organized.
In my experience, government data sets (particularly demographics and other geographically-related data sets) are a fantastic way to get your feet wet with data processing. They're published by a bunch of different agencies, so they're not necessarily conveniently available in one place. However, they usually use standardized identifiers for geographies, which makes it easy to join the data sets together in new and interesting ways.
For instance, here at Republic, we recently used Form 477 data on wireless broadband availability from the FCC, data from Summary File 1 of the US Census, and a couple of Census geographic crosswalk files to be able to calculate the percentage of population in given zip codes and cities covered by various wireless carriers. That required reading the docs for several different data sources, automating some downloads, building database tables to hold all of the information, and then carefully crafting some SQL to pull it all together.
Of course, government data sets generally won't require a whole lot of automation (they're updated yearly or less than yearly, not daily). To build your skills on that front, I'd recommend learning to extract data from various APIs, structure it in a meaningful way, and make it available in a database. For example, if you have a website, set up a free Google Analytics account for it, then build a daily ETL that extracts some meaningful information from the Google Analytics API and stuffs it in a Postgres DB. Then see if you can build some charts or something that sit on top of that database and report on the information.
https://github.com/rtidatascience/data-scientist-exercise02
We currently use it to build a moderately complex product from dozens of data streams (files, APIs and things in-between) and millions of records. At its core is a DAG and topological sort, which capture the essence of pipelines and execution.
A DAG is easy to visualize, even its development over time[1].
[1] https://imgur.com/a/RuC0B5Y (generated from the projects' code, in this case https://github.com/miku/siskin)
Once you have the data, then figure what you're going to do with it. (Don't agonize over it, this should all take just a day or so.)
Then go after the toolkit. You'll find many interesting questions if you start with the end goal in mind.
Good luck, and have fun!
If you're building a house you don't start by picking out hammers and saws.
This takes being passionate about your data and its pre and postprocessing as a data engineer.
I could scrape pages, but don't really feel that is the best way to go about it.
https://gtoonstra.github.io/etl-with-airflow/index.html
https://github.com/gtoonstra/etl-with-airflow
Also if you are looking to stay in the Python world, PySpark is pretty intuitive for any Python developer and tons of companies are using it.
My email and keybase.io is in my profile so feel free to get in touch.
2) Get to know some of the basic Python data processing/science packages like pandas, numpy, scipy etc.
3) Get used to writing short shell scripts - they probably won't be a part of your pipeline, but data engineering, especially development, involves a lot of data prep that coreutils will help you with. Throw in a bit of jq and you'll handle a lot of prep work.
4) Only once you've gotten used to the above, look at Dask, PySpark, Airflow etc. It really depends on your use cases, but chances are you won't have to touch these technologies at all.
Bottom line - wait with the heavyweight tools, they might be needlessly powerful. Also, work closely with DevOps, because the deployment side of things will help you understand consequences of your actions.
0) Spend time finding data sets that actually interest you.
If you're working with data that you're actually excited about, the questions will flow naturally. And when the questions flow naturally, there's an obvious path to picking up new techniques as you need them.
In full disclosure: I'm co-founder of Superconductive Health, our team co-created great-expectations and co-authored the above blog post.
I'd add a possible 5) of Jupyter notebooks (or some dashboard framework) + some visualization library for learning to juice actionable analyses from whatever data
if you want to practice data-manipulation, and a lot of the map reduce type stuff you can do with spark, I find Pandas useful for small datasets (And a lot of overlap in functionality as far as Dataframes are concerned)
For pipeline stuff, definitely take a look at Luigi, but again without a cluster it'll be less fun. Still, if you can try automating tasks with a mini luigi scheduler on your localhost, it would be good practice
A good beginner project is to build an adapter to a new data source (known as a "tap" in Singer). Most taps pull data out of business tools like Salesforce or Marketo, but people also build them to pull characters from the Marvel API (https://www.stitchdata.com/blog/tapping-marvel-api/)
Check out the getting started guide (https://github.com/singer-io/getting-started), or jump into the Singer Slack and ask for help (linked from the guide)
Also keep an eye on Gitlab's new Meltano [1] project which IMHO has huge potential.
[0] https://www.getdbt.com/
[1] https://gitlab.com/meltano/meltano/tree/master
Edit: of course this comment (like many others below) pertains to tooling vs a particular project per se. FWIW I agree w/ others' sentiment about doing things "by hand" and working with data that holds your interest.
I noticed you were in the Europe area. We are looking for developers with interest in going into the field.
We produce a data pipeling/analytics platform for complex data to our customers.
If you would like to know more about our company! Position is in Stockholm. https://gist.github.com/eleijonmarck/1b384480aaa3d22ab7e6ea0...
To mimic the real world try to have extraction from variety of data sources (rdbms, NoSQL, files (different formats csv/json), APIs (salesforce)). Once you have different sources, extract the data to your datalake built on S3/GCS/HDFS. Once the data is present you need to integrate with tools which can extract value. You can use Vendor specific tools like Athena/BigQuery or open source like Presto/Impala/Hive. You can do analytics where you require filtering, cleansing, joining various datasets. You can also look at storing the results in different formats so that other tools like Tableau can use them. To orchestrate all of this you can use Azkaban or Airflow.
My suggestion is slightly biased towards Hadoop ecosystem but the good thing is that most tools here have Open source alternatives.
What companies in these industries are interested in reducing their costs for this work?
"costs" as used above includes time expenditures as well as spending money
http://web.archive.org/web/19991023120316/http://www.dbmsmag...
https://assemblinganalytics.com/post/airbnbapache-superset-a...