[PYTHON] J'ai vérifié le nombre de magasins fermés et ouverts dans tout le pays par Corona

Combien de magasins Corona a-t-elle fermés?

Les informations sur les magasins ouverts et fermés dans tout le pays sont collectées sur un site appelé Ouverture et fermeture.com. Pour étudier le grattage, nous allons colorer le pourcentage de fermetures de magasins en mars-avril 2020 et 2019 pour chaque préfecture.

Méthode

Allons dans le sens du comptage du nombre de magasins correspondant à chaque période dans chaque région sur le site ci-dessus. Heureusement, il est classé par région et chaque page est enregistrée dans l'ordre décroissant, alors utilisez-la. De plus, le grattage utilise beautifulsoup4 de python.

Résultats / Discussion

Regardons d'abord les résultats (la mise en œuvre est ci-dessous). Le résultat est le suivant. La valeur de la barre latérale est dans chaque préfecture ratio = $ (N_ {ouvert} --N_ {fermé}) $ / $ (N_ {fermé} + N_ {ouvert}) $ Il est standardisé en.

2020.png 2019.png

En regardant cela, il n'y a pas de différence significative due au coronavirus. Il est nécessaire d'examiner les tendances futures pour voir si l'impact est simplement faible ou si l'impact apparaît avec un décalage dans le temps. J'espère que les dégâts seront réduits d'une manière ou d'une autre.

la mise en oeuvre

Commencez par collecter des données à partir de l'adresse URL ci-dessus.

shop_openup_closedown_ratio_1.py



from bs4 import BeautifulSoup
from urllib import request
import datetime
import numpy as np

def period(year,month,year_s = 2019,year_e = 2019,month_s = 3,month_e = 4):
    res = False
    if (year<=year_e) & (year >=year_s) & (month>=month_s) & (month<=month_e):
        res = 2
    if year >= year_e:
        if year > year_e:
            res = 1
        else:
            if month>month_e:
                res = 1

    return res



def main(year_s = 2020,year_e = 2020,month_s = 4,month_e = 4):
    dic = {}
    states = ['close','open']
    for state in range(len(states)):
        url = 'https://kaiten-heiten.com/heiten/area-' + states[state] + '/'  
        response = request.urlopen(url)
        soup = BeautifulSoup(response,'html.parser')

        for a in soup.find_all('a', class_="links"):   
            link = a.get('href')
            region = a.text 
            print(region)

            if dic.get(region) is None:
                dic[region] = [0,0]



            url = link
            response = request.urlopen(url)
            soup = BeautifulSoup(response,'html.parser')

            shop_list = soup.find_all('span', class_='post_time')

            year_last = int(shop_list[-1].text[:5])
            month_last = int(shop_list[-1].text[6:8])

            for a in shop_list:        

                year = int(a.text[:5])
                month = int(a.text[6:8])


                if period(year, month,year_s,year_e,month_s,month_e) == 2:
                    dic[region][state] += 1

                cout = 0
                flag = 0

                while period(year_last, month_last,year_s,year_e,month_s,month_e)>=1:

                    next_p = soup.find('a',class_='next page-numbers')
                    
                    if soup.find_all('a',class_='next page-numbers') is not None:
                        link = next_p.get('href')
                    else:
                        break

                    url = link
                    response = request.urlopen(url)
                    soup = BeautifulSoup(response,'html.parser')


                    shop_list = soup.find_all('span', class_='post_time')

                    year_last = int(shop_list[-1].text[:5])
                    month_last = int(shop_list[-1].text[6:8])


                    print(year_last,month_last)

                    for a in shop_list:        

                        year = int(a.text[:5])
                        month = int(a.text[6:8])


                        if period(year, month):
                            dic[region][state] += 1

                            
    regions = list(dic.keys())
    vals_ = np.array(list(dic.values()))

    hk = int(22)

    hk_name = ['Hokkaido']
    hk_vals = np.array([vals_[:hk,0].sum(), vals_[:hk,1].sum()])

    regions = hk_name + regions[hk:]
    vals = [list(hk_vals)] + list(vals_[hk:])


    # ratio == N_o - N_c / N

    ratio = np.zeros(len(regions))

    for i in range(len(regions)):
        ratio[i] = (vals[i][1] - vals[i][0]) / (vals[i][1] + vals[i][0])
    
    return regions, vals, ratio, vals_


regions_2020, vals_2020, ratio_2020, vals_2020 = main(2020,2020,3,4)
regions_2019, vals_2019, ratio_2019, vals_2019 = main(2019,2019,3,4)

Obtenez les données avec.

shop_openup_closedown_ratio_2.py



import numpy as np
import cv2
from PIL import Image
import matplotlib.colors
import matplotlib.pyplot as plt
from japanmap import *



def mapping(regions,ratio,name,a=0.1,b=1):

    n_min = a
    n_max = b

    cmap = plt.cm.rainbow
    norm = matplotlib.colors.Normalize(vmin=n_min, vmax=n_max)

    def color_scale(r):
        tmp = cmap(norm(r))
        return (tmp[0]*255, tmp[1]*255, tmp[2]*255)

    dic = {}
    for k in range(len(regions)):
        map_val = color_scale(ratio[k])
        dic[regions[k]] = map_val

    lab = name + ' 3~4'
    fig = plt.figure(figsize=(15,9))
    plt.title(lab,fontsize=15)
    plt.imshow(picture(dic))


    sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
    
    plt.colorbar(sm)
    plt.show()
    
    fig.savefig(name)

Organisez les données avec. Parcelle ci-dessous.

shop_openup_closedown_ratio_3.py



a = list(ratio_2020)+list(ratio_2019)

max_n = max(a)
min_n = min(a)
mapping(regions_2019,ratio_2019,'2019')
mapping(regions_2020,ratio_2020,'2020',min_n,max_n)


La source de données

Ouverture et fermeture.com

Recommended Posts

J'ai vérifié le nombre de magasins fermés et ouverts dans tout le pays par Corona
J'ai vérifié les versions de Blender et Python
J'ai vérifié le système d'exploitation et le shell par défaut de docker-machine
Découvrez l'âge et le nombre de gains des gouverneurs de préfecture dans tout le pays
J'ai vérifié le contenu du volume du docker
J'ai vérifié les options de copyMakeBorder d'OpenCV
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
Divise la chaîne de caractères par le nombre de caractères spécifié. En Ruby et Python.
J'ai vérifié la liste des touches de raccourci de Jupyter
J'ai vérifié la période de rétention de session de django
J'ai vérifié la vitesse de traitement de la numpy unidimensionnelle
Minimisez le nombre de polissages en optimisant la combinaison
J'ai lu et implémenté les variantes de UKR
[SLAYER] J'ai essayé de confirmer l'âme d'acier en visualisant les paroles de slash metal [Word Cloud]
relation entre la série de nombres de Fibonacci et le nombre d'or
J'ai vérifié les spécifications de sortie du LSTM bidirectionnel de PyTorch
J'ai essayé d'augmenter ou de diminuer le nombre en programmant
J'ai essayé de classer le nombre de décès par habitant de COVID-19 (nouveau virus corona) par pays
Grattage des données du bulletin IDWR par nombre de rapports par point fixe de grippe et par préfecture
J'ai essayé de vérifier la classification yin et yang des membres hololive par apprentissage automatique
Je veux connaître la nature de Python et pip
Je souhaite mapper le code EDINET et le numéro de valeur
J'ai affiché le chat de YouTube Live et essayé de jouer
Ce que j'ai vu en analysant les données du marché des ingénieurs
Le mystère du nombre qui peut être vu simplement en arrangeant les 1-Le nombre de repunits et de propriétés mystérieuses-
J'ai essayé de classer le nom d'utilisateur et le mot de passe de phpMyAdmin ciblés par l'attaque du serveur
J'ai essayé de prédire le nombre de personnes infectées au niveau national de la nouvelle corona avec un modèle mathématique
J'ai essayé d'adapter la fonction exponentielle et la fonction logistique au nombre de patients positifs au COVID-19 à Tokyo
10. Compter le nombre de lignes
Obtenez le nombre de chiffres
Comptez bien le nombre de caractères thaïlandais et arabes en Python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Je l'ai découvert en analysant les avis du site de changement d'emploi! ??
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de la régression logistique
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de l'arbre de décision
J'ai étudié la méthode X-means qui estime automatiquement le nombre de clusters
J'ai résumé comment changer les paramètres de démarrage de GRUB et GRUB2
J'ai vérifié l'état d'utilisation du parking à partir d'images satellite.
J'ai étudié le comportement de la différence entre lien dur et lien symbolique
J'ai vérifié l'image de l'Université des sciences sur Twitter avec Word2Vec.
Je veux faire revivre la légendaire combinaison Nintendo en utilisant pleinement l'IA et la technologie RH!
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