Печать / печать только определенного столбца для некоторых конкретных станций из файла CSV - PullRequest
0 голосов
/ 30 декабря 2018

Я создал программу имитации зарядки, которая имитирует различные электромобили, прибывающие на разные станции для зарядки.

Когда моделирование завершено, программа создает файлы CSV для станций зарядки, как по статистике в час, так и по статистике задень, сначала пока, для меня важна статистика в час CSV.

Я хочу построить queue_length_per_hour (сколько машин ждет в очереди, каждый час с 0 до 24), для разных станций.

Но дело в том, что я НЕ хочу включать все станции, потому что их слишком много, поэтому я думаю, что только 3 станции более чем достаточно.

Какие 3 станции должныЯ поднял?Я выбираю 3 станции, основываясь на том, какие из них наиболее посещали машины на станции в течение дня (что я вижу на 24-м часу),

. Как видно из кода, я использовал фильтрметод из панд, так что я могу выбрать топ-3 станции на основе того, кто наиболее посещал машины в 24 часа из файла CSV.

И теперь у меня есть три верхние станции, и теперь я хочу построить весь столбец cars_in_queue_per_hour, не только в течение 24 часов, но и до 0 часа.

from time import sleep
import pandas as pd
import csv
import matplotlib.pyplot as plt


file_to_read = pd.read_csv('results_per_hour/hotspot_districts_results_from_simulation.csv', sep=";",encoding = "ISO-8859-1")


read_columns_of_file = file_to_read.columns

read_description = file_to_read.describe()


visited_cars_at_hour_24 = file_to_read["hour"] == 24

filtered = file_to_read.where(visited_cars_at_hour_24, inplace = True, axis=0)

top_three = (file_to_read.nlargest(3, 'visited_cars')) 
# This pick top 3 station based on how many visited cars they had during the day

#print("Top Three stations based on amount of visisted cars:\n{}".format(top_three))

#print(type(top_three))
top_one_station = (top_three.iloc[0]) # HOW CAN I PLOT QUEUE_LENGTH_PER_HOUR COLUMN FROM THIS STATION TO A GRAPH?
top_two_station = (top_three.iloc[1]) # HOW CAN I ALSO PLOT QUEUE_LENGTH_PER_HOUR COLUMN FROM THIS STATION TO A GRAPH?
top_three_station = (top_three.iloc[2]) # AND ALSO THIS?
#print(top_one_station)

#print(file_to_read.where(file_to_read["name"] == "Vushtrri"))

#for row_index, row in top_three.iterrows():
#  print(row)
#  print(row_index)
#  print(file_to_read.where(file_to_read["name"] == row["name"]))
#  print(file_to_read.where(file_to_read["name"] == row["name"]).columns)


xlabel = []
for hour in range(0,25):
    xlabel.append(hour)
ylabel = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # how to append queue length per hour for the top 3 stations here?

plt.plot(xlabel,ylabel)
plt.show()

Код также доступен по этой ссылке repl.it вместе с файлами CSV: https://repl.it/@raxor2k/almost-done

1 Ответ

0 голосов
/ 31 декабря 2018

Мне очень нравится пакет seaborn для создания этого типа графика, поэтому я бы использовал

import seaborn as sns
df_2 = file_to_read[file_to_read['name'].isin(top_three['name'])]
sns.factorplot(x='hour', y='cars_in_queue_per_hour', data=df_2, hue='name')

Вы уже выбрали три верхних имени, поэтому единственной важной частью является использование pd.isin, чтобы выбрать строки фрейма данных, имя которого совпадает с именем в верхних трех, и позволить seaborn создать график.

enter image description here

Чтобы это работало, убедитесь, что вы изменили одну строку кода, удалив внутреннюю часть:

filtered = file_to_read.where(visited_cars_at_hour_24, axis=0)
top_three = (filtered.nlargest(3, 'visited_cars'))

Это оставляет исходный кадр данных без изменений, чтобы использовать все данные из.Если вы используете inplace, вы не можете присвоить его обратно - операция выполняется на месте и возвращает None.

Я удалил строки кода, которые вам не нужны для графика, поэтому ваш полный код для воспроизведения будетбыть

import seaborn as sns
top_three = file_to_read[file_to_read['hour'] == 24].nlargest(3, 'visited_cars')
df_2 = file_to_read[file_to_read['name'].isin(top_three['name'])]
sns.factorplot(x='hour', y='cars_in_queue_per_hour', data=df_2, hue='name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...