前提・実現したいこと
下記のソースコードを実行し、csvに出力&mapを描画という結果を得ようとしています。
発生している問題・エラーメッセージ
ファイルを実行した際に、下記のように'lightning_flash_lat'が無いと言われてしまいます。しかし、'lightning_flash_lat'が無い場合でも、何も無い値で(空欄で)csvを出力したい場合、どのようにコードを書き換えれば良いでしょうか?
File "kaminaridama_min_variables.py", line 70, in <module> flash_lat = np.concatenate([flash_lat,datafile.variables['lightning_flash_lat'][:]]) KeyError: 'lightning_flash_lat'
該当のソースコード
python
1# -*- coding: utf-8 -*- 2 3#### Import Python packages #### 4import numpy as np 5import glob 6from netCDF4 import Dataset 7import matplotlib.pyplot as plt 8from mpl_toolkits.basemap import Basemap 9import csv 10try: 11 # Python 2 12 from itertools import izip 13except ImportError: 14 # Python 3 15 izip = zip 16import datetime 17 18default_time = datetime.datetime(1993, 1, 1, 00, 00, 00) 19 20dataDir = '/Users/hoge/2019/0208/' 21csvfile = "/Users/hoge/isslis_flashloc_test.csv" 22 23#Identify all NetCDF files in the directory 24files = glob.glob(dataDir+'*.nc') 25 26flash_lat = np.array([]) 27flash_lon = np.array([]) 28 29for i in files: 30 datafile = Dataset(i) 31 32 flash_lat = np.concatenate([flash_lat,datafile.variables['lightning_flash_lat'][:]]) 33 flash_lon = np.concatenate([flash_lon,datafile.variables['lightning_flash_lon'][:]]) 34 35with open(csvfile, 'w') as myfile: 36 writer = csv.writer(myfile) 37 writer.writerows(izip(["flash_lat"], ["flash_lon"])) 38 39 writer.writerows(izip(flash_lat, flash_lon)) 40 41#Create plot of lightning flash location heat map 42plt.figure(figsize=((20,20))) #Set plot dimensions 43map = Basemap(projection='cyl', lon_0 = 0, resolution='c') 44lightning = map.hexbin(flash_lon, flash_lat, gridsize=300,bins='log',cmap='jet',mincnt=1,zorder=10) #Bin flash counts into hexbins using a gridsize of your choice 45 46#Draw geographic boundaries and meridians/parallels 47map.drawmapboundary(fill_color='k') 48map.fillcontinents(color='grey',lake_color='grey') 49map.drawcoastlines(color='white') 50map.drawcountries(color='white') 51map.drawmeridians(np.arange(0,390,30), labels=[0,0,0,1],fontsize=10, color="lightgray") 52map.drawparallels(np.arange(-90,120,30), labels=[1,0,0,0],fontsize=10, color="lightgray") 53 54cbar = map.colorbar(lightning,location='bottom',pad="5%") 55cbar.set_label('Flash Count') #Remember to change label 56 57plt.title('ISS LIS Detected Lightning Flash Locations January 4, 2018', fontsize = 18) #Rember to change title 58 59 60plt.show() 61
試したこと
下記を試しましたが、そもそもdatafileがnetCDFであるため、下記を実施してみても「AttributeError: NetCDF: Attribute not found」とエラーが返ってきてしまいます。
datafile.get('lightning_flash_lat', 'none')
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。