linear regression
25
Aggregation/linar_regression.md
Normal file
25
Aggregation/linar_regression.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Agrégation - Régression linéaire
|
||||
|
||||
> La régression linéaire est un modèle qui cherche à établir une relation linéaire entre une variable, dite expliquée, et une ou plusieurs variables, dites explicatives.
|
||||
|
||||
La régression linéaire simple cherche une droite : y = a⋅x + b
|
||||
|
||||
- a est la pente de la droite (slope),
|
||||
- b est l’ordonnée à l’origine (intercept).
|
||||
|
||||

|
||||
|
||||
`REGR_SLOPE(y, x)` Calcule la pente de la droite (a),
|
||||
|
||||
`REGR_INTERCEPT(y, x)` Calcule l’ordonnée à l’origine (b).
|
||||
|
||||
`REGR_R2(y, x)` Coefficient de détermination (entre 0 et 1).
|
||||
|
||||
Mesure la qualité de l’ajustement :
|
||||
|
||||
- 1 : la droite explique parfaitement les données,
|
||||
- 0 : aucun lien linéaire,
|
||||
|
||||
plus c’est proche de 1, plus la droite est pertinente.
|
||||
|
||||
`REGR_COUNT(y, x)` Nombre de paires (x, y) effectivement utilisées (hors NULL) pour effectuer le calcul. Équivalent à COUNT(*) mais appliqué seulement sur les deux colonnes non nulles.
|
||||
@@ -14,6 +14,7 @@
|
||||
<line x1="30" y1="330" x2="30" y2="13" stroke="#000" marker-end="url(#arrow)" />
|
||||
<line x1="10" y1="312.5" x2="330" y2="312" stroke="#000" marker-end="url(#arrow)" />
|
||||
<path stroke="#000" d="M55 317.5v-10M80 317.5v-10M105 317.5v-10M130 317.5v-10M155 317.5v-10M180 317.5v-10M205 317.5v-10M230 317.5v-10M255 317.5v-10M280 317.5v-10M305 317.5v-10M25 287.5h10M25 262.5h10M25 237.5h10M25 212.5h10M25 187.5h10M25 162.5h10M25 137.5h10M25 112.5h10M25 87.5h10M25 62.5h10M25 37.5h10"/>
|
||||
<text x="10" y="30">b</text>
|
||||
<g fill="#008">
|
||||
<ellipse rx="4" ry="4" cx="205" cy="186.5" />
|
||||
<ellipse rx="4" ry="4" cx="155" cy="213.75" />
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
5
Home.md
5
Home.md
@@ -1,6 +1,7 @@
|
||||
# fonctions avancées du langage SQL
|
||||
|
||||
- [Fonctions d'agrégation](aggregation.md)
|
||||
- [Régression linéaire](Aggregation/linear_regression.md)
|
||||
- [Jointure](Jointure.md)
|
||||
- [Sous requêtes](sousrequete.md)
|
||||
- [Vues et fonctions](View.md)
|
||||
@@ -11,6 +12,10 @@
|
||||
|
||||
## Exercices
|
||||
|
||||
### Jointures
|
||||
|
||||
- Lister les articles dont la famille n'existe pas.
|
||||
|
||||
Arrondir les montant à deux chiffres après la virgule.
|
||||
|
||||
- 1a : Pour chaque adhérent unique, afficher son nom et son nombre de ticket.
|
||||
|
||||
@@ -287,36 +287,6 @@ Retourne la valeur la plus fréquente.
|
||||
|
||||
Ces fonctions sont en réalité des [fenêtres analytiques](window.md) mais peuvent être utilisées pour explorer la distribution.
|
||||
|
||||
## Régressions linéaires simples
|
||||
|
||||
Ces fonctions permettent de réaliser des régressions linéaires simples directement en SQL, c’est-à-dire d’ajuster une droite de tendance entre deux ensembles de données numériques (variables x et y).
|
||||
|
||||
On suppose qu’on a deux variables :
|
||||
- x : la variable explicative (indépendante),
|
||||
- y : la variable à expliquer (dépendante).
|
||||
|
||||
La régression linéaire simple cherche une droite : y = a⋅x + b
|
||||
|
||||
- a est la pente (slope).
|
||||
- b est l’ordonnée à l’origine (intercept),
|
||||
|
||||

|
||||
|
||||
|
||||
`REGR_SLOPE(y, x)` Calcule la pente de la droite (a),
|
||||
|
||||
`REGR_INTERCEPT(y, x)` Calcule l’ordonnée à l’origine (b).
|
||||
|
||||
`REGR_R2(y, x)` Coefficient de détermination (entre 0 et 1).
|
||||
|
||||
Mesure la qualité de l’ajustement :
|
||||
|
||||
- 1 : la droite explique parfaitement les données,
|
||||
- 0 : aucun lien linéaire,
|
||||
|
||||
plus c’est proche de 1, plus la droite est pertinente.
|
||||
|
||||
`REGR_COUNT(y, x)` Nombre de paires (x, y) effectivement utilisées (hors NULL) pour effectuer le calcul. Équivalent à COUNT(*) mais appliqué seulement sur les deux colonnes non nulles.
|
||||
|
||||
## Agrégats d'intervalles
|
||||
|
||||
|
||||
@@ -18,7 +18,29 @@ Parce qu’elle doit produire une table (un jeu de résultats) indépendante **a
|
||||
- Dans le SELECT, une sous-requête peut être corrélée (elle utilise des colonnes de la requête principale) ou non.
|
||||
- Dans le WHERE, idem : elle peut être corrélée (EXISTS, IN dépendant de la ligne en cours) ou non (test fixe).
|
||||
|
||||
**Exercice : ** Sélectionner les articles dont le prix est supérieur à la moyenne générale des prix des articles.
|
||||
## Sous-requête scalaire
|
||||
|
||||
> une sous-requête scalaire est une sous-requête qui retourne **une seule valeur** (un scalaire, c’est-à-dire une seule ligne et une seule colonne).
|
||||
|
||||
Elle peut être utilisée partout où une valeur simple est attendue, par exemple :
|
||||
|
||||
- dans la liste de sélection (SELECT),
|
||||
- dans une clause WHERE,
|
||||
- dans une clause HAVING,
|
||||
- parfois même dans la clause ORDER BY.
|
||||
|
||||
```sql
|
||||
SELECT *
|
||||
FROM table
|
||||
WHERE nom_colonne = (
|
||||
SELECT valeur
|
||||
FROM table2
|
||||
LIMIT 1
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
**Exercice :** Sélectionner les articles dont le prix est supérieur à la moyenne générale des prix des articles.
|
||||
|
||||
Dans un langage procédural on utiliserait deux étapes pour obtenir le résultat. Première étape calculer la moyenne des prix
|
||||
|
||||
@@ -44,6 +66,14 @@ select * from article
|
||||
|
||||
Cette fois ci il faut calculer les moyennes des prix pour chacune des familles et comparer les articles avec la moyenne correspondante. Ce n'est plus possible en programmation procédurale.
|
||||
|
||||
```sql
|
||||
select avg(prix) from article where famille_code = '02CHOU';
|
||||
select * from article where prix > 3.68 and famille_code = '02CHOU';
|
||||
|
||||
select avg(prix) from article where famille_code = '02NARU';
|
||||
select * from article where prix > 2.47 and famille_code = '02NARU';
|
||||
```
|
||||
|
||||
La sous requête permet de calculer pour chaque ligne d'article la moyenne correspondante à la famille du dit article.
|
||||
|
||||
```sql
|
||||
@@ -56,33 +86,6 @@ select code, article, prix from article a1
|
||||
|
||||
Remarquez l'utilisation de l'alias `a1` sur la table de la requête principale pour pouvoir être injecter sans confusion dans la sous requête car celle-ci utilise la même table.
|
||||
|
||||
## Sous-requête scalaire
|
||||
|
||||
> une sous-requête scalaire est une sous-requête qui retourne **une seule valeur** (un scalaire, c’est-à-dire une seule ligne et une seule colonne).
|
||||
|
||||
Elle peut être utilisée partout où une valeur simple est attendue, par exemple :
|
||||
|
||||
- dans la liste de sélection (SELECT),
|
||||
- dans une clause WHERE,
|
||||
- dans une clause HAVING,
|
||||
- parfois même dans la clause ORDER BY.
|
||||
|
||||
```sql
|
||||
SELECT *
|
||||
FROM table
|
||||
WHERE nom_colonne = (
|
||||
SELECT valeur
|
||||
FROM table2
|
||||
LIMIT 1
|
||||
)
|
||||
```
|
||||
|
||||
Sélection des articles dont le prix est supérieur à la moyenne des prix de tous les articles
|
||||
|
||||
```sql
|
||||
select * from article
|
||||
where prix > (select avg(prix) from article);
|
||||
```
|
||||
|
||||
## Conditions
|
||||
|
||||
|
||||
11
window.md
11
window.md
@@ -226,13 +226,14 @@ from ca_mensuel
|
||||
order by mois
|
||||
```
|
||||
|
||||
### Moyenne glissante sur 3 mois
|
||||
**Exercice :** Calculer la moyenne glissante sur 3 mois
|
||||
|
||||
```sql
|
||||
select *, round(AVG(total) over (
|
||||
order by mois
|
||||
rows between 2 preceding and current row
|
||||
), 2) as moyenne_glissante_3
|
||||
select *,
|
||||
round(AVG(total) over (
|
||||
order by mois
|
||||
rows between 2 preceding and current row
|
||||
), 2) as moyenne_glissante_3
|
||||
from ca_mensuel
|
||||
order by mois
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user