パスワードを忘れた? アカウント作成
2338537 journal
日記

nabetaの日記: ガソリンの値段が高いので作ってみた 5

日記 by nabeta

ガソリンの価格がやたら高いので、値段の推移とかを数字で見てみようとデータを探した。
すると、「財団法人日本エネルギー経済研究所 石油情報センター」というサイトが
(だいたい)全国の石油製品の価格推移のデータを(しかもエクセルファイルで)提供していた。

http://oil-info.ieej.or.jp/price/data/SekiyuWeekly.xls

しかも、このデータは高速道路のサービスエリアのガソリンスタンド価格に反映されている
らしい(どういう配慮でそうなっているのか理解できないけど)

ちょっと見てみるつもりでダウンロードしてきて眺めてみたが、これが見れば見るほどに
意味不明なデータで頭を捻る。
・「関東局」としてまとめているらしい値が、それらしい都県の価格の平均と一致しない。
 →エクセルに読み込む前のデータで集計して桁処理をしているとしても、ずいぶん違う。
・「九州局」と「沖縄局」というのがあり「九州沖縄局」というのもある。
 →どういう分類なのか説明が見つからない。
・もちろん「全国」の値は、それらしいものをまとめても一致してくれない。
 →なんなのこのエクセル表は、とちょっとキレ気味にキーボードを叩く手を止める。

とりあえずスクリプトを作るが、このデータどう理解したらよいものか悩む。

# -*- mode: python; coding: utf-8 -*-
#
# require: xlrd-0.7.3
import sys
import os.path
import sqlite3

def stealStuff(file_name,file_mode,base_url):
        from urllib2 import Request, urlopen, URLError, HTTPError
        url = base_url + file_name
        req = Request(url)
        try:
                f = urlopen(req)
                print "downloading " + url
                local_file = open(file_name, "w" + file_mode)
                local_file.write(f.read())
                local_file.close()
        except HTTPError, e:
                print "HTTP Error:",e.code , url
        except URLError, e:
                print "URL Error:",e.reason , url

def insertFromExcel(dbconn,xl_filename):
        from datetime import date,datetime,time
        from xlrd import open_workbook,xldate_as_tuple,XL_CELL_TEXT,XL_CELL_DATE,USE_MMAP

        wb = open_workbook(xl_filename)
        for s in wb.sheets():
                item_name = s.cell(0, 1).value.encode('utf-8').replace(' ', '').replace(' ', '')
                timestamp_list=['']
                for col in range(1,s.ncols):
                        if s.cell(1, col).ctype == XL_CELL_DATE:
                                date_value = xldate_as_tuple(s.cell(1, col).value,wb.datemode)
                                timestamp_list.append(date(*date_value[:3]))
                row_title=''
                sql = u"""insert into gas_price values(?,?,?,?)"""
                for row in range(2,s.nrows):
                        if s.cell(row, 0).ctype == XL_CELL_TEXT :
                                row_title=s.cell(row, 0).value.encode('utf-8').replace(' ', '').replace(' ', '')
                        for col in range(1,s.ncols):
                                dbconn.execute(sql, (row_title,timestamp_list[col],item_name,s.cell(row, col).value))

if __name__ == '__main__':
        xl_filename='SekiyuWeekly.xls'
        xl_url='http://oil-info.ieej.or.jp/price/data/'
        if not os.path.exists(xl_filename):
                stealStuff(xl_filename,'b',xl_url)

        conn = sqlite3.connect(":memory:")
        conn.text_factory=str
        sql = u"""create table if not exists gas_price (gp_region text,gp_date date,gp_type text,gp_price float)"""
        conn.execute(sql)
        insertFromExcel(conn,xl_filename)
        type_list=[u"ハイオク",u"レギュラー",u"軽油",u"灯油",u"灯油配達"]
        region_list=[u"北海道局",u"東北局",u"青森",u"岩手",u"宮城",u"秋田",u"山形",u"福島",
                                  u"関東局",u"茨城",u"栃木",u"群馬",u"埼玉",u"千葉",u"東京",u"神奈川",u"新潟",u"長野",u"山梨",u"静岡",
                                  u"中部局",u"愛知",u"岐阜",u"三重",u"富山",u"石川",
                                  u"近畿局",u"福井",u"滋賀",u"京都",u"奈良",u"大阪",u"兵庫",u"和歌山",
                                  u"中国局",u"鳥取",u"島根",u"岡山",u"広島",u"山口",
                                  u"四国局",u"徳島",u"香川",u"愛媛",u"高知",
                                  u"九州局",u"福岡",u"佐賀",u"長崎",u"熊本",u"大分",u"宮崎",u"鹿児島",
                                  u"沖縄局",u"九州沖縄局",u"全国"]
        sql=u"""select gp_region,gp_type,gp_date,gp_price from gas_price where gp_region=? and gp_type=?"""
        for reg in region_list:
                for dat in type_list[:2]:
                        cursor = conn.execute(sql,(reg,dat))
                        for row in cursor:
                                print row[0],row[1],row[2],row[3]
        conn.close()

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2012年03月29日 21時15分 (#2126359)

    >「関東局」としてまとめているらしい値が、それらしい都県の価格の平均と一致しない。

    少なくともこれに関しては、一致してると思うんですが……
    #最終桁が1ずれる時はありますが。

    • 「一致している」ことも時々あると思うのですが、すべての日付で一致しているようには見えないです。
      最終桁が1ずれるのはあるかなあ、と思っているのですが、平気で1以上ずれるところがあるのです。
      表示の桁を小数点以下2桁にして表示してみると、どうも切り上げや四捨五入でずれているわけでもないみたいだし。
      という具合にキレ気味なのです。
      そんでデータを取得してなにかに使おうと思ったことがなえてしまいました(もっとたくさんのデータが取れると期待していたのに、なんかしょぼいし)
      親コメント
    • by Anonymous Coward

      >「九州局」と「沖縄局」というのがあり「九州沖縄局」というのもある。

      見るからに九州各県+沖縄局の単純平均。
      (九州局と沖縄局の平均ではなく)

      >もちろん「全国」の値は、それらしいものをまとめても一致してくれない。

      一致しますよ。
      各県の値を全部足して、単純に47で割った値ですよね。
      #こちらも当然最終桁は微妙にずれることもありますが。

      • by nabeta (16694) on 2012年03月30日 6時51分 (#2126469) 日記
        >>「九州局」と「沖縄局」というのがあり「九州沖縄局」というのもある。
        >見るからに九州各県+沖縄局の単純平均。
        >(九州局と沖縄局の平均ではなく)

        この件に関しては、なんで「九州沖縄局」てな括りがあるのかわからないということです。
        集計の方法に一貫性がないとわめいているわけです。
        親コメント
  • by Anonymous Coward on 2012年03月29日 22時44分 (#2126391)

    ちょっと考えたらわかるのになぁ…。

typodupeerror

ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家

読み込み中...