Меня зовут Дэвид, и я работаю в службе скорой помощи во Флориде.
Я использую Python 2.7 и matplotlib. Я пытаюсь войти в свою базу данных вызовов скорой помощи и подсчитать количество вызовов, которые происходят в каждый будний день.
Затем я воспользуюсь matplotlib для создания гистограммы этой информации, чтобы дать медработникам наглядное представление о том, насколько они заняты каждый день.
ЗДЕСЬ КОД, КОТОРЫЙ РАБОТАЕТ ОЧЕНЬ ХОРОШО:
import pyodbc
import matplotlib.pyplot as plt
MySQLQuery = """
SELECT
DATEPART(WEEKDAY, IIU_tDispatch)AS [DayOfWeekOfCall]
, COUNT(DATEPART(WeekDay, IIU_tDispatch)) AS [DispatchesOnThisWeekday]
FROM AmbulanceIncidents
GROUP BY DATEPART(WEEKDAY, IIU_tDispatch)
ORDER BY DATEPART(WEEKDAY, IIU_tDispatch)
"""
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=MyServer;DATABASE=MyDatabase;UID=MyUserID;PWD=MyPassword')
cursor = cnxn.cursor()
GraphCursor = cnxn.cursor()
cursor.execute(MySQLQuery)
#generate a graph to display the data
data = GraphCursor.fetchall()
DayOfWeekOfCall, DispatchesOnThisWeekday = zip(*data)
plt.bar(DayOfWeekOfCall, DispatchesOnThisWeekday)
plt.grid()
plt.title('Dispatches by Day of Week')
plt.xlabel('Day of Week')
plt.ylabel('Number of Dispatches')
plt.show()
Приведенный выше код работает очень хорошо. Он возвращает красивый график, и я счастлив. Я просто хочу внести одно изменение.
Вместо оси X, показывающей названия дней недели, например «Воскресенье», она показывает целое число. Другими словами, воскресенье - 1, понедельник - 2 и т. Д.
Мое исправление состоит в том, что я переписываю свой sql-запрос, чтобы использовать DATENAME () вместо DATEPART (). Ниже показан мой sql-код для возврата названия недели (в отличие от целого числа).
SELECT
DATENAME(WEEKDAY, IIU_tDispatch)AS [DayOfWeekOfCall]
, COUNT(DATENAME(WeekDay, IIU_tDispatch)) AS [DispatchesOnThisWeekday]
FROM AmbulanceIncidents
GROUP BY DATENAME(WEEKDAY, IIU_tDispatch)
ORDER BY DATENAME(WEEKDAY, IIU_tDispatch)
Все остальное в моем коде на Python остается прежним. Однако это не сработает, и я не могу понять сообщения об ошибках.
Вот сообщения об ошибках:
Traceback (most recent call last):
File "C:\Documents and Settings\kulpandm\workspace\FiscalYearEndReport\CallVolumeByDayOfWeek.py", line 59, in
<module>
plt.bar(DayOfWeekOfCall, DispatchesOnThisWeekday)
File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 2080, in bar
ret = ax.bar(left, height, width, bottom, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 4740, in bar
self.add_patch(r)
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 1471, in add_patch
self._update_patch_limits(p)
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 1489, in _update_patch_limits
xys = patch.get_patch_transform().transform(vertices)
File "C:\Python27\lib\site-packages\matplotlib\patches.py", line 547, in get_patch_transform
self._update_patch_transform()
File "C:\Python27\lib\site-packages\matplotlib\patches.py", line 543, in _update_patch_transform
bbox = transforms.Bbox.from_bounds(x, y, width, height)
File "C:\Python27\lib\site-packages\matplotlib\transforms.py", line 745, in from_bounds
return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
TypeError: coercing to Unicode: need string or buffer, float found
Я не могу понять этого.
Подводя итог, когда я вывожу свои данные с осью x в виде целых чисел, представляющих дни недели, а ось y показывает количество происшествий со скорой помощью, Matplotlib создаст красивый график. Но когда мои данные выводятся по оси x, это строка (воскресенье, понедельник и т. Д.). тогда Matplotlib не будет работать.
Я провел несколько часов в поисках Google и прочитал документацию matplotlib. Пожалуйста, помогите мне с этим. Я надеюсь использовать Matplotlib в качестве своего механизма отчетов.