Juin 2019

Volume 34, numéro 6

Cet article a fait l'objet d'une traduction automatique.

[Intelligence artificielle]

Exploration de données avec R

Par Frank La La | Juin 2019 | Obtenir le Code

Frank La VigneDepuis la toute première colonne sur l’intelligence artificielle, tous les exemples de code que j’ai fourni ont été dans Python. C’est parce que Python règne actuellement en tant que la langue de la science des données et l’intelligence artificielle. Mais il n’est pas autonome — les langages tels que Scala et R contiennent un lieu d’importance dans ce champ. Pour les développeurs vous demandez pourquoi ils doivent apprendre un autre langage de programmation, R a les aspects uniques que j’ai rencontrés pas ailleurs dans votre carrière qui a fractionné Java, C#, Visual Basic, Python et Perl. Avec R qui est un langage de lecteurs sont susceptibles de rencontrer dans le champ de la science des données, je pense qu’il est conseillé d’Explorer ici.

R lui-même est une implémentation du langage de programmation S, qui a été créé dans les années 1970 pour un traitement statistique Bell Labs. S a été conçu pour fournir une expérience interactive pour les développeurs qui en temps travaillé avec Fortran pour le traitement statistique. Bien que nous prenons des environnements de programmation interactives acquis aujourd'hui, il était révolutionnaire en temps.

R a été conçue en 1992 par Ross Ihaka et Robert Gentleman à l’Université de Auckland, Nouvelle-Zélande et tire son nom l’initiale de ses créateurs, tandis que la lecture également sur le nom de S. Version 1.0.0 de R a été publiée en 2000 a bénéficié depuis la large adoption « n » dans la recherche aux services en partie grâce à sa large gamme d’algorithmes statistiques intégrées. Il est également facilement extensible par le biais de fonctions et packages d’extension.

Une Communauté de développeurs robuste a vu le jour autour de R, avec le référentiel plus populaires pour les packages R étant la complète Archive réseau (section CRAN R). CRAN a divers packages qui couvrent quoi que ce soit à partir de la prédiction de régularisation bayésien au spectre de traitement pour une haute résolution de flux Infusion SPECTROMETRIE de masse. Une liste complète des packages R disponibles dans CRAN est en ligne sur bit.ly/2DGjuEJ. Je me contenterais de dire que R et CRAN fournissent des outils robustes pour n’importe quel science des données ou d’un projet de recherche scientifique.

Bien démarrer avec R

Le moyen le plus rapide pour exécuter le code R est peut-être via un bloc-notes Jupyter sur le service Azure Notebook. Pour plus d’informations sur les blocs-notes Jupyter, reportez-vous à mon article de février 2018 sur la rubrique à msdn.com/magazine/mt829269. Toutefois, cette fois veillez à choisir R comme langage lors de la création d’un nouveau bloc-notes. Le logo de R doit apparaître dans le coin supérieur droit de la fenêtre du navigateur. Dans une cellule vide, entrez le code suivant et exécutez-le :

# My first R code
print("hello world")
x <- 3.14
y = 1.21
x
y

La sortie doit lire traditionnel message d’accueil « hello world », ainsi que les valeurs 3.14 et 1.21. Rien de tout cela doit provenir en tant que nouveaux ou uniques à tout développeur de logiciels. Notez que l’opérateur d’assignation peut également être « <- » et pas seulement les plus couramment utilisés signe égal. Ils sont syntaxiquement égaux. Notez également que le caractère # introduit un commentaire et qu’elle s’applique au reste de la ligne.

Les vecteurs sont des tableaux unidimensionnel qui peuvent contenir des données numériques, données de type caractère ou logique des données. Elles sont créées avec la fonction c. Le c est l’acronyme « associer ». Entrez ce qui suit dans une nouvelle cellule et exécutez-le :

num_vec <- c(1,2,3.14) # numeric vector
char_vec <- c("blog","podcast","livestream") # character vector
bool_vec <- c(TRUE,TRUE,FALSE) #logical vector
#print out values
num_vec
char_vec
bool_vec

Les valeurs affichées doivent correspondre à des valeurs définies dans le code. Vous pourrez maintenant vous demander si les vecteurs peuvent contenir des types mixtes. Entrez le code suivant dans une nouvelle cellule :

mix_vec <- c(1,"lorem ispum",FALSE)
mix_vec

Alors que le code s’exécute, les lecteurs sharp-eyed remarqueront que des guillemets simples autour de chaque élément du vecteur. Cela indique que les valeurs ont été convertis en valeurs de caractère. R a la fonction typeof pour vérifier le type de n’importe quelle variable donnée. Entrez le code suivant pour examiner les vecteurs déjà créés :

typeof(num_vec)
typeof(char_vec)
typeof(bool_vec)
typeof(mix_vec)

Une autre fonction utile de savoir est ls, qui affiche tous les objets dans l’environnement de travail. Entrez « ls() » dans une nouvelle cellule, exécuter et observer que la sortie contienne les quatre vecteurs simplement définis, ainsi que le x y les variables définies dans la première cellule.

Utilisation des données

La meilleure façon de rencontrer la véritable puissance et l’élégance du langage R est à l’aide à Explorer et manipuler des données. R facilite la charge des jeux de données et d’obtenir rapidement une compréhension de leurs dimensions, de structure et de propriétés statistiques. Pour obtenir des quelques exemples, j’utiliserai un jeu de données tient à moi : statistiques de base sur mon activité de création de blogs. J’ai exécuté et maintenu un blog de technologie depuis 2004 et avez conservé les statistiques de base sur la fréquence à laquelle j’ai publié chaque mois. En outre, j’ai ajouté le nombre de jours dans chaque mois et le billet de moyenne par valeur de jour (PPD). PPD est le nombre de billets dans un mois donné, divisé par le nombre de jours dans le mois en question. J’ai placé le fichier CSV dans la bibliothèque de projet sur le Service de bloc-notes Azure à bit.ly/2V76d2G.

Entrez le code suivant dans une nouvelle cellule pour charger les données dans une trame de données R, une structure de données tabulaires avec des colonnes pour les variables et les lignes des observations et afficher la première six et les trois derniers enregistrements à l’aide de la tête et de la fin des fonctions, respectivement , comme suit :

postData <- read.csv(file="franksworldposts.csv", header=TRUE, sep=",")
head(postData)
tail(postData, 3)

À l’aide de la fonction str, je peux afficher les types de base de données et de structure de la trame de données. Entrez le code suivant dans une nouvelle cellule :

str(postData)

Le résultat doit montrer que la trame de données a 183 observations ou des lignes et se compose de quatre variables ou colonnes. Les publications et Days.in.Month variables sont des entiers, tandis que le fichier PPD est un type numérique. La variable de mois est un facteur avec des 183 niveaux, où le facteur est un type de données qui correspond à des variables catégorielles dans les statistiques. Facteurs sont l’équivalent fonctionnel catégorielles dans Python Pandas et peuvent être des chaînes ou des entiers. Elles sont idéales pour les variables avec un nombre limité de valeurs uniques, ou, en termes de R, niveaux. Dans cette trame de données, le champ mois représente un mois de février 2004 à avril 2019. Comme les dates ne se répètent pas, il n’existe aucune valeur en double par catégorie.

Maintenant que mes données sont chargées, je peux trier et interroger pour explorer davantage. Je peux peut-être glaner des informations. Par exemple, si je veux afficher au cours des 10 premiers mois là où j’étais plus productive sur mon blog, j’aurais pu exécuter un tri décroissant sur la colonne de billets. Pour ce faire, entrez le code suivant dans une nouvelle cellule et exécutez-le :

sortedPostData <- postData[order(-postData$Posts),]
head(sortedPostData, 10)

Au cours des mois plus actifs top 10 ont été dans les trois dernières années. Pour explorer davantage le jeu de données, je peux effectuer une opération de filtrage pour déterminer quel mois ont eu des billets de 100 ou plus. Dans R, la fonction de sous-ensemble fait simplement. Entrez le code suivant pour appliquer le filtre et affectez le résultat à une nouvelle trame de données appelée over100, comme suit :

over100 <- subset(postData, subset = Posts >= 100)
over100

Les résultats ressembler à la sortie précédente des 10 premiers. Pour vérifier le nombre de lignes, utilisez la fonction nrow pour compter le nombre de lignes dans la trame de données, comme suit :

nrow(over100)

La sortie indique qu’il n’y a 11 lignes où il y avait des billets de blog de 100 ou plus dans un mois donné. Avec 100 billets, mai 2005 manqué simplement les mois plus actifs top 10, en place 11. Effacer le seuil de 100 messages par mois n’était pas une étape majeure que j’ai atteindraient à nouveau depuis 11 années. Existe-t-il un modèle de compter le blog de l’intensité uniquement de fondu, puis à nouveau ? Commençons par examiner davantage les données.

Maintenant serait un bon moment pour Explorer comment afficher les lignes et colonnes dans une trame de données. Par exemple, pour afficher la première ligne dans la trame de données, entrez le code suivant pour afficher le contenu de la ligne entière :

postData[1,]

Notez que l’index pour la trame de données commence à 1 et non à 0, comme dans la plupart des autres langages de programmation. Pour afficher uniquement le champ de billets pour la première ligne, entrez le code suivant :

postData[1,2]

Pour afficher toutes les valeurs dans le champ de billets, utilisez la ligne de code suivante :

postData[,2]

Ou bien, vous pouvez également utiliser la syntaxe suivante pour afficher les colonnes en fonction de leur nom. Entrez la ligne de code suivante et vérifiez que sa sortie correspond à la sortie de l’avant de la ligne :

postData$Posts

Comme R a ses racines dans le traitement des statistiques, il existe de nombreuses intégrées dans les fonctions pour afficher la forme de base et les propriétés des données. Utilisez le code suivant pour obtenir une meilleure compréhension des données dans la colonne Post :

mean(postData$Posts)
max(postData$Posts)
min(postData$Posts)
summary(postData$Posts)

À présent, Comparez cela à la colonne PPD, comme suit :

mean(postData$PPD)
max(postData$PPD)
min(postData$PPD)
summary(postData$PPD)

À partir des données, nous voyons que le nombre de billets de varier d’un par mois jusqu'à 225 au cours des 15 dernières années. Que se passe-t-il si je veux Explorer uniquement la première année ? Entrez le code suivant pour afficher uniquement les enregistrements pour la première année de création de blogs, ainsi que des résumés statistiques pour les champs Post et PPD :

postData[1:12,]
summary(postData[1:12,2]) # Posts
summary(postData[1:12,4]) # PPD

Tandis que les numéros ici racontent une histoire, très souvent un graphique révèle plus sur les tendances et modèles. Heureusement, R a graphique riche traçage des fonctionnalités intégrées. Nous allons explorer ces variantes.

Visualisation des données

Création de tracés dans R est très simple et peut être fait avec une seule ligne de code. Nous allons commencer en utilisant les nombres de post et les valeurs PPD pour la première année. Voici le code pour ce faire :

plot(postData[1:12,2], xlab="Month Index", ylab="Posts",
  main="Posts in the 1st Year")
plot(postData[1:12,4], xlab="Month Index", ylab="PPD",
  main="PPD in the 1st Year")

La sortie doit ressembler à Figure 1.

Les publications et les colonnes PPD de traçage
Figure 1 les publications et les colonnes PPD de traçage

Pour la première année de création de blogs, le montre le graphique activité à valider régulièrement a augmenté de la première année avec une courbe de croissance forte entre les troisième et sixième mois. Après une dip de fin de l’été 2004 une fois les strong. En outre, les graphiques révèlent qu’il existe une corrélation élevée entre le nombre de billets dans un mois et le nombre de messages par jour. Si cela peut être intuitive, il est intéressant pour l’afficher sous forme de graphique.

J’aimerais maintenant, consultez les que publications d’un graphique de blog sur l’intervalle de 15 ans entière et voir si un modèle émerge sur une longue période de temps. Entrez le code suivant pour représenter graphiquement l’intervalle de temps complet :

plot(postData[,2], xlab="Month Index", ylab="Posts",
  main="All Posts")

Les résultats, illustrés dans Figure 2, s’affichent une tendance claire, si ce n’est pas un modèle bien défini. Activité de création de blogs a commencé assez forte mais refusée régulièrement, reprenant à nouveau environ 30 mois auparavant. La tendance de fin est franchement vers le haut. Il est également la valeur hors norme significative une.

Billets de plus de 15 ans
Figure 2 billets plus de 15 ans

Matrice de corrélation

Précédemment, j’ai noté une corrélation entre les publications et PPD colonnes. R a une fonction intégrée pour afficher une matrice de corrélation, qui est une table affichant les coefficients de corrélation entre les variables. Chaque cellule dans le tableau montre la corrélation entre deux variables.

Une matrice de corrélation résume les données rapidement et révèle les relations entre variables. Valeurs de plus près à 1 ont une corrélation élevée, tandis que celles utilisées plus près pour 0 ont une corrélation faible. Les valeurs négatives indiquent une corrélation négative. Pour afficher la matrice de corrélation pour la trame de données postData, il est nécessaire pour isoler les champs numériques dans leur propre trame de données, puis appelez la fonction cor. Entrez le code suivant dans une nouvelle cellule et exécutez-le :

postsCor <- postData[, c(2, 3 ,4)]
cor(postsCor)

La sortie révèle une corrélation presque parfaite entre publications et PPD, alors que Days.In.Month a une corrélation légèrement négative pour le fichier PPD.

Pour résumer

Bien que la syntaxe et l’approche de R peuvent différer de langages de programmation traditionnels, je trouve une solution élégante pour « data wrangling » et le traitement mathématique. Pour les ingénieurs logiciels graves sur la création d’une carrière dans la science des données, R est une compétence importante pour la développer.

Dans cet article, j’ai exploré certains des principes fondamentaux du langage de programmation R. Je vous ai montré comment utiliser des fonctions intégrées pour charger et Explorer les données au sein des trames de données, pour obtenir des informations par le biais des statistiques et à des graphiques. En fait, tous les éléments de cet article a été écrit en ce qui est désigné en tant que R « base », car il ne repose pas sur tous les packages tiers. Toutefois, certains utilisateurs R préfèrent la suite de « tidyverse » des packages, qui utilise un style différent. Je vais Explorer que dans un prochain article.


Frank La Vigneworks chez Microsoft en tant qu’IA technologie Solutions professionnel où il aide les entreprises gagnez en efficacité en obtenant le meilleur parti de leurs données avec l’analytique et d’intelligence artificielle. Il a également des hôtes le DataDriven podcast. Il rédige régulièrement à FranksWorld.com et vous pouvez lui regarder sur son canal YouTube, « De Frank type « télévision World » (FranksWorld.TV).

Merci à l'expert technique suivant d'avoir relu cet article : Andy Léonard, David Smith
David Smith est un Cloud Advocate pour Microsoft, spécialisé dans les rubriques de l’intelligence artificielle et l’apprentissage. Depuis 2009, il a été l’Éditeur du blog tours (blog.revolutionanalytics.com), où il écrit régulièrement sur les applications de science des données en se concentrant sur R langage de programmation. Il est également un membre fondateur du Consortium R. Suivez David sur Twitter en tant que @revodavid.


Discuter de cet article sur le forum MSDN Magazine