前提・実現したいこと
広告がゲストの数の増減にどれくらいのインパクトがあるかを
計測するために、重回帰分析を行おうと考えております。
(参考:https://qiita.com/gatchaman-20140215/items/86299f4501d9f3576ea2)
データの中身は以下のような感じです。
months guests TV_a TV_b TV_c TV_d NP_a NP_b NP_c NP_d BL_a BL_b BL_c BL_d 10月 137254 13508160 40464163 10012200 10460575 0 5675220 495000 3888000 0 27965000 0 4136000 11月 159762 11078754 33905614 12836200 2830800 1179000 4591350 0 2034000 188000 17390000 0 94000 12月 204869 9383450 8054120 3438750 13908925 270000 747000 747000 2484000 5640000 1645000 0 0 ... .. .....
そこで参考URLの通り、pairplotから始めようとしたのですが、
以下のエラーが起きました。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-13-766b93ad79b2> in <module> ----> 1 sns.pairplot(data[col_tv], kind='reg') c:\users\lib\site-packages\seaborn\axisgrid.py in pairplot(data, hue, hue_order, palette, vars, x_vars, y_vars, kind, diag_kind, markers, height, aspect, corner, dropna, plot_kws, diag_kws, grid_kws, size) 2132 elif kind == "reg": 2133 from .regression import regplot # Avoid circular import -> 2134 plotter(regplot, **plot_kws) 2135 2136 # Add a legend c:\users\lib\site-packages\seaborn\axisgrid.py in map_offdiag(self, func, **kwargs) 1408 """ 1409 -> 1410 self.map_lower(func, **kwargs) 1411 if not self._corner: 1412 self.map_upper(func, **kwargs) c:\users\lib\site-packages\seaborn\axisgrid.py in map_lower(self, func, **kwargs) 1378 """ 1379 indices = zip(*np.tril_indices_from(self.axes, -1)) -> 1380 self._map_bivariate(func, indices, **kwargs) 1381 return self 1382 c:\users\lib\site-packages\seaborn\axisgrid.py in _map_bivariate(self, func, indices, **kwargs) 1504 y_var = self.y_vars[i] 1505 ax = self.axes[i, j] -> 1506 self._plot_bivariate(x_var, y_var, ax, func, kw_color, **kws) 1507 self._add_axis_labels() 1508 c:\users\lib\site-packages\seaborn\axisgrid.py in _plot_bivariate(self, x_var, y_var, ax, func, kw_color, **kwargs) 1534 color = self.palette[k] if kw_color is None else kw_color 1535 -> 1536 func(x, y, label=label_k, color=color, **kwargs) 1537 1538 self._clean_axis(ax) c:\users\lib\site-packages\seaborn\regression.py in regplot(x, y, data, x_estimator, x_bins, x_ci, scatter, fit_reg, ci, n_boot, units, seed, order, logistic, lowess, robust, logx, x_partial, y_partial, truncate, dropna, x_jitter, y_jitter, label, color, marker, scatter_kws, line_kws, ax) 816 scatter_kws["marker"] = marker 817 line_kws = {} if line_kws is None else copy.copy(line_kws) --> 818 plotter.plot(ax, scatter_kws, line_kws) 819 return ax 820 c:\users\lib\site-packages\seaborn\regression.py in plot(self, ax, scatter_kws, line_kws) 363 364 if self.fit_reg: --> 365 self.lineplot(ax, line_kws) 366 367 # Label the axes c:\users\lib\site-packages\seaborn\regression.py in lineplot(self, ax, kws) 406 """Draw the model.""" 407 # Fit the regression model --> 408 grid, yhat, err_bands = self.fit_regression(ax) 409 edges = grid[0], grid[-1] 410 c:\users\lib\site-packages\seaborn\regression.py in fit_regression(self, ax, x_range, grid) 214 yhat, yhat_boots = self.fit_logx(grid) 215 else: --> 216 yhat, yhat_boots = self.fit_fast(grid) 217 218 # Compute the confidence interval at each grid point c:\users\01037485\taishi\lib\site-packages\seaborn\regression.py in fit_fast(self, grid) 239 n_boot=self.n_boot, 240 units=self.units, --> 241 seed=self.seed).T 242 yhat_boots = grid.dot(beta_boots).T 243 return yhat, yhat_boots c:\users\lib\site-packages\seaborn\algorithms.py in bootstrap(*args, **kwargs) 83 for i in range(int(n_boot)): 84 resampler = integers(0, n, n) ---> 85 sample = [a.take(resampler, axis=0) for a in args] 86 boot_dist.append(f(*sample, **func_kwargs)) 87 return np.array(boot_dist) c:\users\lib\site-packages\seaborn\algorithms.py in <listcomp>(.0) 83 for i in range(int(n_boot)): 84 resampler = integers(0, n, n) ---> 85 sample = [a.take(resampler, axis=0) for a in args] 86 boot_dist.append(f(*sample, **func_kwargs)) 87 return np.array(boot_dist) TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'
該当のソースコード
Python
1import pandas as pd 2import numpy as np 3import matplotlib.pyplot as plt 4import matplotlib as mpl 5%matplotlib inline 6import seaborn as sns 7import statsmodels.api as sm 8 9data = pd.read_csv(path, encoding='Shift-jis', sep=',') 10data.head(10) 11 12co = data.drop('months', axis=1) 13col = co.columns 14col 15 16#Index(['guests', 'TV_a', 'TV_b', 'TV_c', 'TV_d', 'NP_a', 'NP_b', 'NP_c', 17# 'NP_d', 'BL_a', 'BL_b', 'BL_c', 'BL_d'], 18# dtype='object') 19 20col_tv = col[1:5] 21col_tv 22#Index(['TV_a', 'TV_b', 'TV_c', 'TV_d'], dtype='object') 23 24sns.pairplot(data[col_tv], kind='reg') 25
試したこと
astype(np.int32)など
試しましたが、だめでした、、、
因みにヒートマップを試したところ、
こちらはうまくいきました。
Python
1cm = np.corrcoef(data[col_tv].values.T) 2sns.set(font_scale=1.5) 3hm = sns.heatmap(cm, 4 cbar=True, 5 annot=True, 6 square=True, 7 fmt='.2f', 8 annot_kws={'size': 15}, 9 yticklabels=col_tv, 10 xticklabels=col_tv) 11plt.show()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/05 07:37