Documente Academic
Documente Profesional
Documente Cultură
Cuprins
1. Introducere
Importanța temei
Prin intermediul acestui studiu voi dori să aflu dacă există legături între variabilele
studiate numerice ( „ethanol”- consumul de etanol, „educ”-numărul de educație, „unemrate”-rata
șomajului, „age”-vârsta, „famsize”-numărul membrilor de familie) și variabilele nenumerice (
„status”-nivel , „married”-stare civilă ).
Pentru a putea cerceta ne va trebui o bază de date utilizând limbajul de programare
Python.
Obiectivele studiului
În realizarea proiectului voi folosi următoarele metode prin intermediul cărora voi avea în
vedere îndeplinirea obiectivelor menționate mai sus.
Pentru a putea începe cercetarea propriu zisă, a fost nevoie de operațiuni preliminare și de
transformare a variabilelor aflate din baza de date. În urma modificărilor asupra bazei de date, s-a
utilizat analiza grafică și numerică a variabilelor analizate. Aceasta fiind urmată de analiza
statistică a variabilelor categoriale. Ultimele metode au fost estimarea și testarea mediilor,
respectiv analiza de regresie și corelație.
2. Prezentarea bazei de date
Baza de date utilizată a fost salvată în format CSV și importată în limbajul de programare
Python, denumită Alcohol.
Cod utilizat
import pandas as pd
from pandas import read_csv
from pandas import concat
alcohol=pd.read_csv("alcohol.csv")
Figura 1: Importarea bazei de date inițiale
*Sursa: Python
Această bază este împărțită în 34 de variabile: 12 numerice și 22 categoriale.
*Sursa: Python
În continuarea analizei efectuate din cele 12 variabile numerice s-au folosit doar 5, acestea
fiind: “unemrate”, “age”, “educ”, “famsize”, și “ethanol”, iar din cele 22 categoriale voi folosi
doar 2 (“status” și “married”).
Operațiile preliminare constau în realizarea unei selecții pentru cele trei variabile
numerice “educ”, “age” și “unemrate” astfel încât noua bază obținută să conțină valori mai mari
decât media (13.309611) pentru variabila “educ”, valori mai mari decât media asociate
variabilei “age” (38.384358) și variabilei “unemrate” mai mici decât valoarea 4.
În urma acestor operații, am ales ca variabila numerică “famsize” să o transform într-o
variabilă nenumerică cu trei categorii. Astfel am folosit acest cod în programul python:
Cod utilizat
alcohol['d_famsize']=pd.cut(alcohol.famsize, bins=[1,3,4,13],
labels=['small','average','high'],include_lowest=True)
average=alcohol.loc[alcohol['famsize']<4]
small=alcohol.loc[alcohol['famsize']<=3]
high=alcohol.loc[alcohol['famsize']>3]
Condițiile pentru noua variabilă creată („d_famsize”) au fost puse în funcție de analiza
descriptivă, folosind următorul cod:
Cod utilizat
print(alcohol.describe())
*Sursa: Python
În urma acestei selecții a rezultat o nouă bază de date, conținând doar 262 de observații
din cele 9822 din baza de date inițială.
*Sursa: Python
Pentru a nu se crea o confuzie între variabila “married” și categoria pe care o voi forma, am
decis să o redenumesc cu numele „statut” folosind codul de mai jos:
Cod utilizat
alcohol=alcohol.rename(columns={'married':'statut'})
Cod utilizat
statut=alcohol.statut
bins=[-1,0,1]
groups_names=['Casatorit','Necasatorit']
statut=pd.cut(alcohol['statut'],bins,labels=groups_names)
alcohol['statut']=pd.cut(alcohol['statut'],bins,labels=groups_names)
print(statut)
Pentru variabila “status” în baza inițială avea categoriile denumite cu codurile 1, 2, 3
reprezentând 1- persoanele pensionare, 2-persoanele șomere și 3- angajații. Pentru o mai bună
vizualizare asupra cercetării am decis redenumirea categoriilor expuse mai sus.
Cod utilizat
status=alcohol.status
bins=[0,1,2,3]
groups_names=['Pensionar','Somer','Angajat']
status=pd.cut(alcohol['status'],bins,labels=groups_names)
alcohol['status']=pd.cut(alcohol['status'],bins,labels=groups_names)
print(status)
*Sursa: Python
*Sursa: Python
Variabila “ethanol”
Cod utilizat
ethanol=alcohol.ethanol
print('the mean of the ethanol is', ethanol.mean())
print('the median of the ethanol is', ethanol.median())
print(st.mode(ethanol))
print('The kurtosis of the ethanol is',st. kurtosis(ethanol))
print('The skewness of the ethanol is',st.skew(ethanol))
Figura 7: Indicatorii statistici descriptivi
*Sursa: Python
Cod utilizat
print(alcohol.ethanol.describe())
*Sursa: Python
Interpretări:
Media= 2.16 cap de locuitor.
Valoarea medie a variabilei Ethanol este egala cu 2.16 consum de etanol pe cap de
locuitor.
Indicatori ai dispersiei:
Abaterea standard (Std. Deviation) = 0.27 cap de locuitor
Arată o variație în medie a consumului de etanol față de nivelul mediu cu 0.27 cap de
locuitor.
Variabila “educ”
Cod utilizat
educ=alcohol.educ
print('the mean of the ethanol is', ethanol.mean())
print('the median of the educ is', educ.median())
print(st.mode(educ))
print('The kurtosis of the educ is',st. kurtosis(educ))
print('The skewness of the educ is',st.skew(educ))
*Sursa: Python
Cod utilizat
print(alcohol.educ.describe())
Figura 10: Indicatorii statistici descriptivi ai variabilei “educ”
*Sursa: Python
Interpretări:
Media= 16.18 ani de școlarizare.
O persoană are în medie ani de școlarizare de 16.18 ani
Mediana= 16 ani.
50% dintre persoane au anii de școlarizare de până la 16 ani, iar restul de 50% au peste 16 ani.
Quartila 1 = 15 ani.
25 % din persoane au anii de școlarizare până la 15 ani și 75 % au mai mult de 15 ani.
Quartila 3 = 18 ani.
75 % din persoane au anii de școlarizare până la 18 ani și 25% au mai mult de 18 ani.
Indicatori ai dispersiei:
Abaterea standard (Std. Deviation) = 1.48 ani
Arată o variație în medie a anilor de școlarizare față de nivelul mediu cu 1.48 ani.
Cod utilizat
unemrate=alcohol.unemrate
print('the mean of the unemrate is', unemrate.mean())
print('the median of the unemrate is', unemrate.median())
print(st.mode(unemrate))
print('The kurtosis of the unemrate is',st. kurtosis(unemrate))
print('The skewness of the unemrate is',st.skew(unemrate))
*Sursa:Python
Cod utilizat
print(alcohol.unemrate.describe())
Figura 12: Indicatorii statistici descriptivi ai variabilei “unemrate”
*Sursa:Python
Interpretări:
Media= 3.52 %
Rata șomajului în medie o valoare de 3.52%.
Mediana= 3.59%.
50% dintre persoane au valoarea ratei șomajului de până la3.59 %, iar restul de 50% au peste
3.59%.
Quartila 1 = 3.30%.
25 % din persoane au valoarea ratei șomajului până la 3.30% și 75 % au mai mult de 3.30%.
Quartila 3 = 3.80%.
75 % din persoane au valoarea ratei șomajului până la 3.80% și 25% au mai mult de 3.80%.
Indicatori ai dispersiei:
Abaterea standard (Std. Deviation) = 0.33%.
Arată o variație în medie a ratei șomajului față de nivelul mediu cu 0.33%.
Variabila “unemrate”
Cod utilizat
age=alcohol.age
print('the mean of the age is', age.mean())
print('the median of the age is', age.median())
print(st.mode(age))
print('The kurtosis of the ageis',st. kurtosis(age))
print('The skewness of the age is',st.skew(age))
Figura 13: Indicatorii statistici descriptivi
*Sursa:Python
Cod utilizat
print(alcohol.age.describe())
Figura 14: Indicatorii statistici descriptivi ai variabilei “age”
*Sursa:Python
Interpretări:
Media= 46.64 ani
Indicatori ai dispersiei:
Abaterea standard (Std. Deviation) = 6.16 ani.
Arată o variație în medie a vârstei persoanelor față de nivelul mediu cu 6.16 ani.
Indicatori ai formei ( Asimetria și Boltirea)
cross_tab=pd.crosstab(alcohol.statut, alcohol.status,margins=True)
print(cross_tab)
Tabel 2: Tabel de frecvență
*Sursa:Python
*Sursa:Python
3.2. Analiza grafică a variabilelor numerice și nenumerice
Boxplot
Cod utilizat
*Sursa:Python
După cum putem observa în graficul de mai sus, variabila “ethanol” nu conține valori extreme.
Cod utilizat
educ=alcohol.educ
print(boxplot(educ))
Grafic 2: Boxplot pentru variabila “educ”
*Sursa:Python
În graficul de mai sus, observăm că pentru variabila “educ” nu avem valori extreme.
Cod utilizat
unemrate=alcohol.unemrate
print(boxplot(unemrate))
*Sursa:Python
În graficul cu numărul 3, observăm că variabila “unemrate” nu prezintă valori extreme.
Cod utilizat
age=alcohol.age
print(boxplot(age))
Grafic 4: Boxplot pentru variabila “age”
*Sursa:Python
Ca și celelalte variabile numerice, variabila “age” nu prezintă valori extreme.
Histograma
Cod utilizat
print(alcohol.ethanol.hist(bins=50, color='red'))
*Sursa:Python
După cum observăm în histograma de mai sus avem distribuție asimetrică la stânga
deoarece coeficientul de asimetrie Pearson (Skewness) = -0.51<0 și coeficientul de boltire Fisher
(Kurtosis)= -1.25 <0, arătând că distribuția este platicurtică.
Cod utilizat
print(alcohol.educ.hist(bins=50, color='green'))
Grafic 6:Histograma pentru variabila “educ”
*Sursa:Python
După cum observăm în histograma cu numărul 6 avem distribuție asimetrică la stânga
deoarece coeficientul de asimetrie Pearson (Skewness) = -0.12<0 și coeficientul de boltire Fisher
(Kurtosis)= -1.17<0, arătând că distribuția este platicurtică.
Cod utilizat
print(alcohol.unemrate.hist(bins=50, color='pink'))
*Sursa:Python
După cum observăm în histograma cu numărul 7 avem distribuție asimetrică la stânga
deoarece coeficientul de asimetrie Pearson (Skewness) = -0.50<0 și coeficientul de boltire Fisher
(Kurtosis)= -1.01<0, arătând că distribuția este platicurtică.
Cod utilizat
print(alcohol.age.hist(bins=50, color='orange'))
*Sursa:Python
După cum observăm în graficul de mai sus avem distribuție asimetrică la stânga deoarece
coeficientul de asimetrie Pearson (Skewness) = 0.55>0 și coeficientul de boltire Fisher
(Kurtosis)= -0.97<0, arătând că distribuția este platicurtică.
Bar plot
Cod utilizat
*Sursa:Python
În bar plotul de mai sus se observă faptul că cele mai multe persoane din baza de date au
ocupația de “Angajat”, urmată de ocupația “Somer” cu cele mai puține persoane.
Cod utilizat
sns.countplot(x="statut",data=alcohol, palette="pastel")
*Sursa:Python
În bar plotul de mai sus se observă faptul că cele mai multe persoane din baza de date au
statutul de “Necasatorit”.
Cod utilizat
sns.countplot(x="d_famsize",data=alcohol, palette="pastel")
Grafic 11:Bar plot pentru variabila “d_famsize”
*Sursa:Python
În bar plotul cu numărul 11 se observă faptul că numărul membrilor de familie cu categoria
„small” are cel mai ridicat nivel, urmat de categoria „average”.
Cod utilizat
cross_tab=pd.crosstab(alcohol.d_famsize, alcohol.statut,margins=True)
print(cross_tab)
Tabel 3: Tabelarea datelor între cele 2 variabile categoriale
*Sursa:Python
Conform tabelului 3, putem afirma că cele mai multe persoane căsătorite fac parte din categoria
familiilor cu un număr redus de membri și toate persoanele cu un număr mediu și mare de membri nu
sunt căsătoriți. În schimb, cele mai multe persoanele necăsătorite se regăsesc tot în categoria familiilor
cu un număr redus de membri.
Cod utilizat
*Sursa:Python
Ipoteze:
H0=nu există asociere între variabile
H1=există asociere între variabile
Deoarece Sig=0.007 <0.05 rezulă că ipoteza nulă se respinge, astfel cu o probabilitate de 95%
putem afirma că există asociere între cele 2 variabile.
4.3 Analiza de concordanță
Cod utilizat
import scipy
valori_observate=alcohol.status.value_counts()
valori_asteptate=scipy.array([6,4,2])
res1=scipy.stats.chisquare(valori_observate,f_exp=valori_asteptate)
*Sursa:Python
Ipoteze:
H0=există concordanță între variabile
H1=nu există concordanță între variabile
Deoarece Sig=0.0 <0.05 rezulă că ipoteza nulă se respinge, astfel cu o probabilitate de 95%
putem afirma că nu există concordanță între cele 2 variabile.
*Sursa:Python
Cod utilizat
from scipy import stats
print(stats.ttest_1samp(unemrate,0))
*Sursa:Python
5.3 Testarea diferenței dintre două medii (eșantioane independente sau eșantioane perechi)
Cod utilizat
age_Casatorit=alcohol.loc[alcohol['statut']=='Casatorit']
agel_Necasatorit=alcohol.loc[alcohol['statut']=='Necasatorit']
print(stats.ttest_ind(age_Casatorit.age,agel_Necasatorit.age))
print(stats.ttest_ind(age_Casatorit.age,agel_Necasatorit.age,equal_var=False))
Figura 17: Testarea diferenței dintre două medii
*Sursa:Python
Ipoteze:
H0=µ1=µ2=0
H1=cel puțin o medie diferită de 0
Sig = 0.07
α= 0,05 rezultă că Sig>α
Cu o probabilitate de 0.95 putem afirma că se acceptă ipoteza nulă, în concluzie cele două medii
sunt egale cu 0.
Cu ajutorul testului ANOVA am putut observa dacă sunt diferențe semnificative între mediile
variabilelor studiate. Pentru a verifica cele spuse am formulat următoarele ipoteze:
H0: µ1=µ2=µ3
H1: cel puțin două medii sunt egale
Cod utilizat
import statsmodels.api as sm
from statsmodels.formula.api import ols
model=ols('ethanol~status',data=alcohol).fit()
print(sm.stats.anova_lm(model,typ=2))
Figura 18: Testarea diferenșei dintre trei și mai multe medii
*Sursa:Python
După cum putem observa din figura 18 valoarea Sig pentrucele 2 variabilele analizate
este mai mică decât α care este egală cu 0,05, ceea ce ne duce la respingerea ipotezei nule,
respectiv a lui H0 și la acceptarea ipotezei alternative H1. Prin urmare putem afirma că între
mediile variabilelor (ethanol și status) există diferențe semnificative.
Coeficientul Pearson
Cod utilizat
*Sursa:Python
Se poate garanta cu o probabilitate de 0,95 că între cele două variabile există o corelație
scăzută pozitivă(r=0.08 >0).
ethanol=alcohol.ethanol
unemrate=alcohol.unemrate
X=unemrate
X=sm.add_constant(X)
model=sm.OLS(ethanol,X)
results=model.fit()
print(results.summary())
print('Parameters: ',results.params)
print('R2: ',results.rsquared)
print('Standard errors: ', results.bse)
print('Predicted values: ',results.predict())
erori=results.bse
print(stats.ttest_1samp(erori,0))
*Sursa:Python
Modelul de regresie liniară simplă analizat în decursul acestui proiect, este format dintr-o
variabilă dependent Y= ethanol și o variabilă independent X= unemrate.
Interpretare:
β0 = 4.0276: atunci când valoare ratei șomajului este egală cu 0, variabila dependentă,
consumul de etanol, are o valoare medie de 4.0276 pe cap de locuitor.
Faptul că ( β1= -0.5284)< 0 arată că între variabile există o legătură negativă, adică la o creștere a
ratei șomajului cu o unitate, consumul de etanol scade, în medie, cu 0.5284 pe cap de locuitor.
*Sursa:Python
Cod utilizat
*Sursa:Python
Ecuația modelului
ethanol=4.1540-0.0031*age-0.5237*unemrate
Atunci când toate variabilele independente sunt egale cu 0, variabila ethanol este, în medie, cu
4.1540 pe cap de locuitor.
La o creștere cu o unitate a vârstei și a ratei șomajului, consumul de etanol pe cap de locuitor
scade cu 0.0031 pe cap de locuitor, respectiv scade cu 0.5237 pe cap de locuitor.