前提・実現したいこと
ちなみに私はwindows10を使っているのですが、記載されているプログラムの環境はMacです。
発生している問題・エラーメッセージ
記載されているプログラムは2つに分かれており、それらを一つにまとめた際、よくわからないエラーが出てしまう。
エラーメッセージ
Traceback (most recent call last):
File "mapping3.py", line 92, in <module>
bg_img = Image.open(file_name)
File "C:\Users\mikihome2015\Anaconda3\lib\site-packages\PIL\Image.py", line 2477, in open
fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'osm.png'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "mapping3.py", line 94, in <module>
bg_img = get_osm_img(minlat=minlat, minlon=minlon, maxlat=maxlat, maxlon=maxlon, scale=60000)
File "mapping3.py", line 80, in get_osm_img
return Image.open(BytesIO(response.content))
File "C:\Users\mikihome2015\Anaconda3\lib\site-packages\PIL\Image.py", line 2519, in open
% (filename if filename else fp))
OSError: cannot identify image file <_io.BytesIO object at 0x0000019AF7C1CF68>
該当のソースコード
python
1import pandas as pd 2from http.client import IncompleteRead 3import time 4#----------------------------------------------- 5import requests 6from io import BytesIO 7import matplotlib.pyplot as plt 8from mpl_toolkits.basemap import Basemap 9from PIL import Image 10#%matplotlib inline 11#もともとこの上の%matplotlib inlineの行はコメントアウトしていなかったがsegmentErrorのためコメントアウト 12#----------------------------------------------- 13 14 15# Retrieve station's lat/lon 16def fetch_latlon(): 17 url = 'http://qiita.com/butchi_y/items/3a6b70b38e13dc56ef13' 18 data = pd.read_html(url)[0] 19 data.columns = ['name', 'lat', 'lon'] 20 return data 21 22# Retrieve the number of passenger 23def fetch_passenger(): 24 # fetch data 25 urls = ['http://www.jreast.co.jp/passenger/index.html', 'http://www.jreast.co.jp/passenger/2014_01.html'] 26 data = pd.DataFrame() 27 for url in urls: 28 df = None 29 for i in range(5): 30 try: 31 df = pd.read_html(url) 32 break 33 except IncompleteRead as ir: 34 time.sleep(0.1) 35 # Sometimes fetching passenger fails 36 if df is None: 37 print('Failed to fetch passenger.') 38 sys.exit(1) 39 40 for i in range(2): 41 # Delete rank column in the first table 42 if url == urls[0]: 43 df[i] = df[i].iloc[:, 1:] 44 df[i].columns = [col for col in range(len(df[i].columns))] 45 data = data.append(df[i]) 46 # arrange data 47 data = data.iloc[2:, [0, 3]] 48 data.columns = ['name', 'passenger'] 49 data.reset_index(inplace=True, drop=True) 50 return data 51 52# Retrieve lat/lon and passenger info and merge them into one data 53def fetch_data(): 54 latlon = fetch_latlon() 55 passenger = fetch_passenger() 56 data = latlon.merge(passenger, how='inner', on='name') 57 return data 58 59data = fetch_data() 60 61#------------------------------------------------------------------- 62 63# min/max circle size of plot 64min_size = 200 65max_size = 2000 66 67# Retrive static OpenStreetMap 68def get_osm_img(minlat, minlon, maxlat, maxlon, scale=60000, img_format='png'): 69 url = 'http://www.openstreetmap.org/export/finish' 70 payload = { 71 'mapnik_format': img_format, 72 'mapnik_scale': scale, 73 'minlon': minlon, 74 'minlat': minlat, 75 'maxlon': maxlon, 76 'maxlat': maxlat, 77 'format': 'mapnik' 78 } 79 response = requests.post(url, payload) 80 return Image.open(BytesIO(response.content)) 81 82fig = plt.figure(figsize=(15, 15)) 83 84minlat, minlon, maxlat, maxlon = 35.61, 139.67, 35.75, 139.80 85bmap = Basemap(projection='merc', llcrnrlat=minlat, urcrnrlat=maxlat, llcrnrlon=minlon, urcrnrlon=maxlon, lat_ts=0, resolution='l') 86 87x, y = bmap(data['lon'].values, data['lat'].values) 88 89file_name = 'osm.png' 90bg_img = None 91try: 92 bg_img = Image.open(file_name) 93except FileNotFoundError as fnfe: 94 bg_img = get_osm_img(minlat=minlat, minlon=minlon, maxlat=maxlat, maxlon=maxlon, scale=60000) 95 bg_img.save(file_name) 96bmap.imshow(bg_img, origin='upper') 97bmap.scatter(x, y, c=data['passenger'], cmap=plt.cm.get_cmap('seismic'), alpha=0.5, s=data['passenger'].map(lambda x: (x - data['passenger'].min()) / (data['passenger'].max() - data['passenger'].min()) * (max_size - min_size) + min_size)) 98 99# plt.colorbar() 100plt.show() 101# plt.savefig('out.png') 102 103
試したこと
まず2つあったプログラムの内の1つ(山手線の駅の座標データをスクレイピングするもの)だけでプログラムを動かしてみて、エラーが出ないことをか確認した。
その後、プログラムをつなげた際エラーが出たのでpythonに必要なライブラリとbasemapがきちんとインストールされているか確認した。
補足情報(FW/ツールのバージョンなど)
python3.7.0
プログラム上から11行目にある%matplotlib inlineの%の意味も分かりませんでした。
回答1件
あなたの回答
tips
プレビュー