Q002 - Qual è la tipologia del laboratorio?


In [1]:
# -*- coding: UTF-8 -*-

# Render our plots inline
%matplotlib inline 

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import seaborn
import shutil

pd.set_option('display.mpl_style', 'default') # Make the graphs a bit prettier, overridden by seaborn
pd.set_option('display.max_columns', None) # Display all the columns
plt.rcParams['font.family'] = 'sans-serif' # Sans Serif fonts for all the graphs

# Reference for color palettes: http://web.stanford.edu/~mwaskom/software/seaborn/tutorial/color_palettes.html

# Change the font
matplotlib.rcParams.update({'font.family': 'Source Sans Pro'})

In [2]:
# Load csv file first
data = pd.read_csv("data/lab-survey.csv", encoding="utf-8")

In [3]:
# Check data
#data[0:4] # Equals to data.head()

In [4]:
# Range: D2[SQ001] - D2[SQ011] - D2[other]

lab_columns = ['D2[SQ001]','D2[SQ002]','D2[SQ003]','D2[SQ004]','D2[SQ005]','D2[SQ006]','D2[SQ007]','D2[SQ008]',
               'D2[SQ009]','D2[SQ010]','D2[SQ011]']
lab_options = ['Studio di progettazione',
               'Studio di realizzazione prototipi',
               'Laboratorio universitario',
               'Fab Lab',
               'Makerspace',
               'Hackerspace',
               u'Repair Café',
               'Coworking',
               'DIYBio Lab',
               'Linux User Group',
               'Arduino User Group']
lab = data[lab_columns]
lab.replace(u'Sì', 'Si', inplace=True) # Get rid of accented characters 
lab_other = data['D2[other]'].str.lower().value_counts()


-c:17: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

In [5]:
#places[0:4]

Combinations...


In [6]:
# Create all the possible combinations from the main options
# See http://stackoverflow.com/questions/17176887/python-get-all-permutation-of-a-list-w-o-repetitions

import itertools 

all_combinations = {}
all_combinations_columns = []

for i in range(1, len(lab_columns)+1):
    comb = list(itertools.combinations(lab_columns, i))
    for k in comb:
        # Each combination
        all_combinations[k] = {}
        all_combinations[k]["col_list"] = list(k)
        # Build the string and boolean list of each combination
        comb_list = []
        comb_bool_list = []
        # Put default False value
        for l in lab_columns:
            comb_bool_list.append(False)
        for j in k:
            pos = lab_columns.index(j) # Get position
            comb_list.append(lab_options[pos])
            comb_bool_list[pos] = True
        all_combinations[k]["list"] = comb_list
        all_combinations[k]["bool_list"] = comb_bool_list
        all_combinations[k]["str"] = ", ".join(comb_list)

In [7]:
# Check which combinations correspond each row
str_values = []
for i in lab.index:
    current_bool_list = list(lab.ix[i].isin(["Si"]))
    for i in all_combinations:
        if current_bool_list == all_combinations[i]["bool_list"]:
            str_values.append(all_combinations[i]["str"])

In [8]:
# Add combination column
lab["Combination"] = pd.Series(str_values)


-c:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

In [9]:
# Gather data
resulting_combinations = lab["Combination"].value_counts()
resulting_combinations_percentage = lab["Combination"].value_counts(normalize=True)*100

In [10]:
# Plotting the first 10 values of the most popular combinations
resulting_combinations[0:10].plot(kind='bar',figsize=(20,10),rot=90)
plt.title(u"Qual è la tipologia del laboratorio? Combinazioni", fontsize=18, y=1.02)
plt.ylabel("Lab", fontsize=16)
plt.xlabel("Combinazioni", fontsize=16)
plt.savefig("svg/Q002-Combinazioni.svg")
plt.savefig("png/Q002-Combinazioni.png")
plt.savefig("pdf/Q002-Combinazioni.pdf")



In [11]:
%%capture output

# Save the output as a variable that can be saved to a file
# Data of the combinations
print "Data:"
print resulting_combinations
print
# Data of the combinations: percentage
print "Data %:"
print resulting_combinations_percentage

In [12]:
# Save+show the output to a text file
%save Q002-Combinazioni.py str(output)
shutil.move("Q002-Combinazioni.py", "text/Q002-Combinazioni.txt")


The following commands were written to file `Q002-Combinazioni.py`:
Data:
Fab Lab                                                         18
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab     4
Studio di realizzazione prototipi, Fab Lab                       4
Fab Lab, Coworking                                               3
Makerspace                                                       3
Studio di progettazione, Studio di realizzazione prototipi       2
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Coworking     2
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace     2
Fab Lab, Makerspace                                              2
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace, Hackerspace, Repair Café, Coworking, Linux User Group, Arduino User Group     1
Studio di realizzazione prototipi, Fab Lab, Makerspace, Hackerspace, Repair Café, Coworking, Linux User Group, Arduino User Group     1
Studio di realizzazione prototipi, Makerspace, Hackerspace       1
Fab Lab, DIYBio Lab, Arduino User Group                          1
Laboratorio universitario                                        1
Studio di realizzazione prototipi, Fab Lab, Coworking            1
Makerspace, Hackerspace, Coworking, Linux User Group, Arduino User Group     1
DIYBio Lab                                                       1
Fab Lab, Makerspace, Hackerspace                                 1
Studio di progettazione, Studio di realizzazione prototipi, Laboratorio universitario, Makerspace     1
Studio di progettazione, Studio di realizzazione prototipi, Laboratorio universitario, Fab Lab, Makerspace, Hackerspace, Coworking, Arduino User Group     1
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace, Hackerspace     1
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace, Coworking, Arduino User Group     1
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Coworking, Arduino User Group     1
Coworking                                                        1
Makerspace, Coworking                                            1
Studio di progettazione, Studio di realizzazione prototipi, Laboratorio universitario, Fab Lab     1
Studio di progettazione, Studio di realizzazione prototipi, Makerspace, Coworking     1
Studio di realizzazione prototipi, Makerspace, Hackerspace, Coworking     1
Studio di progettazione, Studio di realizzazione prototipi, Arduino User Group     1
Studio di progettazione, Studio di realizzazione prototipi, Makerspace     1
Hackerspace                                                      1
Studio di realizzazione prototipi, Makerspace, Hackerspace, Repair Café, Coworking     1
Studio di realizzazione prototipi, Fab Lab, Coworking, Arduino User Group     1
Studio di realizzazione prototipi, Fab Lab, Makerspace, Coworking     1
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace, Coworking, Linux User Group, Arduino User Group     1
Fab Lab, Makerspace, Arduino User Group                          1
Studio di realizzazione prototipi, Fab Lab, Makerspace, Hackerspace, Linux User Group     1
Fab Lab, Makerspace, Coworking                                   1
dtype: int64

Data %:
Fab Lab                                                         25.714286
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab     5.714286
Studio di realizzazione prototipi, Fab Lab                       5.714286
Fab Lab, Coworking                                               4.285714
Makerspace                                                       4.285714
Studio di progettazione, Studio di realizzazione prototipi       2.857143
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Coworking     2.857143
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace     2.857143
Fab Lab, Makerspace                                              2.857143
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace, Hackerspace, Repair Café, Coworking, Linux User Group, Arduino User Group     1.428571
Studio di realizzazione prototipi, Fab Lab, Makerspace, Hackerspace, Repair Café, Coworking, Linux User Group, Arduino User Group     1.428571
Studio di realizzazione prototipi, Makerspace, Hackerspace       1.428571
Fab Lab, DIYBio Lab, Arduino User Group                          1.428571
Laboratorio universitario                                        1.428571
Studio di realizzazione prototipi, Fab Lab, Coworking            1.428571
Makerspace, Hackerspace, Coworking, Linux User Group, Arduino User Group     1.428571
DIYBio Lab                                                       1.428571
Fab Lab, Makerspace, Hackerspace                                 1.428571
Studio di progettazione, Studio di realizzazione prototipi, Laboratorio universitario, Makerspace     1.428571
Studio di progettazione, Studio di realizzazione prototipi, Laboratorio universitario, Fab Lab, Makerspace, Hackerspace, Coworking, Arduino User Group     1.428571
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace, Hackerspace     1.428571
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace, Coworking, Arduino User Group     1.428571
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Coworking, Arduino User Group     1.428571
Coworking                                                        1.428571
Makerspace, Coworking                                            1.428571
Studio di progettazione, Studio di realizzazione prototipi, Laboratorio universitario, Fab Lab     1.428571
Studio di progettazione, Studio di realizzazione prototipi, Makerspace, Coworking     1.428571
Studio di realizzazione prototipi, Makerspace, Hackerspace, Coworking     1.428571
Studio di progettazione, Studio di realizzazione prototipi, Arduino User Group     1.428571
Studio di progettazione, Studio di realizzazione prototipi, Makerspace     1.428571
Hackerspace                                                      1.428571
Studio di realizzazione prototipi, Makerspace, Hackerspace, Repair Café, Coworking     1.428571
Studio di realizzazione prototipi, Fab Lab, Coworking, Arduino User Group     1.428571
Studio di realizzazione prototipi, Fab Lab, Makerspace, Coworking     1.428571
Studio di progettazione, Studio di realizzazione prototipi, Fab Lab, Makerspace, Coworking, Linux User Group, Arduino User Group     1.428571
Fab Lab, Makerspace, Arduino User Group                          1.428571
Studio di realizzazione prototipi, Fab Lab, Makerspace, Hackerspace, Linux User Group     1.428571
Fab Lab, Makerspace, Coworking                                   1.428571
dtype: float64