Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,10 @@ Ce dépôt GitHub propose des pages Jupyter et des service Dash pour analyser de
Note : le choix du français est volontaire, il s'agit de promouvoir l'usage
des données ouvertes auprès du grand public en France. Cela étant il
est possible d'en faire une version dans une autre langue.

### Wine production :

Download les datas sur le lien suivant : https://www.kaggle.com/datasets/zynicide/wine-reviews/download
et mettez les dans delta/category/data

Le projet est dans le dossier category
139 changes: 139 additions & 0 deletions category/dataAnalysis.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
from distutils.command.clean import clean
from email.mime import application
from re import S
from statistics import mean
from sys import maxsize
from turtle import color, update
import dash
from dash import Dash, dcc, html, Input, Output
from pyparsing import col
import dash_bootstrap_components as dbc
from dash import dcc
from dash import html
import pandas as pd
import numpy as np
import plotly.graph_objs as go
import plotly.express as px

# La donnée est téléchargeable au lien suivant : https://www.kaggle.com/datasets/zynicide/wine-reviews/download

class WineStats():

def __init__(self, application = None):
wine_df = pd.concat([
pd.read_csv('category/data/winemag-data_first150k.csv'),
pd.read_csv('category/data/winemag-data-130k-v2.csv')
])

self.df = wine_df
self.app = dash.Dash(external_stylesheets = [dbc.themes.BOOTSTRAP])

self.figure = px.scatter_geo()
self.figure2 = self.second_graph()

self.main_layout = html.Div(children=[
html.H2(children="Production mondiale du vin", style={"text-align": "center"}),
html.Div([dcc.Graph(id = 'main-graph', figure=self.figure)]),
html.Div([dcc.Dropdown(['Production', 'Prix', 'Score (sur WineEnthusiastic)'], 'Production', id='dropdown')],
style={'margin': 'auto', 'width': '200px'}),
html.Div([dcc.Graph(id = 'second-graph', figure=self.figure2), ],
style={'margin': 'auto', "width": "50%"}),
html.Br(),
dcc.Markdown("""
Les graphiques sont interactifs. En passant la souris sur les bulles vous auvez une infobulle.
Vous avez la possibilité de vous déplacer à la souris dans la carte ainsi que de zoomer et dézoomer avec
la roulette de la souris. Même chose pour le graphique.

#### Notes :
* D'après le dataset les Etats-Unis sont les plus gros producteurs de vins. Suivi par la France et l'italie.
* En termes de continents, l'europe est le plus gros producteurs de vin dans le monde.
* La moyenne de prix la plus haute est en Suisse, suivi par la france et la Hongrie.
Ces valeurs peuvent sans doute être croisée avec le coût de la vie dans ces pays pour comprendre les chiffres. (notamment pour la suisse et la france)
* Les moyennes de score sont à mettre en question vis à vis du nombre de data dans certains pays,
cependant on remarque une tendance à avoir de meilleurs résultats dans l'ouest de l'europe.

* On peut remarquer que aux prix les plus bas on retrouve de tout les scores. Plus le prix augmente, plus la tendance à avoir de bons scores s'accentue.

#### À propos
Données: https://www.kaggle.com/datasets/zynicide/wine-reviews

* (c) 2022 Paul Renoux - Paul Messéant
""")
], style={
'horizontal-align': 'center'
})

if application:
self.app = application
else:
self.app = dash.Dash(__name__)
self.app.layout = self.main_layout

self.app.callback(
dash.dependencies.Output('main-graph', 'figure'),
dash.dependencies.Input('dropdown', 'value')
)(self.update_graph)

def update_graph(self, value):
count_sf = self.df['country'].value_counts()
count_df = pd.DataFrame({'pays':count_sf.index, 'nombre de bouteilles produites':count_sf.values})
count_df = count_df.round()

price_mean_sf = self.df[~self.df['price'].isnull()].groupby('country')['price'].mean()
price_mean_df = pd.DataFrame({'pays':price_mean_sf.index, 'moyenne des prix':price_mean_sf.values})
price_mean_df = price_mean_df.round(2)

score_mean_sf = self.df[~self.df['points'].isnull()].groupby('country')['points'].mean()
score_mean_df = pd.DataFrame({'pays':score_mean_sf.index, 'moyenne des scores':score_mean_sf.values})
score_mean_df = score_mean_df.round(2)

fig = px.scatter_geo()

fig1 = px.scatter_geo(count_df,
locations="pays",
size="nombre de bouteilles produites",
locationmode="country names",
color="nombre de bouteilles produites"
)

fig2 = px.scatter_geo(price_mean_df,
locations="pays",
size="moyenne des prix",
locationmode="country names",
color="moyenne des prix"
)

fig3 = px.scatter_geo(score_mean_df,
locations="pays",
size="moyenne des scores",
locationmode="country names",
color="moyenne des scores",
)

if (value == "Production"):
fig.add_traces(fig1.data)
elif (value == "Prix"):
fig.add_traces(fig2.data)
elif (value == "Score (sur WineEnthusiastic)"):
fig.add_traces(fig3.data)
return fig

def second_graph(self):

clean_df = self.df[~self.df['price'].isnull()]
clean_df = clean_df[~clean_df['points'].isnull()]

fig = px.scatter(clean_df,
x=clean_df['price'],
y=clean_df['points'],
hover_data=['designation', 'taster_name'],
title="Les scores des vins en fonction de leurs prix",
)
return fig

def run(self, debug=False, port=8050):
self.app.run_server(host="127.0.0.1", debug=debug, port=port)

if __name__ == '__main__':
ws = WineStats()
ws.run(port=8055)
139 changes: 139 additions & 0 deletions dataAnalysis.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
from distutils.command.clean import clean
from email.mime import application
from re import S
from statistics import mean
from sys import maxsize
from turtle import color, update
import dash
from dash import Dash, dcc, html, Input, Output
from pyparsing import col
import dash_bootstrap_components as dbc
from dash import dcc
from dash import html
import pandas as pd
import numpy as np
import plotly.graph_objs as go
import plotly.express as px

# La donnée est téléchargeable au lien suivant : https://www.kaggle.com/datasets/zynicide/wine-reviews/download

class WineStats():

def __init__(self, application = None):
wine_df = pd.concat([
pd.read_csv('category/data/winemag-data_first150k.csv'),
pd.read_csv('category/data/winemag-data-130k-v2.csv')
])

self.df = wine_df
self.app = dash.Dash(external_stylesheets = [dbc.themes.BOOTSTRAP])

self.figure = px.scatter_geo()
self.figure2 = self.second_graph()

self.main_layout = html.Div(children=[
html.H2(children="Production mondiale du vin", style={"text-align": "center"}),
html.Div([dcc.Graph(id = 'main-graph', figure=self.figure)]),
html.Div([dcc.Dropdown(['Production', 'Prix', 'Score (sur WineEnthusiastic)'], 'Production', id='dropdown')],
style={'margin': 'auto', 'width': '200px'}),
html.Div([dcc.Graph(id = 'second-graph', figure=self.figure2), ],
style={'margin': 'auto', "width": "50%"}),
html.Br(),
dcc.Markdown("""
Les graphiques sont interactifs. En passant la souris sur les bulles vous auvez une infobulle.
Vous avez la possibilité de vous déplacer à la souris dans la carte ainsi que de zoomer et dézoomer avec
la roulette de la souris. Même chose pour le graphique.

#### Notes :
* D'après le dataset les Etats-Unis sont les plus gros producteurs de vins. Suivi par la France et l'italie.
* En termes de continents, l'europe est le plus gros producteurs de vin dans le monde.
* La moyenne de prix la plus haute est en Suisse, suivi par la france et la Hongrie.
Ces valeurs peuvent sans doute être croisée avec le coût de la vie dans ces pays pour comprendre les chiffres. (notamment pour la suisse et la france)
* Les moyennes de score sont à mettre en question vis à vis du nombre de data dans certains pays,
cependant on remarque une tendance à avoir de meilleurs résultats dans l'ouest de l'europe.

* On peut remarquer que aux prix les plus bas on retrouve de tout les scores. Plus le prix augmente, plus la tendance à avoir de bons scores s'accentue.

#### À propos
Données: https://www.kaggle.com/datasets/zynicide/wine-reviews

* (c) 2022 Paul Renoux - Paul Messéant
""")
], style={
'horizontal-align': 'center'
})

if application:
self.app = application
else:
self.app = dash.Dash(__name__)
self.app.layout = self.main_layout

self.app.callback(
dash.dependencies.Output('main-graph', 'figure'),
dash.dependencies.Input('dropdown', 'value')
)(self.update_graph)

def update_graph(self, value):
count_sf = self.df['country'].value_counts()
count_df = pd.DataFrame({'pays':count_sf.index, 'nombre de bouteilles produites':count_sf.values})
count_df = count_df.round()

price_mean_sf = self.df[~self.df['price'].isnull()].groupby('country')['price'].mean()
price_mean_df = pd.DataFrame({'pays':price_mean_sf.index, 'moyenne des prix':price_mean_sf.values})
price_mean_df = price_mean_df.round(2)

score_mean_sf = self.df[~self.df['points'].isnull()].groupby('country')['points'].mean()
score_mean_df = pd.DataFrame({'pays':score_mean_sf.index, 'moyenne des scores':score_mean_sf.values})
score_mean_df = score_mean_df.round(2)

fig = px.scatter_geo()

fig1 = px.scatter_geo(count_df,
locations="pays",
size="nombre de bouteilles produites",
locationmode="country names",
color="nombre de bouteilles produites"
)

fig2 = px.scatter_geo(price_mean_df,
locations="pays",
size="moyenne des prix",
locationmode="country names",
color="moyenne des prix"
)

fig3 = px.scatter_geo(score_mean_df,
locations="pays",
size="moyenne des scores",
locationmode="country names",
color="moyenne des scores",
)

if (value == "Production"):
fig.add_traces(fig1.data)
elif (value == "Prix"):
fig.add_traces(fig2.data)
elif (value == "Score (sur WineEnthusiastic)"):
fig.add_traces(fig3.data)
return fig

def second_graph(self):

clean_df = self.df[~self.df['price'].isnull()]
clean_df = clean_df[~clean_df['points'].isnull()]

fig = px.scatter(clean_df,
x=clean_df['price'],
y=clean_df['points'],
hover_data=['designation', 'taster_name'],
title="Les scores des vins en fonction de leurs prix",
)
return fig

def run(self, debug=False, port=8050):
self.app.run_server(host="127.0.0.1", debug=debug, port=port)

if __name__ == '__main__':
ws = WineStats()
ws.run(port=8055)
7 changes: 7 additions & 0 deletions delta.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from importlib.resources import path
import dash
from dash import dcc
from dash import html
from energies import energies
from population import population
from deces import deces
from category import dataAnalysis

# external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

Expand All @@ -12,6 +14,7 @@
pop = population.WorldPopulationStats(app)
nrg = energies.Energies(app)
dec = deces.Deces(app)
cat = dataAnalysis.WineStats(app)

main_layout = html.Div([
html.Div(className = "row",
Expand All @@ -26,6 +29,8 @@
html.Br(),
dcc.Link(html.Button('Décès journaliers', style={'width':"100%"}), href='/deces'),
html.Br(),
dcc.Link(html.Button('Vins dans le monde', style={'width':"100%"}), href='/category'),
html.Br(),
html.Br(),
html.Br(),
html.Center(html.A('Code source', href='https://github.com/oricou/delta')),
Expand Down Expand Up @@ -66,6 +71,8 @@ def display_page(pathname):
return pop.main_layout
elif pathname == '/deces':
return dec.main_layout
elif pathname == '/category':
return cat.main_layout
else:
return home_page

Expand Down