Построение точек рассеяния с помощью matplotlib из вопроса о файле CSV - PullRequest
0 голосов
/ 02 февраля 2019

Я извлек некоторые данные с веб-сайта в файл CSV, и мне нужно построить график рассеяния в matplotlib из этого файла CSV.Мне нужны только данные столбца 2 и 3. из файла CSV.

Я пытаюсь использовать цикл for, чтобы собрать данные CSV в список, а затем использовать его для построения диаграммы рассеяния, но я получаю "Ошибка ValueError: x и y должны иметь одинаковый размер.

import matplotlib.pyplot as plt
import csv

with open(cache_path + distance_csv) as csv_file:
reader = csv.reader(csv_file)

for column in reader:
    city_distance = [x[1] for x in csv.reader(csv_file)]
    crime_rate = [x[2] for x in csv.reader(csv_file)]

    plt.scatter(city_distance, crime_rate)
    plt.show()

Оба столбца 2 и 3 в моем CSV-файле имеют одинаковую длину - 83 ячейки, но я получаю ValueError.Что мне здесь не хватает?

1 Ответ

0 голосов
/ 02 февраля 2019

В вашем коде есть некоторые ошибки, я не могу знать, какие из них вызывают ваше поведение, но после того, как вы исправите их все, вы сможете прогрессировать:

  1. Сначала посмотрите, как вы читаете столбцы,Обратите внимание, что вы перебираете столбец в считывателе , но никогда не используете столбец (вы создаете два новых csv.readers в каждой итерации в цикле for).Посмотрите на возможное решение впоследствии в этом ответе.
  2. В связи с этим вы читаете csv_file вне области действия оператора with, чтобы файл был уже закрыт.Если вы будете использовать цикл for и столбец , вам все равно не придется исправлять эту проблему.
  3. Вы строите графики на каждой итерации (таким образом, вы создадите 83 графика, а ядумаю, вы этого не хотите).

Таким образом, возможное решение будет:

import matplotlib.pyplot as plt
import csv

with open(cache_path + distance_csv) as csv_file:
  reader = csv.reader(csv_file)
city_distance, crime_rate  = [], []
for column in reader:
  city_distance.append(float(column[1]))
  crime_rate.append(float(column[2]))
plt.scatter(city_distance, crime_rate)
plt.show()

В будущем я рекомендую вам попробовать проверить, что len(city_distance)==len(crime_rate),Я имею в виду, проверяйте свои данные не в csv, а в коде, после чтения значений и непосредственно перед ошибкой - чтобы получить наиболее полезную информацию для продолжения.

...