Найти - Пользователи
Полная версия: Запрос информации для обучения для построения графика
Начало » Python для новичков » Запрос информации для обучения для построения графика
1 2
ivashamagnus1989
Всем привет! Как правильно вставить спойлер?
Начал изучать Python для создания графика сна для себя.
Оказалось что для моей задачи нужно освоить помимо matplotlib'а так же numpy, еще похоже pandas и возможно что-то из anaconda.
Я боюсь что освоение всех этих библиотек сейчас окажется для меня непосильной задачей. Выбрать нужную информацию для обучения - трудно, мне становится интересно все и я изучаю все подряд, так я не знаю когда сделаю график.

Пишу в надежде, что Вы мне подскажите на какие методы, функции или библиотеки стоит обратить внимание. Изучить внимательно их работу, что бы это помогло в решении моей задачи. Что бы я не изучал сейчас весь обучающий материал подряд, а сконцентрировался на нужных инструментах.

1. Операционная система: Windows 10pro 22h2
2. Версия Python 3.11
3. Список установленных библиотек полученный командой pip list:

Package Version
—————— ————
anaconda 0.0.1.1
certifi 2023.11.17
charset-normalizer 3.3.2
colorama 0.4.6
contourpy 1.2.0
cycler 0.12.1
data 0.4
decorator 5.1.1
fonttools 4.45.1
funcsigs 1.0.2
future 0.18.3
ghostscript 0.7
idna 3.6
ImageMagic 0.2.1
kiwisolver 1.4.5
latex 0.7.0
loguru 0.7.2
matplotlib 3.8.2
numpy 1.26.2
packaging 23.2
pandas 2.1.3
pi 0.1.2
Pillow 10.1.0
pip 21.3.1
pycairo 1.25.1
pyparsing 3.1.1
PyQt5 5.15.10
PyQt5-Qt5 5.15.2
PyQt5-sip 12.13.0
python-dateutil 2.8.2
pytz 2023.3.post1
requests 2.31.0
setuptools 60.2.0
shutilwhich 1.1.0
six 1.16.0
tempdir 0.7.1
tk 0.1.0
tornado 6.4
tzdata 2023.3
urllib3 2.1.0
wheel 0.37.1
win32-setctime 1.1.0
wxPython 4.2.1
WARNING: You are using pip version 21.3.1; however, version 23.3.1 is available.

4. Код на данный момент.
 import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# x = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]   # ноябрь 2023г
x = np.linspace(-1, 30, 32)
y1 = [5, 5, 6, 7, 6, 7, 8, 8, 8, 6, 6, 10, 6, 10, 5, 9, 8, 9, 7, 9, 6, 7, 6, 9, 5, 8, 6, 6, 6, 6, 5, 6]  # количество часов сна с 01.11.2023г по 16.11.2023г
y2 = [5, 3, 5, 0, 8, 5, 4, 4, 4, 5, 5, 4, 3, 3, 0, 5, 2, 8, 5, 8, 6, 3, 5, 4, 4, 4, 2, 3, 3, 3, 0, 0]  # шаги в километрах
y3 = [-1, -1, -1, 0, 0, 1, 1, 0, 1, 1, 0, 2, -2, -1, 1, 1, 0, -1, 0, 1, -2, -2, -2, -2, -2, 0, 0, 0, 0, 1, -2, 0]  # моё настроение 0 - норм, -1 - слабо, -2 - ужасно, 1 - хорошо, 2 - отлично
#  start = pd.Timestamp('2023-10-30')
#  end = pd.Timestamp('2023-12-31')
#  t = np.linspace(start.value, end.value, 63)
#  t = pd.to_datetime(t)
plt.title("График СНА", fontsize=25, color='grey')
plt.grid()
plt.xlabel('Дата', fontsize=15, color='grey')
plt.ylabel("Часов СНА", color='grey', fontsize=15)
plt.plot(x, y1, "skyblue", x, y2,"coral", x, y3, "grey")
plt.show()
5. Задача.
Хочу сделать график отхода ко сну и подъёма (прикрепил изображение для понимания). Наложением на него кривых с другими показателями за день.

График сна:
По “y” время от 00:00 до 24:00. Отметки начала сна и подъёма, период сна залить цветным фоном.
По “x” календарные дни.
Наложение на этот график кривых:
- длительности сна.
- шагов в день.
- настроение/самочувствие в день.
- периодов приема препаратов и физиотерапий.

Я еще не знаю в каком конечном виде будет выглядеть график, поэтому пока что такой общий запрос к тому какая информация мне нужна для обучения.
Мне еще предстоит узнать как на нем отобразить все необходимые разные шкалы.
Можно ли сделать мультиграфик в котором будут отключаться и выключаться наложением кривые параметров за день.
Само обновляемый график. Который будет брать данные сам из текстового файла в который я буду их экспортировать.
Придумать удобный способ как предоставить легко и просто в наглядном виде этот график своему врачу не таская ноутбук с собой и что бы ему не пришлось устанавливать python с ide.
Как сделать просмотр многомесячного или годового графика в мелком масштабе. Сейчас научится делать его на один месяц для начала.

Любой ответ, даже самый не большой приму с благодарностью и внимательно изучу! Спасибо за внимание к теме!
py.user.next
Вот тебе код
  
#!/usr/bin/env python3
 
import turtle
 
 
def set_title(text):
    turtle.title(text)
 
def draw_coordinates(width, height, scale=20):
    # draw OX
    turtle.penup()
    turtle.backward(width // 2)
    turtle.pendown()
    turtle.forward(width)
    turtle.setheading(160)
    turtle.forward(10)
    turtle.penup()
    turtle.backward(10)
    turtle.pendown()
    turtle.setheading(-160)
    turtle.forward(10)
    turtle.penup()
    turtle.backward(10)
    turtle.pendown()
    turtle.setheading(0)
    turtle.write('X')
    turtle.penup()
    turtle.backward(width // 2)
    turtle.pendown()
    turtle.penup()
    turtle.forward(scale)
    turtle.setheading(90)
    turtle.pendown()
    turtle.forward(3)
    turtle.write('1')
    turtle.backward(6)
    turtle.penup()
    turtle.forward(3)
    turtle.setheading(0)
    turtle.backward(scale)
    turtle.pendown()
    # draw OY
    turtle.setheading(90)
    turtle.penup()
    turtle.backward(height // 2)
    turtle.pendown()
    turtle.forward(height)
    turtle.setheading(240)
    turtle.forward(10)
    turtle.penup()
    turtle.backward(10)
    turtle.pendown()
    turtle.setheading(300)
    turtle.forward(10)
    turtle.penup()
    turtle.backward(10)
    turtle.pendown()
    turtle.setheading(90)
    turtle.write('Y')
    turtle.penup()
    turtle.backward(height // 2)
    turtle.setheading(0)
    turtle.pendown()
    turtle.penup()
    turtle.setheading(90)
    turtle.forward(scale)
    turtle.setheading(180)
    turtle.pendown()
    turtle.forward(3)
    turtle.penup()
    turtle.forward(9)
    turtle.write('1')
    turtle.backward(9)
    turtle.pendown()
    turtle.backward(6)
    turtle.penup()
    turtle.forward(3)
    turtle.setheading(90)
    turtle.backward(scale)
    turtle.pendown()
    turtle.setheading(0)
    turtle.penup()
    turtle.setposition(-scale, -scale)
    turtle.write('O')
    turtle.setposition(0, 0)
    turtle.pendown()
 
def draw_point(x, y, scale=20):
    saved_position = turtle.position()
    turtle.penup()
    turtle.setposition(x * scale, y * scale)
    turtle.dot(2)
    turtle.setposition(saved_position)
    turtle.pendown()
 
def draw_text(x, y, text='', scale=20):
    saved_position = turtle.position()
    turtle.penup()
    turtle.setposition(x * scale, y * scale)
    turtle.write(text)
    turtle.setposition(saved_position)
    turtle.pendown()
 
def draw_function(startx, endx, function, step=0.001, eps=0.000001,
                  color='black', text=''):
    saved_color= turtle.pencolor()
    turtle.pencolor(color)
    turtle.tracer(1000)
    x = startx
    while abs(endx - x) >= eps:
        draw_point(x, function(x))
        x += step
    draw_text(x, function(x), text)
    turtle.tracer(1)
    turtle.pencolor(saved_color)
 
def draw_all():
    draw_coordinates(400, 800)
    draw_function(-4, 4, function_parabola_x2, color='red', text='f(x) = x ^ 2')
    draw_function(-4, 4, function_hyperbola_x, color='blue', text='f(x) = 1 / x')
    draw_function(-4, 4, function_line_x, color='gray', text='f(x) = x')
    draw_function(-4, 4, function_line_m_2x_p_4, color='pink', text='f(x) = -2x + 4')
 
def function_parabola_x2(x):
    return x * x
 
def function_hyperbola_x(x):
    return 1 / x
 
def function_line_x(x):
    return x
 
def function_line_m_2x_p_4(x):
    return -2 * x + 4
 
def main():
    set_title('График функции')
    draw_all()
    turtle.mainloop()
 
if __name__ == '__main__':
    main()
Это черепаха, которая есть во всех питонах.

Она хороша тем, что не ограничивает тебя.

Получается вот такое множество графиков функций
py.user.next
ivashamagnus1989
Я боюсь что освоение всех этих библиотек сейчас окажется для меня непосильной задачей.
Для сложной matplotlib надо использовать сложную numpy. numpy ты ещё, может быть, усвоишь. Её нормальный человек писал. А вот matplotlib очень сложной сделана. Если ты и освоишь matplotlib, то натолкнёшься в ней на какие-нибудь ограничения, на какие-нибудь нюансы. Захочешь, например, разметить оси определённым способом, а matplotlib не даст такой возможности. И таким образом всё это изучение matplotlib будет напрасным. Будут у тебя хреновые графики, с которыми ты ничего не можешь сделать. Вроде графики красивые и подробные и точные, а оси в них не разметишь никак. И там не только с осями эта фигня встречается. Ты ещё попробуй им попользоваться без numpy, оно тебе обязательно скажет что-нибудь вроде “давай сюда numpy, ты обязан подать numpy”, хотя с чего вдруг? Ну такое.

То есть matplotlib надо весь выучить (а писал его математик, а не программист, поэтому там такие тупые и непредсказуемые интерфейсы), а потом после этого надо все тонкости ещё изучить во всей этой “тупизне”. Тупизной я называю это потому, что когда ты не программист, ты не умеешь делать код красиво и программы делать юзабельными. Каким бы математиком ты ни был, ты всё равно будешь писать всё понятным только для себя одного. Программист же, наоборот, учтёт всё-таки интересы пользователя и, наоборот, облегчит ему всю работу. Этому учатся специально. Это вот то, чем математики отличаются от программистов. Поэтому не смотри, что человек математик, это, как правило, означает, что он может написать что-то сложное, но это будет говнокод-говнокодище с точки зрения искусства программирования. И такое встречается сплошь и рядом.

ivashamagnus1989
5. Задача.
Хочу сделать график отхода ко сну и подъёма (прикрепил изображение для понимания). Наложением на него кривых с другими показателями за день.

График сна:
По “y” время от 00:00 до 24:00. Отметки начала сна и подъёма, период сна залить цветным фоном.
По “x” календарные дни.
Наложение на этот график кривых:
- длительности сна.
- шагов в день.
- настроение/самочувствие в день.
- периодов приема препаратов и физиотерапий.

Я еще не знаю в каком конечном виде будет выглядеть график, поэтому пока что такой общий запрос к тому какая информация мне нужна для обучения.
Мне еще предстоит узнать как на нем отобразить все необходимые разные шкалы.
Можно ли сделать мультиграфик в котором будут отключаться и выключаться наложением кривые параметров за день.
Само обновляемый график. Который будет брать данные сам из текстового файла в который я буду их экспортировать.
Придумать удобный способ как предоставить легко и просто в наглядном виде этот график своему врачу не таская ноутбук с собой и что бы ему не пришлось устанавливать python с ide.
Как сделать просмотр многомесячного или годового графика в мелком масштабе. Сейчас научится делать его на один месяц для начала.

Это всё, знаешь, тебе тяжеловато будет достичь без опыта, навыков и знаний. То есть сначала теория, потом одновременно практика подключается, а потом ещё и опыт после этого всего надо нарабатывать. И только после этого можно что-то родить приемлемое.

Это вот есть анекдот такой как иллюстрация
Приходит мужик устраиваться в оркестр.
У него спрашивают:
- На каких инструментах вы играете?.
Он отвечает:
- Ни на каких.
- А что же вы у нас будете делать в оркестре?
Он отвечает:
- Я могу пропердеть любую композицию.
Ему говорят удивлённо:
- Пропукайте Баха.
Он пропердел, все в удивлении.
- А Гайдна сможете?
- Нет… думаю, не смогу…
Его спрашивают:
- Почему?
- Да там такой момент есть один, вот в нём на пятой октаве там на ноте ля я просто боюсь обосраться.
Так вот на пятой ноте точно обосрёшься и всё.

Это значит, что ты можешь программу делать-делать, делать-делать, там несколько недель, а потом где-нибудь на 70% просто встать и всё, в тупике, который никак не решается. А произойдёт это из-за какой-нибудь архитектурной ошибки, которую ты там где-нибудь за несколько недель до этого на 10% допустил, потому что опыта нет.
ivashamagnus1989
py.user.next
Это всё, знаешь, тебе тяжеловато будет достичь
Python не лучшее решение для новичка что бы реализовать графики?
ZerG
ivashamagnus1989
Тебе намекают что проблема не в питоне
Очень хорошо что ты самостоятельно набросал себе план работ
Все что ты перечислил на питоне сделать можно и это рядовая задача - так что переживать что ты упрешься в то что например нельзя наложить графики или експортонуть их в картинку - не стоит

пока что - ты только прикоснулся к великому
Создай тестовый проект и поиграйся с матплотом так что бы ты в легкую могу нарисовать нужный тебе график
Потом сделай что бы графики рисовались от твоих данных
И так шаг за шагом выйдешь к финишной прямой
Естественно будут ошибки и проблемы и в какойто -то момент ты решишь что написал белибердень и нужно все написать заново но правильно - это нормальный этап дева
Так что дерзай - все у тебя в руках

Ты ведь не ждал ответа типа:
Ну возьми вот эту либу - пропиши вот эти три строчки и все готово?
py.user.next
ivashamagnus1989
py.user.next
Это всё, знаешь, тебе тяжеловато будет достичь
Python не лучшее решение для новичка что бы реализовать графики?
Вообще работа с графикой на любом языке программирования - не лучшее занятие для новичка. Потому что для того, чтобы тебе работать с графикой, тебе нужно знать всё, из чего она там состоит, понимать, что такое экран, что такое пиксель, сколько в нём каналов цветовых, ещё канал прозрачности там бывает, куда что рисуется, в какую сторону там и прочее. Надеяться на то, что кто-то сделал библиотеку функций, в которой есть примитивы, можно, но это тоже новичку не поможет, потому что ему всё равно надо понимать, как оно устроено внутри и что именно автоматизирует эта библиотека. Потому что можно просто не понять, как там какая-нибудь функция рисует прямую линию или кривую линию какую-то. Вот тебе дают функцию, в которой предлагают указать угол для кривой. А это угол чего? Он со знаком или без? Он в градусах или в радианах? Как правило, этого всего тебе не будут писать, подразумевая, что ты не новичок, а уже всё знаешь и просто хочешь своё время сэкономить с помощью этой функции из библиотеки функций. То есть тебе и математику надо знать, хотя бы школьную хорошо, и ещё языки программирования и библиотеки для них, как это всё применяется. Где-то вообще надо взять исходники библиотеки, прочитать их и понять, как она рисует, чтобы точно знать. Когда-то я так изучал, как питон округляет числа через round(), как он выравнивает строки по центру, как он понимает, где центр. Вот для этого я читал исходники питона. Почему я это делал? Мне было так это интересно? Да мне вообще нахрен не нужно было это! Просто чтобы запомнить, как они работают в точности, я открыл документацию, а там просто никакой информации нет, так, в общих чертах только. А когда я исходники открыл, там хоть стало понятно, что он делает вообще, когда строки выравнивает или числа округляет (экономическое округление там какое-то, отличается от обычного). Так вот тебе тоже придётся это делать. Ну открой исходники прямо сейчас и посмотри, как они написаны. Думаешь, они для школьников пишутся, для новичков? Нет, они пишутся для компьютера, чтобы быстрее и оптимальнее работать. И найти вообще какую-то там функцию, которая там что-то делает конкретное, очень сложно, потому что над ней, как правило, 100500 забубённых обёрток, которые тоже что-то там делают.

Я бы тебе мог предложить tkinter и Canvas из него, и что ты на нём нарисуешь? Он абсолютно не документирован. Ну вот черепаха как раз и пользуется tkinter'ом, это такая надстройка над ним, только в ней хотя бы документация хорошая.

ZerG
Создай тестовый проект и поиграйся с матплотом
Да, я согласен. Возьми и через matplotlib сделай одну прямую, а потом наложи на неё другую прямую, чтобы это всё было на одном графике. Точек там много не надо, всего по две точки на каждую прямую. Ну посмотришь, что ты даже эту простейшую хуйню сделать не можешь. А почему? Как так? Почему она не делается сама? Программирование - это не для дебилов и не для школьников. Где ты там насмотрелся вдохновляющих видео про то, что программистом может стать каждый? На YouTube-каналах от всяких волосатых блогеров, которые сами в этом вообще ничего не смыслят? Ну поздравляю, тебе запихнули просто в голову рекламу говнокурсов из говношкол и всё. Они просто из дураков бабки вытягивают и всё, и для этого они эту хуйню и несут через всяких инфлюенсеров, в 90% случаев воообще ничего не смыслящих в этом всём.
ivashamagnus1989
Отлично! Спасибо py.user.next, он достаточно толково мне объяснил то что изучить только, то что нужно для решения задачи на Python нельзя, придется изучать широко, глубоко - а это то чего я хотел избежать, а без этого нельзя.
Мне нужен сейчас только график, пожалуй лучше для этого поищу готовые программные решения. Я узнал что даже в Excel можно сделать интерактивный, большой график с наложениями.
Спасибо, форум помогает!
py.user.next
ivashamagnus1989
Я узнал что даже в Excel можно сделать интерактивный, большой график с наложениями.
Ну Excel чреват тем, что там кроме графика больше ничего не будет. Если в питоне ты можешь проникать из чисел в графики и обратно из графиков в числа, то в Excel всё не так хорошо связано внутри. Попробуй загрузи числа для графика из файла - уже испытаешь проблемы с этим. А в питоне это всё легко делается.
ZerG
py.user.next
Справедливости ради - стоит заметить - что на питоне легко будет питонисту
А в екселе даже кадровичка работать может
py.user.next
ZerG
что на питоне легко будет питонисту
Не, школьнику какому-нибудь тоже будет несложно загрузить данные из файла в оперативную память. А вот в Excel'е попробуй из JSON-файла что-то загрузи. Там и экселисту будет сложновато.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB