SIGNATEの 【練習問題】Jリーグの観客動員数予測をやってみたい!!①の続きです。
前回は基礎分析をやったので今回は実際に予測値を出してみましょう。
SIGNATEの 【練習問題】Jリーグの観客動員数予測をやってみたい!!②
えっと結論から言うと、単回帰分析という手法を使って分析をしようと思ったのですが・・・
無理でした!!!
というのも、質的データをダミー変数でカラムに変換した時点で単回帰分析の手法にはならないみたい。
単回帰分析で必要な
values.reshape(-1,1)
というコードで思いっきりエラーが出ました。
なのでreshapeの部分を書かないことで重回帰分析として分析を進めていきます。
とりあえず観客動員数とホームチームの相関関係が導き出せましたので、作ったものを評価データtestに代入して予測をしてみましょう。
回帰モデルの箱を用意
model = LR()
重回帰モデルを作る
model.fit(trainX, y)
trainXと同じようにtest.csvもhomeをダミー化し
testX = pd.get_dummies(test[["home"]])
trainXで作ったmodelをtestXに当てはめる。それをpredに代入。
pred = model.predict(testX)
これでtrainXで作ったモデル(homeとyの関係)がtestXに反映され観客動員数の予測ができるはず・・・。
ValueError: shapes (313,40) and (43,) not aligned: 40 (dim 1) != 43 (dim 0)
testXとtrainXで列数が違うため比較できないらしいっす・・・。
ホームチームの数が40チームと43チームで異なってしまってるってこと?でもそれってデータ自体がおかしいやん!!
ここで気が付く僕・・・。
追加ファイルがあるのね!!!!!!
このデータを結合しなきゃいけないはず!!・・・って結合方法なんて知らんぞ・・・。
ここらへんにヒントがありやってみるもののうまくいかず。
pandas.DataFrameでcsvファイルを内部結合 - めも
Pandas でデータフレームの結合 (マージ, JOIN) – Python でデータサイエンス
手作業で結合するかw
プログラムをやる人間にあるまじき行動ですねw
でもいつかできるようにするということで!
で中身をチェックしているうちにゼルビアとガイナーレはJ3に降格したので評価用データには存在しないことが分かりました。
さらにザスパクサツ群馬は名称が変わっているため、trainのザスパ草津をザスパクサツ群馬に変更してしまいましょう。
なのでこれを除外すればいいのかな?
多分一般的な統計の手法と全然違うんだよねw
でも勉強し始めて1週間くらいだから仕方ない。とりあえず今ある知識で何かやるということにしたので。
train.csvのcsvファイルの拡張子をtxtに変えてExcelで開く。区切りをカンマにすることを忘れぬよう
homeでソートをかけてゼルビアとガイナーレを削除。
さらにザスパの名称を変更しましょう。
ちなみにこのままだと読み込みでエラー
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 0: invalid start byte
を吐くので
train = pd.read_csv("train.csv",encoding="shift-jis")
encord以下を記載します。
testX = pd.get_dummies(test[["home"]])
pred = model1.predict(testX)
sample[1] = pred
ValueError: Length of values does not match length of index
ぐはっ!!エラー!!!
https://to-kei.net/python/data-analysis/pandas-index-columns/
リストの長さは行数と一致することが求められます。してないと、、、
df["身"] = [173,145,167,155]
*** ValueError: Length of values does not match length of index と表示されます。
えっとならどうすればいいんだこれ???
と考えた結果sample_submitの方にもデータの抜けがあることが分かったのでコピペ(笑)でidと数値を貼り付けていきます。
おそらくPython関係のライブラリはこういうのを自動的にやってくれるから便利なんだろうなあ。まだ使えないけどw
``
sample[1] = pred
sample.to_csv("home.csv",index=None, header=None)
<br><br> よっしゃ!出力された!値をみると予測結果もしっかり出ているぞ!!!<br> ならばこれをコンペに投稿してみましょう。 [f:id:sr2460:20190222160924p:plain] 数値が低いほど精度が高いということなのでまあ悪い数字ですねw<br> でもなんにも分からなかったところから曲がりなりにも分析ができるようになったのは良いことです!<br> 次回はもう少し重回帰分析を進めてみましょう。