python - 如何将 csv 数据用作变量以将其应用于公式?
问题描述
我正在尝试使用 csv 文件中的数据(https://www.kaggle.com/jingbinxu/sample-of-car-data)。我只需要马力和重量列作为方程的变量:( 1/4 mile et = 6.290 * (weight/hp) ** .33 ),但它不会应用它。我不知道存储是否正常工作,或者我不应该作为一个班级来做。当我运行程序时,它没有显示任何错误,但也没有显示结果。然后我必须绘制结果,但我认为它甚至不会计算和存储结果。任何帮助表示赞赏。提前致谢。
这是我拥有的当前代码:
import numpy as np
class car_race_analysis():
def __init__(self, filename):
import numpy as np
self.data = np.genfromtxt(filename,delimiter= ',', skip_header = 1 )
def race_stats(self,w,h):
#cars in data
cars = np.unique(self.data[:,0])
#storage for output
race_times = []
#for each car
for car in cars:
#mask
mask = self.data[:,0] == car
#get data
w = self.data[mask,12]
h = self.data[mask,18]
#apply formula
qrtr_mile = 6.290 * ( w / h ) ** .33
race_times.append(qrtr_mile)
#new atribute
self.race_times = np.array(race_times)
print(race_times)
def trend_plotter(self):
import matlib.pyplot as plt
#inputs
self.race_stats
cars = np.unique(self.data[:,0])
#plot
plt.plot(cars,self.race_times)
plt.xlabel("Car")
plt.ylabel("1/4 Mile Time")
plt.savefig("trend_plot.png")
filename = 'car_data.csv'
解决方案
两个问题:
- 我想你的意思是
matplotlib
而不是matlib
. 确保安装它pip3 install matplotlib --user
并相应地编辑代码。 - 您之前的代码不起作用,因为您没有实例化类或运行任何方法。您的程序所做的唯一“工作”是定义类,然后设置一个
filename
变量。
要解决 #2,请将您的filename=...
行替换为下面的代码。这是它的作用:
- 它检查文件是否正在直接运行(即从命令提示符,例如
python3 <your_file_name>.py
。如果这个类是从不同的 python 文件导入和使用的,则不会执行此代码。更多阅读:https://www.geeksforgeeks .org/what-does-the- if -name - main -do/ - 我们实例化您的类的一个实例并提供
filename
变量,因为它是您的类的__init__
方法所期望的。 - 我们在类的实例上调用该
trend_plotter
方法。
if __name__ == '__main__':
filename = 'car_data.csv'
car_analysis = car_race_analysis(filename)
car_analysis.trend_plotter()
即使进行了这些更改,您的程序也将无法运行,因为它还有其他错误。我在修复它时做了一个猜测,我已将其粘贴在下面,但我强烈建议您进行diff
更改以了解我所做的更改,以确保它符合您的要求。
import numpy as np
import matplotlib.pyplot as plt
class car_race_analysis():
race_times = []
cars = []
def __init__(self, filename):
import numpy as np
self.data = np.genfromtxt(filename, delimiter=',', skip_header=1)
def race_stats(self, w, h):
#cars in data
self.cars = np.unique(self.data[:, 0])
# storage for output
self.race_times = []
# for each car
for car in self.cars:
# mask
mask = self.data[:, 0] == car
# get data
w = self.data[mask, 12]
h = self.data[mask, 18]
# apply formula
qrtr_mile = 6.290 * (w / h) ** .33
self.race_times.append(qrtr_mile)
# new atribute
self.race_times = np.array(self.race_times)
def trend_plotter(self):
# inputs
self.race_stats(len(self.cars), len(self.race_times))
# plot
plt.plot(self.cars, self.race_times)
plt.xlabel("Car")
plt.ylabel("1/4 Mile Time")
plt.savefig("trend_plot.png")
plt.show()
if __name__ == '__main__':
filename = 'car_data.csv'
car_analysis = car_race_analysis(filename)
car_analysis.trend_plotter()
推荐阅读
- java - 如果在 select2 多选中选择了一个选项,如何删除清除按钮
- php - Apache2:非法尝试为服务器重新初始化 SSL
- selenium - 如何在提供的 html 中查找元素的 xpath 表达式
- python - 如何获取属性的文档字符串属性?
- python - 按行索引分组的条形图
- angular - Webpack 忽略源目录中的文件
- javascript - 要求、导出和控制台字段的 Javascript eslint 错误
- android - 程序类型已经存在:org.hamcrest.CoreMatchers
- ruby-on-rails - 如何以 Ruby on Rails 守护进程的方式查看服务器日志?
- python - 将 tkinter Filedialog 与 json.dump 结合使用