Q016 - Da dove provengono le risorse che hanno permesso la nascita 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: D16[SQ001] - D16[SQ011] - D16[other]

funding_columns = ["D16[SQ001]","D16[SQ002]","D16[SQ003]","D16[SQ004]",
               "D16[SQ005]","D16[SQ006]","D16[SQ007]","D16[SQ008]",
               "D16[SQ009]","D16[SQ010]","D16[SQ011]","D16[SQ012]","D16[SQ013]"]
funding_options = ['Singolo individuo privato',
               'Gruppo di individui privati',
               'Scuola primaria (scuola elementare)',
               u'Universitá',
               'Museo',
               'Centro di ricerca',
               "Incubatore o acceleratore d'impresa",
               'Coworking',
               'Impresa privata',
               'Fondazione',
               'Partecipazione a bando pubblico',
               'Scuola secondaria di primo grado (scuola media)',
               'Scuola secondaria di secondo grado (scuola superiore)']
funding = data[funding_columns]
funding.replace(u'Sì', 'Si', inplace=True) # Get rid of accented characters 
funding_other = data['D16[other]'].str.lower().value_counts()


-c:20: 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]:
#funding[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(funding_columns)+1):
    comb = list(itertools.combinations(funding_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 funding_columns:
            comb_bool_list.append(False)
        for j in k:
            pos = funding_columns.index(j) # Get position
            comb_list.append(funding_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 funding.index:
    current_bool_list = list(funding.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
funding["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 = funding["Combination"].value_counts()
resulting_combinations_percentage = funding["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("Da dove provengono le risorse che hanno permesso la nascita del laboratorio? Combinazioni", fontsize=18, y=1.02)
plt.ylabel("Lab", fontsize=16)
plt.xlabel("Combinazioni", fontsize=16)
plt.savefig("svg/Q016-Combinazioni.svg")
plt.savefig("png/Q016-Combinazioni.png")
plt.savefig("pdf/Q016-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 Q016-Combinazioni.py str(output)
shutil.move("Q016-Combinazioni.py", "text/Q016-Combinazioni.txt")


The following commands were written to file `Q016-Combinazioni.py`:
Data:
Gruppo di individui privati                                     26
Gruppo di individui privati, Impresa privata                     6
Singolo individuo privato                                        6
Partecipazione a bando pubblico                                  5
Singolo individuo privato, Gruppo di individui privati           2
Gruppo di individui privati, Partecipazione a bando pubblico     2
Gruppo di individui privati, Fondazione                          2
Scuola primaria (scuola elementare), Centro di ricerca           2
Impresa privata, Partecipazione a bando pubblico                 2
Impresa privata                                                  1
Gruppo di individui privati, Centro di ricerca, Impresa privata     1
Singolo individuo privato, Gruppo di individui privati, Impresa privata     1
Impresa privata, Fondazione                                      1
Centro di ricerca                                                1
Gruppo di individui privati, Impresa privata, Fondazione         1
Gruppo di individui privati, Museo                               1
Gruppo di individui privati, Coworking                           1
Gruppo di individui privati, Coworking, Impresa privata          1
Incubatore o acceleratore d'impresa                              1
Fondazione                                                       1
Gruppo di individui privati, Scuola secondaria di secondo grado (scuola superiore)     1
Singolo individuo privato, Partecipazione a bando pubblico       1
Scuola secondaria di secondo grado (scuola superiore)            1
dtype: int64

Data %:
Gruppo di individui privati                                     37.142857
Gruppo di individui privati, Impresa privata                     8.571429
Singolo individuo privato                                        8.571429
Partecipazione a bando pubblico                                  7.142857
Singolo individuo privato, Gruppo di individui privati           2.857143
Gruppo di individui privati, Partecipazione a bando pubblico     2.857143
Gruppo di individui privati, Fondazione                          2.857143
Scuola primaria (scuola elementare), Centro di ricerca           2.857143
Impresa privata, Partecipazione a bando pubblico                 2.857143
Impresa privata                                                  1.428571
Gruppo di individui privati, Centro di ricerca, Impresa privata     1.428571
Singolo individuo privato, Gruppo di individui privati, Impresa privata     1.428571
Impresa privata, Fondazione                                      1.428571
Centro di ricerca                                                1.428571
Gruppo di individui privati, Impresa privata, Fondazione         1.428571
Gruppo di individui privati, Museo                               1.428571
Gruppo di individui privati, Coworking                           1.428571
Gruppo di individui privati, Coworking, Impresa privata          1.428571
Incubatore o acceleratore d'impresa                              1.428571
Fondazione                                                       1.428571
Gruppo di individui privati, Scuola secondaria di secondo grado (scuola superiore)     1.428571
Singolo individuo privato, Partecipazione a bando pubblico       1.428571
Scuola secondaria di secondo grado (scuola superiore)            1.428571
dtype: float64