вівторок, 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"
}

четвер, 13 лютого 2020 р.

Adapter pattern

Вирізка із книги "GoF Design Patterns - with examples using Java and UML2" by: Benneth Christiansson (Ed.) Mattias Forss, Ivar Hagen, Kent Hansson, Johan Jonasson, Mattias Jonasson, Fredrik Lott, Sara Olsson, and Thomas Rosevall. License: Creative Commons Attribution-ShareAlike 3.0 License.

Визначення

Патерн адаптер(Adapter) або ж обгортка (Wrapper) використовується для трансляції інтерфейсу одного класу в інтерфейс іншого. Це означає, що ми можемо зробити так, щоб класи працювали разом, хоча вони мають несумісні інтерфейси. Клас адаптер використовує множинне успадкування (розширяючи один клас і/або реалізуючи один або більше класів), щоб адаптувати один інтерфейс до іншого. Об’єкт адаптер покладається на агрегацію об’єктів.

Де використовується
  • Коли ви хочети використовувати існуючий клас, але його інтерфейс не зіставляється з тим який вам потрібен
  • Коли ви хочете створити повторно використовуваний клас, що взаємодії з непов’язаними або невідомими наперед класами, що є класами, що необов’язково мають сумісний інтерфейс.
  • Коли ви хочете збільшити прозорість класів
  • Коли ви хочете створити вбудовуваний набір.

вівторок, 27 листопада 2018 р.

JAXB: розпаковування та генерування XML документів

JAXB (Java Architecture for XML Binding) дозволяє швидко розпакувати (unmarshall) xml файл у об’єкти та згенерувати/запакувати (marshall) xml із об’єкту. JAXB використовується, зокрема, при розробці RESTtful Веб-сервісів, коли необхідно швидко згенерувати xml у якості відповіді клієнту або розпакувати із http запиту.
Для прикладу є простий XML документ:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
 <id>1</id>
 <name>Галина Мер</name>
 <mobile>+380970000001</mobile>
</Data>

Для того, щоб розпакувати наш xml об'єкт нам потрібен клас із відповідною анотацією.

суботу, 3 листопада 2018 р.

Нейронні мережі в R

Із CRAN можна звантажити декілька пакетів реалізацій нейронних мереж на R (nnet, neuralnet, deepnet), крім них доступні пакети в основі яких лежать реалізації на інших мовах. Це такі пакети як MXnet, darch, deepnet, h2o, Keras, TensorFlow.
Простий приклад використання neuralnet:

library("neuralnet")
input<-c(0,1,2,3,4,5,6,7,8,9,10)
output<-c(0,1,4,9,16,25,36,49,64,81,100)
mydata<-cbind.data.frame(input,output)
attach(mydata)
#навчити мережу базуючись на input та output
model=neuralnet(
  formula=output~input,
  data=mydata, #дані
  hidden=10, #кількість нейронів в прихованому шарі
  threshold=0.01 #поріг спрацювання
)
print(model)
#виводимо схему нейронної мережі
plot(model)
#Перевіряємо дані - фактичні та прогнозовані
final_output=cbind(input, output, as.data.frame(model$net.result))
colnames(final_output)=c("Input", "Expected Output", "Neural Net Output")
print (final_output)

Схема виведеної нейронної мережі:

неділю, 28 жовтня 2018 р.

Лінійна регресія в R

Загальний формат для лінійної моделі:
response~op1 term1 op2 term 2 op3 term 3…
де term — об’єкт або послідовність об’єктів, op — оператор, такий як +, -, що вказує як term буде включений у модель. Таблиця нижче включає деякі корисні приклади. Запримітьте, що математичні символи в колонці "Синтаксис" використовуються для визначення моделі, а не в в їхньому нормальному розумінні.

Приймемо, що Y - залежна змінна, A,B,C - незалежні змінні, що можуть впливати на Y. b1,b2, b3 - коефіцієнти моделі, що розраховуються.


Синтаксис
Модель
Коментарі
Y~A
Y=b0+b1A
Пряма лінія із неявно вказаним перетином осі y.
Y~-1+A
Y=b0+b1A+b2A
Пряма лінія без перетину осі y, тобто підігнана лінія проходитиме через (0,0)
Y~A+I(A^2)
Y=b0+b1A+b2A2
Поліномна модель, функція I() – дозволяє в модель включати нормальні математичні символи.
Y~A+B
Y=b0+b1A+b2B
Модель першого порядку, без взаємодії незалежних змінних
Y~A:B
Y=b0+b1AB
Модель, що містить лише взаємодії першого порядку між A та B
Y~A*B
Y=b0+b1A+b2B+b3AB
Повна модель першого порядку, еквівалентний код: Y~A+B+A:B
Y~(A+B+C)^2
Y=b0+b1A+b2B+b3C+b4AB+b5AC+b6AC
Модель, що включає всі явища першого порядку та взаємодії до n-го порядку, де n задається як ()^n. Еквівалентний вираз:
  Y~A*B*C-A:B:C.

Базовий синтаксис для розрахунку моделі в R методом найменших квадратів:
lm(Y~model)
де Y – об’єкт, що містить залежну змінну, що буде прогнозуватися, а model – це формула для вибраної математичної моделі (див. таблицю вище). Одержати сукупну інформацію про модель можна за допомогою функції summary().
mymodel=lm(Y~A)
summary(mymodel)
в результаті буде виведена інформацію про вид моделі та статистичні оцінки моделі.

Перевірити модель на нових даних можна з допомогою функції predict()

Джерело:
* Using R for Linear Regression