J'étudie généralement uniquement l'apprentissage automatique par moi-même, mais je vois souvent des personnes qui ont besoin de connaissances en SQL sur Twitter, etc. Donc, en apprenant petit à petit en parallèle, j'aimerais en faire une fonction du point de vue de l'extraction des données en premier.
Dans cet article, nous allons:
Je suis désolé si vous l'avez déjà. SQL est un débutant complet, alors jetez un œil (-_-;)
import sqlite3
import pandas as pd
import pandas.io.sql as sql
Créez une base de données d'essai à l'aide de pandas. Je voudrais créer un dataframe comme suit. La valeur est appropriée.
city = ["tokyo","kyoto","oosaka"]
num = [30,20,28]
df_1 = pd.DataFrame({"city":city,"number_of_city":num})
path = "tamesi.db"
conn = sqlite3.connect(path)
cur = conn.cursor()
sql.to_sql(df_1,"study",conn,if_exists="replace",index=None)
cur.close()
con.close()
Cette fois, je l'ai créé dans une base de données appelée tamesi avec une table appelée study.
J'ai fait.
def ret_column(db,table,column=""):
assert bool(column), "no column is spcified"
conn= sqlite3.connect(db)
cur = conn.cursor()
cur.execute("select {} from {}".format(column,table))
val = cur.fetchall()
cur.close()
conn.close()
return val
Mettez ce que vous voulez retirer dans la colonne et retirez-le. J'ai essayé de renvoyer une erreur s'il n'y a rien dans la colonne. Tout ce que nous faisons est d'appeler simplement l'instruction sql en spécifiant db et table.
Créons une fonction qui récupère toutes les données. J'ai fait.
def ret_all(db,table):
conn = sqlite3.connect(db)
cur = conn.cursor()
cur.execute("select * from {}".format(table))
val = cur.fetchall()
cur.close()
conn.close()
return val
C'était plus facile car il n'y avait pas de désignation de colonne.
path = "tamesi.db"
table="study"
val_1 = ret_column(path,table,column="city")
val_2 = ret_all(path,table)
print(val_1)
print(val_2)
#Sortie ci-dessous
[('tokyo',), ('kyoto',), ('oosaka',)]
[('tokyo', 30), ('kyoto', 20), ('oosaka', 28)]
J'ai pu confirmer qu'il avait été correctement retiré.
J'ai essayé de l'implémenter facilement avec la classe.
class ret_from_db():
def __init__(self,db):
self.db = db
def ret_column(self,table,column=""):
assert bool(column), "no column is spcified"
conn= sqlite3.connect(self.db)
cur = conn.cursor()
cur.execute("select {} from {}".format(column,table))
val = cur.fetchall()
cur.close()
conn.close()
return val
def ret_all(self,table):
conn = sqlite3.connect(self.db)
cur = conn.cursor()
cur.execute("select * from {}".format(table))
val = cur.fetchall()
cur.close()
conn.close()
return val
J'ai juste collé les deux premiers ensemble, rien de spécial.
get_db = ret_from_db(db="tamesi.db")
val_1 = get_db.ret_column(table="study",column="city")
val_2 = get_db.ret_all(table="study")
print(val_1)
print(val_2)
#Sortie ci-dessous
[('tokyo',), ('kyoto',), ('oosaka',)]
[('tokyo', 30), ('kyoto', 20), ('oosaka', 28)]
J'ai pu le faire correctement.
Je ne sais pas si c'est pratique car je ne l'ai pas utilisé (-_-;) Ensuite, s'il peut être lu par des pandas, il sera plus facile à utiliser pour sklean etc., donc j'aimerais le faire.