Merci d'avoir pris le temps de lire l'article! !!
Laissez-moi commencer par me présenter! Je suis un membre de la société qui aime apprendre Python pendant mon temps libre
est.
Loin de la programmation, j'étais fou de PC, j'ai donc commencé à étudier Python à partir du 1er septembre le mois dernier.
Cela fait environ deux mois que j'ai commencé à programmer avec Progate, PyQ et Aidemy.
Ayant tout appris sur le cours d'analyse de données d'Aidemy, je voulais le sortir, j'ai donc décidé d'écrire cet article.
Bien que je ne puisse pas gagner beaucoup de temps pour l'apprentissage de la programmation, par exemple en travaillant ou en allant à l'école,
Je suis un débutant en programmation qui souhaite apprendre le Ming. Comme je l'ai écrit plus haut sur moi-même, je suis aussi un programme
Je suis un débutant. Par conséquent, veuillez l'utiliser comme l'un des exemples de ce que vous pouvez faire dans environ 2 mois.
Je suis heureux.
Python3 MacBookAir Jupyter Notebook
Créez un modèle SARIMA (un type de modèle de série chronologique) qui prédit le PIB du Japon et affichez les valeurs réelles et prévues dans un graphique.
import csv
import numpy as np
import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
import statsmodels.api as sm
from datetime import datetime
from statsmodels.tsa.statespace.sarimax import SARIMAX
import itertools
PIB réel de l'e-stat (statistiques gouvernementales)
__1. Pré-traiter les données __ Puisque la cible est clarifiée, nous calculerons et traiterons les données brutes.
#①
df = pd.read_csv('gaku-jg2022 (1).csv',encoding="shift-jis")
df = df.drop(range(0,6)) #Effacez les lignes inutiles
df = df.drop([110,111,112])
df = df.drop(df.columns[range(2, 30)], axis=1) #Effacer les colonnes inutiles
df = df.reset_index(drop=True) #Renuméroter les lignes
df = df.rename(columns={'Série originale substantielle': 'Date'}) #Renouveler le titre de la colonne
df = df.rename(columns={'Unnamed: 1': 'RealGDP'})
#②
#Traitez les données dans la colonne Heure
j = 1994
k = 0
for i in range(len(df["Date"])):
df.loc[i,"Date"] = j
k += 1
if k%4 == 0:
j += 1
df["Date"] #Extraire uniquement la date
index = pd.date_range("1994","2020",freq = "Q")#Données séparées trimestriellement
df.index = index
del df["Date"]
#③
#Processus du PIB réel
i = 0
for x in df["RealGDP"]:
x = x.replace(',', '')
df.iloc[i,0] = float(x)
i += 1
Dans (1), les colonnes qui ne nécessitent pas les données brutes acquises (telles que la colonne de la dépense de consommation finale privée), les lignes qui incluent des valeurs non numériques telles que les noms de variables et les blancs, et les données pour FY2020 sont impaires, elles sont donc tronquées. Dans (2), la valeur existante est modifiée pour le travail d'indexation des informations temporelles (ce qui est fait à partir de la ligne de la variable index). (3) Puisque le type de données de la valeur de la colonne PIB est une chaîne de caractères et contient ",", convertissez-le en type flottant pour l'affichage du graphique.
__2. Affichage du graphique __ Si vous affichez les données traitées en 1 sous forme de graphique avec le code suivant,
#Représenter les données sous forme de graphique linéaire
#Définir le titre du graphique
plt.title("quarterly-RealGDP_in_Japan")
#Nommer l'axe des x et l'axe des y du graphique
plt.xlabel("date")
plt.ylabel("GDP")
#Graphique de données
plt.plot(df)
plt.show()
L'axe horizontal représente le temps et l'axe vertical est le graphique de la valeur du PIB. Il oscille de haut en bas à court terme et a tendance à augmenter à long terme.
Je vais. Exceptionnellement, on peut constater que la valeur du PIB a considérablement baissé vers 2008 en raison du choc Lehman. Je minutes
Une fois analysé, il ne peut être interprété que dans cette mesure, mais quel type de modèle la machine lit-elle à partir de ces données et de quoi s'agit-il?
Ferez-vous une telle prédiction? J'ai hâte d'y être!
__3. Déterminer les paramètres __ Le modèle SARIMA nécessite 7 variables, l'une est déterminée visuellement sur le graphique et les 6 autres sont sorties par une fonction.
Je vais.
L'un est un paramètre appelé période s. Combien d'unités de motifs sur les données peuvent être vues à plusieurs reprises au cours de la période s
Il sera entré s'il a fallu du temps. Compte tenu de la période s dans le graphique affiché ci-dessus, le mouvement vertical est répété.
A monté et descendu quatre fois en quatre ans, un schéma périodique se produit donc une fois par an (une unité). Par conséquent, le cycle s est d'un an
En attendant, comme les données dont nous traitons cette fois-ci sont des données trimestrielles, 4 données équivalent à 1 an, nous pouvons donc voir que s = 4. Ensuite, les 6 restants sont générés par la fonction suivante.
#Déterminer les paramètres du modèle SARIMA
def selectparameter(DATA,s):
p = d = q = range(0, 2)
pdq = list(itertools.product(p, d, q))
seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))]
parameters = []
BICs = np.array([])
for param in pdq:
for param_seasonal in seasonal_pdq:
try:
mod = sm.tsa.statespace.SARIMAX(DATA,
order=param,
seasonal_order=param_seasonal)
results = mod.fit()
parameters.append([param, param_seasonal, results.bic])
BICs = np.append(BICs,results.bic)
except:
continue
return print(parameters[np.argmin(BICs)])
#Traiter les valeurs du PIB réel
i = 0
for x in df["RealGDP"]:
x = x.replace(',', '')
df.iloc[i,0] = x
i += 1
selectparameter(df["RealGDP"].values.astype(float), 4)
[(0, 1, 0), (1, 1, 0, 12), 1641.6840970980422] CPU times: user 19.1 s, sys: 8.17 s, total: 27.3 s Wall time: 14.2 s
Définissez les paramètres sur (0, 1, 0), (1, 1, 0, 12) à partir du résultat de sortie.
__4. Ajustement et prédiction du modèle __
#Coupe du modèle
SARIMA_df = sm.tsa.statespace.SARIMAX(df.astype("float64"),order=(0, 1, 0),seasonal_order=(1, 1, 0, 12)).fit()#Veuillez écrire votre réponse ici
#Remplacer les données de prédiction par pred
pred = SARIMA_df.predict("2015-03-31", "2022-12-31")
#Visualisation des données prédéfinies et des données de séries chronologiques originales
plt.plot(df)
plt.plot(pred, color="r")
plt.show()
Prédire le PIB du 31 mars 2015 au 31 décembre 2022, représenter graphiquement la valeur réelle en bleu et la valeur prévue en rouge
Faire. Le graphique ressemble à ceci:
Puisque le bleu et le rouge se chevauchent un peu, on peut dire que la prédiction est bonne.
Cependant, étant donné que l'impact sur l'économie du nouveau virus corona n'est pas pris en compte, les valeurs prévues après cela sont considérablement différentes des valeurs réelles.
Vous pouvez vous attendre à ce que ce soit le cas. Je voudrais attendre les futures valeurs de mesure réelles.
Je ne pouvais même pas faire une touche aveugle il y a deux mois, même si je n'avais pas une compréhension stricte
Je suis un peu impressionné de pouvoir faire des prédictions.
Puisque j'ai toujours le cours d'Aidemy dans mes projets futurs, j'étudierai dans un autre cours et je sortirai autre que l'analyse des données.
Je reviendrai ici pour le faire.
Merci beaucoup d'avoir lu jusqu'au bout! !!
e-stat Cours d'analyse des données Aidemy Prévision de l'évolution de la population au Japon par apprentissage automatique [Méthode d'analyse des mégadonnées et "modèle SARIMA" pour prédire l'avenir](https://deepage.net/bigdata/2016/10/22/bigdata-analytics.html#sarima%E3%83%A2%E3%83] % 87% E3% 83% AB)
Recommended Posts