Использование Django для визуализации полученных данных
Привет, я новичок в django и подумал, что было бы интересно использовать его для визуализации данных, которые я собрал с некоторых сайтов, что-то вроде этого видео)
(https://www.youtube.com/watch?v=TcnWEQMT3_A&list=PL-2EBeDYMIbTt63EH9ubqbvQqJkBP3vzy&index=1)
Однако я затрудняюсь выбрать правильный способ загрузки данных.
Сейчас у меня есть программа на python, которая собирает статистику игроков из 5 лиг с fbref.com (сайт, посвященный футболу) и сохраняет ее в csv-файл.
Кажется, у меня теперь два варианта?
Создание модели в django и чтение csv файла для хранения каждой строки как отдельной модели. То есть, по сути, я храню данные в Django db, аналогично
.Не создавая отдельную модель Django и используя pandas dataframe. (Не храня свои данные в Django DB).
Мне кажется, что первый подход менее эффективен, потому что я думаю добавить дальнейший анализ данных позже, так что в конечном итоге я буду использовать pandas dataframe в основном в любом случае. Однако меня беспокоит, не пойдет ли что-нибудь не так, если я не буду использовать базу данных Django.
Какой подход лучше и есть ли лучшие способы сделать это?
Спасибо!
Изначально я пробовал второй подход, но меня беспокоила работа с данными,
Обычно вам не нужно обрабатывать все данные. На самом деле вам часто нужно (очень) узкое подмножество данных. Например, если вы хотите обработать статистику голов за последние пять сезонов испанской лиги. Если вам нужно загрузить все данные в датафрейм, вы часто делаете что-то не так. По мере того как вы продолжаете собирать данные, файл будет увеличиваться, и в конце концов на серверах закончится память, а обработка будет занимать больше времени, потому что потребуется больше дисковых операций ввода-вывода.
Базы данных оптимизированы для получения подмножеств данных: используя индексы, они редко нуждаются в просмотре всех записей, и часто могут за 𝓞(log n) посмотреть, какие записи необходимы, а затем, таким образом, выполнять дисковый ввод-вывод только для получения этих элементов, и это в сочетании с некоторыми продвинутыми механизмами кэширования.
В какой-то степени pandas делает то же самое, что и база данных, за исключением того, что все данные хранятся в памяти. Это хорошо, если данные достаточно малы. По мере роста данных не все данные будут помещаться в памяти. Но даже если это и так, загрузка файла в память занимает линейное время с общим количеством строк, а не самих по себе строк, которые вас интересуют.
So usually it is better to store data in the database, use that for some filtering and aggregating. If you need more advanced functionalities, you can convert a Django QuerySet
to a pandas DataFrame
through django-pandas
[pypi.org]. This then thus can do extra processing. But using the database first will typically reduce the amount of disk I/O and memory usage drastically.