我试图用下面的Python代码从CSV文件中绘制一个图形
import csv
import matplotlib.pyplot as plt
def population_dict(filename):
"""
Reads the population from a CSV file, containing
years in column 2 and population / 1000 in column 3.
@param filename: the filename to read the data from
@return dictionary containing year -> population
"""
dictionary = {}
with open(filename, 'r') as f:
reader = csv.reader(f)
f.next()
for row in reader:
dictionary[row[2]] = row[3]
return dictionary
dict_for_plot = population_dict('population.csv')
def plot_dict(dict_for_plot):
x_list = []
y_list = []
for data in dict_for_plot:
x = data
y = dict_for_plot[data]
x_list.append(x)
y_list.append(y)
plt.plot(x_list, y_list, 'ro')
plt.ylabel('population')
plt.xlabel('year')
plt.show()
plot_dict(dict_for_plot)
def grow_rate(data_dict):
# fill lists
growth_rates = []
x_list = []
y_list = []
for data in data_dict:
x = data
y = data_dict[data]
x_list.append(x)
y_list.append(y)
# calc grow_rate
for i in range(0, len(y_list)-1):
var = float(y_list[i+1]) - float(y_list[i])
var = var/y_list[i]
print var
growth_rates.append(var)
# growth_rate_dict = dict(zip(years, growth_rates))
grow_rate(dict_for_plot)
然而,我在执行这段代码时遇到了一个相当奇怪的错误
Traceback (most recent call last):
File "/home/jharvard/Desktop/pyplot.py", line 71, in <module>
grow_rate(dict_for_plot)
File "/home/jharvard/Desktop/pyplot.py", line 64, in grow_rate
var = var/y_list[i]
TypeError: unsupported operand type(s) for /: 'float' and 'str'
我一直在尝试不同的方法来强制转换y_list
变量。例如,强制转换int
我怎样才能解决这个问题,这样我就可以得到这些年来增长率的百分比来绘制这个图。你知道吗
由于CSV文件是文本文件,您需要将它们转换为数字。很容易纠正语法错误。只是使用
尽管这样做消除了语法错误,但仍有一个小错误更难发现,在某些情况下,它可能导致不正确的结果。主要原因是词典没有排序。i、 e.x和y值没有任何顺序。你的程序的缩进在我的电脑上似乎有点不对劲,所以我无法完全理解。但它的要点似乎是从文件中获取值(x和y值),然后找到序列
var[i] = (y[i+1] - y[i]) / y[i]
不幸的是,您的
y_list[i]
可能与CSV文件中的序列不同,因为它是从字典填充的。你知道吗在你做的部分:
最好是这样做来维持秩序
或者像这样的。。。你知道吗
然后,Numpy数组就有了更有效地处理问题的方法。然后您可以简单地执行以下操作:
希望这有帮助。如果你有任何问题,请告诉我。你知道吗
最后,如果你真的走Numpy路线,我强烈推荐它自己的csv阅读器。在这里查看:http://docs.scipy.org/doc/numpy/user/basics.io.genfromtxt.html
相关问题 更多 >
编程相关推荐