質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.01%

  • Python

    5542questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    4091questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

python 算出されたデータをリストに追加する

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 135

MasaKoba

score 12

お世話になります。現在2011-2015年の毎日のデータがございます。そこで、以下のコードにより、各年・各月の平均を算出し、2016年の各月の平均値を予測したいと考えております。(例えば、2011年~2015年それぞれの1月の値をプロットし、近似線を算出した上で、2016年1月の値を予測する)

しかし、エラーがでてしまうため、ご助言をいただけますと幸いです。

import csv
import datetime
import copy
import numpy as np

# 辞書にデータを読み取る
date_dict = {}
with open("moving_train.csv", "r", newline="") as f:
    reader = csv.reader(f)

    for row in reader:
        date = map(int, row[0].split('/'))
        date_dict[datetime.date(*date)] = int(row[1])

#各年・各月の平均を算出し、各月ごとの値により、近似線を算出(例:2011年~2015年それぞれの1月の値をプロットし、近似線を算出した上で、2016年1月の値を予測)
class Month:
    def __init__(self, mo):
        self.mo = mo

    def month_ave(self):
        date_dict_mo = copy.deepcopy(date_dict)
        for yea in [2011, 2012, 2013, 2014, 2015]:
            date_dict_mo = copy.deepcopy(date_dict)
            for key in list(date_dict_mo):
                if self.mo == 12 and datetime.date(yea, 12, 1) <= key <= datetime.date(yea, 12, 31):
                    pass
                elif self.mo != 12 and datetime.date(yea, self.mo, 1) <= key < datetime.date(yea, (self.mo + 1), 1):
                    pass
                else:
                    del date_dict_mo[key]

            total_month = sum(date_dict_mo.values())
            average_month = 1.0 * total_month / len(date_dict_mo)
            (x, y) = []
            x.update(yea)
            y.update(average_month)
            z = np.polyfit(x, y, 1)
            p = np.poly1d(z)
            a = p[1]
            b = p[0]
            print(a * 2016 + b)

# 各月を呼び出している(実行)
if __name__ == '__main__':
    for mon in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]:
        month_mon = Month(mon)
        month_mon.month_ave()

【エラー】
Traceback (most recent call last):
File "C:/Users/.....", line 61, in <module>
month_mon.month_ave()
File "C:/Users.....", line 35, in month_ave
(x, y) = []
ValueError: not enough values to unpack (expected 2, got 0)

【他にトライしたこと】
・上記の"update"を"append"に変えても同じエラーがでました。
・最初は、
x = np.array(yea)
y = np.array(average_month)
z = ...
としていたところ、yeaとaverage_monthがforで回るごとに置き換わってしまうため、結局2015年の値しか最終的には残っていないことに気づき、updateやappendを使ってみたのですが上手いこと動きませんでした。

何かご助言いただけますと助かります。
何卒よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

こうでは?

x, y = [], []

なお、これは次のようにも書けます。

x = []
y = []

エラーに原因がもろに書いてありますよね。

(x, y) = []
ValueError: not enough values to unpack (expected 2, got 0)

パック/アンパックの機構をご存じないのでしょうか?

>>> x, y = [1, 2]
>>> x
1
>>> y
2

そして、listにはupdateメソッドはありません。それはdictのメソッドです。
行き当たりばったりで色々試す前に、エラーの理解を優先すべきでは。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/20 09:16

    返信が遅くなり申し訳ございません。ご回答いただきありがとうございます。また、基本的な質問で申し訳ございません。今後は、ご指摘のとおりまずはエラーの理解を優先しつつ進めていきます。ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    pythonのエラー

    testThreadが見つからないというメッセージが出てきたのですが、どこに問題があるのでしょうか? よろしくお願いします コード #-*- coding utf-8-*-

  • 解決済

    javaで効率のよい書き方

    いつもお世話になっております。 今回は効率化(?)について質問させていただきます。 やりたいこと String型の配列に入っている”2016/07/20”という文字列

  • 解決済

    pythonにおける時刻のソート

    単純な質問です。 python3において、時刻のデータが以下のように与えられたとき古い順に並べなおすような操作はどのようなコード、または関数を用意すればできるのか教えてくださ

  • 解決済

    Javaのテキストを日付に変換したい

    Javaで西暦、年号がバラバラのデータ(格納されている日付データの型はString型)の フォーマットを整形したい場合の書き方を教えて頂きたいです。 例)2015年7月26日メ

  • 解決済

    Python メソッド間の変数の呼び出しについて

    Pythonを勉強しておりまして、現在は主にオブジェクト指向の考え方を学んでおります(オブジェクト指向はほとんど初学です)。これまでに書いたシンプルなプログラムをクラスとメソッドで

  • 解決済

    2つのデータフレームを比較して、ある時間に該当するものを重複を削除した上で出力する:Pandas

    前提・実現したいこと お世話になります。以前の質問から派生して、下記のようなことを実現したいと思います。 機械が稼働する時間のデータ(machine.csv)とある時間に

  • 解決済

    pythonでログの分析(時間)が出来ません。

    前提・実現したいこと pythonのプログラムで質問です。 以下のログがあります。 2012/01/02 13:00 0 2012/01/02 14:00 1 2012/01/

  • 受付中

    pythonのリストに読み込んだCSVを追加する

    Pythonのプログラムで質問です。 2つのCSVファイルがあります。 この2つのCSVファイルをrecordsのリストに追加したいのですが、 追加した側が [['2017/08/

同じタグがついた質問を見る

  • Python

    5542questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    4091questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。