Давайте теперь посмотрим что из себя представляют точечные диаграммы Plotly внутри. Для этого просто выведем содержимое:
Как можно видеть, переменная имеет тип Scatter, а внутри фактически располагается словарь, где для ключей x и y значения являются array с набором значений.
Если посмотреть на описание метода add_trace в справочном руководстве, то увидим такое:
Второй способ мы сейчас и попробуем. Для разнообразия я создал словарь с одним ключом, а второй добавил потом
trc2 = dict( x = x )
trc2['y'] = y
Вот что получилось:
Т.е. по факту мы получили ту же самую картинку, но создавая описание с помощью словаря.
Для ссылки на руководство я использовал plotly.graph_objects.Figure
18 July 2020
17 July 2020
Notepadqq и переносы: реабилитация
Ранее в О написании постов я написал, что в с Notepadqq приходится переносить строки руками.
Так вот - я ошибался. Оказывается там тоже возможность автопереносов.
Берем тот же текст, что и в том примере и вставляем в Notepadqq.
Далее идем в меню View и выбираем там Word Wrap :
после этого получаем нужные нам переносы, которые автоматически меняются при изменении размера окна :
Из плюсов Notepadqq - можно быстро менять размер шрифта Ctrl + Колесо мышки.
Так вот - я ошибался. Оказывается там тоже возможность автопереносов.
Берем тот же текст, что и в том примере и вставляем в Notepadqq.
Далее идем в меню View и выбираем там Word Wrap :
после этого получаем нужные нам переносы, которые автоматически меняются при изменении размера окна :
Из плюсов Notepadqq - можно быстро менять размер шрифта Ctrl + Колесо мышки.
16 July 2020
О написании постов
Несколько замечаний о написании постов.
Я люблю при написании пользоваться программами-редакторами в противовес онлайн-редактированию непосредственно в Blogger. По-началу я для написания текста использовал программу Notepadqq, а после копировал в Blogger но у нее есть явный недостаток - если строка длинная то приходится переносить строку руками, ибо она - текстовый редактор. При вставке в блоггер Blogger потом приходится руками эти висящие строки убирать.
Вот пример на примере текста выше.
Вставим этот же выше текст в Notepadqq и вот как он будет выглядеть
Если бы мы редактировали его в Notepadqq то пришлось бы переносить руками, например так:
А теперь попробуем вставить текст в Blogger из Notepadqq и посмотреть что получится:
Вот уже строка перетащилась не так, как я хотел. При просмотре эта неаккуратность хоть и станет немного другой, но останется:
В свое время я нашел весьма удобную программу для ведения заметок - Zim
На Убунту ее не надо ставить отдельно - достаточно найти в ПО Самой Убунты
Текст можно создавать прямо в ней и при переносе текста именно с переносами все хорошо - я просто копирую текст из Zim:
Далее вставляю в Blogger:
И все хорошо:
Текст равномерно распределился там, где я не хотел его переносить явно.
Я люблю при написании пользоваться программами-редакторами в противовес онлайн-редактированию непосредственно в Blogger. По-началу я для написания текста использовал программу Notepadqq, а после копировал в Blogger но у нее есть явный недостаток - если строка длинная то приходится переносить строку руками, ибо она - текстовый редактор. При вставке в блоггер Blogger потом приходится руками эти висящие строки убирать.
Вот пример на примере текста выше.
Вставим этот же выше текст в Notepadqq и вот как он будет выглядеть
Если бы мы редактировали его в Notepadqq то пришлось бы переносить руками, например так:
А теперь попробуем вставить текст в Blogger из Notepadqq и посмотреть что получится:
Вот уже строка перетащилась не так, как я хотел. При просмотре эта неаккуратность хоть и станет немного другой, но останется:
В свое время я нашел весьма удобную программу для ведения заметок - Zim
На Убунту ее не надо ставить отдельно - достаточно найти в ПО Самой Убунты
Текст можно создавать прямо в ней и при переносе текста именно с переносами все хорошо - я просто копирую текст из Zim:
Далее вставляю в Blogger:
И все хорошо:
Текст равномерно распределился там, где я не хотел его переносить явно.
11 July 2020
Plotly начало
В посте Задача двух осей и четырех графиков - введение вторая картинка была сделана посредством Plotly.
Я, разумеется, знаю как там вставить два набора данных на один график, но чтобы и вам показать и самому разобраться, давайте посмотрим на простых примерах ее потроха.
Для начала мы будем строить только один график, данные мы будем получать также как там, поэтому этот код просто скопируем.
Для Plotly нам потребуеются добавочно следующие импорты:
import plotly
import plotly.graph_objects as go
В отличии от matplotlib, где можно сразу нарисовать график вызовом plot, для Plotly требуется небольшая предварительная работа - надо сначала сделать холст или в терминологии Plotly - figure:
fig = go.Figure()
Следующим шагом, мы создаем собственно описание графика, которых хотим добавить. Точечный график в Plotly назвается "рассеиватель" - Scatter. Тут я использую русский перевод, какой используется в Excel - там график называется диаграммой, а простая - X Y ( Scatter ). Я буд назвать его точечный график или точечный набор данных.
В простом случае в Plotly он создается так:
trc1 = go.Scatter( x= x, y = y )
Т.е. надо вызвать метод Scatter у plotly.graph_objects и передать ему данные ( х и у ).
Теперь его остается добавить к фигуре, чтобы отобразить:
fig.add_trace ( trc1 )
И вот что у нас теперь получилось
Cразу же видно отличие от matplotlib - график интерактивный - есть панель для работы с ним и если навести на какую-либо точку, то отображаются ее значения абсциссы и ординаты
Разумеется, можно создать все это в одну строчку
go.Figure().add_trace ( go.Scatter( x= x, y = y ) )
Но для более сложных построений имеет смысл сохранять это в переменные.
Я, разумеется, знаю как там вставить два набора данных на один график, но чтобы и вам показать и самому разобраться, давайте посмотрим на простых примерах ее потроха.
Для начала мы будем строить только один график, данные мы будем получать также как там, поэтому этот код просто скопируем.
Для Plotly нам потребуеются добавочно следующие импорты:
import plotly
import plotly.graph_objects as go
В отличии от matplotlib, где можно сразу нарисовать график вызовом plot, для Plotly требуется небольшая предварительная работа - надо сначала сделать холст или в терминологии Plotly - figure:
fig = go.Figure()
Следующим шагом, мы создаем собственно описание графика, которых хотим добавить. Точечный график в Plotly назвается "рассеиватель" - Scatter. Тут я использую русский перевод, какой используется в Excel - там график называется диаграммой, а простая - X Y ( Scatter ). Я буд назвать его точечный график или точечный набор данных.
В простом случае в Plotly он создается так:
trc1 = go.Scatter( x= x, y = y )
Т.е. надо вызвать метод Scatter у plotly.graph_objects и передать ему данные ( х и у ).
Теперь его остается добавить к фигуре, чтобы отобразить:
fig.add_trace ( trc1 )
И вот что у нас теперь получилось
Cразу же видно отличие от matplotlib - график интерактивный - есть панель для работы с ним и если навести на какую-либо точку, то отображаются ее значения абсциссы и ординаты
Разумеется, можно создать все это в одну строчку
go.Figure().add_trace ( go.Scatter( x= x, y = y ) )
Но для более сложных построений имеет смысл сохранять это в переменные.
09 July 2020
Задача двух осей и четырех графиков - маркеры и линии с matplotlib
Рассмотренноые ранее подписи осей и легенды графиков облагораживают графики, однако давайте пойдем еще немножко далее, чтобы привести их в красивый вид: рассмотрим стиль линий и маркеров.
При помощи них мы можем сделать графики еще более читаемыми и понимаемыми.
Вот код:
plt.subplot(211)
# зададим маркер для модели в виде маленького крестика
plt.plot( x,y, label='Model', marker='x')
# зададим маркер для реальных данных как и ранее кружочком
plt.plot( x,yr ,color = 'green', marker='o', label='Real')
plt.xlabel('X')
plt.ylabel('Y', color='red', fontsize=14)
plt.title('First Subplot', color='green', fontsize=14)
plt.legend().set_visible(True)
plt.subplot(212)
plt.plot( x,y2,label='Model', marker='x')
# оставим задание маркера и цвета в старом стиле
plt.plot( x,yr2 ,'bo', label='Real')
plt.xlabel('X')
plt.ylabel('Y2')
plt.title('Second Subplot')
plt.subplots_adjust(hspace=0.70)
plt.legend().set_visible(True)
Что мы увидим при исполнении данного кода ?
Как только мы задали маркер через параметр marker для реальных данных, так сразу у нас появилсь линия. В случае старого задания линии нет.
Для того, чтобы ее не было, надо в первом графике сделать замену вот такого:
plt.plot( x,yr ,color = 'green', marker='o', label='Real')
На вот такое:
plt.plot( x,yr ,color = 'green', marker='o', linestyle='None', label='Real')
Т.е. явно указать, что стиль линии - нет линии ( None ) и тогда мы вернемся к тому, что было
Стили маркеров можно посмотреть тут matplotlib.markers
А стили линий - тут Linestyles
Теперь сделаем для реальных данных разреженные пунктирные линии и для первого графика вместо кружочков - алмазы.
Вот код:
plt.subplot(211)
plt.plot( x,y, label='Model', marker='x')
plt.plot( x,yr ,color = 'green', marker='D', linestyle='dashed', label='Real')
plt.xlabel('X')
plt.ylabel('Y', color='red', fontsize=14)
plt.title('First Subplot', color='green', fontsize=14)
plt.legend().set_visible(True)
plt.subplot(212)
plt.plot( x,y2,label='Model', marker='x')
plt.plot( x,yr2 ,color = 'green', marker='o', linestyle='dashed', label='Real')
plt.xlabel('X')
plt.ylabel('Y2')
plt.title('Second Subplot')
plt.subplots_adjust(hspace=0.70)
plt.legend().set_visible(True)
И вот что получилось
Теперь разделение маркерами и стилями линий позволяет нам отличить модельные данные от реальных данных
04 July 2020
Привет, SQLite!
Я люблю реляционные базы данных. Поэтому вопрос о том, что они мне будут нужны в Убунте и при программировании на Питоне стоял изначально.
И вот я сдвинулся с мертвой точки - поставил SQLite и попробовал с ней поработать в Блокноте Юпитера с Питоном и Пандой.
Был выбран SQLite именно из-за простоты - там база представляет из себя отдельный файл и все просто, не надо никаких хитрых настроек для аутентифиакации или авторизации, заведение пользователей и прочие DBA задачи, которые возникнут если использовать MySQL или PostgreSQL - бери и пользуйся. Для хранения данных при чисто личном доступе для анализа - больше и не надо.
По факту оказалось что и так все нужно было установлено - я поставил только DB Browser for SQLite, причем ставится он прямо из установки ПО для Убунты
Далее я создал простенькую базу с одной таблицей из двух колонок и добавил туда две записи
Далее я сохранил файл, создал папку в Блокноте Юпитера и скопировал файл базы туда, чтобы пользоваться чисто именем файла без пути.
Замечание: при сохранении файла в DB Browser for SQLite если чисто указать имя, то файл сохранится без расширения db и потом, когда его требуется открыть, он не виден по-умолчанию в папке и надо менять фильтр с SQLite database files на all files.
Теперь заглянем сюда, где показано как работать с базой в Юпитере Interacting With Your SQLite DB in a Jupyter Notebook и по образцу сделаем код:
# импорты
import pandas as pd
import sqlite3
# соединяемся с базой
conn = sqlite3.connect("test1")
# создаем курсор
cur = conn.cursor()
Проверяем что данные на месте:
# выполняем запрос
cur.execute("select * from test;")
# вытаскиваем все данные и печатаем
results = cur.fetchall()
print(results)
Итак, c данными у нас порядок.
Теперь можно это оправить в Панду:
df = pd.read_sql_query("select * from test", conn)
df
И в заключении закрываем курсор и соединение:
cur.close()
conn.close()
Собственно и все - код простой и все работает как надо.
И вот я сдвинулся с мертвой точки - поставил SQLite и попробовал с ней поработать в Блокноте Юпитера с Питоном и Пандой.
Был выбран SQLite именно из-за простоты - там база представляет из себя отдельный файл и все просто, не надо никаких хитрых настроек для аутентифиакации или авторизации, заведение пользователей и прочие DBA задачи, которые возникнут если использовать MySQL или PostgreSQL - бери и пользуйся. Для хранения данных при чисто личном доступе для анализа - больше и не надо.
По факту оказалось что и так все нужно было установлено - я поставил только DB Browser for SQLite, причем ставится он прямо из установки ПО для Убунты
Далее я создал простенькую базу с одной таблицей из двух колонок и добавил туда две записи
Далее я сохранил файл, создал папку в Блокноте Юпитера и скопировал файл базы туда, чтобы пользоваться чисто именем файла без пути.
Замечание: при сохранении файла в DB Browser for SQLite если чисто указать имя, то файл сохранится без расширения db и потом, когда его требуется открыть, он не виден по-умолчанию в папке и надо менять фильтр с SQLite database files на all files.
Теперь заглянем сюда, где показано как работать с базой в Юпитере Interacting With Your SQLite DB in a Jupyter Notebook и по образцу сделаем код:
# импорты
import pandas as pd
import sqlite3
# соединяемся с базой
conn = sqlite3.connect("test1")
# создаем курсор
cur = conn.cursor()
Проверяем что данные на месте:
# выполняем запрос
cur.execute("select * from test;")
# вытаскиваем все данные и печатаем
results = cur.fetchall()
print(results)
Итак, c данными у нас порядок.
Теперь можно это оправить в Панду:
df = pd.read_sql_query("select * from test", conn)
df
И в заключении закрываем курсор и соединение:
cur.close()
conn.close()
Собственно и все - код простой и все работает как надо.
matplotlib - еще парочку ссылок
По ходу того, как я разбирался с подписями, попалась еще парочка ссылок на английском по matplotlib:
Subscribe to:
Posts (Atom)






















