Bien qu’à l’heure où ce texte est rédigé, l’intégration Snowflake-Streamlit ne soit pas encore disponible, FrostyFriday considère cela comme une raison de plus pour prendre de l’avance et commencer à développer vos compétences en Streamlit.
Même si Streamlit est basé sur Python, et que nous vous encourageons à apprendre Python, coder en Python n’est pas obligatoire pour ce défi. Le squelette de script ci-dessous devrait vous permettre de relever ce défi sans aucune connaissance en Python.
Pour un guide sur comment commencer, rendez-vous ici.
Alors… quel est le défi ?
Et bien, une entreprise dispose d’une table de faits des paiements que vous pouvez trouver ici. Ils veulent que FrostyData les aide en ingérant les données et en créant le graphique ci-dessous.
Résultat :
1. Le script ne doit pas exposer les mots de passe, cela poserait un gros problème de sécurité! Au lieu de cela, il vaut mieux utiliser les secrets Streamlit.
2. Le titre doit être « Payments in 2021 ».
3. Il doit avoir un filtre ‘date minimale’ qui spécifie la date la plus ancienne qu’un utilisateur peut sélectionner. Par défaut, cela devrait être réglé sur la date la plus ancienne présente dans le jeu de données.
4. Il doit avoir un filtre ‘date maximale’ qui spécifie la date la plus récente qu’un utilisateur peut sélectionner. Par défaut, cela devrait être réglé sur la date la plus récente présente dans le jeu de données.
5. Il devrait avoir un graphique en ligne avec les dates sur l’axe X et le montant sur l’axe Y. Les données doivent être agrégées au niveau hebdomadaire.
Script squelette pour les non-Pythonistes :
import streamlit as st
import pandas as pd
import snowflake.connector
# Normally, a secrets file should be saved in C:\Users\<your_user>\.streamlit
# as secrets.toml
ctx = snowflake.connector.connect(
user="""<enter username here using a secrets.toml file>""",
password="""<enter password here using a secrets.toml file>""",
account="""<enter account here using a secrets.toml file>"""
)
cs = ctx.cursor()
# WARNING - When aggregating columns in this query, keep the column names the same.
query = """<enter SQL here>"""
@st.cache # This keeps a cache in place so the query isn't constantly re-run.
def load_data():
"""
In Python, def() creates a function. This particular function connects to your Snowflake
account and executes the query above. If you have no Python experience, I recommend leaving
this alone.
"""
cur = ctx.cursor().execute(query)
payments_df = pd.DataFrame.from_records(iter(cur), columns=[x[0] for x in cur.description])
payments_df['PAYMENT_DATE'] = pd.to_datetime(payments_df['PAYMENT_DATE'])
payments_df = payments_df.set_index('PAYMENT_DATE')
return payments_df
payments_df = load_data()
# This creates what we call a 'dataframe' called
# payments_df, think of this as a table. To create
# the table, we use the above function. So, basically,
# every time your write 'payments_df' in your code, you're
# referencing the result of your query.
def get_min_date():
"""
This function returns the earliest date present in the dataset.
When you want to use this value, just write get_min_date().
"""
return min(payments_df.index.to_list()).date()
def get_max_date():
"""
This function returns the latest date present in the dataset.
When you want to use this value, just write get_max_date().
"""
return max(payments_df.index.to_list()).date()
def app_creation():
"""
This function is the one your need to edit.
"""
# <Create a title here>
min_filter = # <Create a slider for the min date>
max_filter = # <Create a slider for the max date>
mask = (payments_df.index >= pd.to_datetime("""<your minimum filter should go here>""")) \
& (payments_df.index <= pd.to_datetime("""<your maximum filter should go here>"""))
payments_df_filtered = payments_df.loc[mask] #This line creates a new dataframe (table) that filters
# your results to between the range of your min
# slider, and your max slider.
# Create a line chart using the new payments_df_filtered dataframe.
app_creation() # The function above is now invoked.
Et n’oubliez pas, si vous souhaitez participer aux défis:
1. Inscrivez-vous en tant que membre de Frosty Friday. –> Vous pouvez le faire en cliquant sur la barre latérale, puis en cliquant sur ‘REGISTER‘ (notez que s’inscrire à notre liste de diffusion ne vous donne pas de compte Frosty Friday).
2. Publiez votre code sur GitHub et rendez-le accessible au public (consultez notre guide si vous ne savez pas comment faire, disponible ici)
3. Postez l’URL dans les commentaires du défi.
Si vous avez des questions techniques que vous souhaitez poser à la communauté, vous pouvez les poser ici, sur notre thread dédié.
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.