<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: el houssine el malki</title>
    <description>The latest articles on DEV Community by el houssine el malki (@el_houssine_elmalki).</description>
    <link>https://dev.to/el_houssine_elmalki</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3714490%2Feab6c629-7cb3-4c05-817b-35d5acfbf4dd.jpg</url>
      <title>DEV Community: el houssine el malki</title>
      <link>https://dev.to/el_houssine_elmalki</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/el_houssine_elmalki"/>
    <language>en</language>
    <item>
      <title>Mon aventure avec le projet Vivino : transformer des données en recommandations 🍷</title>
      <dc:creator>el houssine el malki</dc:creator>
      <pubDate>Sun, 25 Jan 2026 13:03:07 +0000</pubDate>
      <link>https://dev.to/el_houssine_elmalki/mon-aventure-avec-le-projet-vivino-transformer-des-donnees-en-recommandations-202d</link>
      <guid>https://dev.to/el_houssine_elmalki/mon-aventure-avec-le-projet-vivino-transformer-des-donnees-en-recommandations-202d</guid>
      <description>&lt;h2&gt;
  
  
  Le point de départ : pourquoi &lt;strong&gt;Vivino&lt;/strong&gt; ?
&lt;/h2&gt;

&lt;p&gt;Tout a commencé par une question simple :&lt;br&gt;
&lt;strong&gt;comment transformer des données brutes en recommandations utiles et intelligentes ?&lt;/strong&gt;&lt;br&gt;
Le cas de &lt;strong&gt;Vivino&lt;/strong&gt; s’est imposé naturellement. Les données sur le vin — composition chimique, qualité, évaluations — offrent un terrain idéal pour explorer les concepts clés de la data science et des systèmes de recommandation.&lt;br&gt;
Le notebook &lt;strong&gt;my_vivino.ipynb&lt;/strong&gt; est alors devenu le journal de cette aventure : un espace d’exploration, d’erreurs, d’itérations et d’apprentissage.&lt;/p&gt;
&lt;h2&gt;
  
  
  Comprendre avant d’agir : l’exploration des données
&lt;/h2&gt;

&lt;p&gt;La première étape a été d’explorer le &lt;strong&gt;dataset&lt;/strong&gt;. Avant toute ligne de modèle, j’ai pris le temps de :&lt;br&gt;
comprendre la structure des données,&lt;br&gt;
identifier les types de variables,&lt;br&gt;
repérer les valeurs manquantes ou incohérentes,&lt;br&gt;
analyser la distribution générale des données.&lt;br&gt;
Cette phase m’a rappelé une règle essentielle :&lt;br&gt;
un projet data solide commence toujours par une bonne compréhension des données.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def Résumer_le_jeu_de_données(dataset):
    print("Les 10 premières lignes :")
    print(dataset.head(10))
    print("Dimension du jeu de données :")
    print(dataset.shape)
    print("Résumé statistique :")
    print(dataset.describe())
    print("Distribution des qualité :")
    print(dataset.groupby("quality").size())
Résumer_le_jeu_de_données(dataset)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Nettoyage des données : une étape souvent sous-estimée
&lt;/h2&gt;

&lt;p&gt;Le nettoyage a constitué une part centrale du projet.&lt;br&gt;
J’ai mis en place une fonction dédiée dont le rôle était de :&lt;br&gt;
supprimer les valeurs non pertinentes (&lt;strong&gt;comme 0 ou 0.0&lt;/strong&gt;),&lt;br&gt;
corriger ou éliminer les anomalies,&lt;br&gt;
masquer la colonne &lt;strong&gt;quality&lt;/strong&gt; lorsque nécessaire afin d’éviter toute fuite d’information.&lt;br&gt;
Cette étape, bien que moins “visible”, a largement conditionné la qualité des résultats finaux.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"fixed acidity";"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol";"quality"
7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;5
7.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8;5
7.8;0.76;0.04;2.3;0.092;15;54;0.997;3.26;0.65;9.8;5
11.2;0.28;0.56;1.9;0.075;17;60;0.998;3.16;0.58;9.8;6
7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;5
7.4;0.66;0;1.8;0.075;13;40;0.9978;3.51;0.56;9.4;5
7.9;0.6;0.06;1.6;0.069;15;59;0.9964;3.3;0.46;9.4;5
7.3;0.65;0;1.2;0.065;15;21;0.9946;3.39;0.47;10;7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Visualisation : quand les données racontent une histoire
&lt;/h2&gt;

&lt;p&gt;Pour aller plus loin, j’ai utilisé la visualisation afin de mieux comprendre le comportement du &lt;strong&gt;dataset&lt;/strong&gt; :&lt;br&gt;
histogrammes pour observer la distribution de la qualité,&lt;br&gt;
analyse visuelle des déséquilibres,&lt;br&gt;
validation des choix de nettoyage.&lt;br&gt;
La visualisation n’était pas seulement esthétique, elle m’a aidé à prendre de meilleures décisions techniques.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk35xrln3ymtmucbhxkbb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk35xrln3ymtmucbhxkbb.png" alt=" " width="571" height="457"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Mise à l’échelle (&lt;strong&gt;Scaling&lt;/strong&gt;) : préparer le terrain
&lt;/h2&gt;

&lt;p&gt;Avant de comparer les vins entre eux, il était indispensable d’harmoniser les échelles des variables.&lt;br&gt;
Les caractéristiques comme l’alcool, l’acidité ou la densité n’ont pas la même unité, et les comparer sans normalisation aurait biaisé les résultats.&lt;br&gt;
Le &lt;strong&gt;scaling&lt;/strong&gt; a donc permis de rendre les comparaisons justes et cohérentes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def appliquer_scaling(dataset):
    scaler = MinMaxScaler()
    dataset_scaler = scaler.fit_transform(dataset)
    dataset_scaler = pd.DataFrame(dataset_scaler , index=dataset.index , columns=dataset.columns)
    return dataset_scaler
dataset_scaling = appliquer_scaling(dataset_clean)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Similarité cosinus : le cœur du système de recommandation
&lt;/h2&gt;

&lt;p&gt;Une fois les données prêtes, j’ai calculé la similarité cosinus entre les vins.&lt;br&gt;
Cette méthode permet de mesurer la proximité entre deux vins en fonction de leurs caractéristiques.&lt;br&gt;
C’est à ce moment-là que le projet a réellement pris vie :&lt;br&gt;
les données se sont transformées en relations,&lt;br&gt;
chaque vin a trouvé ses “voisins” les plus proches,&lt;br&gt;
la base du système de recommandation était posée.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def calculer_similarite_cosinus(dataset):
    matrice_de_similarité = cosine_similarity(dataset)
    similarite_dataset = pd.DataFrame(matrice_de_similarité , index=dataset.index , columns=dataset.index)
    return similarite_dataset
similarite_dataset = calculer_similarite_cosinus(dataset_clean)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Recommander intelligemment
&lt;/h2&gt;

&lt;p&gt;À partir de la matrice de similarité, j’ai implémenté une fonction de recommandation :&lt;br&gt;
l’utilisateur fournit un identifiant de vin,&lt;br&gt;
le système retourne les vins les plus similaires.&lt;br&gt;
J’ai également exploré des recommandations orientées vers les vins de meilleure qualité, tout en conservant une logique basée sur la similarité et non uniquement sur la note.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def meilleure_qualité(vins_ID, Top_N = 5):
    meilleure = dataset[dataset["quality"] &amp;gt;= 7]
    meilleure = meilleure.drop(columns=["quality"])
    meilleure_scaling = appliquer_scaling(meilleure)
    meilleure_similarite = calculer_similarite_cosinus(meilleure_scaling)
    meilleure_ID = meilleure_similarite[vins_ID]
    meilleure_ID = meilleure_ID.sort_values(ascending=False)
    meilleure_ID = meilleure_ID.drop(vins_ID)
    return meilleure_ID.head(Top_N)
meilleure_qualité(7)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ce que ce projet m’a appris
&lt;/h2&gt;

&lt;p&gt;Ce projet &lt;strong&gt;my_vivino.ipynb&lt;/strong&gt; m’a permis de comprendre que :&lt;br&gt;
-la qualité des données est plus importante que la complexité du modèle,&lt;br&gt;
-le nettoyage et la visualisation sont des étapes clés,&lt;br&gt;
-un système de recommandation est avant tout une chaîne de décisions réfléchies.&lt;br&gt;
À l’image du parcours raconté dans les blogs &lt;strong&gt;Kubernetes&lt;/strong&gt;, cette aventure montre qu’un projet technique n’est pas qu’un résultat final, mais surtout un processus d’apprentissage continu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1p6zvt2bc2jhzeuubq0h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1p6zvt2bc2jhzeuubq0h.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>qwasar</category>
      <category>vivino</category>
    </item>
    <item>
      <title>Explorer le succès des applications payantes pour la famille sur Google Play : Une expérience scientifique</title>
      <dc:creator>el houssine el malki</dc:creator>
      <pubDate>Fri, 16 Jan 2026 11:30:52 +0000</pubDate>
      <link>https://dev.to/el_houssine_elmalki/explorer-le-succes-des-applications-payantes-pour-la-famille-sur-google-play-une-experience-4nib</link>
      <guid>https://dev.to/el_houssine_elmalki/explorer-le-succes-des-applications-payantes-pour-la-famille-sur-google-play-une-experience-4nib</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Dans cette étude, nous considérons l’analyse des données comme une véritable expérience scientifique, où chaque étape — de l’hypothèse à l’expérimentation puis aux conclusions — est suivie méthodiquement. L’approche est inspirée d’articles de blogs techniques, comme ceux sur Kubernetes, qui structurent l’investigation de manière scientifique.&lt;/p&gt;

&lt;p&gt;L’objectif principal de cette expérience est de comprendre comment le prix des applications influence leur popularité (mesurée par le nombre d’installations) et d’examiner quelles catégories ou types de jeux et applications (Genres) sont les plus prisés par les utilisateurs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hypothèse
&lt;/h2&gt;

&lt;p&gt;Dans cette expérience, nous formulons l’hypothèse suivante :&lt;/p&gt;

&lt;p&gt;Nous supposons que les applications payantes de la catégorie « Famille » dont le prix est élevé enregistrent moins d’installations que celles à prix plus bas, et que certaines catégories/types (Genres) sont plus populaires que d’autres.&lt;/p&gt;

&lt;p&gt;Cette hypothèse servira de guide pour notre analyse des données et la validation de nos observations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Données utilisées (Dataset)
&lt;/h2&gt;

&lt;p&gt;Pour cette expérience, nous avons utilisé un jeu de données provenant de Google Play, contenant des informations détaillées sur différentes applications Android. Ce dataset est particulièrement adapté car il permet d’analyser à la fois le prix, le nombre d’installations et les catégories/types (Genres) des applications.&lt;/p&gt;

&lt;p&gt;Description du dataset&lt;br&gt;
Chaque ligne du dataset correspond à une application et les colonnes les plus importantes pour notre étude sont :&lt;br&gt;
Category : la catégorie principale de l’application (par exemple FAMILY, ART_AND_DESIGN).&lt;br&gt;
Genre : le type précis de l’application (par exemple Art &amp;amp; Design, Creativity).&lt;br&gt;
Price : le prix de l’application (0 pour gratuit, &amp;gt;0 pour payant).&lt;br&gt;
Installs : le nombre d’installations indiquant la popularité de l’application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pourquoi ce dataset ?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Il contient suffisamment de données quantitatives (Prix, Installations) pour permettre des analyses statistiques fiables.&lt;/li&gt;
&lt;li&gt;Il offre une large variété de genres et catégories, ce qui est idéal pour étudier la popularité relative des différents types d’applications dans la catégorie « Famille ».&lt;/li&gt;
&lt;li&gt;Il permet de filtrer facilement les applications payantes et de tester notre hypothèse sur la relation entre prix et popularité.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Méthodologie (Étapes de l’expérience)
&lt;/h2&gt;

&lt;p&gt;Pour tester notre hypothèse, nous avons suivi une approche structurée en quatre étapes principales :&lt;br&gt;
&lt;strong&gt;🔹 Étape 1 : Nettoyage des données&lt;/strong&gt;&lt;br&gt;
Convertir les colonnes Price et Installs en valeurs numériques pour permettre les calculs statistiques.&lt;br&gt;
Supprimer les lignes contenant des valeurs manquantes (NaN) afin d’assurer la fiabilité des analyses.&lt;br&gt;
&lt;strong&gt;🔹 Étape 2 : Filtrage des données&lt;/strong&gt;&lt;br&gt;
Sélectionner uniquement les applications :&lt;br&gt;
Payantes (Price &amp;gt; 0)&lt;br&gt;
Appartenant à la catégorie Famille (Category = FAMILY)&lt;br&gt;
&lt;strong&gt;🔹 Étape 3 : Analyse statistique&lt;/strong&gt;&lt;br&gt;
Calculer :&lt;br&gt;
Le prix moyen par catégorie ou genre.&lt;br&gt;
Le nombre total d’installations par genre.&lt;br&gt;
Identifier les genres les plus populaires selon le nombre d’installations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Étape 4 : Visualisation&lt;/strong&gt;&lt;br&gt;
Bar plot : pour représenter le prix moyen par catégorie ou genre.&lt;br&gt;
Pie chart : pour montrer les genres les plus populaires en fonction du nombre d’installations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Résultats
&lt;/h2&gt;

&lt;p&gt;Après avoir appliqué notre méthodologie, nous avons obtenu plusieurs résultats intéressants à partir des visualisations :&lt;br&gt;
&lt;strong&gt;🔹 Interprétation des graphiques&lt;/strong&gt;&lt;br&gt;
Bar plot du prix moyen par catégorie :&lt;br&gt;
Le graphique montre que certaines catégories d’applications payantes pour la famille ont un prix moyen plus élevé, mais cela ne se traduit pas forcément par plus d’installations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcnlddyniyfzid6upjrtk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcnlddyniyfzid6upjrtk.png" alt=" " width="800" height="952"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pie chart des genres les plus populaires :&lt;br&gt;
Certaines catégories ou genres dominent clairement en termes d’installations. Par exemple, les applications liées à l’éducation ou à la créativité attirent beaucoup plus d’utilisateurs que d’autres genres moins populaires.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub1gnyxwdm4q469zgqln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub1gnyxwdm4q469zgqln.png" alt=" " width="664" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Observations clés&lt;/strong&gt;&lt;br&gt;
Les genres populaires concentrent la majorité des installations, ce qui indique que les utilisateurs ont des préférences marquées pour certains types d’applications.&lt;br&gt;
Un prix élevé ne garantit pas une popularité plus grande : certaines applications moins chères ou moyennement tarifées ont un nombre d’installations plus important que les applications les plus coûteuses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztq168pidtlt9tu18twc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztq168pidtlt9tu18twc.png" alt=" " width="800" height="982"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ces résultats confirment partiellement notre hypothèse : le prix influence la popularité, mais d’autres facteurs, comme le genre ou la pertinence pour les enfants, jouent également un rôle crucial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Validation de l’hypothèse: **&lt;br&gt;
Notre hypothèse est partiellement confirmée. En effet, le prix des applications payantes influence le nombre d’installations, mais ce n’est pas le seul facteur. Le genre de l’application et sa pertinence pour les enfants jouent un rôle tout aussi important.&lt;br&gt;
**Leçons tirées de l’expérience :&lt;/strong&gt;&lt;br&gt;
Les genres populaires concentrent la majorité des installations.&lt;br&gt;
Les applications moins chères ou à prix moyen peuvent parfois surpasser les applications les plus chères en termes de popularité.&lt;br&gt;
L’analyse des données permet de comprendre les préférences des utilisateurs de manière précise et objective.&lt;br&gt;
&lt;strong&gt;Importance pour la prise de décision commerciale:&lt;/strong&gt;&lt;br&gt;
Les résultats montrent que les développeurs et les responsables marketing peuvent adapter le prix et le type d’application pour maximiser l’adoption. L’analyse scientifique des données devient ainsi un outil stratégique pour le développement et la promotion des applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47ofdcvbfwchon6oag7z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47ofdcvbfwchon6oag7z.png" alt=" " width="721" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El houssine El malki&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Ismail Chaibi&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>google</category>
      <category>python</category>
    </item>
  </channel>
</rss>
