0% ont trouvé ce document utile (0 vote)
6 vues14 pages

TP

Le document présente une analyse exploratoire de données sur le cancer du poumon, incluant le chargement, l'exploration et la statistique univariée et bivariée. Il décrit également des interactions avec des personnes rencontrées à Doha, abordant des thèmes de foi et de soutien spirituel. Enfin, il inclut des visualisations et des modèles de régression pour évaluer les facteurs influençant les années de survie des patients.

Transféré par

doricka7
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues14 pages

TP

Le document présente une analyse exploratoire de données sur le cancer du poumon, incluant le chargement, l'exploration et la statistique univariée et bivariée. Il décrit également des interactions avec des personnes rencontrées à Doha, abordant des thèmes de foi et de soutien spirituel. Enfin, il inclut des visualisations et des modèles de régression pour évaluer les facteurs influençant les années de survie des patients.

Transféré par

doricka7
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

TP: Analyse exploratoire de données

1. Chargement de données

2. Exploration de données
3. Statistique univariée
4. Statistique bivariée

Rapport de moisson

Lundi 27 janvier 2025


Lieux : Doha
Personne moissonnée :2
Nouvelle naissance :1

Nom : Ruth Hermisca


Nationalité : Gabonaise
Etat initial : Rétrograde
Commentaire : On s’est rencontré vers Doha elle rentrait chez elle après avoir ses
courses je l’ai abordé. Elle est étudiante en master sauf que financièrement c’est très
compliqué donc sa fait deux ans qu’elle a arrêté d’abord en attendant d’avoir des
ressources je lui ai proposé des concours pour certaines écoles afin d’obtenir des
bourses de réduction, puis je suis revenue sur le sujet central Jésus, j’ai appris qu’elle
est née de nouveau au Gabon mais a de suite rétrogradé, elle n’a pas eu de suivis
donc elle s’est refroidie, arrivée ici elle a encore essayé mais rien sa ne donnait elle
était dans une église mais elle se sentait jugé donc au bout d’un moment elle a
préféré laisser tomber je lui ai demandé si cette situation lui plaisait ne plus être
proche de Dieu elle a avoué qu’elle ne sait plus comment faire pour revenir elle a mal
puis j’ai demandé qu’est ce qu’il la retiens et c’est le péché j’ai parlé sur l’amour de
Dieu que Dieu l’aime et qu’elle n’est pas trop salle pour revenir a lui puis elle s’est
confessé sur tous ce qu’elle faisait et je lui ai parlé de son entourage et c’était aussi
un problème, puis j’ai demandé si elle voulait revenir au Seigneur et laissé ses
anciennes voies elle a accepté de revenir a lui, le lundi même elle a assisté
entièrement au Big Talk, je l’appelle et lui écris mais elle eut un soucis dans la
semaine et son téléphone c’est compliqué pour la joindre.
Numéro : +212 624-210078
Etat final : Née de nouveau

Nom: Anne
Nationalité: Gabonaise
Etat initial : Païenne
Commentaire: On s’est aussi rencontré vers Doha après ma discussion avec Ruth et il
sait avéré qu’elles étaient amis, Anne part a l’église de temps en temps mais sans
plus, elle m’a avoué que franchement elle ne pense au fait que se soit important et
que sa ne lui dit rien tous sa elle part juste comme sa et qu’a part elle personne ne
compte même pas ses parents et durant qu’elle parlait le Saint Esprit me mettait a
cœur qu’elle était remplis de blessures émotionnelles et qu’il prendra plaisir a la brisé
et la nettoyé si elle lui donne sa vie nous avons longuement échangée et au final elle
m’a juste dis qu’elle a compris et que sur une échelle de 1 a 1O sa lui dis maintenant
quelque chose a 5 pour le reste voilà on verra je garde contacte avec elle et je pris
aussi pour elle le problème est que son école ils ont cours le samedi et le dimanche
donc sa reste un peu compliqué

Etat final : Païenne


1°D
2°A
3°B
4°A
5°A
6°A
7°D
8°A
9°D
10°4
11°B
12°A
13°
14°C
15°A
16°C
17°B
18°
19°A
20°A
21°A
22°B
23°B
24°
25°
26°C
27°
28°A
29°
30°D
31°
32°
33°
34°
35°
36°
37°
38°
39°
40°

import pandas as pd
# Charger le fichier CSV
df= pd.read_csv('lung_cancer_data.csv')
# Afficher les premières lignes
print([Link]())
# Résumé des colonnes et des types
print([Link]())
# Afficher les noms des colonnes
print([Link])
# Statistiques descriptives
print([Link]())
# Vérifier les valeurs manquantes
print([Link]().sum())

# Identifier les doublons


print([Link]().sum())
# Sélectionner uniquement les colonnes numériques
numeric_columns = df.select_dtypes(include=['number']).columns

# Remplir les valeurs manquantes des colonnes numériques avec la moyenne


df[numeric_columns] = df[numeric_columns].fillna(df[numeric_columns].mean())

# Vérifiez les données après remplissage


print([Link]())
# Sélectionner les colonnes non numériques (potentiellement catégoriques)
non_numeric_columns = df.select_dtypes(include=['object']).columns
print("Colonnes catégoriques :", non_numeric_columns)
# Forcer la conversion des colonnes à un type numérique
for column in [Link]:
try:
df[column] = pd.to_numeric(df[column], errors='coerce')
except Exception as e:
print(f"Erreur dans la conversion de la colonne {column} : {e}")
# Remplir les colonnes numériques avec leur moyenne
df = [Link]([Link]())
# Afficher quelques valeurs des colonnes non numériques
for column in non_numeric_columns:
print(f"Valeurs de la colonne {column} :")
print(df[column].unique())
# Supprimer les lignes avec des valeurs manquantes
df = [Link]()
# Exemple : Remplir les valeurs manquantes avec la moyenne
[Link]([Link](), inplace=True)

# Supprimer les lignes avec des valeurs manquantes


[Link](inplace=True)
df.to_csv('cleaned_lung_cancer_data.csv', index=False)
pip install spark
import numpy as np
import [Link] as plt
import seaborn as sns
import [Link] as px
from [Link] import LabelEncoder
import warnings
df = pd.read_csv('lung_cancer_data.csv')
[Link]()
print([Link]) # Dimensions du tableau
print([Link]()) # Détails sur les colonnes
[Link]().T
[Link](include = 'object').T
print("Missing Value (%)")
missing_values = [Link]().mean() * 100
print(missing_values)

print("\nDuplicate Rows (%):")


duplicate_count = [Link]().mean()
print(duplicate_count)
df['Comorbidities'].unique()
df['Comorbidities'] = df['Comorbidities'].fillna('nan')
df['Comorbidities'].unique()
def outlier_check(row, colname):
Q1 = row[colname].quantile(0.25)
Q3 = row[colname].quantile(0.75)
IQR = Q3 - Q1
lower_b = Q1 - 1.5 * IQR
upper_b = Q3 + 1.5 * IQR
outlier = [Link][(row[colname] < lower_b) | (row[colname] > upper_b)]
return outlier

outliers = [Link]()

for col in df.select_dtypes(include=['number']).columns:


outliers_in_col = outlier_check(df, col)
outliers = [Link]([outliers, outliers_in_col])

outliers.reset_index(drop=True, inplace=True)

if [Link]:
print("No outliers")
else:
outliers
# Définition des configurations de base
[Link](style="whitegrid")
[Link](figsize=(10, 6))
# 1. Histogramme de la repartition par âge
[Link](figsize=(8, 6))
[Link](df['Age'], kde=True, color='blue')
[Link]('Age Distribution')
[Link]('Age')
[Link]('Frequency')
[Link]()
# 2. Barplot pour la répartition des sexes
[Link](figsize=(8, 6))
[Link](x='Gender', data=df, hue='Gender', palette='Set2')
[Link]('Gender Distribution')
[Link]('Gender')
[Link]('Count')
[Link]()
# 3. Boxplot pour la répartition par âge selon l'historique du tabagisme
[Link](figsize=(8, 6))
[Link](x='Smoking_History', y='Age', hue='Smoking_History', data=df,
palette='Set3')
[Link]('Age Distribution by Smoking History')
[Link]('Smoking History')
[Link]('Age')
[Link]()
# 4. Diagramme de dispersion de l'IMC par rapport au résultat du test de fonction
[Link](figsize=(8, 6))
[Link](x='BMI', y='Lung_Function_Test_Result', data=df, hue='Gender',
palette='coolwarm')
[Link]('BMI vs Lung Function Test Result')
[Link]('BMI')
[Link]('Lung Function Test Result')
[Link](loc="upper right")
[Link]()
# 5. Les symptômes de la douleur thoracique sont classés par groupe d'âge
[Link](figsize=(10, 6))
df['Age_Group'] = [Link](df['Age'], bins=[20, 40, 60, 80, 100], labels=['20-40', '40-60',
'60-80', '80+'])
[Link](x='Age_Group', hue='Chest_Pain_Symptoms', data=df, palette='Set1')
[Link]('Chest Pain Symptoms by Age Group')
[Link]('Age Group')
[Link]('Count')
[Link](title='Symptômes de la douleur thoracique', labels=['No', 'Yes'])
[Link]()
# 6. Histogramme de la distribution des résultats du test de la fonction pulmonaire
[Link](figsize=(8, 6))
[Link](df['Lung_Function_Test_Result'], kde=True, color='green')
[Link]('Distribution des résultats du test de la fonction pulmonaire')
[Link]('Lung Function Test Result')
[Link]('Frequency')
[Link]()
# 7. Nuage de points pour la taille de la tumeur par rapport aux années de survie
[Link](figsize=(8, 6))
[Link](x='Tumor_Size_cm', y='Survival_Years', data=df,
hue='Metastasis_Status', palette='viridis')
[Link]('Tumor Size vs Survival Years')
[Link]('Tumor Size (cm)')
[Link]('Survival Years')
[Link](title='Metastasis Status', labels=['No', 'Yes'], loc="upper right")
[Link]()
# 8. Diagramme en boîte pour les années de survie par stade de cancer
[Link](figsize=(8, 6))
[Link](x='Stage_of_Cancer', y='Survival_Years', hue='Stage_of_Cancer', data=df,
palette='muted')
[Link]('Survival Years by Stage of Cancer')
[Link]('Stage of Cancer')
[Link]('Survival Years')
[Link]()
# 9. Graphique de comptage de la réponse aux médicaments par type de traitement
[Link](figsize=(12, 6))
[Link](x='Treatment_Type', hue='Medication_Response', data=df,
palette='pastel')
[Link]('Medication Response by Treatment Type')
[Link]('Treatment Type')
[Link]('Count')
[Link](title='Medication Response', labels=['Poor', 'Good'])
[Link](rotation=45)
[Link]()
# 10. Diagramme à barres pour les antécédents familiaux de cancer
[Link](figsize=(8, 6))
[Link](x='Family_History_Cancer', data=df, hue='Family_History_Cancer',
palette='coolwarm')
[Link]('Family History of Cancer')
[Link]('Family History of Cancer')
[Link]('Count')
[Link]()
# 11. Graphique linéaire de la tendance annuelle du diagnostic du cancer
[Link](figsize=(12, 6))
df['Year_of_Diagnosis'] = pd.to_datetime(df['Year_of_Diagnosis'], format='%Y')
[Link](df['Year_of_Diagnosis'].[Link]).size().plot(kind='line', color='purple')
[Link]('Number of Cancer Diagnoses by Year')
[Link]('Year')
[Link]('Number of Diagnoses')
[Link]()
# 12. Box plot pour l'IMC par profession
[Link](figsize=(12, 6))
[Link](x='Occupation', y='BMI', data=df, hue='Occupation', palette='Set2')
[Link]('BMI by Occupation')
[Link]('Occupation')
[Link]('BMI')
[Link](rotation=45)
[Link]()
# 13. Graphique de comptage de l'essoufflement dû à l'exposition aux toxines
[Link](figsize=(8, 6))
[Link](x='Exposure_to_Toxins', hue='Shortness_of_Breath', data=df,
palette='magma')
[Link]('Shortness of Breath by Toxin Exposure')
[Link]('Exposure to Toxins')
[Link]('Count')
[Link](title='Shortness of Breath', labels=['No', 'Yes'])
[Link]()
df = [Link](columns=['Patient_ID', 'Year_of_Diagnosis', 'Age_Group'])

encoder = LabelEncoder()

for col in df.select_dtypes(include='object').columns:


df[col] = encoder.fit_transform(df[col])

print("DataFrame converti: ")

[Link]()
correlation_matrix = [Link]()

[Link](figsize=(12, 6))
[Link](correlation_matrix, cmap='coolwarm')
[Link]("Correlation Heatmap")
[Link]()
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from [Link] import StandardScaler
from [Link] import mean_squared_error
from xgboost import XGBRegressor
from [Link] import make_pipeline
from [Link] import PolynomialFeatures

# Charger les données


df = pd.read_csv('C:/Users/USER/lung_cancer_data.csv')

# Vérifiez que les données sont correctement chargées


print([Link]())
print([Link])
# Préparation des données
# Assurez-vous que 'Survival_Years' est bien une colonne de votre DataFrame
X = [Link]('Survival_Years', axis=1) # Caractéristiques
y = df['Survival_Years'] # Cible

# Division des données en ensembles d'entraînement et de test


X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

#scaler = StandardScaler()
#X_train_scaled = scaler.fit_transform(X_train)
#X_test_scaled = [Link](X_test)

models = {
"Linear Regression": LinearRegression(),
# "ElasticNet": ElasticNet(alpha=0.1, l1_ratio=0.5, max_iter=10000, tol=1e-4),
# "SVR": SVR(kernel='rbf', C=1.0, epsilon=0.1),
# "KNN": KNeighborsRegressor(n_neighbors=3),
# "Decision Tree": DecisionTreeRegressor(random_state=42),
# "Random Forest": RandomForestRegressor(n_estimators=100, random_state=42),
"XGBoost": XGBRegressor(n_estimators=100, random_state=42),
# "Bayesian Ridge": BayesianRidge(),
"Polynomial Regression": make_pipeline(PolynomialFeatures(degree=2),
LinearRegression()),
# "MLP Regressor": MLPRegressor(hidden_layer_sizes=(100, 50), max_iter=500,
random_state=42),
}

def evaluate_model(model, X_train, X_test, y_train, y_test):


[Link](X_train, y_train)
y_pred = [Link](X_test)

mse = mean_squared_error(y_test, y_pred)


r2 = r2_score(y_test, y_pred)

return mse, r2
!pip install scikit-learn
!pip install xgboost
from [Link] import LabelEncoder
# Initialiser l'encodeur
label_encoder = LabelEncoder()

# Appliquer LabelEncoder à toutes les colonnes de type 'object' (catégorielles)


for column in X_train.select_dtypes(include=['object']).columns:
X_train[column] = label_encoder.fit_transform(X_train[column])
X_test[column] = label_encoder.transform(X_test[column])

# Vérifier les changements


print(X_train.head())
print(X_test.head())
from sklearn.linear_model import LinearRegression

model = LinearRegression()
[Link](X_train, y_train)
from [Link] import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from [Link] import mean_squared_error, r2_score

import pandas as pd

# Exemple de préparation des données


# Encoder les variables catégorielles (par exemple 'Gender')
encoder = LabelEncoder()
df['Gender'] = encoder.fit_transform(df['Gender']) # Conversion en entiers (0 ou 1)

# Vérifier les valeurs manquantes et les traiter


if [Link]().sum().any():
df = [Link]() # Supprimer les lignes avec des valeurs manquantes

# Diviser les données


X = [Link]('Survival_Years', axis=1)
y = df['Survival_Years']

# Vérifier les dimensions de X et y


print([Link])
print([Link])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)


# Vérifier les types de données
print(X_train.dtypes)
print(y_train.dtypes)

# Entraîner et évaluer les modèles


models = {
"Linear Regression": LinearRegression(),
}

def evaluate_model(model, X_train, X_test, y_train, y_test):


[Link](X_train, y_train) # Entraîner le modèle
y_pred = [Link](X_test) # Prédictions sur l'ensemble de test
mse = mean_squared_error(y_test, y_pred) # Calcul de l'erreur quadratique
moyenne
r2 = r2_score(y_test, y_pred) # Calcul du coefficient de détermination R²
return mse, r2

# Évaluation du modèle
results = {}
for name, model in [Link]():
mse, r2 = evaluate_model(model, X_train, X_test, y_train, y_test)
results[name] = {"MSE": mse, "R²": r2}

# Afficher les résultats


results_df = [Link](results).T
print(results_df)

from sklearn.linear_model import LogisticRegression


from [Link] import KNeighborsClassifier
from [Link] import DecisionTreeClassifier
from [Link] import RandomForestClassifier
from xgboost import XGBClassifier

models = {
"Logistic Regression": LogisticRegression(max_iter=10000, random_state=42),
# "KNN": KNeighborsClassifier(n_neighbors=3),
# "Decision Tree": DecisionTreeClassifier(random_state=42),
# "Random Forest": RandomForestClassifier(n_estimators=100, random_state=42),
"XGBoost": XGBClassifier(n_estimators=100, random_state=42)
}
def evaluate_model(model, X_train, X_test, y_train, y_test):
[Link](X_train, y_train)
y_pred = [Link](X_test)

accuracy = accuracy_score(y_test, y_pred)


precision = precision_score(y_test, y_pred, average='weighted', zero_division=0)
recall = recall_score(y_test, y_pred, average='weighted', zero_division=0)
f1 = f1_score(y_test, y_pred, average='weighted', zero_division=0)

return accuracy, precision, recall, f1


!pip install xgboost
from [Link] import LabelEncoder

# Définir les colonnes catégorielles


categorical_columns = ['Gender', 'Smoking_History', 'Occupation',
'Family_History_Cancer',
'Exposure_to_Toxins', 'Residential_Area', 'Comorbidities',
'Previous_Cancer_Diagnosis', 'Treatment_Type', 'Medication_Response',
'Symptom_Progression']

# Appliquer LabelEncoder à chaque colonne catégorielle


label_encoder = LabelEncoder()
for col in categorical_columns:
X_train[col] = label_encoder.fit_transform(X_train[col])
X_test[col] = label_encoder.transform(X_test[col])
# Si y_train est une colonne catégorielle
y_train = label_encoder.fit_transform(y_train)
y_test = label_encoder.transform(y_test)
from [Link] import LabelEncoder

# Appliquer le label encoding sur les colonnes catégoriques


label_encoder = LabelEncoder()

for column in X_test.columns:


if X_test[column].dtype == 'object':
X_test[column] = label_encoder.fit_transform(X_test[column])

# Faites de même pour X_train, pour que les deux jeux soient cohérents
for column in X_train.columns:
if X_train[column].dtype == 'object':
X_train[column] = label_encoder.fit_transform(X_train[column])
from [Link] import Sequential
from [Link] import Dense, Dropout, Input
from [Link] import Adam

# Modèle de réseau neuronal unique


nn_model = Sequential([
Input(shape=(X_train.shape[1],)),
Dense(128, activation='relu'),
Dropout(0.2),
Dense(64, activation='relu'),
Dropout(0.2),
Dense(32, activation='relu'),
Dense(1)
])

nn_model.compile(optimizer=Adam(learning_rate=0.001), loss='mse',
metrics=['mae'])

nn_history = nn_model.fit(X_train, y_train, validation_split=0.2, epochs=50,


batch_size=32, verbose=1)

nn_pred = nn_model.predict(X_test).flatten()
nn_mse = mean_squared_error(y_test, nn_pred)
nn_r2 = r2_score(y_test, nn_pred)

print(f"Single Neural Network (NN) - MSE: {nn_mse:.4f}, R2: {nn_r2:.4f}")


#Récupérer l'historique de formation
history = nn_history.history

# Plot Training and Validation Loss


[Link](figsize=(12, 6))

# Loss Plot
[Link](1, 2, 1)
[Link](history['loss'], label='Training Loss', color='blue')
[Link](history['val_loss'], label='Validation Loss', color='orange')
[Link]('Training and Validation Loss')
[Link]('Epochs')
[Link]('Mean Squared Error (MSE)')
[Link]()
# Mean Absolute Error (MAE) Plot
[Link](1, 2, 2)
[Link](history['mae'], label='Training MAE', color='blue')
[Link](history['val_mae'], label='Validation MAE', color='orange')
[Link]('Training and Validation MAE')
[Link]('Epochs')
[Link]('Mean Absolute Error (MAE)')
[Link]()

# Display the plots


plt.tight_layout()
[Link]()

Vous aimerez peut-être aussi