[PYTHON] Essayez de tracer la concentration environnementale des composés organiques du fluor sur une carte à l'aide de données ouvertes

Visualisons la concentration de composé organique de fluor en utilisant les données enregistrées dans ChemTHEATER

Qu'est-ce qu'un composé organique de fluor?

Il possède à la fois des propriétés hydrophiles et riches en huile et est utilisé dans une large gamme d'applications telles que les hydrofuges, les agents digestifs, les agents huileux et les agents de gravure.

Pour une explication facile à comprendre des composés organiques fluorés, voir Close-up Modern HP de NHK. https://www.nhk.or.jp/gendai/articles/4280/index.html

En raison de sa nocivité, la fabrication, l'utilisation et l'importation / exportation d'acide perfluorooctanoïque (PFOA) parmi les composés organiques fluorés seront interdites au niveau international à partir de 2019, et le perfluorooctanesulfonate (PFOS) sera interdit à partir de 2009. La fabrication, l'utilisation et l'importation / exportation sont limitées.

Valeurs standard pour les composés organiques fluorés, etc.

Au cours des dernières années, les deux substances sont devenues des problèmes tels que la détection dans l'eau de puits et l'écoulement dans les rivières. En réponse à cela, le ministère de la Santé, du Travail et du Bien-être a ajouté le SPFO et le PFOA aux éléments de fixation des objectifs de gestion de la qualité de l'eau (mis en vigueur le 1er avril, deuxième année de l'ordonnance). La valeur cible de la norme de qualité de l'eau du robinet est de 50 ng / L, soit la valeur totale du SPFO et de l'APFO. https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/topics/bukyoku/kenkou/suido/kijun/index.html

En outre, le Ministère de l'environnement a mené une enquête nationale sur l'abondance du SPFO et de l'APFO dans le milieu aquatique et << Concernant l'application des normes environnementales, etc. concernant la protection de la santé humaine liée à la pollution de l'eau (avis) >> (28 mai, 2e année de l'ordonnance) Dans (Pièce jointe), la valeur totale du SPFO et de l'APFO a été fixée à 50 ng / L comme valeur cible provisoire pour l'environnement aquatique. Résultats de l'enquête nationale sur l'abondance de l'APFO et de l'APFO au cours de la première année de l'Ordre https://www.env.go.jp/press/108091.html

Soit dit en passant, dans les résultats de l'enquête sur les usines de purification d'eau publiés par le ministère de la Santé, du Travail et du Bien-être social en juin 2ème année à Oriwa, il n'y avait aucun endroit où la valeur cible provisoire de l'eau du robinet, PFOS + PFOA 50 ng / L, a été dépassée. https://www.mhlw.go.jp/content/10900000/000638290.pdf

Obtenez des données de concentration environnementale de composés organiques fluorés auprès de ChemTHEATER

ChemTHEATER publie des données de surveillance sur la concentration de substances chimiques dans l'environnement, et comprend également des données sur les composés organiques fluorés. Voyons en fait à quelle concentration le SPFO et l'APFO ont été détectés et à quel point la valeur totale est élevée ou faible par rapport à la valeur de référence.

PFCs_Search.png

  1. Sélectionnez «Sample Search» dans la barre de menu de ChemTHEATER.
  2. Sélectionnez «Abiotic --Water» dans «Sample Type».
  3. Sélectionnez «Substances perfluoroalkyle et polyfluoroalkyle» dans le «Groupe des produits chimiques».
  4. Sélectionnez "Asie" dans "Zone de collecte" et définissez le pays de collecte sur "Japon".
  5. Cliquez sur le bouton "Rechercher" pour afficher une liste d'échantillons qui remplissent les conditions.
  6. "Exporter les échantillons" sort les informations sur l'échantillon et "Exporter les données mesurées" sort les valeurs mesurées de la substance chimique cible sous forme de fichier texte délimité par des tabulations.

Enregistrez le fichier exporté dans n'importe quel répertoire et utilisez-le pour l'analyse.

Formater les données exportées

Chargez la bibliothèque requise.

import pandas as pd

Lisez les informations sur les valeurs mesurées des substances chimiques.

data_file = "measureddata_20200521044415.tsv"
data = pd.read_csv(data_file, delimiter="\t")
data
MeasuredID ProjectID SampleID ScientificName ChemicalID ChemicalName ExperimentID MeasuredValue AlternativeData Unit Remarks RegisterDate UpdateDate
0 81245 PRA000095 SAA005816 Water CH0000362 PFBS EXA000001 0.00100 <1.00E-3 μg/L NaN 2019/7/26 2019/7/26
1 81246 PRA000095 SAA005817 Water CH0000362 PFBS EXA000001 0.00100 <1.00E-3 μg/L NaN 2019/7/26 2019/7/26
2 81247 PRA000095 SAA005818 Water CH0000362 PFBS EXA000001 0.00100 NaN μg/L NaN 2019/7/26 2019/7/26
3 81248 PRA000095 SAA005819 Water CH0000362 PFBS EXA000001 0.00100 <1.00E-3 μg/L NaN 2019/7/26 2019/7/26
4 81249 PRA000095 SAA005820 Water CH0000362 PFBS EXA000001 0.00100 <1.00E-3 μg/L NaN 2019/7/26 2019/7/26
... ... ... ... ... ... ... ... ... ... ... ... ... ...
3087 48619 PRA000060 SAA003645 Water CH0000793 THPFOS EXA000001 0.00030 NaN μg/L NaN 2018/2/9 2018/6/8
3088 48620 PRA000060 SAA003646 Water CH0000793 THPFOS EXA000001 0.00008 NaN μg/L NaN 2018/2/9 2018/6/8
3089 48621 PRA000060 SAA003647 Water CH0000793 THPFOS EXA000001 0.00159 NaN μg/L NaN 2018/2/9 2018/6/8
3090 48622 PRA000060 SAA003648 Water CH0000793 THPFOS EXA000001 0.00188 NaN μg/L NaN 2018/2/9 2018/6/8
3091 48623 PRA000060 SAA003649 Water CH0000793 THPFOS EXA000001 0.00070 NaN μg/L NaN 2018/2/9 2018/6/8

3092 rows × 13 columns

Ensuite, les informations d'exemple sont lues.

sample_file = "samples_20200521044410.tsv"
sample = pd.read_csv(sample_file, delimiter="\t")
sample
ProjectID SampleID SampleType TaxonomyID UniqCodeType UniqCode SampleName ScientificName CommonName CollectionYear ... FlowRate MeanPM10 MeanTotalSuspendedParticles HumidityStartEnd WindDirectionStartEnd WindSpeedMSStartEnd AmountOfCollectedAirStartEnd Remarks RegisterDate UpdateDate
0 PRA000048 SAA002867 ST014 NaN NaN NaN SW-St.1 Water Surface water 2004 ... NaN NaN NaN NaN NaN NaN NaN NaN 2017/10/25 2019/7/18
1 PRA000048 SAA002868 ST014 NaN NaN NaN SW-St.3 Water Surface water 2004 ... NaN NaN NaN NaN NaN NaN NaN NaN 2017/10/25 2019/7/18
2 PRA000048 SAA002869 ST014 NaN NaN NaN SW-St.4 Water Surface water 2004 ... NaN NaN NaN NaN NaN NaN NaN NaN 2017/10/25 2019/7/18
3 PRA000048 SAA002870 ST014 NaN NaN NaN SW-St.5 Water Surface water 2004 ... NaN NaN NaN NaN NaN NaN NaN NaN 2017/10/25 2019/7/18
4 PRA000048 SAA002871 ST014 NaN NaN NaN SW-St.7 Water Surface water 2004 ... NaN NaN NaN NaN NaN NaN NaN NaN 2017/10/25 2019/7/18
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
271 PRA000095 SAA005846 ST015 NaN NaN NaN W_1xyz24_20100821 Water River water 2010 ... NaN NaN NaN NaN NaN NaN NaN Around Kushiro Airport 2019/7/26 2019/7/26
272 PRA000095 SAA005847 ST015 NaN NaN NaN W_1xyz25_20100821 Water River water 2010 ... NaN NaN NaN NaN NaN NaN NaN Around Kushiro Airport 2019/7/26 2019/7/26
273 PRA000095 SAA005848 ST015 NaN NaN NaN W_1xyz26_20100821 Water River water 2010 ... NaN NaN NaN NaN NaN NaN NaN Downstream from the inflow of wastewater from ... 2019/7/26 2019/7/26
274 PRA000095 SAA005849 ST015 NaN ZETTAICODE_FY2011_W 113680.0 W_113680_20110702 Water River water 2011 ... NaN NaN NaN NaN NaN NaN NaN Upstream from the inflow of wastewater from Ch... 2019/7/26 2019/7/26
275 PRA000095 SAA005850 ST015 NaN ZETTAICODE_FY2011_W 118873.0 W_118873_20110702 Water River water 2011 ... NaN NaN NaN NaN NaN NaN NaN Downstream from the inflow of wastewater from ... 2019/7/26 2019/7/26

276 rows × 66 columns

pfos = data[data["ChemicalName"] == "PFOS"] #Extraire uniquement les données dont le nom chimique est PFOS
pfoa = data[data["ChemicalName"] == "PFOA"] #Extraire uniquement les données dont le nom chimique est PFOA

Si vous vérifiez le contenu de chacun, cela ressemble à ce qui suit.

pfos
MeasuredID ProjectID SampleID ScientificName ChemicalID ChemicalName ExperimentID MeasuredValue AlternativeData Unit Remarks RegisterDate UpdateDate
269 35646 PRA000048 SAA002867 Water CH0000365 PFOS EXA000001 0.0073 NaN μg/L NaN 2017/10/25 2018/6/8
270 35647 PRA000048 SAA002868 Water CH0000365 PFOS EXA000001 0.0030 NaN μg/L NaN 2017/10/25 2018/6/8
271 35648 PRA000048 SAA002869 Water CH0000365 PFOS EXA000001 0.0034 NaN μg/L NaN 2017/10/25 2018/6/8
272 35649 PRA000048 SAA002870 Water CH0000365 PFOS EXA000001 0.0038 NaN μg/L NaN 2017/10/25 2018/6/8
273 35650 PRA000048 SAA002871 Water CH0000365 PFOS EXA000001 0.0020 NaN μg/L NaN 2017/10/25 2018/6/8
... ... ... ... ... ... ... ... ... ... ... ... ... ...
540 81380 PRA000095 SAA005846 Water CH0000365 PFOS EXA000001 0.0010 <1.00E-3 μg/L NaN 2019/7/26 2019/7/26
541 81381 PRA000095 SAA005847 Water CH0000365 PFOS EXA000001 0.0010 <1.00E-3 μg/L NaN 2019/7/26 2019/7/26
542 81382 PRA000095 SAA005848 Water CH0000365 PFOS EXA000001 0.0076 NaN μg/L NaN 2019/7/26 2019/7/26
543 81383 PRA000095 SAA005849 Water CH0000365 PFOS EXA000001 0.0028 NaN μg/L NaN 2019/7/26 2019/7/26
544 81384 PRA000095 SAA005850 Water CH0000365 PFOS EXA000001 0.0120 NaN μg/L NaN 2019/7/26 2019/7/26

276 rows × 13 columns

pfoa
MeasuredID ProjectID SampleID ScientificName ChemicalID ChemicalName ExperimentID MeasuredValue AlternativeData Unit Remarks RegisterDate UpdateDate
896 46410 PRA000060 SAA003568 Water CH0000372 PFOA EXA000001 0.00436 NaN μg/L NaN 2018/2/9 2018/6/8
897 46411 PRA000060 SAA003569 Water CH0000372 PFOA EXA000001 0.01166 NaN μg/L NaN 2018/2/9 2018/6/8
898 46412 PRA000060 SAA003570 Water CH0000372 PFOA EXA000001 0.01180 NaN μg/L NaN 2018/2/9 2018/6/8
899 46413 PRA000060 SAA003571 Water CH0000372 PFOA EXA000001 0.00430 NaN μg/L NaN 2018/2/9 2018/6/8
900 46414 PRA000060 SAA003572 Water CH0000372 PFOA EXA000001 0.00439 NaN μg/L NaN 2018/2/9 2018/6/8
... ... ... ... ... ... ... ... ... ... ... ... ... ...
1143 81135 PRA000095 SAA005846 Water CH0000372 PFOA EXA000001 0.00100 <1.00E-3 μg/L NaN 2019/7/26 2019/7/26
1144 81136 PRA000095 SAA005847 Water CH0000372 PFOA EXA000001 0.00200 NaN μg/L NaN 2019/7/26 2019/7/26
1145 81137 PRA000095 SAA005848 Water CH0000372 PFOA EXA000001 0.00140 tr(1.40E-3) μg/L NaN 2019/7/26 2019/7/26
1146 81138 PRA000095 SAA005849 Water CH0000372 PFOA EXA000001 0.03900 NaN μg/L NaN 2019/7/26 2019/7/26
1147 81139 PRA000095 SAA005850 Water CH0000372 PFOA EXA000001 0.02400 NaN μg/L NaN 2019/7/26 2019/7/26

252 rows × 13 columns

À partir des données extraites du PFOS et du PFOA, seules les colonnes de SampleID et BeautifulValue sont extraites, et les noms de colonne des valeurs mesurées sont tous deux MeasuredValue, alors changez-les respectivement en PFOS et PFOA.

pfos = pfos[["SampleID","MeasuredValue"]].rename(columns={'MeasuredValue': 'PFOS'})
pfoa = pfoa[["SampleID","MeasuredValue"]].rename(columns={'MeasuredValue': 'PFOA'})

Fusionner les trames de données PFOS et PFOA avec SampleID.

df = pd.merge(pfos, pfoa, on="SampleID").astype({"PFOS": float}, {"PFOA": float})
df
SampleID PFOS PFOA
0 SAA003568 0.00551 0.00436
1 SAA003569 0.01877 0.01166
2 SAA003570 0.01546 0.01180
3 SAA003571 0.00356 0.00430
4 SAA003572 0.00682 0.00439
... ... ... ...
247 SAA005846 0.00100 0.00100
248 SAA005847 0.00100 0.00200
249 SAA005848 0.00760 0.00140
250 SAA005849 0.00280 0.03900
251 SAA005850 0.01200 0.02400

252 rows × 3 columns

Ce que je veux savoir cette fois, c'est la valeur totale des concentrations de SPFO et d'APFO, alors créez une colonne appelée TOTAL et entrez la valeur totale là-bas.

df['TOTAL'] = df.sum(axis=1, numeric_only=True)
df
SampleID PFOS PFOA TOTAL
0 SAA003568 0.00551 0.00436 0.00987
1 SAA003569 0.01877 0.01166 0.03043
2 SAA003570 0.01546 0.01180 0.02726
3 SAA003571 0.00356 0.00430 0.00786
4 SAA003572 0.00682 0.00439 0.01121
... ... ... ... ...
247 SAA005846 0.00100 0.00100 0.00200
248 SAA005847 0.00100 0.00200 0.00300
249 SAA005848 0.00760 0.00140 0.00900
250 SAA005849 0.00280 0.03900 0.04180
251 SAA005850 0.01200 0.02400 0.03600

252 rows × 4 columns

Extrayez uniquement les données d'ID d'échantillon et de latitude / longitude de la table d'exemple.

sample = sample[["SampleID", "CollectionLongitudeFrom", "CollectionLatitudeFrom"]]
sample
SampleID CollectionLongitudeFrom CollectionLatitudeFrom
0 SAA002867 139.850000 35.599333
1 SAA002868 140.000000 35.583000
2 SAA002869 139.834500 35.515833
3 SAA002870 139.900333 35.532500
4 SAA002871 139.833667 35.433000
... ... ... ...
271 SAA005846 144.192783 43.062302
272 SAA005847 144.232365 43.041624
273 SAA005848 144.155650 42.997641
274 SAA005849 141.719167 42.765833
275 SAA005850 141.719167 42.782500

276 rows × 3 columns

Fusionnez-le avec la table de densité et SampleID précédemment créés.

df = pd.merge(df, sample, on="SampleID")
df
SampleID PFOS PFOA TOTAL CollectionLongitudeFrom CollectionLatitudeFrom
0 SAA003568 0.00551 0.00436 0.00987 139.607158 35.453746
1 SAA003569 0.01877 0.01166 0.03043 139.677734 35.501549
2 SAA003570 0.01546 0.01180 0.02726 139.617230 35.528481
3 SAA003571 0.00356 0.00430 0.00786 139.498684 35.578287
4 SAA003572 0.00682 0.00439 0.01121 139.480358 35.536396
... ... ... ... ... ... ...
247 SAA005846 0.00100 0.00100 0.00200 144.192783 43.062302
248 SAA005847 0.00100 0.00200 0.00300 144.232365 43.041624
249 SAA005848 0.00760 0.00140 0.00900 144.155650 42.997641
250 SAA005849 0.00280 0.03900 0.04180 141.719167 42.765833
251 SAA005850 0.01200 0.02400 0.03600 141.719167 42.782500

252 rows × 6 columns

Enregistrez le fichier terminé au format csv.

df.to_csv("sum_pfcs.csv")

Chargez ceci dans QGIS.

Afficher les données de densité sur une carte à l'aide de QGIS

Téléchargez QGIS à partir de ce qui suit. https://www.qgis.org/ja/site/ Veuillez consulter divers sites pour obtenir des instructions sur l'utilisation de QGIS.

Les informations cartographiques (fichier de forme GML) sont téléchargées à partir de la page d'accueil SIG du ministère des Terres, des Infrastructures, des Transports et du Tourisme. https://nlftp.mlit.go.jp/index.html

Pour le moment, cette fois, nous utiliserons la zone administrative du domaine 2. politique à partir du téléchargement des informations numériques foncières nationales. Sélectionnez et téléchargez les données «nationales» à partir de la page ci-dessous. Veuillez choisir l'année en fonction de votre objectif. スクリーンショット 2020-06-19 18.32.01.png

Lancez QGIS, cliquez sur l'onglet Vector dans le gestionnaire de sources de données, sélectionnez le fichier de forme de la zone administrative nationale téléchargé ci-dessus et cliquez sur "Ajouter". スクリーンショット 2020-06-19 18.48.16.png

La carte du Japon sera lue comme indiqué ci-dessous, alors changez-la en votre couleur préférée. スクリーンショット 2020-06-19 18.49.46.png

Cliquez à nouveau sur l'onglet Texte délimité dans le Gestionnaire de sources de données et sélectionnez le fichier CSV (sum_pfcs.csv) créé dans la section précédente. Après cela, sélectionnez la longitude (CollectionLongitudeFrom) dans le champ X de la définition de la géométrie et la latitude (CollectionLatitudeFrom) dans le champ Y, puis cliquez sur «Ajouter». スクリーンショット 2020-06-19 18.50.37.png

Ensuite, les points d'échantillonnage sont tracés sur la carte. Ensuite, code couleur par densité. Double-cliquez sur "sum_pfcs" depuis le calque pour ouvrir les propriétés du calque. Sélectionnez l'onglet Symbolisme. Sélectionnez «Divisé en étapes» pour le symbole, et sélectionnez «TOTAL» pour la colonne parce que vous voulez coder en couleur par la concentration de PFOS + PFOA. Changez le symbole à votre convenance. Si vous modifiez le nombre de classifications tout en conservant le mode à intervalles égaux, les classifications à intervalles égaux sont automatiquement générées. Ici, le nombre de classifications est défini sur 2 et la valeur d'un groupe de petits nombres est définie sur 0-0,05. (Dans ChemTHEATER, la concentration de la substance chimique dans l'eau est unifiée à µg / L, donc si vous voulez coder par couleur si elle dépasse ou ne dépasse pas la valeur standard de 50 ng / L, vous devez la régler sur 0,05.) Par défaut, Étant donné que le tracé haute densité sera affiché dans la couche inférieure, sélectionnez «Niveau de symbole» dans «Paramètres avancés», cochez la case Activer le niveau de symbole et définissez la couche du groupe haute densité sur 1. Faire. スクリーンショット 2020-06-19 19.26.07.png

En conséquence, les points où le PFOS + PFOA dépasse 50 ng / L et les points où il ne dépasse pas sont affichés en différentes couleurs. Si vous voulez sortir cette figure, sélectionnez "Importer / Exporter" dans "Projet", sélectionnez "Exporter la carte vers l'image" ou "Exporter la carte vers PDF", et copiez-la dans le presse-papiers ou archivez-la dans n'importe quel répertoire. Enregistrer sous. スクリーンショット 2020-06-19 19.26.56.png

Que diriez-vous? L'AS-tu fait? De cette manière, nous vous serions reconnaissants si vous pouviez utiliser les données enregistrées dans ChemTHEATER en les exprimant sur une carte. Retour à «Apprendre Python avec ChemTHEATER»

Recommended Posts

Essayez de tracer la concentration environnementale des composés organiques du fluor sur une carte à l'aide de données ouvertes
[Python] Tracer les données par préfecture sur une carte (nombre de voitures possédées dans tout le pays)
Dessinez sur Jupyter en utilisant la fonction de tracé des pandas
[Python] J'ai écrit la route du typhon sur la carte en utilisant le folium
Folium: Visualisez les données sur une carte avec Python
Calculer la probabilité de valeurs aberrantes sur les moustaches de la boîte
Vérifiez l'état des données à l'aide de pandas_profiling
Créez une interface graphique sur le terminal à l'aide de curses
Gratter les données gagnantes de Numbers à l'aide de Docker
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police
Découpez une partie de la chaîne à l'aide d'une tranche Python
J'ai essayé d'utiliser l'API de Sakenowa Data Project
Utilisons les données ouvertes de "Mamebus" en Python
Une réflexion sur la visualisation du champ d'application du modèle de prédiction
Comment représenter la distribution de la composition bactérienne à partir des données d'analyse Qiime2 dans un diagramme de moustaches
Comment dessiner facilement la structure d'un réseau de neurones sur Google Colaboratory à l'aide de "convnet-tiroir"
Éviter les pièges de l'utilisation d'un Mac (pour les utilisateurs Linux?)
Remarque sur le comportement par défaut de collate_fn dans PyTorch
Un diagramme de réseau a été créé avec les données du COVID-19.
Analyse des données basée sur les résultats des élections du gouverneur de Tokyo (2020)
[Treasure Data] [Python] Exécutez une requête sur Treasure Data à l'aide du client TD.
Afficher l'adresse saisie à l'aide de Rails gem'geocoder 'sur Google Map
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
Facile sur Mac! Tracé de la réponse d'étape unitaire à l'aide de Python
Faisons une carte du nouveau site d'infection corona [FastAPI / PostGIS / deck.gl (React)] (Traitement des données)
Observation en virgule fixe de données spécifiques sur le Web en exécutant automatiquement un navigateur Web sur le serveur (Ubuntu16.04) (2) -Web scraping-
J'ai essayé d'utiliser des données PDF de soins médicaux en ligne basés sur la propagation d'une nouvelle infection à coronavirus