You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1_📊_EDA.py 5.9 KiB

3 days ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #INIT
  2. from init import *
  3. st.set_page_config(page_title="EDA", page_icon="📊")
  4. st.write(r"""<style>.stAppDeployButton { display: none; }</style>""", unsafe_allow_html=True) # Hide Deploy button
  5. # SIDEBAR
  6. # BODY
  7. colored_header(
  8. label="EDA",
  9. description="Exploration et analyse des données",
  10. color_name="red-70",
  11. )
  12. st.markdown("""
  13. ## Source des données
  14. Après l'identification des différentes sources de données possible, nous concluons que la base de données du site [Mushroom Observer](https://mushroomobserver.org) sera celle qui sera la plus exploitable pour obtenir des données de qualité.
  15. Le site dispose d'une [API](https://github.com/MushroomObserver/mushroom-observer/blob/main/README_API.md) permettant un accès à la quasi-totalité des données, permettant d'obtenir une visualisation précise du nombre d'espèces répertoriées ainsi que du nombre d'observations et d'images associées à chaque espèce.
  16. ## Analyse de la taxonomie
  17. Dans un premier temps, nous avons pris connaissance de la taxonomie des champignons qui se structure en plusieurs niveaux de classification.
  18. """)
  19. with st.expander("Afficher un exemple de taxonomie (Champignon de Paris)"):
  20. st.image("../img/taxon.png")
  21. st.markdown("""
  22. Nous avons alors conçu un outil d'exploration visuelle qui nous a permis d'évaluer la cohérence existant dans un même ordre, famille ou espèce de champignon, grâce à l'API du service.
  23. À ce jour, il existe approximativement **35000** genres et de champignon sur terre et certain peuvent compter jusqu'à des milliers d'espèces nommés, tandis que d'autre peuvent n'en compter qu'une seul.
  24. Une analyse visuelle des différents rangs taxonomiques sur des échantillons de photos extraites de Mushroom Observer nous laisse penser que c'est au niveau de l'espèce que nous pouvons observer les plus de traits caractéristiques en vue de réaliser une identification visuelle.
  25. """)
  26. with st.expander("Visualiser les différences visuelle entres les rangs taxonomique"):
  27. st.image("../img/visu_diff_01.png", caption="ORDRE des Pezizales")
  28. st.image("../img/visu_diff_02.png", caption="FAMILLE des Russulaceae")
  29. st.image("../img/visu_diff_03.png", caption="GENRE Cantharellus")
  30. st.image("../img/visu_diff_04.png", caption="ESPÈCE Hypholoma lateritium")
  31. st.divider()
  32. st.image("../img/visu_diff_05.png", caption="Deux Coprinus comatus, même ESPÈCE, mais visuellement très différents")
  33. col1, col2 = st.columns(2)
  34. col1.image("../img/visu_diff_06.jpg")
  35. col2.image("../img/visu_diff_07.jpg")
  36. st.caption("""
  37. Clytocibe nébuleux et Entolome livide sont deux champignons n'appartenant pas au même GENRE
  38. """)
  39. with st.expander("Visualiser les différences visuelles entre les rangs taxonomiques"):
  40. st.image("../img/mo_obs_rang.png")
  41. with st.expander("Visualiser les données de Mushroom Observer, groupées par espèce"):
  42. st.image("../img/mo_img_129_species.png")
  43. # Diagramme circulaire
  44. labels = ['500+ images', '100-500 images', '1-100 images']
  45. values = [130,952,10446]
  46. fig = go.Figure(data=[go.Pie(labels=labels, values=values)])
  47. fig.update_layout(
  48. title_text='Représentation des ESPÈCES en quantité d\'images',
  49. annotations=[dict(text='Légende', x=1.15, y=1.1, showarrow=False)]
  50. )
  51. st.plotly_chart(fig)
  52. st.markdown("""
  53. ## Collecte des données
  54. Parmi les images disponibles, la qualité était très variable avec certaines images où les spécimens étaient mal représentés, en vue microscopique, en schémas, etc ...
  55. """)
  56. with st.expander("Afficher quelques exemples de photo inexploitables"):
  57. col1, col2, col3, col4 = st.columns(4)
  58. col1.image("https://mushroomobserver.org/images/960/1419250.jpg", width=150)
  59. col2.image("https://images.mushroomobserver.org/960/1106928.jpg", width=150)
  60. col3.image("https://images.mushroomobserver.org/960/724003.jpg", width=150)
  61. col4.image("https://images.mushroomobserver.org/960/276963.jpg", width=150)
  62. st.markdown("""
  63. Suite à ce constat, nous avons donc réalisé une sélection manuelle pour assurer la qualité des images de notre Dataset, en appliquant des critères simples.
  64. Le spécimen représenté doit :
  65. - être le sujet principal de l'image.
  66. - être aisément identifiable par l'œil humain.
  67. - occuper au moins la moitié de l'image en hauteur et/ou en largeur.
  68. """)
  69. with st.expander("Afficher quelques exemples de photo avec la qualité recherchée"):
  70. col1, col2, col3 = st.columns(3)
  71. col1.image("https://images.mushroomobserver.org/960/262213.jpg", width=200)
  72. col2.image("https://images.mushroomobserver.org/960/226179.jpg", width=200)
  73. col3.image("https://images.mushroomobserver.org/960/229897.jpg", width=200)
  74. st.markdown("""
  75. Ainsi, nous avons développé un outil pour nous aider à réaliser la collecte des données :
  76. """)
  77. st.video("../img/mo_manual_select_tool.mp4")
  78. col1, col2 = st.columns(2)
  79. col1.link_button(
  80. "🔬 Accéder à l'outil de constitution des datasets",
  81. "http://13.39.133.112:8888/localhost/html/create-qualified-dataset.html"
  82. )
  83. col2.link_button(
  84. "🔬 Accéder à l'outil de consultation des datasets",
  85. "http://13.39.133.112:8888/localhost/html/show-qualified-dataset.html"
  86. )
  87. st.markdown("""
  88. Une fois les photos triées sur le volet, nous avons élaboré un script de webscrapping, exploitant l'API et les restrictions de Mushroom Observer nous permettant d'automatiser la récolte des informations sur les espèces ainsi que le téléchargement de plusieurs milliers de photos HD.
  89. ## Conclusion
  90. Grâce à ces outils, ainsi que l'API de Mushroom Observer, nous avons donc :
  91. * Isoler des espèces de champignons
  92. * Effectuer une sélection minutieuse sur certaines espèces
  93. * Réaliser du webscrapping pour télécharger les donnés structuré et non-structurés
  94. """)