Q014 - Di chi è stata l’iniziativa che ha portato all’apertura 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: D14[SQ001] - D14[SQ012] - D14[other]

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


-c:19: 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]:
#lab[0:4]

In [6]:
%%capture output

# Save the output as a variable that can be saved to a file
# Gather data
initiative_b = {}

for k,i in enumerate(initiative_columns):
    initiative_b[k] = initiative[i].value_counts(dropna=False)
    print "Data:",initiative_options[k].encode('utf-8')
    print initiative_b[k]
    print
    print "Data %:",initiative_options[k].encode('utf-8')
    print initiative[i].value_counts(normalize=True,dropna=False)*100
    print

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


The following commands were written to file `Q014-IniziativaLab01.py`:
Data: Singolo individuo privato
No     60
Si     10
NaN     0
dtype: int64

Data %: Singolo individuo privato
No     85.714286
Si     14.285714
NaN     0.000000
dtype: float64

Data: Gruppo di individui privati
Si     46
No     24
NaN     0
dtype: int64

Data %: Gruppo di individui privati
Si     65.714286
No     34.285714
NaN     0.000000
dtype: float64

Data: Scuola primaria (scuola elementare)
No     66
Si      4
NaN     0
dtype: int64

Data %: Scuola primaria (scuola elementare)
No     94.285714
Si      5.714286
NaN     0.000000
dtype: float64

Data: Scuola secondaria di primo grado (scuola media)
No     70
NaN     0
dtype: int64

Data %: Scuola secondaria di primo grado (scuola media)
No     100
NaN      0
dtype: float64

Data: Scuola secondaria di secondo grado (scuola superiore)
No     67
Si      3
NaN     0
dtype: int64

Data %: Scuola secondaria di secondo grado (scuola superiore)
No     95.714286
Si      4.285714
NaN     0.000000
dtype: float64

Data: Universitá
No     68
Si      2
NaN     0
dtype: int64

Data %: Universitá
No     97.142857
Si      2.857143
NaN     0.000000
dtype: float64

Data: Museo
No     67
Si      3
NaN     0
dtype: int64

Data %: Museo
No     95.714286
Si      4.285714
NaN     0.000000
dtype: float64

Data: Centro di ricerca
No     66
Si      4
NaN     0
dtype: int64

Data %: Centro di ricerca
No     94.285714
Si      5.714286
NaN     0.000000
dtype: float64

Data: Incubatore o acceleratore d'impresa
No     62
Si      8
NaN     0
dtype: int64

Data %: Incubatore o acceleratore d'impresa
No     88.571429
Si     11.428571
NaN     0.000000
dtype: float64

Data: Coworking
No     70
NaN     0
dtype: int64

Data %: Coworking
No     100
NaN      0
dtype: float64

Data: Impresa privata
No     68
Si      2
NaN     0
dtype: int64

Data %: Impresa privata
No     97.142857
Si      2.857143
NaN     0.000000
dtype: float64

Data: Fondazione
No     67
Si      3
NaN     0
dtype: int64

Data %: Fondazione
No     95.714286
Si      4.285714
NaN     0.000000
dtype: float64



In [8]:
yes = []
no = []
nanvalue = []

for k,i in enumerate(initiative_columns):
    initiative_presents = initiative_b[k].index.tolist()
    
    # Convert NaN to "NaN"
    for o,h in enumerate(initiative_presents):
        if type(h) is float:
            initiative_presents.pop(o)
            initiative_presents.append("NaN")
    
    # Reassign new list with "NaN"
    initiative_b[k].index = initiative_presents
    
    # Check for empty values, and put a 0 instead
    if "Si" not in initiative_presents:
        yes.append(0)
    if "No" not in initiative_presents:
        no.append(0)
    if "NaN" not in initiative_presents:
        nanvalue.append(0)
    
    for j in initiative_presents:
        if j == "Si":
            yes.append(initiative_b[k].ix["Si"])
        elif j == "No":
            no.append(initiative_b[k].ix["No"])
        elif j == "NaN":
            nanvalue.append(initiative_b[k].ix["NaN"])

In [9]:
# Plot the data
plt.figure(figsize=(8,6))
plt.xlabel(u'Iniziativa', fontsize=16)
plt.ylabel(u'Lab', fontsize=16)
plt.title(u'Di chi è stata l’iniziativa che ha portato all’apertura del laboratorio?', fontsize=18, y=1.02)
plt.xticks(range(len(initiative_options)),initiative_options,rotation=90)
ind = np.arange(len(initiative_columns))   # the x locations for the groups
width = 0.35                              # the width of the bars

my_colors = seaborn.color_palette("Set1", 3) # Set color palette
rect1 = plt.bar(ind,yes,width,color=my_colors[1],align='center') # Plot Yes
rect2 = plt.bar(ind+width,no,width,color=my_colors[0],align='center') # Plot No
rect3 = plt.bar(ind+width*2,nanvalue,width,color=my_colors[2],align='center') # Plot NaN 
plt.legend( (rect1, rect2, rect3), ('Si', 'No', 'Nessuna risposta') )
plt.savefig("svg/Q014-IniziativaLab01.svg")
plt.savefig("png/Q014-IniziativaLab01.png")
plt.savefig("pdf/Q014-IniziativaLab01.pdf")



In [10]:
%%capture output

# Save the output as a variable that can be saved to a file
# Get "other" data
initiative_other = data["D14[other]"].str.lower().value_counts()
print "Data:"
print initiative_other
print ""
print "Data %:"
print data["D14[other]"].str.lower().value_counts(normalize=True) * 100

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


The following commands were written to file `Q014-IniziativaLab02.py`:
Data:
associazione culturale                               2
assesore all'innovazione                             1
cooperativa sociale                                  1
comune con gruppo di soggetti privati                1
francesco bombardi                                   1
gruppo facebook design lab                           1
associazione ed una coop. dedicata all'educazione    1
centro di formazione                                 1
associazione di categoria                            1
associazione innoval                                 1
associazione                                         1
ente regionale                                       1
cooperativa sociale patchanka                        1
dtype: int64

Data %:
associazione culturale                               2.857143
assesore all'innovazione                             1.428571
cooperativa sociale                                  1.428571
comune con gruppo di soggetti privati                1.428571
francesco bombardi                                   1.428571
gruppo facebook design lab                           1.428571
associazione ed una coop. dedicata all'educazione    1.428571
centro di formazione                                 1.428571
associazione di categoria                            1.428571
associazione innoval                                 1.428571
associazione                                         1.428571
ente regionale                                       1.428571
cooperativa sociale patchanka                        1.428571
dtype: float64


In [12]:
# Plot bar
plt.figure(figsize=(8,6))
plt.title(u'Di chi è stata l’iniziativa che ha portato all’apertura del laboratorio? Altro', fontsize=18, y=1.02)
plt.xticks(range(len(initiative_other.index)),initiative_other.index,rotation=90)
plt.xlabel('Iniziativa', fontsize=16)
plt.ylabel('Lab', fontsize=16)
ind = np.arange(len(initiative_other))   # the x locations for the groups
width = 0.35                       # the width of the bars

my_colors = seaborn.color_palette("husl", len(initiative_other)) # Set color palette
rect1 = plt.bar(ind,initiative_other,width,color=my_colors,align='center')
plt.savefig("svg/Q014-IniziativaLab02.svg")
plt.savefig("png/Q014-IniziativaLab02.png")
plt.savefig("pdf/Q014-IniziativaLab02.pdf")



In [12]: