import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns df = pd.read_csv("data/surveyDataSience.csv", low_memory=False) df = df.iloc[1:].reset_index(drop=True) print(df.shape) # (nr_linii, nr_coloane) print(df.head()) #1) Numărul de respondenți n_resp = len(df) print("Număr respondenți:", n_resp) #2) Număr și tipul informațiilor (atribute) pentru un respondent print("Număr atribute (coloane):", df.shape[1]) print(df.columns) print(df.dtypes) #3) Numărul de respondenți cu date complete complete_all = df.dropna().shape[0] print("Complet pe TOATE cele 369 coloane:", complete_all) #4) Durata medie a studiilor superioare (ani) def edu_years(x): if pd.isna(x): return np.nan if "Bachelor" in x: return 3 if "Master" in x: return 5 if "Doctoral" in x: return 8 if "Professional doctorate" in x: return 8 if "Some college" in x: return 1.5 if "No formal education" in x: return 0 if "I prefer not" in x: return np.nan return np.nan df["edu_years"] = df["Q4"].apply(edu_years) mean_all = df["edu_years"].mean() mean_ro = df.loc[df["Q3"]=="Romania", "edu_years"].mean() mean_ro_w = df.loc[(df["Q3"]=="Romania") & (df["Q2"]=="Woman"), "edu_years"].mean() print("Media ani studii (toți):", mean_all) print("Media ani studii (România):", mean_ro) print("Media ani studii (România, femei):", mean_ro_w) #5) Numărul de respondenți femei din România cu date complete rom_w_complete = df[(df["Q3"]=="Romania") & (df["Q2"]=="Woman")].dropna() print("Femei România (complete pe Q1–Q6):", len(rom_w_complete)) #6) Femei din România care programează în Python / C++ + intervalul de vârstă dominant lang_cols = [c for c in df.columns if c.startswith("Q7_Part_")] def uses_language(sub_df, lang): return sub_df[lang_cols].eq(lang).any(axis=1) rom_w = df[(df["Q3"]=="Romania") & (df["Q2"]=="Woman")].copy() rom_w["uses_python"] = uses_language(rom_w, "Python") rom_w["uses_cpp"] = uses_language(rom_w, "C++") n_py = rom_w["uses_python"].sum() n_cpp = rom_w["uses_cpp"].sum() print("Femei RO care folosesc Python:", n_py) print("Femei RO care folosesc C++:", n_cpp) # Interval vârstă cu cele mai multe top_age_py = rom_w.loc[rom_w["uses_python"], "Q1"].value_counts() top_age_cpp = rom_w.loc[rom_w["uses_cpp"], "Q1"].value_counts() print("\nDistribuție vârstă (Python):\n", top_age_py) print("\nDistribuție vârstă (C++):\n", top_age_cpp) if len(top_age_py)>0: print("\nVârsta dominantă Python:", top_age_py.idxmax()) if len(top_age_cpp)>0: print("Vârsta dominantă C++:", top_age_cpp.idxmax()) # 7) Domeniul de valori posibile + extreme pentru fiecare atribut def analyze_attribute_ranges(df): attribute_summary = {} for col in df.columns: unique_values = df[col].dropna().unique() num_unique_values = len(unique_values) try: numeric_values = pd.to_numeric(df[col].dropna(), errors='coerce') min_val, max_val = numeric_values.min(), numeric_values.max() except: min_val, max_val = None, None attribute_summary[col] = { "Număr de valori posibile": num_unique_values, "Minim": min_val, "Maxim": max_val, "Exemple de valori": unique_values[:5] } return pd.DataFrame.from_dict(attribute_summary, orient='index') attribute_summary_df = analyze_attribute_ranges(df) print(attribute_summary_df.head(20)) #8). Transformarea vechimii în programare și analiza statistică map_q6 = { "I have never written code": 0, "< 1 years": 0.5, "1-3 years": 2, "3-5 years": 4, "5-10 years": 7.5, "10-20 years": 15, "20+ years": 25 # alegere simplă (poți schimba) } df["code_years"] = df["Q6"].map(map_q6) stats = { "min": df["code_years"].min(), "max": df["code_years"].max(), "mean": df["code_years"].mean(), "std": df["code_years"].std(), "median": df["code_years"].median(), } print(stats) def plot_python_age_distribution(df, title): plt.figure(figsize=(10, 6)) sns.countplot(y=df["Q1"], order=df["Q1"].value_counts().index) plt.xlabel("Număr de respondenți") plt.ylabel("Categorie de vârstă") plt.title(title) plt.show() #9).distributia respondentilor care programeaza in Python pe categorii de varsta python_users = df[df["Q7_Part_1"] == "Python"] plot_python_age_distribution(python_users, "Distribuția programatorilor Python pe categorii de vârstă") #10).distributia respondentilor din Romania care programeaza in Python pe categorii de varsta romania_python_users = python_users[python_users["Q3"] == "Romania"] plot_python_age_distribution(romania_python_users, "Distribuția programatorilor Python din România pe categorii de vârstă") #11).distributia respondentilor femei din Romania care programeaza in Python pe categorii de varsta romania_women_python_users = romania_python_users[romania_python_users["Q2"] == "Woman"] plot_python_age_distribution(romania_women_python_users, "Distribuția femeilor din România care programează în Python pe categorii de vârstă") def plot_outliers_experience(df): plt.figure(figsize=(10, 6)) sns.boxplot(x=df["code_years"]) plt.xlabel("Ani de experiență în programare") plt.title("Identificarea outlierilor în experiența de programare") plt.show() #12).respondentii care pot fi considerati "outlieri" din punct de vedere al vechimii in programare (puteti folositi un boxplot pentru a identifica aceste valori) exp_map = { "I have never written code": 0, "< 1 years": 0.5, "1-3 years": 2, "3-5 years": 4, "5-10 years": 7.5, "10-20 years": 15, "20+ years": 25 } df["code_years"] = df["Q6"].map(exp_map) plot_outliers_experience(df)