Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
onlinedb [2022/03/08 11:08]
qcbs [Accessing PSQL]
onlinedb [2025/04/08 14:34] (current)
qcbs [Exercise 3 - SELECT statement]
Line 5: Line 5:
  
  
-[[http://​prezi.com/​z1ib62c5ybmx/|Link to Prezi presentation]]+[[https://​prezi.com/​view/​Rd0TlmRUi3P27mbPYECg/|Link to Prezi presentation]]
  
-{{ ::​prezi_opendb_qcbs.pdf |PDF version of the Prezi presentation}} 
 ===== Useful resources ===== ===== Useful resources =====
  
Line 115: Line 114:
 ====== Group discussion ====== ====== Group discussion ======
  
-[[http://​qcbs.ca/​wp-content/​uploads/​2012/​10/​Crustacean_plankton_Canada.ods|Click here to download the original spreadsheet]]+[[http://​qcbs.ca/​wp-content/​uploads/​2012/​10/​Crustacean_plankton_Canada.ods|Click here to download the original spreadsheet ​(ODS format)]] 
 + 
 +{{ ::​crustacean_plankton_canada.xlsx |Click here to download the original spreadsheet (XLSX format)}}
  
  
Line 324: Line 325:
 CREATE TABLE species (species_id INT NOT NULL, full_name varchar(255),​ short_name VARCHAR(100));​ CREATE TABLE species (species_id INT NOT NULL, full_name varchar(255),​ short_name VARCHAR(100));​
 COPY species FROM '​C:/​bdlibre/​species_acro.csv'​ WITH csv HEADER DELIMITER AS ',';​ COPY species FROM '​C:/​bdlibre/​species_acro.csv'​ WITH csv HEADER DELIMITER AS ',';​
 +</​file>​
 +
 +===== Exercise 3 - Importing data into SQLite in R =====
 +
 +First install the RSQLite package
 +<file rsplus>
 +install.packages('​RSQLite'​)
 +</​file>​
 +
 +To load it in R, you will need to load the DBI package
 +<file rsplus>
 +library(DBI)
 +</​file>​
 +
 +Then, create the file containing the database
 +<file rsplus>
 +mydb <- dbConnect(RSQLite::​SQLite(),​ "​QCBS_Workshop.sqlite"​)
 +</​file>​
 +
 +Set this to where you have downloaded the files
 +<​file>​
 +setwd('​C:​\\User\MyName\Workshop\'​)
 +</​file>​
 +
 +You can now load the CSV files in R as data frames
 +<​file>​
 +lakes <- read.csv('​lakes.csv'​)
 +lakes_species <- read.csv('​lakes_species.csv'​)
 +species_acro <- read.csv('​species_acro.csv'​)
 +</​file>​
 +
 +And then load those dataframes into the database
 +<file rsplus>
 +dbWriteTable(mydb,​ "​lakes",​ lakes)
 +dbWriteTable(mydb,​ "​lakes_species",​ lakes_species)
 +dbWriteTable(mydb,​ "​species_acro",​ species_acro)
 +dbListTables(mydb)
 +</​file>​
 +
 +You can then run most queries below with dbGetQuery. For example: ​
 +<file rsplus>
 +lake_prairies<​-dbGetQuery(mydb,​ "​SELECT * FROM lakes WHERE ecozone='​Prairies'"​)
 </​file>​ </​file>​
 ===== REFERENCES ===== ===== REFERENCES =====
Line 405: Line 448:
  
 **Question 1** :?: -  How many lakes in British Columbia receive more than 3000 mm of precipitation (totp_ann column)? **Question 1** :?: -  How many lakes in British Columbia receive more than 3000 mm of precipitation (totp_ann column)?
-\\ ++answer| 12 ++ \\ +\\ ++answer| ​SELECT count(*) FROM lakes WHERE province='​BRITISH COLUMBIA'​ AND totp_ann>​3000; ​12 ++ \\ 
-**Question 2** :?: -  What is the average Elevation (mean_ele ​column) of all lakes in the Montane Cordillera ​Ecozone ​(use the avg() operator)?​ +**Question 2** :?: -  What is the average Elevation (mean_elev ​column) of all lakes in the Montane Cordillera ​Ecozones ​(use the avg() operator)?​ 
-\\ ++answer| 1364.36 ++ \\+\\ ++answer| ​SELECT avg(mean_elev) FROM lakes WHERE ecoprov LIKE '​%Montane Cordillera'; ​1364.36 ++ \\
 \\ \\
-Note: the % operator is a wildcard used to replace the beginning or the end of a string.+Note: the % operator is a wildcard used to replace the beginning or the end of a string ​in a query using LIKE.
 \\ \\
 Select all lake names that contain the word '​Small'​ Select all lake names that contain the word '​Small'​
Line 428: Line 471:
  
 **Question 3** :?: - What is the maximum latitude of all lakes in Ecozones with names that start with '​Taiga'​ **Question 3** :?: - What is the maximum latitude of all lakes in Ecozones with names that start with '​Taiga'​
-\\ ++answer| 68.8 ++ \\+\\ ++answer| ​SELECT max(latitude) FROM lakes WHERE ecozone like '​Taiga%'; ​68.8 ++ \\
 **Question 4** :?: - How many species of Daphnia are there in the species table? **Question 4** :?: - How many species of Daphnia are there in the species table?
-\\ ++answer| 17 (21 have the word '​Daphnia'​ somewhere in their name) ++ \\+\\ ++answer| ​SELECT count(*) FROM species_acro WHERE full_name like '​Daphnia%'; ​17 (21 have the word '​Daphnia'​ somewhere in their name) ++ \\
  
 ===== Exercise 4 - GROUPING ===== ===== Exercise 4 - GROUPING =====
Line 450: Line 493:
  
 **Question 5** :?: -  Which province has the lake with the highest maximum temperature (column tmax_ann)? **Question 5** :?: -  Which province has the lake with the highest maximum temperature (column tmax_ann)?
-\\ ++answer| BRITISH COLUMBIA 14.60 ++ \\+\\ ++answer| ​SELECT province, max(tmax_ann) FROM lakes GROUP BY province ORDER BY max DESC LIMIT 1; 
 +BRITISH COLUMBIA 14.60 ++ \\
  
 Update statement: ​ Update statement: ​
Line 639: Line 683:
   * In Access, click on External data... ODBC database, and then select "Link to the data source by creating a linked table" and then choose New DSN name. Specify a name for the file, and then fill the information to connect to the database. You can then choose the tables you want to link.    * In Access, click on External data... ODBC database, and then select "Link to the data source by creating a linked table" and then choose New DSN name. Specify a name for the file, and then fill the information to connect to the database. You can then choose the tables you want to link. 
   * Those table will then be linked to PostgreSQL and you can edit then as you would with other Access tables. ​   * Those table will then be linked to PostgreSQL and you can edit then as you would with other Access tables. ​
- 
-========= Basic concepts for the creation of web forms ========= 
- 
-  * [[https://​prezi.com/​xd-ueiomgbj-/​basic-concepts-for-the-creation-of-web-forms/​|Access the Prezi presentation here]] 
- 
- 
-**Useful link** 
-  * [[http://​www.codecademy.com/​|Code Academy]] Great website to learn HTML, CSS, PHP, Javascript, JQuery or other. 
-  * [[http://​link.springer.com/​book/​10.1007/​978-1-4302-0136-6|Beginning PHP and PostgreSQL 8. ]] Book that can be downloaded in e-book format. A bit outdated. 
- 
-**Main steps** 
-  - Creation of a web interface with html code and CSS. 
-  - Creation of a database to accept the form data.  
-  - Creation of PHP code to receive the form data and send it to the database. ​ 
-  - Possibility to enrich the form with Javascript/​JQuery 
- 
-===== Installation of PHP, PostgreSQL, apache and PHPPGAdmin ===== 
- 
-[[https://​bitnami.com/​tag/​postgresql|Download and install the WAPP server for pour Windows, or MAPP for Mac.]] 
- 
-For linux: ​ 
-<​file>​ 
-sudo apt-get install postgresql-9.5 apache2 php5 phppgadmin php5-pgsql 
-</​file>​ 
-===== Part 1 - HTML form ===== 
- 
-Main components needed for an HTML file 
-<file html> 
-<​!DOCTYPE html> 
-<​html>​ 
-<​head>​ 
-<​title>​Document title</​title>​ 
-</​head>​ 
-<​body>​ 
-The page content is here! 
-</​body>​ 
-</​html>​ 
-</​file>​ 
- 
-Creation of a form 
- 
-The basic form 
-<file html> 
-<form method="​POST"​ action="​phpfile.php">​ 
-<input type="​text">​ 
-</​form>​ 
-</​file>​ 
- 
-[[http://​www.w3schools.com/​tags/​att_input_type.asp|List of html input types]] 
- 
-Text input 
-<file html> 
-<input type="​text"​ name="​name_text">​ 
-</​file>​ 
- 
-Dropdown menu 
-<file html> 
-<select name="​select1">​ 
-<option value="​1">​Option 1</​option>​ 
-<option value="​2">​Option 2</​option>​ 
-<option value="​3">​Option 3</​option>​ 
-</​select>​ 
-</​file>​ 
- 
-Check box 
-<file html> 
-<input type="​checkbox"​ name="​poutine"​ value="​yes">​ I like poutine 
-<input type="​checkbox"​ name="​sushis"​ value="​yes">​ I like sushi 
-<input type="​checkbox"​ name="​poutine_sushis"​ value="​yes">​ I like poutine topped with sushi 
-</​file>​ 
- 
-Radio buttons 
-<file html> 
-I am a... 
-<input type="​radio"​ name="​gender"​ value="​m"​ > Man 
-<input type="​radio"​ name="​gender"​ value="​w">​ Woman 
-</​file>​ 
- 
-Text area 
-<file html> 
-<​textarea name="​text_zone">​ 
-</​textarea>​ 
-</​file>​ 
- 
-===== Form styling with CSS ===== 
- 
-[[http://​www.w3schools.com/​cssref/​|CSS reference]] 
- 
-You can give an "​id"​ to any html element, but there can only one element per id.  
-<file html> 
-<input type="​text"​ name="​fieldname"​ id="​fieldid">​ 
-</​file>​ 
- 
-We can then reference it in the header of the css file with the pound symbol (#) 
-<file html> 
-<​head>​ 
-<​style>​ 
-#fieldid { 
- ​width:​300px;​ 
- ​height:​30px;​ 
- ​color:​red;​ 
- ​background-color:#​ffff00;​ 
- ​font-family:​verdana,​arial;​ 
- ​font-size:​14px;​ 
- ​font-weight:​bold;​ 
- ​padding:​0px 5px 0px 5px; #top right bottom left 
-} 
-</​style>​ 
-</​head>​ 
-</​file>​ 
- 
-We can also give a class to any html element. This class can be repeated for multiple elements. 
-<file html> 
-<input type="​text"​ name="​name_text1"​ class="​class_text">​ 
-<input type="​text"​ name="​name_text2"​ class="​class_text">​ 
-<input type="​text"​ name="​name_text3"​ class="​class_text">​ 
-</​file>​ 
- 
-Et on peut y faire référence dans l'​entête de style css du fichier html avec le point "​."​ 
-We can then reference it in the style section of the html header with the "​."​ 
-<file html> 
-<​head>​ 
-<​style>​ 
-.class_text { 
- ​width:​300px;​ 
- ​height:​30px;​ 
- ​color:​red;​ 
- ​background-color:#​ffff00;​ 
- ​font-family:​verdana,​arial;​ 
- ​font-size:​14px;​ 
- ​font-weight:​bold;​ 
- ​padding:​0px 5px 0px 5px; #top right bottom left 
-} 
-</​style>​ 
-</​head>​ 
-</​file>​ 
- 
-====== Part 2 - Creation of the associated database ====== 
- 
-[[https://​secure.qcbs.ca/​systeme/​phppgadmin/​|Link to phppgadmin]] 
- 
- 
-====== Part 3 - PHP language basics ====== 
- 
-All php commands must be contained within 
-<file php> 
-<?php 
-PHP code is here 
-?> 
-</​file>​ 
- 
-Comments 
-<file php> 
-<?php 
-// Comments in a line 
-/* 
-Comments section 
-*/ 
-?> 
-</​file>​ 
- 
-<file php> 
-<?php 
-// Creation of variables 
-$myvar=5; 
-$myvar='​this is text'; 
- 
-// Creation of an array 
-$myarray=array('​value1','​value2','​value3'​);​ 
- 
-echo $myarray[0];​ 
-//value1 
- 
-$myarray=[];​ 
-$myarray[0]='​value1';​ 
-$myarray[1]='​value2';​ 
- 
-// Creation of a "​key-value"​ array 
-$myarray=array( 
-'​key1'​=>'​key1',​ 
-'​key2'​=>'​key2',​ 
-'​key3'​=>'​key3',​ 
-); 
- 
-echo $myarray['​key1'​];​ 
-//value1 
-?> 
-</​file>​ 
- 
-Loops and if/else 
-<file php> 
-<?php 
-if ($f==5){ 
-//Do something 
-}else{ 
-//Do something else 
-} 
- 
-for (i=0;​i<​10;​$i++){ 
-echo '​i='​.$i;​ 
-} 
-//i=0 
-//i=1 
-//... 
-//i=9 
- 
- 
-foreach (myarray as my){ 
-//Do something here with $my 
-?> 
-</​file>​ 
- 
-====== Part 4 - Insertion into PostgreSQL via PHP ====== 
- 
-[[http://​php.net/​manual/​en/​book.pgsql.php|PostgreSQL functions in PHP]] 
- 
-This PHP file is the one which is specified in the "​ACTION"​ part of the <​form>​ field 
-<file php> 
-<?php 
-// Connexion and selection of the database 
-$dbconn = pg_connect("​host=localhost dbname=database user=username password=my_password"​);​ 
- 
-// The $_POST contains all the data from the form. Each '​key'​ in this array corresponds to the name given to each html element. ​ 
-element1=_POST['​name_element1'​];​ 
-element2=_POST['​name_element2'​];​ 
-element1=pg_escape_string(element1);​ 
-element2=pg_escape_string(element2);​ 
- 
-// Inserted into the databse 
-query = "​INSERT INTO ma_table (column1,​column2) VALUES (element1,​$element2)";​ 
-result = pg_query(query);​ 
-// Close the connexion 
-pg_close($dbconn);​ 
-echo "Form successfully entered into the database|";​ 
-?> 
-</​file>​ 
- 
-Accéder à différents types d'​éléments 
-<file php> 
-//Check boxes 
-foreach (_POST['​checkbox'​] as check){ 
-   //​Faire quelque chose ici avec $check 
-} 
-//Convertir les valeurs en liste séparée par des virgules 
-check=implode(',',​_POST['​checkbox'​]);​ 
- 
-</​file>​ 
- 
- 
-Retrouver des éléments dans la base de données 
-<file php> 
-// Connexion et sélection de la base de données 
-$dbconn = pg_connect("​host=localhost dbname=base_donnees user=nom_usager password=mot_de_passe"​);​ 
-  
-$query="​SELECT * FROM nom_table";​ 
-// Insertion dans la base de données 
-result = pg_query(query);​ 
-while (t=pg_fetch_array(result)){ 
- echo t['​prenom'​].'​ '​.t['​nom_famille'​];​ 
-} 
- 
-// Fermer la connexion 
-pg_close($dbconn);​ 
-</​file>​ 
- 
  
 ====== Linking R with PostgreSQL ====== ====== Linking R with PostgreSQL ======
Line 935: Line 714:
 lakes <- tbl(src, "​lakes"​) # Define lakes table lakes <- tbl(src, "​lakes"​) # Define lakes table
 lakes_qc<​-filter(lakes,​ province ​ %=% '​QUEBEC'​) # Select lakes in Quebec lakes_qc<​-filter(lakes,​ province ​ %=% '​QUEBEC'​) # Select lakes in Quebec
-prov_tmean<​-summarise(group_by(lakes, ​province)mean(tmean_an)) # Mean annual temperature per province +prov_tmean<​- ​lakes |> group_by(province) ​|> summarise(mean(tmean_an)) # Mean annual temperature per province 
-prov_tmean=collect(prov_tmean) # Transfer result to standard R data frame +prov_tmean ​<- collect(prov_tmean) # Transfer result to standard R data frame 
-lakes_qc2<​-tbl(src,​ sql("​SELECT * FROM lakes WHERE province='​QUEBEC'"​)) #Perform any SQL statement+lakes_qc2 <- tbl(src, sql("​SELECT * FROM lakes WHERE province='​QUEBEC'"​)) #Perform any SQL statement
 </​file>​ </​file>​