суботу, 2 травня 2020 р.

Клас EnumSet (Java)

EnumSet, Java, Collection, Колекції, Коллекции
Клас EnumSet — це одна з спеціалізованих реалізацій інтерфейсу Set для використання з перелічуваним типом даних (enum). EnumSet розширює AbstractSet та реалізує Cloneable та Serializable інтерфейси Java. EnumSet заміщує більшість методів інтерфейсів Set та Collection. EnumSet доволі швидка реалізація Set, швидша за HashSet, тому що всередині використовуються побітові операції, а не хеш-коди об’єктів.

EnumSet не синхронізований і повинен бути синхронізований ззовні, наприклад з використанням методу Collections.synchronizedSet(java.util.Set).

Всі елементи enum множини мають походити від єдиного перелічуваного типу, що вказується, коли множина створюється явно або неявно. EnumSet не дозволяє додавати значення null. Елементи зберігаються в порядку в якому їх подано в переліченні (enum).

EnumSet використовує безвідмовний (fail-safe) ітератор, що працює з копією EnumSet, тобто ітератор не буде викидати виняток ConcurrentModificationException, в разі зміни даних множини поза ітератором.

четвер, 30 квітня 2020 р.

Клас ArrayDeque (Java)

ArrayDeque, Java, Колекції, Коллекции
ArrayDeque (читається як еррейдек) – це клас який забезпечує двосторонню чергу. Іншими словами - це автоматично зростаючий масив, що дозволяє нам додавати або видаляти елементи з обох боків черги. ArrayDeque може бути використано як стек (LIFO, останній ввійшов - перший вийшов) або ж як черга (FIFO, перший ввійшов - перший вийшов).

ArrayDeque не може містити в якості елемента null.

Клас ArrayDeque швидший за клас Stack, якщо використовувати його в якості стеку і швидший за LinkedList, якщо використовувати в якості черги.

ArrayDeque розширює клас AbstractCollection та реалізує інтерфейси Deque, Cloneable, Serializable. Таким чином ми можемо використовувати для роботи з даним класом, як методи інтерфейсу Deque (який розширює інтерфейс Queue) так і методи інтерфейсу Collection.

Якщо використовується ітератор, то він буде викидати виняток ConcurrentModificationException, якщо вміст ArrayDeque був модифікований після створення ітератора. Таким чином ітератор необхідно з обережністю використовувати з ArrayDeque.

вівторок, 28 квітня 2020 р.

Як зберегти dataframe у csv файл (python)

save, dataframe, python, csv, зберегти, сохранить
CSV (від англ. comma-separated values 'значення, розділені комою', іноді character-separated values 'значення, розділені символом') — файловий формат для представлення табличних даних, у якому поля відокремлюються символом коми (або крапкою з комою) та переходу на новий рядок. Поля, що містять коми, декілька рядків, або лапки (позначаються подвійними лапками), мають обмежуватися з обох боків лапками. CSV формат простий та зручний для програмної обробки, тому його часто використовують для збереження різноманітнийх табличних даних з метою подальшої обробки їх різноманітними програмами. Практично усі сучасні мови, які займаються обробкою даних, мають зручні функції для читання даних у даному форматі.

Для збереження DataFrame у csv файл у Python використовується метод(функція) to_csv() класу pandas.DataFrame. Наприклад так:
import pandas as pd
df=pd.DataFrame({"Years": [1990, 1991, 1992, 1993, 1994, 1995, 1997],
    "Price1": [1, 5, 6, 10, 8, 9, 2],
    "Price2": [5, 6, 7, 8, 9, 15, 12],
    })
df.to_csv(r"C:\data\report_df.csv", index=False, sep=";")
r спереду адресу означає, що не потрібно враховувати службові символи у рядку шляху. Без r у windows шлях прийшлось би писати через дві косі риски, так:
df.to_csv("C:\\data\\report_df2.csv", index=False, sep=";")
Найбільш корисні аргументи методу to_csv наведено в таблиці.

Сценарій
Аргумент
Приклад
Змінити розділювач по замовчуванню
sep
df.to_csv(…, sep=';')
Записати без індексів
index
df.to_csv(…, index=False)
Записати без заголовків
header
df.to_csv(…, header=False)
Записати підмножину стовпчиків
columns
df.to_csv(…, columns=['x', 'y'])
Кодування формату файлу
encoding
df.to_csv(…, encodings='utf-8')
Стиснути   CSV
compression
df.to_csv(…, compression='gzip')
Задати формат часу
date_format
df.to_csv(…, date_format='%d/%m%Y')
Зберегти NaNs as "N/A"
na_rep
df.to_csv(…, na_rep='N/A')

понеділок, 27 квітня 2020 р.

Клас PriorityQueue (Java)

PriorityQueue дозволяє реалізувати чергу на основі пріоритету. Така черга може бути корисна, наприклад, у разі необхідності обслуговування клієнтів згідно пріоритету. При зберіганні чисел в пріоритетній черзі, така черга гарантує, що першим елементом завжди буде найменший елемент. При цьому не гарантується ніякий стабільний послідовний порядок збереження елементів. Після додавання або видалення елементу з пріоритетної черги, порядок зберігання елементів в цій черзі змінюється таким чином, що в голові черги опиняється найменший елемент згідно його природнього порядку або згідно заданого компаратора.

PriorityQueue має наступні конструктори:

суботу, 25 квітня 2020 р.

Інтерактивна карта поширення коронавірусу

Знайшов плагін для створення оновлюваної статистики по коронавірусу. Ось результат:
Статистика поширення коронавірусу. Постійно оновлювана карта.

Покращені коментарі під статтями Blogger (Blogspot)

Стандартне здійснення коментарів в даний час на Blogger доволі незручне. Це можна покращити за допомогою плагіна від disqus.com. Встановлення доволі просте і показане на наступному відео.


Математичні формули на Blogger (LaTeX)

LaTeX формули на blogger (blogspot)
Якщо на блозі необхідне відображення формул, то можна або додавати формули рисунками або ж залучити підтримку LaTeX до свого блогу. Для цього необхідно додати відповідний скрипт до нашого блогу.

Спосіб один, додаємо в режимі редагування HTML (Тема/Редагувати HTML) в середині тегу head наступні рядки:

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js">
MathJax.Hub.Config({
 extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js"],
 jax: ["input/TeX", "output/HTML-CSS"],
 tex2jax: {
     inlineMath: [ ['$','$'], ["\\(","\\)"] ],
     displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
 },
 "HTML-CSS": { availableFonts: ["TeX"] }
});
</script> 
Далі можемо використовувати наші формули написані у форматі LaTex:
x=x^{2}+\frac{a}{b}
Формулу необхідно оточити знаками долара і вуаля: $x=x^{2}+\frac{a}{b}$

Інший спосіб використати рішення від latex.codecogs.com. В даному випадку код з адресою скрипта додаємо у HTML/JavaScript гаджет, що наявний у блозі на платформі blogger(blogspot):
<script type="text/javascript" src="http://latex.codecogs.com/latexit.php?p&li&div></script>
При використанні цього рішення формули необхідно додатково розмістити в теги абзацу або списку: <p>...</p> та <li>...</li>.

Крім того, для тих хто не хоче особливо заморочуватися з синтаксисом LaTeX на даному сайті є відповідний графічний редактор формул, який сформатує нам формулу у форматі LaTeX: www.codecogs.com/latex/eqneditor.php

Перше рішення мені більше сподобалось, оскільки код від latex.codecs.com викликав деякі проблеми із відображенням одного з моїх лічильників на блозі.