[PYTHON] 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

introduction

Vous trouverez ci-dessous une liste des institutions qui soutiennent les soins médicaux en ligne en fonction de la propagation de la nouvelle infection à coronavirus.

https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/iryou/rinsyo/index_00014.html

Utilisons cela pour créer un processus permettant de découvrir à quoi ressemble le service de soins médicaux en ligne dans le quartier. Nous examinerons également si cela nous permettra d'utiliser les données PDF fournies par le gouvernement.

Livrables

https://needtec.sakura.ne.jp/yakusyopdf/ https://github.com/mima3/yakusyopdf

Si vous recherchez en entrant la longitude et la latitude ... image.png

Une liste des hôpitaux à proximité s'affiche, cliquez sur la ligne. image.png

Des informations détaillées seront affichées sur la carte. image.png

La description

Flux de processus

(1) Obtenez un PDF sur la page d'accueil de la liste des institutions qui soutiennent les soins médicaux en ligne en fonction de la propagation de la nouvelle infection à coronavirus.

(2) Extrayez les informations du tableau du PDF et convertissez-le en JSON. Veuillez vous référer à la page suivante pour le traitement de cette zone. ・ [Convertir le PDF du ministère de la Santé, du Travail et du Bien-être social en CSV ou JSON](https://needtec.sakura.ne.jp/wod07672/2020/04/29/%e5%8e%9a%e7%94%9f%e5% 8a% b4% e5% 83% 8d% e7% 9c% 81% e3% 81% aepdf% e3% 82% 92csv% e3% 82% 84json% e3% 81% ab% e5% a4% 89% e6% 8f% 9b% e3% 81% 99% e3% 82% 8b /)

(3) Combinez le JSON de chaque préfecture en un JSON.

(4) Obtenez et enregistrez la longitude et la latitude de l'adresse dans JSON à l'aide de l'API Yahoo! Geocoder.

(5) Stockez-le dans la base de données et affichez-le à l'écran en fonction de ces informations.

Problèmes lors de l'extraction d'un tableau à partir d'un PDF.

En fait, extraire les données du tableau à partir d'un PDF est assez gênant. Il existe des bibliothèques appelées tabula et camelot, mais cela seul ne fonctionne pas. Il n'y en a pas. Cette section décrit les problèmes survenus lors de l'utilisation de camelot.

Le fractionnement des données contenant des caractères longs ne fonctionne pas.

Par exemple, supposons que vous ayez des données qui dépassent le contenu de la cellule comme indiqué ci-dessous. image.png

Dans ce cas, le numéro de téléphone et l'URL sont détectés comme un seul groupe. Cette fois, comme méthode pour résoudre ce problème, s'il n'y a pas d'élément requis, nous vérifions les cellules gauche et droite pour voir si elles sont fusionnées. Toutefois, si la cible est une chaîne de données non formatée, comme un code postal ou un numéro de téléphone, elle ne peut pas être restaurée.

Problèmes d'utilisation de la mémoire

camelot consomme beaucoup de mémoire, il est donc préférable de la traiter page par page. Je pense que ce domaine sera utile. https://github.com/camelot-dev/camelot/issues/28

Aussi, en raison du problème de la taille du papier des données traitées cette fois, s'il s'agit d'un processus 32 bits même pour chaque page, la mémoire sera insuffisante, il est donc préférable de l'exploiter avec un processus 64 bits.

La ligne pointillée ne peut pas être détectée.

Bien qu'il soit mentionné dans le numéro suivant, camelot ne le reconnaît pas bien si vous créez un tableau avec une ligne pointillée.

Detect dotted line #370 https://github.com/atlanhq/camelot/issues/370

Voici comment résoudre ce problème: [Traitez la ligne pointillée comme une ligne continue avec camelot](https://needtec.sakura.ne.jp/wod07672/2020/05/03/camelot%e3%81%a7%e7%82%b9%e7%b7%9a % e3% 82% 92% e5% ae% 9f% e7% b7% 9a% e3% 81% a8% e3% 81% 97% e3% 81% a6% e5% 87% a6% e7% 90% 86% e3 % 81% 99% e3% 82% 8b /)

Problèmes avec le PDF de la liste des organisations prises en charge

C'est extrêmement gênant et je pense qu'il est impossible d'analyser les PDF de manière entièrement automatique.

format de papier

Le traitement prend du temps car certains papiers ont un côté de 1 m. En outre, il est impossible de traiter après la conversion d'un PDF commun en WORD car la taille est trop grande.

Le PDF de la liste des établissements médicaux compatibles est mis à jour quotidiennement et l'URL change également.

Le PDF de la liste des établissements médicaux pris en charge est mis à jour quotidiennement, mais l'URL semble changer à chaque mise à jour. Par exemple, l'URL de Tokyo est la suivante.

Au 28 avril 2020 https://www.mhlw.go.jp/content/000625693.pdf

Au 29 avril 2020 https://www.mhlw.go.jp/content/000626106.pdf

Pour cette raison, l'URL PDF doit être obtenue à partir du lien pour les soins médicaux en ligne basés sur la propagation de la nouvelle infection à coronavirus.

Présence ou absence de légende

La première ligne de données peut ou non contenir une légende. Il y a une légende dans le cas de Tokyo, mais pas à Hokkaido.

En d'autres termes, il est nécessaire d'ajuster la position d'acquisition de la ligne de données sur la première page pour chaque préfecture.

La gestion des en-têtes de page diffère pour chaque préfecture.

Par exemple, comparez les PDF des préfectures de Tokyo et d'Ibaraki. L'en-tête est inclus dans la deuxième page et les suivantes de Tokyo, mais pas dans la préfecture d'Ibaraki.

En d'autres termes, il est nécessaire d'ajuster la position d'acquisition de la ligne de données sur la deuxième page et les suivantes pour chaque préfecture. De plus, ce n'est pas toujours le cas même dans la même préfecture.

En fait, jusqu'en avril, Hokkaido avait des lignes d'en-tête sur la deuxième page et les suivantes. C'est peut-être parce que les spécifications au moment de la sortie du fichier varient parfois.

Le traitement des articles est différent pour chaque préfecture.

Par exemple, comparez Hokkaido avec les préfectures d'Aichi et de Yamanashi.

** Hokkaido ** image.png

** Préfecture d'Aichi ** image.png

** Préfecture de Yamanashi ** image.png

Les éléments de la colonne peuvent différer d'une préfecture à l'autre, et même s'il s'agit d'éléments communs, ils doivent être ajustés en position. De plus, même dans la même préfecture, les éléments ne sont pas toujours les mêmes. En fait, jusqu'en avril, la préfecture de Yamanashi n'a pas partagé la ligne entre la consultation téléphonique et la consultation en ligne.

Flou de notation

Il y a un élément "que le traitement médical soit effectué ou non à l'aide du téléphone pour la première visite", mais dans de nombreux cas, 〇 ou × (ou vide) est écrit, mais la notation est incorrecte. Par exemple, il peut être annoté comme suit.

○
* Prévu pour être fait à l'avenir

Ensuite, il ne s'agit pas simplement de ne prendre que la première lettre, et il existe différentes expressions. Au moins pour le moment, les flous de notation suivants existent.

** Une expression qui indique la présence ou l'absence de "si un traitement médical est effectué ou non en utilisant le téléphone pour la première visite" **

lettre code
E38087
E2978B
E297AF
E296B3
Oui E58FAF
E2978F
E296B2

** Une expression qui indique l'absence de "si le traitement médical est effectué ou non par téléphone pour la première visite" **

lettre code
Vide
× C397
EFBD98
E29893
E29C95
X 58
- 2D
EFBC8D
EFBCB8
E29C96
non E590A6

D'autres problèmes

Le résultat réel de la conversion PDF est le suivant. Il y a un problème avec le programme d'analyse, mais il y a aussi des erreurs dans le PDF en premier lieu.

https://github.com/mima3/yakusyopdf/blob/master/20200503

Résumé

Cette fois, j'ai converti le PDF publié par le ministère de la Santé, du Travail et du Bien-être social afin qu'il puisse être facilement traité par ordinateur, et créé une application Web en l'utilisant.

Les données peuvent être converties automatiquement jusqu'à un certain point, mais tant que le PDF est utilisé, une automatisation complète est impossible. De plus, même si vous le corrigez à la main, la fréquence de mise à jour est élevée, il y a donc quelques points stricts.

** Si vous avez besoin d'au moins des données précises et de les mettre à jour fréquemment, il est prudent d'éviter d'extraire des données de PDF comme cette fois. ** **

De plus, si vous êtes en mesure de publier les données, nous vous serions reconnaissants de bien vouloir considérer les points suivants.

――Pouvez-vous publier autre chose que PDF? ――Lors de l'utilisation de données, Excel est meilleur. Les fichiers PDF se ressemblent mais sont beaucoup plus difficiles.

c'est tout.

Recommended Posts

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
J'ai essayé d'afficher le degré d'infection par le virus corona sur la carte thermique Seaborn
J'ai essayé d'utiliser l'API de Sakenowa Data Project
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
Tracez la propagation du nouveau virus corona
J'ai essayé de prédire l'infection d'une nouvelle pneumonie en utilisant le modèle SIR: ☓ Wuhan edition ○ Hubei province edition
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
J'ai essayé de visualiser les caractéristiques des nouvelles informations sur les personnes infectées par le virus corona avec wordcloud
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
Jetons un coup d'œil à la tendance infectieuse du nouveau coronavirus COVID-19 dans chaque pays et à l'état de la réponse médicale (informations supplémentaires).
Pré-traitement des données préfectorales
Essayez de gratter les données COVID-19 Tokyo avec Python
Informations de raclage Web sur les programmes de rire et notification en ligne
J'ai essayé de classer le nombre de décès par habitant de COVID-19 (nouveau virus corona) par pays
J'ai analysé les tweets sur le nouveau virus corona publiés sur Twitter
J'ai essayé de refactoriser le modèle CNN de TensorFlow en utilisant TF-Slim
J'ai essayé la reconnaissance faciale du problème du rire en utilisant Keras.
Analyse des données basée sur les résultats des élections du gouverneur de Tokyo (2020)
J'ai dessiné un graphique Python en utilisant des données publiques sur le nombre de nouveaux patients positifs au coronavirus (COVID-19) à Tokyo + avec un lien vers la version nationale des données de pratique
[Python] Le statut de chaque préfecture du nouveau virus corona n'est publié qu'en PDF, mais j'ai essayé de le gratter sans le télécharger.
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
[Python] J'ai écrit la route du typhon sur la carte en utilisant le folium
J'ai essayé la validation croisée basée sur le résultat de la recherche de grille avec scikit-learn
J'ai essayé d'utiliser l'API COTOHA (il y a aussi du code sur GitHub)
J'ai analysé les tweets sur le nouveau virus corona publiés sur Twitter, partie 2
J'ai regardé les méta-informations de BigQuery et essayé de les utiliser
J'ai essayé de numériser le tampon estampé sur papier en utilisant OpenCV
J'ai essayé de visualiser les données BigQuery à l'aide de Jupyter Lab avec GCP
J'ai essayé AdaNet pour les données de table
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai essayé d'obtenir et d'analyser les données statistiques de la nouvelle Corona avec Python: données de l'Université John's Hopkins
J'ai essayé d'utiliser l'API checkio
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
En utilisant le RNN avec état de Keras, j'ai essayé de voir s'il pouvait s'agir d'une chanson auto-exploitée basée sur le fichier wav.
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
J'ai essayé d'estimer la similitude de l'intention de la question en utilisant Doc2Vec de gensim
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat
[Kaggle] J'ai essayé l'ingénierie de quantité de caractéristiques de données de séries chronologiques multidimensionnelles à l'aide de tsfresh
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
En utilisant COTOHA, j'ai essayé de suivre le cours émotionnel de la course aux meros.
J'ai essayé d'analyser la carte du Nouvel An par moi-même en utilisant python
Folding @ Home sur Linux Mint pour contribuer à l'analyse du nouveau virus corona
J'ai essayé l'histoire courante de prédire la moyenne Nikkei à l'aide du Deep Learning (backtest)
J'ai essayé le serveur asynchrone de Django 3.0
J'ai essayé d'utiliser l'API de données YOUTUBE V3
Estimer le pic d'infectivité du nouveau virus corona
J'ai essayé d'utiliser l'API BigQuery Storage
J'ai essayé de notifier la mise à jour de "Hameln" en utilisant "Beautiful Soup" et "IFTTT"
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
J'ai essayé la détection d'objets avec YOLO v3 (TensorFlow 2.1) sur le GPU de windows!
Les prévisions épidémiques du nouveau virus corona ont été publiées sur le Web à une vitesse explosive