我正在尝试重写以下脚本,如下所示: https://github.com/rougier/LinuxMag-HS-2014/blob/master/matplotlib/earthquakes.py
从在线CSV文件中读取地震纬度,经度和幅度数据。我想重写数据输入,以便不是使用urllib,而是从URL读取它,我想使用csv模块读取地震的纬度,经度和幅度。我对如何完美地重写原始脚本的File IO部分感到有些困惑,因此我可以使用自己的CSV文件,而不必将其从互联网上取下(如原件中所示)。
这里是原始脚本的文件IO部分(与上面的链接相同):
import urllib
import numpy as np
import matplotlib
matplotlib.rcParams['toolbar'] = 'None'
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib.animation import FuncAnimation
# Open the earthquake data
# -------------------------
# -> http://earthquake.usgs.gov/earthquakes/feed/v1.0/csv.php
feed = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/"
# Earthquakes of magnitude > 4.5 in the past 30 days
url = urllib.urlopen(feed + "4.5_month.csv")
# Set earthquake data
data = url.read().split('\n')[+1:-1]
E = np.zeros(len(data), dtype=[('position', float, 2),
('magnitude', float, 1)])
for i in range(len(data)):
row = data[i].split(',')
E['position'][i] = float(row[2]),float(row[1])
E['magnitude'][i] = float(row[4])
fig = plt.figure(figsize=(14,10))
ax = plt.subplot(1,1,1)
P = np.zeros(50, dtype=[('position', float, 2),
('size', float, 1),
('growth', float, 1),
('color', float, 4)])
这是我重写的开始,包括我自己的CSV文件(不使用urlib)
import matplotlib
from pylab import load
import numpy as np
from numpy import loadtxt
from pylab import save
matplotlib.use('TkAgg')
matplotlib.rcParams['toolbar'] = 'None'
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib.animation import FuncAnimation
import csv
eq_data = open('mycsvfile.csv')
lats, lons = [], []
magnitudes = []
with open(eq_data, 'rb') as f:
reader = csv.reader(f)
reader.next() # To ignore the first row
for row in reader:
lats.append(float(row(1)))
lons.append(float(row(2)))
magnitudes.append(float(row[6]))
# After reading in the csv file, this is where I get confused.
fig = plt.figure(figsize=(14,7))
ax = plt.subplot(1,1,1)
# 10 represents the number of simultaneous displayed earthquakes
P = np.zeros(10, dtype=[('position', float, 2),
('size', float, 1),
('growth', float, 1),
('color', float, 4)])
我希望弄清楚在读取我自己的CSV文件后,如何在#set地震数据之后重写原始代码部分。有关如何做到这一点的任何想法?
答案 0 :(得分:1)
正如你在评论中所说的那样 -
我收到以下错误:
File "./antarctica_earthquake_anim.py", line 19, in <module> with open(eq_data, 'rb') as f: TypeError: coercing to Unicode: need string or buffer, file found
问题在于行 -
eq_data = open('mycsvfile.csv')
...
with open(eq_data, 'rb') as f:
您首先打开文件eq_data
,然后再将其传递给open()
,但这不起作用。
open()
需要文件名作为第一个参数,而不是file
个对象。尝试做 -
with open('mycsvfile.csv') as f:
在此之前不打开任何eq_data
。
此外,在您的urllib
代码中,您似乎正在使用row[4]
来衡量数量,但在您使用csv
的{{1}}版本中,您应该使用正确的一个在row[6]
中(以正确的一个为准)。