Analyse Python en base de données pour les développeurs SQL
Étape 2: importer des données vers SQL Server à l'aide de PowerShell
Étape 4: Extraction de fonctionnalités des données à l'aide de T-SQL
Le développement de solutions de science des données implique généralement une exploration et une visualisation de données intensives. Dans cette étape, vous explorerez les exemples de données et générerez des graphiques. En outre, vous apprendrez à sérialiser des objets graphiques en Python et à désérialiser et créer des tracés.
[!NOTE] Ce tutoriel montre uniquement le modèle de classification binomiale. Il est également possible de construire d'autres modèles tels que la classification par régression et la classification polynomiale.
L'ensemble de données d'origine fournit l'identifiant de taxi et le dossier de conduite dans des fichiers séparés, mais se joint à medallion, hack_license et pickup_datetime comme clés pour rendre les exemples de données plus faciles à utiliser. Les enregistrements utilisés sont échantillonnés à 1% du nombre original d'enregistrements. L'ensemble de données échantillonné comprend 1 703 957 lignes et 23 colonnes.
** Identificateur de taxi **
** Dossier de conduite et fiche tarifaire **
――Chaque dossier de conduite comprend le lieu et l'heure d'embarquement et de débarquement, ainsi que la distance parcourue.
Chaque enregistrement de tarif contient des informations de paiement telles que le type de paiement, le montant total du paiement et le montant de la puce.
Les trois dernières colonnes peuvent être utilisées pour diverses tâches d'apprentissage automatique.
La colonne tip_amount contient des nombres consécutifs et peut être utilisée comme colonne d'étiquette (variable objectif) pour l'analyse de régression.
La colonne inclinée n'a que des valeurs oui / non et peut être utilisée comme colonne d'étiquette (variable objectif) pour la classification binomiale.
La colonne tip_class a plusieurs ** étiquettes de classe ** et peut être utilisée comme colonne d'étiquette (variable objectif) pour la classification polynomiale.
La valeur utilisée comme colonne d'étiquette est basée sur la colonne tip_amount.
Colonne | règle |
---|---|
tipped | If tip_amount > 0, tipped = 1, otherwise tipped = 0 |
tip_class | Class 0: tip_amount =0 $ Class 1: tip_amount >0 $and tip_amount <=5 $ Class 2: tip_amount >5 $and tip_amount <=10 dollars Class 3: tip_amount >10 dollarsand tip_amount <=20 $ Class 4: tip_amount >20 $ |
La visualisation est importante pour comprendre la distribution des données et des valeurs aberrantes, et Python fournit de nombreux packages pour la visualisation des données. Le module matplotlib comprend de nombreuses fonctionnalités pour créer des histogrammes, des graphiques en nuage de points, des moustaches et d'autres graphiques d'exploration de données.
Dans cette section, vous apprendrez à travailler avec des tracés à l'aide de procédures stockées. Ici, le tracé est traité comme des données de type varbinary.
Le package ** RevoScalePy ** de la bibliothèque Python inclus dans SQL Server 2017 Machine Learning Services est équivalent au package RevoScaleR de la bibliothèque R. Cet exemple utilise rxHistogram pour tracer un histogramme basé sur les données de résultat d'une requête Transact-SQL. Enveloppez-le dans une procédure stockée PlotHistogram pour en faciliter l'utilisation.
Cette procédure stockée renvoie un objet de dessin Python sérialisé sous la forme d'un flux de données varbinary. Vous ne pouvez pas afficher les données binaires directement, mais vous pouvez utiliser le code Python sur le client pour désérialiser les données binaires et enregistrer le fichier image sur l'ordinateur client.
La procédure stockée «SerializePlots» est définie dans SQL Server à l'étape 2: Importer des données vers SQL Server à l'aide de PowerShell (http://qiita.com/qio9o9/items/98df36982f1fbecdf5e7).
Dans l'Explorateur d'objets de Management Studio, développez Programmation> Procédures stockées.
Cliquez avec le bouton droit de la souris sur SerializePlots
et sélectionnez Modifier pour ouvrir le script Transact-SQL dans une nouvelle fenêtre de requête.
CREATE PROCEDURE [dbo].[SerializePlots]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @query nvarchar(max) =
N'SELECT cast(tipped as int) as tipped, tip_amount, fare_amount FROM [dbo].[nyctaxi_sample]'
EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
import pickle
fig_handle = plt.figure()
plt.hist(InputDataSet.tipped)
plt.xlabel("Tipped")
plt.ylabel("Counts")
plt.title("Histogram, Tipped")
plot0 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
plt.clf()
plt.hist(InputDataSet.tip_amount)
plt.xlabel("Tip amount ($)")
plt.ylabel("Counts")
plt.title("Histogram, Tip amount")
plot1 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
plt.clf()
plt.hist(InputDataSet.fare_amount)
plt.xlabel("Fare amount ($)")
plt.ylabel("Counts")
plt.title("Histogram, Fare amount")
plot2 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
plt.clf()
plt.scatter( InputDataSet.fare_amount, InputDataSet.tip_amount)
plt.xlabel("Fare Amount ($)")
plt.ylabel("Tip Amount ($)")
plt.title("Tip amount by Fare amount")
plot3 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
plt.clf()
OutputDataSet = plot0.append(plot1, ignore_index=True).append(plot2, ignore_index=True).append(plot3, ignore_index=True)
',
@input_data_1 = @query
WITH RESULT SETS ((plot varbinary(max)))
END
GO
@ query
définit le texte de la requête passé en entrée @ input_data_1
au bloc de code Python.
-La «figure» de la ** bibliothèque matplotlib ** crée des histogrammes et des diagrammes de dispersion, et ces objets sont sérialisés à l'aide de la ** bibliothèque pickle **.Exécutez la requête suivante dans Management Studio.
EXEC [dbo].[SerializePlots]
Modifiez la chaîne de connexion dans le script Python DeserializeSavePlots.py
dans les fichiers téléchargés en fonction de votre environnement, puis exécutez-la.
** Pour l'authentification SQL Server **
```python:DeserializeSavePlots
import pyodbc
import pickle
import os
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER={SERVER_NAME};DATABASE={DB_NAME};UID={USER_NAME};PWD={PASSOWRD}')
cursor = cnxn.cursor()
cursor.execute("EXECUTE [dbo].[SerializePlots]")
tables = cursor.fetchall()
for i in range(0, len(tables)):
fig = pickle.loads(tables[i][0])
fig.savefig(str(i)+'.png')
print("The plots are saved in directory: ",os.getcwd())
```
** Pour l'authentification Windows **
```Python:DeserializeSavePlots.py
import pyodbc
import pickle
import os
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER={SERVER_NAME};DATABASE={DB_NAME};Trusted_Connection=yes;')
cursor = cnxn.cursor()
cursor.execute("EXECUTE [dbo].[SerializePlots]")
tables = cursor.fetchall()
for i in range(0, len(tables)):
fig = pickle.loads(tables[i][0])
fig.savefig(str(i)+'.png')
print("The plots are saved in directory: ",os.getcwd())
```
> [!NOTE]
Faites correspondre la version d'exécution Python sur le serveur et le client. Faites également correspondre la version de la bibliothèque Python telle que matplotlib utilisée par le client avec le serveur ou créez-en une version supérieure.
Si la connexion réussit, le résultat suivant s'affiche.
Quatre fichiers sont créés dans le répertoire de travail Python.
Affiche le nombre de jetons obtenus et le nombre non obtenu.
Affiche la distribution des quantités de jetons.
Affiche la répartition des tarifs.
Il s'agit d'un diagramme de dispersion avec le tarif sur l'axe des x et le montant de la puce sur l'axe des y.
Étape 4: Extraction de fonctionnalités des données à l'aide de T-SQL
Étape 2: importer des données vers SQL Server à l'aide de PowerShell
Analyse Python en base de données pour les développeurs SQL
Step 3: Explore and Visualize the Data
Machine Learning Services with Python
Recommended Posts