Dans un précédent article, nous vous avons parlé des bases de données, leur importance et leur intérêt. Ici je vais vous parler de SQLite, une bibliothèque donnant accès à un moteur de base de données relationnelle qui vous permettra de travailler avec du SQL et cela sans avoir besoin de configurer ou d'installer quoi que ce soit : simple, rapide et efficace. Vous pouvez à loisir l'inclure dans tous vos projets, le code source de SQLite étant dans le domaine public.
Si vous voulez la définition complète de la technologie utilisée et des principales différences avec les autre SGBDR, je vous invite à vous rendre sur la page wikipédia qui est très bien écrite.
Création de la base de données
Normalement vous l'avez déjà installé sur votre ordinateur : ouvrez un terminal et tapez la commande sqlite3, vous devriez obtenir (Pour les allergiques de la ligne de commande, vous pourrez créer et lire des bases de données SQLite avec ce plugin Firefox).
1 2 3 4 5 6 |
$ sqlite3<br> SQLite version 3.7.7 2011-06-25 16 :35 :41<br> Enter ".help" for instructions<br> Enter SQL statements terminated with a ";"<br> sqlite> ;<br> Si ça ne marche pas, j'ai du mentir quelques lignes plus tôt, et il va vous falloir installer le tout manuellement : téléchargez SQLite <a href="https://www.sqlite.org/download.html">ici</a> et suivez les étapes d'installation fournies. |
Si c'est ok, vous êtes arrivés sur le "shell" de SQLite, l'endroit où vous pourrez "parler" à votre base de données. Pour l'instant quittez le prompt et spécifiez le nom de votre base de données (masuperbdd.sqlite):
1 2 3 4 5 6 7 |
sqlite> ; .q<br> $ sqlite3 masuperbdd.sqlite<br> SQLite version 3.7.7 2011-06-25 16 :35 :41<br> Enter ".help" for instructions<br> Enter SQL statements terminated with a ";"<br> sqlite> ;<br> <strong>Ca y est, vous avez créé votre première base de données</strong>, elle s'appelle <em>"masuperbdd.sqlite"</em>. Vous pouvez l'utiliser comme un fichier texte : la déplacer, la partager, l'envier par mail, bref tout ce que vous pouvez faire avec un fichier texte usuel. C'est là un gros point fort de SQLite, vous avez une base de données sans efforts, que vous pourrez emporter partout avec vous ;) Indépendamment de la plateforme sur laquelle vous vous trouvez ! |
Bon maintenant, vous avez toutes (ou presque) les commandes SQL à votre disposition et vous pouvez vous amuser. Là où je veux en venir, c'est qu'une fois fait cet effort (si on peut parler d'effort), une base de données est beaucoup plus pratique et remplace facilement un fichier CSV que certains ont l'habitude d'importer dans dans un tableur (genre Excel) qui plantera dès que vous dépasserez 20000 lignes et qui devient un vrai cauchemar dès que vous voulez complexifier un peu les choses.
Un exemple
Prenez par exemple ce fichier (volontairement petit — oui, 2800 lignes c'est peu); récupéré sur Ensembl via Biomart, j'ai sélectionné les gènes de la souris sur le chromosome 4, en y indiquant leur position sur le génome et leur teneur en bases GC (GC content).
Plutôt que de charger ce fichier dans un tableur nous allons donc l'importer dans une base de données SQLite et pour cela nous n'avons besoin que de quelques lignes de commande.
Préparation des données
Téléchargé depuis Biomart la première ligne du fichier indique le nom de chaque colonne, il faut donc supprimer l'en-tête. Grâce à awk je récupère toutes les lignes du fichier sauf la première et j'écris le résultat dans un autre fichier : simple_sans_header.csv.
1 2 |
$ awk 'FNR>1{print}' simple.csv > ; simple_sans_header.csv<br> Connexion sur ma base de données : je peux choisir l'extension qui me convient (le plus utilisé est .sqlite ou .db pour database). |
1 2 |
$ sqlite3 mesgenes.db<br> Création de la table correspondant à mon header. Pour connaître les types vous pouvez vous rendre <a href="https://www.sqlite.org/datatype3.html">sur le site SQLite</a>, il n'y en a pas beaucoup à retenir. |
1 2 |
sqlite> ; create table genes (id integer, gene_start integer, gene_end integer, GCcontent real );<br> Spécifier le séparateur utilisé dans le fichier (ici csv veut dire "comma separated value", donc une virgule). |
1 2 |
sqlite> ;.separator ","<br> Importer le fichier <em>simple_sans_header</em>.csv dans la table <em>genes</em>. |
1 2 |
sqlite> ;.import simple_sans_header.csv genes<br> <strong>C'est fait !!! Pas plus difficile que ça.</strong> |
Utilisation
Vous pouvez maintenant lire votre base de données :
Lister toute la table :
1 2 |
sqlite> ; select * from genes ;<br> Personnellement je préfère l'affichage par défaut sur le terminal, donc je remet le séparateur à "|", et j'aime bien aussi voir le nom des champs que j'ai sélectionnés : |
1 2 3 |
sqlite> ;.separator "|"<br> sqlite> ; .h on<br> Les trois premiers gènes dans la liste rangés par "start": |
1 2 3 4 5 6 |
sqlite> ; select * from genes order by gene_start asc limit 3 ;<br> id|gene_start|gene_end|GCcontent<br> ENSMUSG00000094042|139922728|139922814|60.92<br> ENSMUSG00000077214|64444730|64444858|44.96<br> ENSMUSG00000092677|44221195|44221267|53.42<br> Combien de gènes j'ai en tout ? |
1 2 3 |
sqlite> ;select count(*) from genes ;<br> 2826<br> Quel est le GCcontent max, et le moyen ? |
1 2 3 4 |
sqlite> ;select max(GCcontent), avg(GCcontent) as moyenne from genes ;<br> max(GCcontent) | moyenne<br> 87.69 | 47.1973000707714<br> Combien de gènes ont un GCcontent > ; 60% et un nombre de paires de bases > ; à 1500 ? |
1 2 3 4 |
sqlite> ;select count(*) as nb_genes from genes where GCcontent > ; 60 and (gene_end - gene_start) > ; 1500 ;<br> nb_genes<br> 13<br> Leur ID ? |
1 2 3 4 5 6 7 |
sqlite> ;select id from genes where GCcontent > ; 60 and (gene_end - gene_start) > ; 1500 ;<br> id<br> ENSMUSG00000067261<br> ENSMUSG00000028445<br> ENSMUSG00000087288<br> ...<br> Super ! Il me fallait justement cette liste d'IDs pour faire une autre requête dans Biomart et filtrer les résultats. |
Mais il me les faudrait dans un fichier texte… Ici je peux les recopier à la main, mais s'il y en a 100 voire 1000 ?
Exporter
Je quitte ma base de données :
1 2 |
sqlite> ; .q<br> Je ré-exécute la même sélection en précisant le nom de ma base de données et en prenant soin de mettre ma sélection entre guillemets, puis je redirige l'output vers un fichier : |
1 2 |
$ sqlite3 mesgenes.db "select id from genes where GCcontent > ; 60 and gene_end — gene_start > ; 1500;" mes_genes.txt<br> Vous pouvez aussi directement spécifier la redirection dans le shell SQLite comme ceci : |
1 2 |
sqlite> ; .output mes_genes.txt<br> A vous de choisir :) |
Voilà, c'est tout pour aujourd'hui, c'est simple et vous pouvez voir que cela peut être bien plus puissant car vous pouvez ajouter d'autres tables et des relations entre elles.
Un moyen direct et rapide pour structurer vos données.
Laisser un commentaire