Python - Bases de données relationnelles
Nous pouvons nous connecter à des bases de données relationnelles pour analyser les données en utilisant le pandasbibliothèque ainsi qu'une autre bibliothèque supplémentaire pour la mise en œuvre de la connectivité de base de données. Ce package est nommésqlalchemy qui fournit des fonctionnalités de langage SQL complètes à utiliser en python.
Installation de SQLAlchemy
L'installation est très simple en utilisant Anaconda dont nous avons discuté dans le chapitre Data Science Environment . En supposant que vous avez installé Anaconda comme décrit dans ce chapitre, exécutez la commande suivante dans la fenêtre d'invite Anaconda pour installer le package SQLAlchemy.
conda install sqlalchemy
Lecture de tableaux relationnels
Nous utiliserons Sqlite3 comme base de données relationnelle car elle est très légère et facile à utiliser. Bien que la bibliothèque SQLAlchemy puisse se connecter à diverses sources relationnelles, notamment MySql, Oracle et Postgresql et Mssql. Nous créons d'abord un moteur de base de données, puis nous nous connectons au moteur de base de données à l'aide duto_sql fonction de la bibliothèque SQLAlchemy.
Dans l'exemple ci-dessous, nous créons la table relationnelle en utilisant le to_sqlfonction d'un dataframe déjà créé en lisant un fichier csv. Ensuite, nous utilisons leread_sql_query fonction de pandas pour exécuter et capturer les résultats de diverses requêtes SQL.
from sqlalchemy import create_engine
import pandas as pd
data = pd.read_csv('/path/input.csv')
# Create the db engine
engine = create_engine('sqlite:///:memory:')
# Store the dataframe as a table
data.to_sql('data_table', engine)
# Query 1 on the relational table
res1 = pd.read_sql_query('SELECT * FROM data_table', engine)
print('Result 1')
print(res1)
print('')
# Query 2 on the relational table
res2 = pd.read_sql_query('SELECT dept,sum(salary) FROM data_table group by dept', engine)
print('Result 2')
print(res2)
Lorsque nous exécutons le code ci-dessus, cela produit le résultat suivant.
Result 1
index id name salary start_date dept
0 0 1 Rick 623.30 2012-01-01 IT
1 1 2 Dan 515.20 2013-09-23 Operations
2 2 3 Tusar 611.00 2014-11-15 IT
3 3 4 Ryan 729.00 2014-05-11 HR
4 4 5 Gary 843.25 2015-03-27 Finance
5 5 6 Rasmi 578.00 2013-05-21 IT
6 6 7 Pranab 632.80 2013-07-30 Operations
7 7 8 Guru 722.50 2014-06-17 Finance
Result 2
dept sum(salary)
0 Finance 1565.75
1 HR 729.00
2 IT 1812.30
3 Operations 1148.00
Insertion de données dans des tables relationnelles
Nous pouvons également insérer des données dans des tables relationnelles à l'aide de la fonction sql.execute disponible dans les pandas. Dans le code ci-dessous, nous avons précédé le fichier csv en tant qu'ensemble de données d'entrée, le stockons dans une table relationnelle, puis insérons un autre enregistrement à l'aide de sql.execute.
from sqlalchemy import create_engine
from pandas.io import sql
import pandas as pd
data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')
# Store the Data in a relational table
data.to_sql('data_table', engine)
# Insert another row
sql.execute('INSERT INTO data_table VALUES(?,?,?,?,?,?)', engine, params=[('id',9,'Ruby',711.20,'2015-03-27','IT')])
# Read from the relational table
res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)
Lorsque nous exécutons le code ci-dessus, cela produit le résultat suivant.
id dept name salary start_date
0 1 IT Rick 623.30 2012-01-01
1 2 Operations Dan 515.20 2013-09-23
2 3 IT Tusar 611.00 2014-11-15
3 4 HR Ryan 729.00 2014-05-11
4 5 Finance Gary 843.25 2015-03-27
5 6 IT Rasmi 578.00 2013-05-21
6 7 Operations Pranab 632.80 2013-07-30
7 8 Finance Guru 722.50 2014-06-17
8 9 IT Ruby 711.20 2015-03-27
Suppression de données des tables relationnelles
Nous pouvons également supprimer des données dans des tables relationnelles à l'aide de la fonction sql.execute disponible dans les pandas. Le code ci-dessous supprime une ligne en fonction de la condition d'entrée donnée.
from sqlalchemy import create_engine
from pandas.io import sql
import pandas as pd
data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')
data.to_sql('data_table', engine)
sql.execute('Delete from data_table where name = (?) ', engine, params=[('Gary')])
res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)
Lorsque nous exécutons le code ci-dessus, cela produit le résultat suivant.
id dept name salary start_date
0 1 IT Rick 623.3 2012-01-01
1 2 Operations Dan 515.2 2013-09-23
2 3 IT Tusar 611.0 2014-11-15
3 4 HR Ryan 729.0 2014-05-11
4 6 IT Rasmi 578.0 2013-05-21
5 7 Operations Pranab 632.8 2013-07-30
6 8 Finance Guru 722.5 2014-06-17