Scarica dispensa di python per strategic e più Schemi e mappe concettuali in PDF di Management Analysis And Systems solo su Docsity!
Python
È organizzato in celle:
1. Celle Markdown testi esplicativi, intestazioni, elenchi puntati, immagini o collegamenti.
2. Celle “Code”dove scrivi il codice (l’output viene visualizzato sotto la propria cella)
Per salvare modifiche icona del floppy disk
(il numero accanto alla cella indica il n di volte che la cella è stata eseguita)
Eseguire il codice: run a cell /o shift il computer acquisisce le variabili in memoria
VARIABILI
Noi archiviamo le informazioni in variabili (=contenitori in cui archiviamo valori/dati)
Creare delle variabili
Variable_name = any_data_value non mostra alcun output (associa solo il valore)
= assigment
Print ( variable_name ) funzione per vedere il contenuto della variabile
Per i numeri decimali si usa il separatore “.” Es: “7.3”
Nomi delle variabili
Il nome di una variabile può essere composto da testo, “_” e numeri
Python è “case sensitive” (“a” è diverso da “A”)
Non sono permessi spazi (si usa invece “_”)
Non si possono utilizzare numeri all’inizio della variabile
Operazioni con le variabili
+, - , * (moltiplicazione), / (divisione), ** (potenza)
Es: lenght=3. width=4. square_area=lenght** rectangle_area=(width* lenght)/ triangle_area=(width* lenght)/ print(triangle_area)
Fare comparazioni
“==” esattamente uguale
“>” Maggiore di
“<” minore di
“>=” Maggiore o uguale
“<=” minore o uguale
“!=” non uguale a
Es: print( rectangle_area<triangle_area) print( rectangle_area/2== triangle_area) False True
True o False
“Booleans”
Logical operations
“And” (o “&”) è vero solo se entrambi gli statement sono veri
“Or” è vero fintanto che uno statement è vero
“Is” è vera se gli statement coincidono
“Not” prima di uno statement, ne inverte il valore
STRINGHE
set continui di caratteri contenuti all’interno di virgolette
Si può usare ‘ o “ (se iniziamo la stringa con “ , possiamo usare solo ‘ all’interno del testo)
Comandi (metodi) per modificare stringhe di testo
.lower() rende tutto minuscolo
.upper() rende tutto maiuscolo
.capitalize() rende maiuscola la prima lettera della PRIMA parola
.title() rende maiuscola la prima lettera di OGNI parola
Sintassi: manipulated_string = old_string.method()
Lunghezza delle stringhe
len(string) funzione per ottenere la lunghezza di una stringa
Es: short_string=”ue” print( len (short_string)) 2
Concatenare più stringhe
+ concatena due stringhe in una lunga stringa
* può essere usato per ripeter una stringa
Es: print(‘la’*3) lalala
La concatenazione di stringhe con numeri non funziona
Str(number) per trasformare un numero in una stringa
show="games of thrones" worst_season="8" print("the worst " + show +" season is season "+ worst_season)
Il comando .format() permette di formattare una stringa e aggiungere argomenti che vogliamo
inserire nella stringa
Usiamo {} per definire il segna posto dove vogliamo aggiungere il valore nella stringa
print( "the worst {} season is season {}".format(show, worst_season))
Liste
È una collezione di elementi ordinati. Ogni elemento ha una posizione specifica detta indice
Gli elementi di una lista sono contenuti tra [] e sono separati da virgole ,
Es: fruit_list= [ “apple”, “banana”, “orange”]
L’indice inizia da 0, 1 per il secondo elemento e così via
Possiamo accedere ad un elemento della lista usando il suo indice e []
Es: per accedere al terzo elemento usiamo
Print(fruit_list[2]) ‘orange’
La lista è una delle strutture più versatili in Python. Può contenere diversi elementi : stringhe,
numeri, …anche altre liste.
Le sintassi per creare liste sono:
Set
È una collezione di elementi non ordinati, racchiusi in {} e separati da ,
Differenza con le liste: gli elementi nei set non hanno un ordine e non contengono duplicati per
natura ( Non è possibile ripetere due volte lo stesso elemento )
Esempio_set = { “sarfatti 25”, “velodromo”}
Possiamo aggiungere un elemento usando .add(element) o rimuovedno con .remove(element)
Trasformare una lista in set
Si trasformano le liste in set per evitare i duplicati (molto utile nella data analysis) usando set(list)
Operazioni con i set
. union() .intrsection() .difference() abbiamo solo elementi unici
(operazioni dei diagrammi di Venn)
Result.set= set1.operation(set2)
Dizionari
Contenitore che memorizza I dati in coppie chiave-valore : cerchi una parola (chiave) per trovane la
definizione (valore). Sono contenuti tra {} e contengono una serie di coppie key: value separate da ,
My_dict={“key”:”value”}
Per accedere ad un valore in dizionario, si inserisce la chiave all’interno di []
My_dict[“key”] da come output “value”
My_dict={ “apple”: “a fruit”, “dog”: “an animal”, “car”: “a vehicle”}
print(my_dict[“apple”])
“a fruit”
Funzione zip() possiamo creare un dizionario in Python velocemente unendo due liste (la prima
con le chiavi, la seconda con i valori) (devono avere la stessa lunghezza)
Key_list=[..]
Value_list=[..]
dictionary=dict (zip(key_list, value_list))
Aggiungere nuove chiavi o valori
dictionary[“new_key”]=value
Modificare il valore di una chiave
dictionary[key_to_be_modified]= new_value
Eliminare un valore
del my_dict[key]
DIZIONARI MULTI-LIVELLO
I valori di un dizionario possono essere dizionari stessi
Es. the_office={“Michael”:{“surname”:”Scott”, “role”:”regional manager”}, “Dwight”:
{“surname”:”Schrute”,”role”: ”assistant to the regional manager”}}
STATISTICA
residuals = results.resid
you can check for multicollinearity among independent variables using variance inflation factor
( VIF ).
#from statsmodels.stats.outliers_influence import variance_inflation_factor
#vif = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
#print(f'VIF for each independent variable: {vif}')
Per creare scatterplot
# Import necessary libraries
plt.scatter(X, y)
plt.title('Scatterplot of X vs. y')
plt.xlabel('X')
plt.ylabel('y')
plt.show()
#uploading data
iceCream = pd.read_excel('icecream.xlsx')
#Load data into X (independent variables) and y (dependent variable)
X=iceCream['Temperature']
y=iceCream['IceCreamSales']
# 1. Linearity: You can visually check for linearity using scatterplots.
df_filtered = df[columns_list] filtriamo il dataset originale usando la lista, e ora il dataset conterrà
solo le colonne della lista
es: columns_list=[ 'age', 'female_cust', 'country', 'state', 'product_category','sub_category','revenues', 'profits', 'nepotist', 'quarter' ] df_filtered=customers_df[columns_list] display(df_filtered)
Per salvare il nuovo dataframe come un file excel
nomedelfile.to_excel('filename.xlsx', index =False ) es: df_filtered.to_excel('S2_customer_spending_manipulated.xlsx',index=False)
STATISTICA DESCRITTIVA
df .describe() sintassi per il calcolo delle statistiche descrittive (media, deviazione, min, max…)
Descrizione avanzata:
Possiamo verificare se le statistiche descrittive differiscono per alcuni gruppi di osservazione
interesting_columns = ['column1', 'column2', ... ] seleziono le colonne a cui
sono interessato
df .groupby ('grouping_variable')[interesting_columns] .describe ()scelgo la
variabile da osservare, e raggruppo le colonne scelte e vedo se differiscono o meno in
relazione a tale variabile
Valori unici in una colonna
Si usa la funzione set, dato che non ammette duplicati, in modo da trovare i valori unici in una
colonna:
set(dataframe.column_name)utile per comprendere I valori unici che ci sono in una colonna
es: manipulated_df.country set(manipulated_df.country)
Filtrare le righe
Possiamo scrivere condizioni (istruzioni) per filtrare le righe di dataframe in qualsiasi modo desideriamo. condition = df['column'] > threshold Possiamo combinare più di una condizione utilizzando gli operatori booleans (& e, | o). Infine, utilizziamo df[condition] per filtrare le righe. condition1 = df['column1'] == threshold condition2 = df['column2'].isin([value1, value2, ... ]) condition3 = df['column2'].between([valueMin, valueMax]) df_filtered_rows = df[condition1 & condition2 & condition3] Possiamo programmare i valori utilizzando un insieme di operatori: == 'Francia' significa che la colonna ha valore 'Francia' != 5 significa che la colonna ha un valore diverso da 5 >= 12 significa che la colonna ha un valore uguale o maggiore di 12 =< 12 significa che la colonna ha un valore uguale o inferiore a 12 .isin([7, 'Germany' , ...]) significa che la colonna ha valore 7 o 'Germany' o... .between(8, 88) significa che la colonna ha un valore compreso tra 8 e 88 .notna() significa che la colonna non contiene un valore mancante NaN (=missing value, che non significa 0)
Scatterplot
Utile per vedere se esiste una relazione tra le variabili
Decido le colonne da associare alla variabile delle x e y
nomedf .plot (kind = 'scatter', x = 'independent_variable', y = 'dependent_variable')
Modelli interpretativi con regressione lineare (OLS)
La regressione lineare è una relazione tra una variabile dipendente y e delle variabili indipendenti
x. Se è necessario includere ulteriori variabili indipendenti, è possibile estendere la formula di
conseguenza (variabile controllo 1, 2, ecc...)
formula = 'y ~ x + control1 + control2 + ... ' modello che creiamo:
specifichiamo la formula che vogliamo esplorare
model_explanatory = smf.ols(formula, data = df).fit() creiamo l’ols model:
indichiamo il dataframe sul quale svolgeremo l’analisi
print(model_explanatory.summary2())
es: vogliamo capire se il profitto di una persona dipende dall’età e dal sesso.
Variabili categoriche
Per aggiungere variabili categoriche alla regressione:
formula = 'y ~ x + control1 + ... +C(categorical_variable)' model_explanatory = smf.ols(formula, data = df).fit() Il coefficiente per l'Intercept si riferisce alla baseline, che rappresenta il valore medio di Y quando tutte le altre variabili sono 0.
Ultima sessione
1. Data formulation: importo le librerie necessarie
import pandas as pd import statsmodels.formula.api as smf import os
2. dataset in formato excel:
print(os. getcwd ()) ci dice la cartella dove ci troviamo
print(os. listdir ())i dice i file contenuti nella cartella
df = pd. read _excel('filename.extension') legge e apre il file excel
(il file excel deve essere nella stessa cartella del notebook per essere aperto)
3. df.columns per osservare solo le colonne (ovvero le variabili del dataset)
4. df.describe()per vedere le caratteristiche descrittive del dataset (conto, media, min,
max etc…). (tale funzione conta solo le colonne con variabili numeriche, non quelle
con variabili categoriche)
per evitare di perdere informazioni importanti, andiamo a manipolare i dati delle variabili
categoriche alcune (non tutte) possono essere trasformate facilmente in variabili dummy
(0,1); ad esempio:
variabili con “yes,no”,
livello di istruzione “nan, middle school, highschool, college” possiamo trasformarla in una
scala 0,1,2,
5. manipolazione dei dati di variabili categoriche
Variabili yes e no
yes_no_dict={'yes': 1, 'no' : 0 }
df['personal_loan_dummy'] = df['personal_loan'].map(yes_no_dict)
df['house_loan_dummy'] = df['house_loan'].map(yes_no_dict)
df=df.drop (columns =['personal_loan', 'house_loan']) eliminare le vecchie colonne
plt.show()
Scatterplot
bank_df.plot(kind='scatter', x='age', y='average_balance')
plt.show()
maggiore è l’età maggiore è il saldo in banca (dal grafico)
Modificare lo scatterplot
plt.scatter(bank_df['age'], bank_df['average_balance']) # Scatter plot of 'age' against 'profits'
plt.title('Relationship between Age and Wealth') aggiungere il titolo al grafico
plt.xlabel('Age') scrivere la x
plt.ylabel('Wealth in €') scrivere la y
plt.show()
REGRESSIONE LOGISTICA
formula = 'y ~ x + control1 + control2 + ... ' si usa la stessa formula della regressione lineare model_explanatory = smf .logit (formula, data = df).fit() print(model_explanatory. summary2())
LIFT CHART:
df[["decile_out", "churn"]].groupby("decile_out").mean().plot.bar()