Recherche de site Web

Manipulation du Big Data pour le plaisir et le profit Partie 2


Dans la première partie de cette série sur la manipulation du big data – que vous voudrez peut-être lire en premier si vous ne l’avez pas encore lu ; Manipulation des mégadonnées pour le plaisir et le profit, partie 1 – nous avons longuement discuté des différentes terminologies et de certaines des idées entourant les mégadonnées, ou plus précisément en ce qui concerne la manipulation, la transformation, la mutilation, le grignotage, l’analyse, la lutte, la transformation et la manipulation des données. Souvent, ces termes sont utilisés de manière interchangeable et leur utilisation se chevauche souvent. Nous avons également examiné le premier ensemble d’outils Bash qui peuvent nous aider dans le travail lié à ces termes.

Cet article explorera un autre ensemble d’outils Bash qui peuvent nous aider lors du traitement et de la manipulation de données volumineuses basées sur du texte (ou dans certains cas binaires). Comme mentionné dans l’article précédent, la transformation des données en général est un sujet semi-sans fin car il existe des centaines d’outils pour chaque format de texte particulier. N’oubliez pas que l’utilisation d’outils Bash n’est parfois pas la meilleure solution, car un outil standard peut faire un meilleur travail. Cela dit, cette série est spécifiquement destinée à toutes les (nombreuses) autres fois où aucun outil n’est disponible pour obtenir vos données dans le format de votre choix.

Et, si vous voulez savoir pourquoi la manipulation du big data peut être à la fois rentable et amusante... veuillez d’abord lire la partie 1.

Dans ce tutoriel, vous allez apprendre :

  • Plus de techniques de big data wrangling/parsing/traitement/manipulation/transformation
  • Quels sont les outils Bash disponibles pour vous aider, en particulier pour les applications basées sur du texte
  • Exemples montrant différentes méthodes et approches

Manipulation du Big Data pour le plaisir et le profit Partie 2

Configuration logicielle requise et conventions utilisées

Exemple 1 : awk

Pour en revenir aux données que nous avons utilisées dans notre premier article de cette série (une petite partie téléchargée de la base de données Wikipédia), nous pouvons utiliser awk pour commencer à manipuler les données :

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442
269019710:31197816:Linux Is My Friend
grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | awk '{print $2}'
Is

Tout d’abord, nous avons cherché un élément spécifique dans le fichier de base de données de texte plat. Une fois que nous avons eu la sortie (269019710:31197816 :Linux Is My Friend), nous avons ensuite essayé d’afficher la deuxième colonne en utilisant l’instruction {print $2} (imprimer la deuxième colonne) pour awk, mais cela a échoué, rendering Is. La raison en est que l’utilitaire awk utilisera par défaut des espaces (espace ou tabulation) comme séparateur. Nous pouvons le confirmer en lisant le manuel (man awk), ou simplement en testant ;

echo -e 'test1\ttest2'
test1   test2
echo -e 'test1\ttest2' | awk '{print $2}'
test2
echo -e 'test1 test2' | awk '{print $2}'
test2

Dans la première ligne, nous insérons une expression régulière (regex) tab (\t) dans la sortie à générer par echo et nous activons la syntaxe d’expression régulière en spécifiant -e à echo. Si vous souhaitez en savoir plus sur les expressions régulières dans Bash et ailleurs, veuillez consulter les expressions régulières Bash pour les débutants avec des exemples, les expressions régulières Bash avancées avec des exemples et les expressions régulières Python semi-apparentées avec des exemples.

Par la suite, nous utilisons à nouveau awk pour imprimer la deuxième colonne {print $2} et voir que la sortie cette fois est correcte. Enfin, nous testons avec ' ' et voyons à nouveau le résultat correctement comme test2. Nous pouvons également voir dans notre exemple précédent que le texte 269019710:31197816 :Linux et Is est séparé par un espace - ce qui correspond au fonctionnement de awk. Les informations détaillées sur le fonctionnement d’awk sont utiles ici, car les données sont souvent formatées de différentes manières. Vous pouvez voir des espaces, des tabulations, des deux-points, des points-virgules et d’autres symboles utilisés comme séparateurs de champs. Et cela devient encore plus complexe lorsqu’il s’agit de formats HTML, XML, JSON, MD, etc.

Changeons le séparateur en utilisant l’option -F pour awk :

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | awk -F':' '{print $2}'
31197816

Exactement ce dont nous avons besoin. -F est décrit dans le manuel awk comme le séparateur de champ de saisie. Vous pouvez voir comment utiliser awk pour imprimer diverses colonnes perçues dans les données (vous pouvez simplement échanger les $2 contre $3 pour imprimer la troisième colonne, etc.), afin que nous puissions le traiter davantage dans le format que nous aimons. Pour arrondir, changeons l’ordre des champs et laissons tomber un champ dont nous ne pensons pas avoir besoin :

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | awk -F':' '{print $3"\t"$2}' > out
cat out
Linux Is My Friend  31197816

Génial! Nous avons changé l’ordre des colonnes 2 et 3, et envoyé la sortie dans un nouveau fichier, et changé le séparateur en onglet (grâce à l’insertion « \t » dans l’instruction print). Si nous traitons maintenant simplement l’ensemble du fichier :

awk -F':' '{print $3"\t"$2}' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 > out

L’ensemble des données d’entrée est structurellement modifié au nouveau format ! Bienvenue dans le monde amusant de la manipulation du Big Data. Vous pouvez voir comment, avec quelques commandes Bash simples, nous sommes en mesure de restructurer/modifier substantiellement le fichier comme bon nous semble. J’ai toujours trouvé que Bash se rapprochait le plus de l’ensemble d’outils idéal pour la manipulation de données volumineuses, combiné à des outils prêts à l’emploi et peut-être au codage Python. L’une des principales raisons en est la multitude d’outils disponibles dans Bash qui facilitent la manipulation du big data.

Vérifions maintenant notre travail

wc -l enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442
329956 enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442
wc -l out
329956 out
grep '31197816' out
Linux Is My Friend  31197816

Génial - le même nombre de lignes se trouve dans le fichier original et le fichier modifié. Et l’exemple spécifique que nous avons utilisé précédemment est toujours là. Tout va bien. Si vous le souhaitez, vous pouvez creuser un peu plus loin avec des commandes telles que head et tail contre les deux fichiers pour vérifier que les lignes ont correctement changé sur l’ensemble du tableau.

Vous pouvez même essayer d’ouvrir le fichier dans votre éditeur de texte préféré, mais je recommanderais personnellement vi car le nombre de lignes peut être important, et tous les éditeurs de texte ne gèrent pas bien cela. VI prend un certain temps à apprendre, mais c’est un voyage qui vaut la peine d’être entrepris. Une fois que vous devenez bon avec vi, vous ne regarderez jamais en arrière – il grandit en vous pour ainsi dire.

Exemple 2 : tr

Nous pouvons utiliser l’utilitaire tr pour traduire ou supprimer certains caractères :

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | tr ':' '\t'
269019710   31197816    Linux Is My Friend

Ici, nous changeons notre séparateur de champ deux-points ( :) en tabulation (\t). Facile et direct, et la syntaxe parle d’elle-même.

Vous pouvez également utiliser tr pour supprimer n’importe quel caractère :

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | tr -d ':' | tr -d '[0-9]'
Linux Is My Friend

Vous pouvez voir comment nous avons d’abord supprimé : de la sortie en utilisant l’option de suppression (-d) pour tr, et ensuite nous avons supprimé - en utilisant une expression régulière - tout nombre dans la plage 0-9 ([0-9]).

Notez que changer le :: en \t ne nous permet toujours pas d’utiliser awk sans changer le séparateur de champs, car il y a maintenant à la fois des tabulations (\t) et des espaces dans la sortie, et les deux sont vus par défaut (dans awk) comme des séparateurs de champs. Ainsi, l’impression de $3 avec awk ne conduit qu’au premier mot (avant qu’un espace ne soit visible) :

grep '31197816' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 | tr ':' '\t' | awk '{print $3}'
Linux

Cela souligne également pourquoi il est toujours très important de tester, retester et tester encore toutes vos expressions régulières et instructions de commande transformant/manipulant des données.

Conclusion

La multitude d’outils de Bash rend la manipulation de big data amusante et, dans certains cas, très facile. Dans ce deuxième article de la série, nous avons continué à explorer les outils Bash qui peuvent nous aider avec la manipulation du Big Data.

Bon voyage, mais souvenez-vous de l’avertissement donné à la fin du premier article... Le Big Data peut sembler avoir son propre esprit, et il y a des dangers inhérents à travailler avec beaucoup de données (ou avec une surcharge d’entrée, comme dans la vie quotidienne), et il s’agit (principalement) de la surcharge de perception, de l’excès de perfection, du temps perdu et de la surutilisation du cortex préfrontal (et d’autres zones du cerveau). Plus le projet, les données sources ou le format cible sont complexes, plus le risque est important. Parlant de beaucoup d’expérience ici.

Un bon moyen de contrer ces dangers est de fixer des limites de temps strictes pour travailler avec des ensembles de données complexes et volumineux. Par exemple, 2 heures (au maximum) par jour. Vous serez surpris de ce que vous pouvez accomplir si vous vous fixez un objectif de deux heures dédiées et que vous ne le dépassez pas régulièrement. Ne dis pas que je ne t’ai 🙂 pas prévenu

Faites-nous part de vos réflexions ci-dessous - de grands ensembles de données intéressants, des stratégies (à la fois techniques et de style de vie/approche) et d’autres idées sont les bienvenues !

Articles connexes: