Analyse des données Les débutants ont étudié les pandas en étudiant la relation entre les dépenses de crème glacée par ménage et la température. (Je peux voir le résultat en quelque sorte ...) La référence était "[Introduction à l'analyse des données par Python](https://www.amazon.co.jp/Python%E3%81%AB%E3%82%88%E3%82%8B%E3%83%" 87% E3% 83% BC% E3% 82% BF% E8% A7% A3% E6% 9E% 90% E5% 85% A5% E9% 96% 80-% E5% B1% B1% E5% 86% 85 -% E9% 95% B7% E6% 89% BF / dp / 4274222888 / ref = sr_1_3? __ mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & mots-clés = Python + % E3% 83% 87% E3% 83% BC% E3% 82% BF% E8% A7% A3% E6% 9E% 90 & qid = 1583399806 & sr = 8-3) "et les deux sites suivants.
Statistiques d'Icecream BIZ Température moyenne mensuelle de l'Agence météorologique
J'ai utilisé les données 2018 publiées sur le site ci-dessus.
import pandas as pd
import math
import matplotlib.pyplot as plt
import statsmodels.api as sm
ice_url = 'http://www.icecream.or.jp/biz/data/expenditures.html'
temp_url = 'http://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?%20prec_no=44&block_no=47662'
ice = pd.read_html(ice_url)[0]
temp = pd.read_html(temp_url)[0]
# [0]Spécifie la première table de
ice_2018 = ice.iloc[1:13, 5].astype(float)
temp_2018 = temp.iloc[144, 1:13].astype(float)
#Extraire uniquement les données 2018 et les convertir en type numérique
month = pd.DataFrame([i for i in range(13)])
#Avoir n mois prêt
Vous avez maintenant les dépenses de crème glacée 2018 par ménage et la température mensuelle moyenne.
icecream = pd.concat([month, ice_2018, temp_2018], axis=1)[1:]
#Combinez n mois, dépenses de glace et température moyenne
x_data, y_data = icecream[144], icecream[5]
avetem, aveex = x_data.sum() / 12, y_data.sum() / 12
#Température moyenne annuelle(avetem)Et les dépenses de crème glacée(aveex)A été demandé
Le coefficient de corrélation est exprimé comme suit en utilisant la covariance $ S_ {xy} $ et ainsi de suite.
r = \frac{S_{xy}}{\sqrt{S_{xx}S_{yy}}}
Selon cette formule, le coefficient de corrélation $ r $ a été honnêtement calculé comme suit. (Je pense qu'il y a un meilleur moyen)
for i in range(len(icecream)):
ex = icecream.iloc[i,1] - aveex
tem = icecream.iloc[i,2] - avetem
extem += ex*tem
ex0 += ex**2
tem0 += tem**2
extem0 = math.sqrt(ex0)*math.sqrt(tem0)
r = extem / extem0
# r = 0.8955143151163499
Ce résultat montre qu'il existe une forte corrélation entre les dépenses de crème glacée et la température.
Enfin, faisons une analyse de régression à l'aide de pandas ols.
X = sm.add_constant(x_data) #Il semble nécessaire de trouver une section
model = sm.OLS(y_data, X)
results = model.fit()
a, b = results.params[0], results.params[1]
# a:Coupe, b:Inclinaison
plt.plot(x_data, a+b*x_data)
plt.scatter(icecream[144], icecream[5])
En conséquence, une droite de régression comme le montre la figure a été obtenue.
Je vois, quand il fait chaud, je veux manger de la glace.
Recommended Posts