nabetaの日記: ガソリンの値段が高いので作ってみた 5
ガソリンの価格がやたら高いので、値段の推移とかを数字で見てみようとデータを探した。
すると、「財団法人日本エネルギー経済研究所 石油情報センター」というサイトが
(だいたい)全国の石油製品の価格推移のデータを(しかもエクセルファイルで)提供していた。
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()
あれ?一致しますけど? (スコア:0)
>「関東局」としてまとめているらしい値が、それらしい都県の価格の平均と一致しない。
少なくともこれに関しては、一致してると思うんですが……
#最終桁が1ずれる時はありますが。
Re:あれ?一致しますけど? (スコア:1)
最終桁が1ずれるのはあるかなあ、と思っているのですが、平気で1以上ずれるところがあるのです。
表示の桁を小数点以下2桁にして表示してみると、どうも切り上げや四捨五入でずれているわけでもないみたいだし。
という具合にキレ気味なのです。
そんでデータを取得してなにかに使おうと思ったことがなえてしまいました(もっとたくさんのデータが取れると期待していたのに、なんかしょぼいし)
ついでに (スコア:0)
>「九州局」と「沖縄局」というのがあり「九州沖縄局」というのもある。
見るからに九州各県+沖縄局の単純平均。
(九州局と沖縄局の平均ではなく)
>もちろん「全国」の値は、それらしいものをまとめても一致してくれない。
一致しますよ。
各県の値を全部足して、単純に47で割った値ですよね。
#こちらも当然最終桁は微妙にずれることもありますが。
Re:ついでに (スコア:1)
>見るからに九州各県+沖縄局の単純平均。
>(九州局と沖縄局の平均ではなく)
この件に関しては、なんで「九州沖縄局」てな括りがあるのかわからないということです。
集計の方法に一貫性がないとわめいているわけです。
”ガソリン”を作るのかと思ってました (スコア:0)
ちょっと考えたらわかるのになぁ…。