Author: Antonio de Jesus Anaya Hernandez, DevOps eng. for the IoPA.
Author: The internet of Production Alliance, 2023.
Data was collected by "Fab Foundation", location: https://fablabs.io/
The Open Know Where (OKW) Standard is part of the Internet of Production Alliance and its members.
License: CC BY SA
import pandas as pd
from IPython.display import display, HTML
output_filename = 'machines_march'
machines = pd.read_excel(output_filename + '.xlsx')
machines = machines.drop(columns=['Column1'])
machines['name'] = machines['name'].str.lower()
machines['brand'] = machines['brand'].str.lower()
machines.groupby('class_1').sum(numeric_only=True).sort_values('machine_count').plot(kind='barh', rot=0, width=0.2, figsize=(15,12))
<AxesSubplot:ylabel='class_1'>
# machines.sort_values('machine_count').set_index('name').groupby('class_1', sort=False).plot(kind='barh', rot=0, width=0.5, figsize=(15,15))
machines.sort_values('machine_count').groupby('class_1', sort=True).boxplot(column='machine_count', figsize=(25,5), subplots=False)
<AxesSubplot:>
display(HTML(machines.head(20).to_html(notebook=True)))
name | brand | labs | tags | machine_count | tagged | classified | class_1 | edited | |
---|---|---|---|---|---|---|---|---|---|
0 | ultimaker 2 | ultimaker | ['thebeachlab', 'fablabiedmadrid', 'larefabriq... | ['facens'] | 69 | True | True | three_d_printer | True |
1 | kinect v1 | microsoft | ['fablabbcn', 'fablabnapoli', 'defaralsalabo',... | ['3d_scanning'] | 66 | True | True | scanner | True |
2 | prusa i3 | reprap | ['fablabiedmadrid', 'fablabmalaga', 'fablabegy... | [] | 62 | False | True | three_d_printer | False |
3 | gx-24 | roland | ['fablabbcn', 'thebeachlab', 'fablabdhahran', ... | ['vinyl_cutting'] | 56 | True | True | vinyl_cutting | False |
4 | shopbot gantry | shopbot tools, inc | ['fablabuni', 'fablabtrivandrum', 'fablabcochi... | [] | 52 | False | True | cnc_milling | False |
5 | sense 3d scanner | 3d systems, inc | ['fablabatyrau', 'musefablab', 'fablabjordan',... | ['3d_scanner'] | 47 | True | True | scanner | True |
6 | mdx-40a | roland | ['fablabbassano', 'fablabxtreneold', 'atolye',... | ['precision_milling'] | 46 | True | True | precision_milling | False |
7 | srm-20 monofab | roland | ['fablabiedmadrid', 'fablabjordan', 'riidl', '... | ['precision_milling'] | 46 | True | True | precision_milling | False |
8 | ultimaker 2+ | ultimaker | ['fablabatyrau', 'FabLabRwanda', 'FabLabAntwer... | ['3d_printing'] | 45 | True | True | three_d_printer | False |
9 | ultimaker 3 | ultimaker | ['fablabjordan', 'FabLabAntwerpen', 'berytechf... | [] | 36 | False | True | three_d_printer | False |
10 | cameo® | silhouette | ['navlab', 'fabxperiencecafe', 'minifablabutre... | ['vinyl_cutting'] | 36 | True | True | vinyl_cutting | False |
11 | mdx-20 | roland | ['fablabbcn', 'thebeachlab', 'fablabdhahran', ... | ['precision_milling'] | 35 | True | True | precision_milling | False |
12 | cnc milling machine | cnc | ['tinkerinq', 'IACTFabLab', 'fablabmvd', 'fabl... | ['cnc_milling_machine'] | 35 | True | True | cnc_milling | False |
13 | form2 | formlabs | ['fablabsion', 'fablabtehran', 'riidl', 'fabla... | ['sla', '3dprinter', 'formlabs'] | 33 | True | True | three_d_printer | False |
14 | camm-1 gs-24 | roland | ['fablabiedmadrid', 'fablabjordan', 'Fablabcas... | ['plotter', 'vinyl', 'cutter'] | 32 | True | True | vinyl_cutting | False |
15 | makerbot z18 | makerbot industries | ['musefablab', 'fablabzurich', 'minifablabutre... | [] | 30 | False | True | three_d_printer | False |
16 | prusa mendel 1 | reprap | ['izolab', 'aachen', 'fablabmaastricht', 'defa... | ['3d_printing'] | 27 | True | True | three_d_printer | False |
17 | cnc routing | homemade cnc router | ['fablabbergamo', 'fablabzoi', 'FabLabBEN', 'z... | [] | 25 | False | True | cnc_milling | False |
18 | ender-3 | creality | ['sedicupct', 'fablabulcicam', 'stem4allmakers... | ['3d_printer'] | 25 | True | True | three_d_printer | False |
19 | ultimaker 3 extended | ultimaker | ['berytechfablab', 'fablabupsaclay', 'fablabli... | ['ultimaker_3'] | 22 | True | True | three_d_printer | True |
locations = pd.read_json('https://api.fablabs.io/0/labs.json')
locations = locations.drop(columns=['id', 'kind_name', 'parent_id', 'blurb', 'description', 'avatar_url', 'header_url', 'capabilities', 'activity_status', 'links', 'address_notes', 'email', 'phone', 'address_1', 'address_2', 'postal_code'])
locations.rename(columns = {'name':'lab'}, inplace = True)
locations.head(20)
lab | slug | city | county | country_code | latitude | longitude | |
---|---|---|---|---|---|---|---|
0 | PiNG | ping | Nantes | Pays de la Loire | FR | 47.218371 | -1.553621 |
1 | Al Jazri Lab | aljazrilab | Sharjah | AE | NaN | NaN | |
2 | FabLab INSA Strasbourg | fablabinsastrasbourg | Strasbourg | Alsace | FR | 48.583148 | 7.747882 |
3 | FabLab Zagreb | fablabhr | Zagreb | Zagreb | HR | 45.812096 | 15.965438 |
4 | Exchange | Exchange | La Porte | IN | US | NaN | NaN |
5 | Fab Lab Irbid | fablabirbid | Irbid | Jordan | JO | 32.488820 | 35.976346 |
6 | Fab Lab Lleida | fablablleida | Lérida | Lleida | ES | 41.623023 | 0.625864 |
7 | FABLAB KERALA - Trivandrum | fablabtrivandrum | Trivandrum | KERALA | IN | 8.557167 | 76.880297 |
8 | Fab Lab Afghanistan | fablabafghanistan | Jalalabad | Nangarhar | AF | 34.434469 | 70.448505 |
9 | Drone Lab Brasil | dronelabbrasil | São Paulo | São Paulo | BR | -23.542017 | -46.635780 |
10 | Fab Lab Carnegie Science Center | fablabcarnegiesciencecenter | Pittsburgh | Pennsylvania | US | 40.446191 | -80.018821 |
11 | Fab Lab Casa Firjan | fablabcasafirjan | Rio de Janeiro | Rio de Janeiro | BR | -22.949991 | -43.188624 |
12 | FAB LAB HONG KONG, CMASS iSPACE | cmassispace | Hong Kong | HK | NaN | NaN | |
13 | Ongola Fablab | ongolafablab | Yaoundé | CENTRE | CM | 3.857760 | 11.507091 |
14 | Fab Lab IDEX Huando | IDEXHuando | Huaral | Lima | PE | NaN | NaN |
15 | Le Nautilus / MicroFolie | lenautilus | Boulogne-sur-Mer | FR | NaN | NaN | |
16 | Yansokilab | yansokilab | Douala | littoral | CM | NaN | NaN |
17 | Fab Lab Strandir | FabLabStrandir | Hólmavík | Strandabyggð | IS | NaN | NaN |
18 | FabLab du Dôme à Caen | fablabcaen | Caen | Normandie | FR | 49.181016 | -0.347539 |
19 | Trinity-Area High School Fab Lab | trinityareahighschoolfablab | Washington | Pennsylvania | US | 40.164412 | -80.248434 |
# for index, loc in locations.iterrows():
# print(loc['slug'])
machines['labs'] = machines.labs.apply(lambda x: x.strip('][').split(', '))
machines.shape
(440, 9)
machines = machines.explode('labs')
machines.rename(columns = {'labs':'slug'}, inplace = True)
machines['slug'] = machines['slug'].apply(lambda x: x.replace("'", ""))
display(HTML(machines.head(20).to_html(notebook=True)))
name | brand | slug | tags | machine_count | tagged | classified | class_1 | edited | |
---|---|---|---|---|---|---|---|---|---|
0 | ultimaker 2 | ultimaker | thebeachlab | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabiedmadrid | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | larefabrique | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabuni | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabtrivandrum | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabcochin | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabkamplintfort | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabjordan | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | atolye | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabzoi | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | isvor | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabrichmondcalifornia | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabfacens | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabvilnius | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | zbis | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | labaixbidouille | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabmons | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | lesfabriquesduponant | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabdu127degres | ['facens'] | 69 | True | True | three_d_printer | True |
0 | ultimaker 2 | ultimaker | fablabmadatech | ['facens'] | 69 | True | True | three_d_printer | True |
geo_machines = pd.merge(machines, locations, on='slug')
geo_machines.shape
(2248, 15)
geo_machines = geo_machines.drop(columns=['machine_count', 'tags', 'edited', 'classified', 'tagged'])
display(HTML(geo_machines.head(20).to_html(notebook=True)))
name | brand | slug | class_1 | lab | city | county | country_code | latitude | longitude | |
---|---|---|---|---|---|---|---|---|---|---|
0 | ultimaker 2 | ultimaker | thebeachlab | three_d_printer | The Beach Lab x Europe | Sitges | Barcelona | ES | 41.256795 | 1.857121 |
1 | kinect v1 | microsoft | thebeachlab | scanner | The Beach Lab x Europe | Sitges | Barcelona | ES | 41.256795 | 1.857121 |
2 | gx-24 | roland | thebeachlab | vinyl_cutting | The Beach Lab x Europe | Sitges | Barcelona | ES | 41.256795 | 1.857121 |
3 | mdx-20 | roland | thebeachlab | precision_milling | The Beach Lab x Europe | Sitges | Barcelona | ES | 41.256795 | 1.857121 |
4 | imodela | roland | thebeachlab | precision_milling | The Beach Lab x Europe | Sitges | Barcelona | ES | 41.256795 | 1.857121 |
5 | othermill | other machine co | thebeachlab | precision_milling | The Beach Lab x Europe | Sitges | Barcelona | ES | 41.256795 | 1.857121 |
6 | 5th gen 40w/45w laser | full spectrum laser | thebeachlab | laser | The Beach Lab x Europe | Sitges | Barcelona | ES | 41.256795 | 1.857121 |
7 | fireball v90 | probotix | thebeachlab | cnc_milling | The Beach Lab x Europe | Sitges | Barcelona | ES | 41.256795 | 1.857121 |
8 | ultimaker 2 | ultimaker | fablabiedmadrid | three_d_printer | Fab Lab IED Madrid | Madrid | ES | 40.390583 | -3.729061 | |
9 | prusa i3 | reprap | fablabiedmadrid | three_d_printer | Fab Lab IED Madrid | Madrid | ES | 40.390583 | -3.729061 | |
10 | srm-20 monofab | roland | fablabiedmadrid | precision_milling | Fab Lab IED Madrid | Madrid | ES | 40.390583 | -3.729061 | |
11 | camm-1 gs-24 | roland | fablabiedmadrid | vinyl_cutting | Fab Lab IED Madrid | Madrid | ES | 40.390583 | -3.729061 | |
12 | speedy 100 | trotec | fablabiedmadrid | laser | Fab Lab IED Madrid | Madrid | ES | 40.390583 | -3.729061 | |
13 | form 1+ | formlabs | fablabiedmadrid | three_d_printer | Fab Lab IED Madrid | Madrid | ES | 40.390583 | -3.729061 | |
14 | tec cam 1000 | perez camps | fablabiedmadrid | cnc_milling | Fab Lab IED Madrid | Madrid | ES | 40.390583 | -3.729061 | |
15 | deltawasp 3mt | wasp | fablabiedmadrid | three_d_printer | Fab Lab IED Madrid | Madrid | ES | 40.390583 | -3.729061 | |
16 | ultimaker 2 | ultimaker | larefabrique | three_d_printer | la refabrique | Cannes | Provence-Alpes-Cote d'Azur | FR | 43.570960 | 6.960609 |
17 | ultimaker 2 | ultimaker | fablabuni | three_d_printer | Fab Lab UNI | Lima | Lima | PE | -12.020751 | -77.051119 |
18 | shopbot gantry | shopbot tools, inc | fablabuni | cnc_milling | Fab Lab UNI | Lima | Lima | PE | -12.020751 | -77.051119 |
19 | mdx-20 | roland | fablabuni | precision_milling | Fab Lab UNI | Lima | Lima | PE | -12.020751 | -77.051119 |
geo_machines.to_csv("geomachines.csv")