首页 > 解决方案 > 如何将 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'

标签: pythonpython-3.xnumpycsvdata-analysis

解决方案


两个问题:

  1. 我想你的意思是matplotlib而不是matlib. 确保安装它pip3 install matplotlib --user并相应地编辑代码。
  2. 您之前的代码不起作用,因为您没有实例化类或运行任何方法。您的程序所做的唯一“工作”是定义类,然后设置一个filename变量。

要解决 #2,请将您的filename=...行替换为下面的代码。这是它的作用:

  1. 它检查文件是否正在直接运行(即从命令提示符,例如python3 <your_file_name>.py。如果这个类是从不同的 python 文件导入和使用的,则不会执行此代码。更多阅读:https://www.geeksforgeeks .org/what-does-the- if ​​-name - main -do/
  2. 我们实例化您的类的一个实例并提供filename变量,因为它是您的类的__init__方法所期望的。
  3. 我们在类的实例上调用该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()

推荐阅读