Pandas contre SQL — Partie 4 : Pandas est plus pratique

Nov 25 2022
tl;dr : Dans cet article, nous comparons Pandas et SQL sur le troisième des trois axes : la commodité.
Photo de gamene à Openverse (CC BY 2.0)

tl;dr : Dans cet article, nous comparons Pandas et SQL sur le troisième des trois axes : la commodité. Nous décrivons six façons dont le modèle de données de la trame de données Pandas est plus pratique pour les cas d'utilisation de la science des données et de l'apprentissage automatique.

Dans cette quatrième offre de notre bataille épique entre Pandas et SQL, nous illustrons comment Pandas est plus pratique que SQL pour la science des données et l'apprentissage automatique. Pandas a été conçu par des scientifiques de données pour des scientifiques de données et a bénéficié de milliers d'améliorations apportées avec enthousiasme par la communauté scientifique des données open source, le tout dans un souci d'utilité et de facilité d'utilisation. Il n'est donc pas surprenant que ce soit un bon ajustement!

Avant de commencer, si vous avez manqué nos précédentes offres Pandas vs SQL, vous pouvez toujours vous rattraper ici : Partie 1 : L'aire de restauration et le restaurant de style Michelin , Partie 2 : Les pandas sont plus concis et Partie 3 : Les pandas sont plus Souple . Nos articles précédents portaient sur des comparaisons du modèle de données de dataframe et de l' algèbre de dataframe — dans cet article, nous nous concentrons sur l'ergonomie des dataframes : en particulier, comment les dataframes sont utilisés.

Pour une recherche facile, voici une liste pratique des multiples façons dont les dataframes Pandas sont plus pratiques que leurs homologues relationnels/SQL :

  1. Dans Pandas, vous pouvez construire progressivement des requêtes au fur et à mesure ; en SQL, vous ne pouvez pas.
  2. Dans Pandas, opérer et nommer les résultats intermédiaires est facile ; en SQL, c'est plus difficile.
  3. Dans Pandas, il est facile d'avoir une idée rapide des données ; en SQL, c'est beaucoup plus difficile.
  4. Pandas a un support natif pour la visualisation ; SQL ne le fait pas.
  5. Pandas facilite l'apprentissage automatique ; SQL ne le fait pas.
  6. Pandas préserve l'ordre pour aider les utilisateurs à vérifier l'exactitude des étapes intermédiaires - et permet aux utilisateurs d'opérer sur commande ; SQL ne le fait pas.

1. Dans Pandas, vous pouvez construire progressivement des requêtes au fur et à mesure ; en SQL, vous ne pouvez pas.

Une distinction importante entre Pandas et SQL est que Pandas permet aux utilisateurs de superposer progressivement des opérations au-dessus d'autres pour construire des requêtes plus compliquées. Dans le même temps, les utilisateurs peuvent inspecter les résultats intermédiaires de ces fragments de requête, dans le but de vérifier l'exactitude au fur et à mesure. Le débogage est un jeu d'enfant avec Pandas !

Donc, dans notre ensemble de données, disons que nous voulons nous concentrer sur les permis correspondant à Geary Street. Nous pouvons extraire ce sous-ensemble de l'ensemble de données comme suit :

Une chose que nous avons peut-être remarquée est que Geary s'étend sur de nombreux quartiers, encodés ici en 'Neighborhoods - Analysis Boundaries'. Supposons que nous voulions uniquement examiner cette colonne 'Neighborhoods - Analysis Boundaries'(et supprimer les 42 colonnes restantes), nous pouvons simplement ajouter la clause [['Neighborhoods - Analysis Boundaries']]à la fin de l'expression précédente.

Cela fait beaucoup de lignes : 1966. Ensuite, comme nos deux dernières étapes, disons que nous voulons identifier les quartiers de Geary avec le plus de permis. Une façon de le faire est d'ajouter un 'sort_values'suivi d'un 'value_counts'.

Intéressant, donc le meilleur quartier est le Tenderloin, suivi de Outer Richmond. Notez que même si cette séquence d'opérations peut certainement être exprimée en SQL, cela aurait été beaucoup plus pénible. Nous ne pouvons pas simplement ajouter des opérateurs à la fin d'une requête SQL : il existe des emplacements spécifiques dans la requête où nous aurions besoin d'apporter des modifications. Par exemple, pour changer les colonnes affichées, nous aurions besoin de modifier la SELECTpartie de la requête dès le début. Pandas vous permet plutôt de penser de manière opérationnelle (ou impérative) - et de construire votre résultat final étape par étape, tout en examinant les résultats intermédiaires.

2. Dans Pandas, opérer et nommer les résultats intermédiaires est facile ; en SQL, c'est plus difficile.

Pandas, puisqu'il est intégré dans un véritable langage de programmation, Python, emprunte de nombreux idiomes de programmation familiers pour opérer sur des dataframes. En particulier, nous pouvons affecter une expression dataframe à une variable ; ces variables peuvent ensuite être exploitées et/ou affectées à d'autres variables.

Prenons un exemple simple pour illustrer. Étant donné que cet ensemble de données provient d'un défi de nettoyage des données, supposons que nous soupçonnions qu'il pourrait y avoir de nombreuses valeurs nulles. Nous pouvons vérifier combien il y en a par colonne, en utilisant ce qui suit :

Cela fait beaucoup de valeurs nulles ! Supposons que je veuille créer une version nettoyée de mon ensemble de données, en supprimant les colonnes avec trop de valeurs nulles, avec le seuil fixé à 190 000 valeurs non nulles. (L'ensemble de données global compte environ 199 000 lignes.)

Wow - le nombre de colonnes passe de 43 à seulement 13. Comme nous l'avons vu ici, nous avons pu définir facilement une nouvelle variable 'sf_permits_cleaned'(tout comme nous avons créé la variable précédente 'missing_values_count'), en utilisant l'affectation de variable programmatique standard et ensuite opérer dessus. Cette approche est naturelle pour les programmeurs. En SQL, on peut obtenir un effet similaire via des vues, mais définir des vues et les utiliser est moins intuitif et plus fastidieux.

3. Dans Pandas, il est facile d'avoir une idée rapide des données ; en SQL, c'est beaucoup plus difficile.

Pandas offre des moyens rapides de comprendre les données et les métadonnées d'une dataframe. Nous en avons déjà vu des exemples lorsque nous imprimons une dataframe en utilisant simplement son nom de variable, ou si nous utilisons les fonctions 'head/tail()'. Pour plus de commodité, pour tenir sur un écran, certaines lignes et colonnes sont masquées '...'pour aider les utilisateurs à obtenir une image de haut niveau des données.

Si nous voulons inspecter un résumé des colonnes et de leurs types, une fonction pratique offerte par Pandas est 'info()', qui répertorie les colonnes de l'ensemble de données, leurs types et le nombre de valeurs nulles. Nous pouvons utiliser cette fonction pour inspecter le dataframe que nous venons de créer.

Il semble donc que la seule colonne contenant encore des valeurs nulles soit la colonne de description ; toutes les autres colonnes sont entièrement remplies.

Une autre fonction Pandas utile, ciblée sur les colonnes numériques, est 'describe()', qui fournit un résumé pratique de ces colonnes, avec des nombres, des moyennes, des écarts types et des quantiles.

Hmm, il semble donc y avoir un numéro de rue 0. Curieux !

Malheureusement, SQL n'offre pas de commodités similaires pour comprendre la forme et les caractéristiques de son ensemble de données - vous devriez écrire des requêtes personnalisées à cette fin. Pour l'exemple précédent, la longueur de cette requête serait proportionnelle au nombre de colonnes numériques.

4. Pandas a un support natif pour la visualisation ; SQL ne le fait pas.

L'analyse des tables de nombres n'obtiendra que votre jusqu'à présent. Souvent, ce dont vous avez besoin, ce sont des moyens visuels de donner un sens aux informations dans les dataframes. Contrairement à SQL, qui vous oblige à charger vos données dans un outil de visualisation ou BI (Business Intelligence) séparé, Pandas offre un support de visualisation intégré directement dans la bibliothèque. Par exemple, je peux simplement appeler 'plot()'pour voir un graphique à barres 'Current Status'des différents permis.

Il semble que la grande majorité des permis appartiennent aux catégories complétée, délivrée et déposée, avec un petit nombre dans d'autres catégories.

La puissance de cette fonctionnalité est évidente : contrairement aux bases de données SQL, vous n'avez pas besoin de quitter la bibliothèque si vous souhaitez générer des visualisations : vous pouvez le faire directement ! Si vous souhaitez « améliorer » votre expérience de visualisation, il existe un certain nombre de bibliothèques de visualisation qui s'intègrent étroitement aux pandas, notamment Matplotlib , seaborn et altair . Et si vous êtes paresseux, comme moi, et que vous ne souhaitez pas du tout écrire de code pour générer des visualisations, vous pouvez utiliser Lux , notre bibliothèque de recommandations de visualisation native Pandas, pour générer automatiquement des visualisations pour vous, toutes adaptées à votre ensemble de données. . En savoir plus sur Lux ici .

5. Pandas facilite l'apprentissage automatique ; SQL ne le fait pas.

L'apprentissage automatique est un élément clé de la science des données, permettant aux utilisateurs non seulement de donner un sens à des données non structurées telles que des images, des vidéos et du texte, mais également de faire des prédictions sur l'avenir. Étant donné que Pandas est étroitement intégré à l'écosystème de la science des données, il n'est pas surprenant qu'il fonctionne bien avec les bibliothèques d'apprentissage automatique, y compris les plus courantes comme scikit-learn , pytorch , numpy , entre autres. Ici, nous utiliserons la bibliothèque spaCy , une bibliothèque de traitement du langage naturel relativement nouvelle, pour donner un sens à une colonne de texte dans notre ensemble de données. SpaCy propose divers modèles de mots pré-entraînés pour effectuer l'incorporation de mots, la reconnaissance d'entités nommées, le marquage d'une partie de la parole, la classification, entre autres. Pour installer spaCy, nous exécutons les commandes suivantes :

Maintenant que nous l'avons installé, supposons que nous voulions comprendre le type d'activités (par exemple, démolition, enlèvement, remplacement, etc.) impliquées dans chaque demande de permis (c'est-à-dire ligne) dans notre jeu de données. C'est difficile à comprendre dès le départ, mais c'est enfoui dans le champ de texte, 'Description'. Utilisons le package pour extraire une liste des verbes mentionnés dans ce champ. Dans le cadre de cela, nous chargeons d'abord le modèle de spaCy 'en_core_web_md', puis le suivons en extrayant chaque verbe dans la tokenisation de la description à l'aide du modèle, en le stockant dans un tableau, comme suit.

Ainsi, comme nous pouvons le voir ci-dessus, le modèle fait un travail raisonnable d'extraction des verbes, même s'il en manque quelques-uns (par exemple, install). Avec la disponibilité croissante de grands modèles pré -entraînés (par exemple, les modèles de transformateurs), je m'attends à une intégration encore plus grande de ces modèles dans le traitement quotidien des données au sein des pandas.

L'intégration de l'apprentissage automatique dans les bases de données SQL est extrêmement difficile. Alors que certaines bases de données proposent des constructions spécifiques à l'apprentissage automatique (par exemple, BigQuery ML), les utilisateurs sont limités dans ce qu'ils peuvent accomplir et n'ont pas de contrôle précis. Une autre approche kludgy consiste à utiliser les UDF pour faire de l'apprentissage automatique. Souvent, ce qui finit par se produire, ce sont les utilisateurs qui exportent leurs données en dehors du contexte de la base de données pour effectuer un apprentissage automatique.

6. Pandas préserve l'ordre pour aider les utilisateurs à vérifier l'exactitude des étapes intermédiaires - et permet aux utilisateurs d'opérer sur commande ; SQL ne le fait pas.

Les pandas préservent l'ordre. Ceci est important pour le débogage et la validation car on construit des expressions de requête plus compliquées. En continuant avec mon exemple après l'extraction spaCy des verbes, disons que je veux utiliser la 'explode'fonction pour développer les verbes individuels dans la trame de données précédente en plusieurs lignes, une par verbe ; Je peux le faire simplement comme suit.

Notez que j'ai maintenant trois lignes correspondant à la ligne 1 d'origine, une avec chacun des verbes extraits. Cette préservation de l'ordre facilite la vérification de l'exactitude de cette étape. En utilisant une base de données SQL, ce serait beaucoup plus difficile car l'ordre n'est pas garanti, il faudrait donc regarder l'intégralité de la sortie pour voir où une ligne donnée s'est terminée (ou ajouter à la place une clause pour appliquer un ordre de sortie spécifique).ORDER BY

Conclusion

Dans cet article, nous avons couvert diverses façons dont Pandas est plus pratique que SQL du point de vue de l'utilisateur final. Cela inclut la facilité de construction correcte des requêtes Pandas, via la préservation de l'ordre, la composition incrémentielle, la dénomination et la manipulation, et l'inspection en cours de route. Cela inclut également l'intégration avec d'autres besoins en science des données et en analyse de données, y compris la visualisation et l'apprentissage automatique : Pandas permet à la fois aux utilisateurs de visualiser et d'effectuer une modélisation prédictive entièrement à l'intérieur de Pandas, mais fournit également les crochets pour connecter les sorties à d'autres bibliothèques de visualisation et d'apprentissage automatique populaires et packages, en particulier au sein de l'écosystème PyData. En fin de compte, Pandas se trouve dans un langage de programmation à part entière, Python, et hérite de tout son pouvoir constitutif.

Si vous pouvez penser à d'autres exemples où Pandas est plus pratique que SQL, ou vice versa, nous aimerions l'entendre ! N'hésitez pas à répondre à notre tweet , et suivez-nous sur Twitter ou LinkedIn pour plus de contenu Pandas/Python/science des données !