пʼятниця, 17 квітня 2020 р.

Клас HashSet

HashSet – це клас призначений для зберігання даних у вигляді множини невпорядкованих елементів. Якщо потрібна впорядкована множина, то використовуйте TreeSet. HashSet також не гарантує стабільного порядку збереження об’єктів. Тобто при додаванні об’єктів порядок зберігання елементів змінюється. Вони можуть бути збережені як в кінці множити так і в середині. Якщо потрібен один порядок зберігання об’єктів використовуйте LinkedHashSet.

Сам термін «множина» означає, що елементи не будуть повторюватися. Для зберігання і пошуку елементів використовується хеш-код об’єкта. HashSet також може містити значення null. Власне всередині самої реалізації HashSet використовується клас HashMap, який дозволяє зберігати елементи у вигляді двох складових ключа та хеш-коду. У класі HashSet хеш-код недоступний і використовується неявно для користувача.

Клас HashSet розширює клас AbstractSet та реалізує інтерфейс Set. Також реалізовує інтерфейси Serializable та Clonable.

HashSet має такі конструктори:
HashSet()
HashSet (Collection  c)
HashSet (int об’єм)
HashSet (int об’єм, float коефіцієнт_заповнення)

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

Як побудувати графік по стовпцям pandas dataframe (python)

Для виводу використовуємо бібліотеку matplotlib.

Наступний приклад демонструє створення dataframe та виводу його стовпців на лінійному графіку. Показано як додати назву графіку, підписи осей, сітку, задати вигляд підпису осі Х.
import pandas as pd;
import matplotlib.pyplot as plt;
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],
    })
print (type(df))
ax = df.plot(x="Years", y="Price1", kind="line", label="Ціна1", marker="*")
df.plot(x="Years", y="Price2", ax=ax, color="C2", label="Ціна2", marker=".")
ax.set_title('Ціни по роках') # назва діаграми
ax.legend(loc='upper left') # встановити де знаходитиметься легенда
ax.set_ylabel('Ціна') # підпис осі y
ax.set_xlabel('Роки') # підпис осі x
ax.grid() # додати сітку на діаграму
#plt.xticks(rotation='vertical') # вивести написи на осі Х вертикально або
ax.tick_params(axis='x', rotation=45) # виводимо написи на осі X з поворотом на 45 градусів
plt.show()
Результат:
Matplotlib plot pandas dataframe
Результат побудови по стовпцях dataframe
Додатково:
* Візуалізація з Matplotlib (Python Data Science Handbook)
* Matplotlib.markers
* Pandas Dataframe: Plot Examples with Matplotlib and Pyplot

середа, 15 квітня 2020 р.

Клас LinkedList

LinkedList — це структура даних Java, що являє собою пов’язаний список елементів (об’єктів).

Різниця між ArrayList та LinkedList полягає в тому, що ArrayList реалізований у вигляді масиву, а LinkedList у вигляді пов’язаних між собою об’єктів. ArrayList швидко виконує читання і заміну елементів (посилань на об’єкти), проте, щоб вставити новий елемнт в середину ArrayList або видалити існуючий в середині ArrayList здійснюється послідовний зсув цілого ряду елементів масиву. В LinkedList доволі швидко відбувається вставлення нового елементу або видалення існуючого. Це відбувається тому, що в середині реалізації LinkedList змінюються лише посилання на попередній і наступний об’єкти (елементи). Проте доступ до об’єктів по індексу в LinkedList відбувається повільніше ніж в ArrayList. Тож загалом, LinkedList корисний, коли необхідно часто вставляти та видаляти елементи зі списку, а в інших випадках краще використовувати ArrayList.

Існує два конструктури LinkedList:

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

Клас ArrayList

Клас ArrayList - це по суті динамічний масив посилань на об'єкти. Динамічний означає, що якщо його об'єму недостатньо, то він автоматично змінює свій об'єм при додаванні до нього нових елементів. При потребі можна задати йому потрібний об'єм методом ensureCapacity (). ArrayList дозволяє читати об'єкти як по індексу так і послідовно через ітератор.

Клас ArrayList розширює клас AbstractList та реалізовує інтерфейс List.

Наступний приклад демонструє створення ArrayList, його наповнення об'єктами типу String та їх читання за допомогою методу get (int index) та за допомогою ітератора.

вівторок, 31 березня 2020 р.

Java vs Python

Так склалось, що останнім часом багато працюю з аналізом даних на Python. Попередньо опробував Matlab та R, після яких перейти на Python не склало взагалі ніяких проблем. Проте досвіду в програмуванні у мене все таки більше на Java, тому тут опишу Python з точки зору Java програміста. Нічим не хочу образити Python програмістів, просто погляд з під дещо іншим фокусом. Python потужна, просто освоювана мова програмування, з деякими недоліками, які втім не заважають конкурувати з іншими мовами програмування і з Java зокрема.

Динамічна типізація - жах Java програміста:-). Перше, що  впадає в очі це динамічне перетворення типів і відсутність контролю за типами змінних, що передаються у функції. В java  ти явно маєш вказувати тип і приведення до інших типів даних (крім деяких винятків). Крім того в Java при передачі змінної у функцію(метод) автоматично іде перевірка на відповідність типу змінної сигнатурі методу ще на етапі компіляції. В Java, щоправда, існує можливість написати універсальний метод, який прийматиме будь-який тип або ж якусь групу типів, але це необхідно явно вказати при оголошенні методу. Pyhon старається все робити автоматично і у функцію можна передати будь-який тип. Тому часто різноманітні функції з популярних модулів для аналізу даних Python "матюкаються" на те, що вони не можуть працювати з певним типом даних під час виконання програми (інколи з тієї інформації, що видає функція не завжди і зрозуміло в чому причина помилки). Методом проб і помилок приходиться здійснювати перетворення у відповідний тип власноруч.

вівторок, 24 березня 2020 р.

Засіб для роботи з базами даних DBeaver


DBeaver Community Edition– безкоштовний графічний інструмент для роботи з такими базами даних як MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Apache Hive, Phoenix, Presto, etc. Платна версія DBeaver Enterprise Edition також може працювати з noSQL базами даних.

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

неділя, 22 березня 2020 р.

Коротко про MongoDb (noSQL)


MongoDb  - документоорієнтована нереляційна база даних. Якщо реляційні бази даних зберігають дані у вигляді взаємопов’язаних таблиць, то MongoDb зберігає дані у вигляді документів/об‘єктів у спеціальному JSON форматі. Наприклад один документ про особу може виглядати так:

{   
    "_id" : ObjectId("15"),
    "name" : "Mike",
    "age" : 45,
    "email" :
     "newem@ukr.net"
}