-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEncoding_test.py
More file actions
80 lines (68 loc) · 3.13 KB
/
Encoding_test.py
File metadata and controls
80 lines (68 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
BASE_URL = "https://raw.githubusercontent.com/ProfAI/machine-learning-fondamenti/main/datasets/"
def main_pandas() -> None:
print("Start")
df = pd.read_csv(BASE_URL + "shirts_example.csv", index_col=0)
print(df.head())
##encoding label
size_mapping = {"S":1, "M":2, "L":3, "XL":4}
df["taglia"] = df["taglia"].map(size_mapping)
print(df.head())
## one hot encoding
df_one_hot = pd.get_dummies(df, columns=["colore"])
print(df_one_hot.head())
def main_numpy() -> None:
df = pd.read_csv(BASE_URL + "shirts_example.csv", index_col=0)
##encoding label
X = df.values
size_mapping = {"S":1, "M":2, "L":3, "XL":4}
fmap = np.vectorize(lambda t:size_mapping[t])
X[:, 0] = fmap(X[:, 0]) ##quindi vettorizzo la colonna 0 cioè la prima
print("dopo label encoding: ")
print(X)
## one hot encoding
transf = ColumnTransformer( ##questa funzione ci permette di creare delle pipeline di trasformazioni
[
("ohe", OneHotEncoder(), [1])
],
remainder="passthrough"
)
X = transf.fit_transform(X)
print("dopo one hot encoding: ")
print(X)
def skelear_onehot() -> None:
X = [["bianco"], ["rosso"], ["verde"], ["bianco"], ["verde"]]
ohe = OneHotEncoder()
X_encoded = ohe.fit_transform(X) ## combiniamo il metodo fit e il metodo transform fit calcola i valori transform fa la trasformazione
X = X_encoded.toarray() ##per trasformare la matrice sparsa in una matrice densa
print(X)
def drop_value() -> None:
df = pd.read_csv(BASE_URL + "iris_missing.csv", index_col=0)
## quantifico i NaN
## print(df.count()) ##scrive i valori non nulli per ogni colonna
iris_drop_raw = df.copy()
iris_drop_column = df.copy()
## iris_drop_raw = iris_drop_raw.dropna() ##dropna elimina le righe che cont
## iris_drop_raw = iris_drop_raw.dropna(thresh= 2) ##thresh indica il numero minimo di valori non nulli che una riga deve avere per essere mantenuta
iris_drop_raw = iris_drop_raw.dropna(how= "all") ##elimina le righe che hanno tutti i valori nulli
iris_drop_column = iris_drop_column.dropna(axis=1) ##dropna con axis=1 elimina le colonne che contengono valori nulli
print(iris_drop_raw.shape)
print(iris_drop_column.shape)
def substitute_value() -> None:
df = pd.read_csv(BASE_URL + "iris_missing.csv", index_col=0)
mean = round(df["sepal_width"].mean(), 1)
iris_mean = df.copy()
iris_mean["sepal_width"] = iris_mean["sepal_width"].fillna(mean) ##fillna sostituisce i valori nulli con un valore specificato
print(iris_mean.head())
def scaling_feature() -> None:
df = pd.read_csv(BASE_URL + "wine.csv", usecols=[0,1,7])
wine_norm = df.copy()
feature = ["alcol","flavonoidi"] ## le feature sono le colonne che vogliamo normalizzare
to_norm = wine_norm[feature]
to_norm = (to_norm - to_norm.min()) / (to_norm.max() - to_norm.min()) ##normalizzazione min-max
print(to_norm.head())
if __name__ == "__main__":
scaling_feature()