Страницы

Поиск по вопросам

воскресенье, 1 марта 2020 г.

Добавить лидирующие пробелы для чисел

#sql #oracle


Как в Oracle SQL добавить лидирующие пробелы для чисел?
Можете поделится литературой по Oracle SQL? Язык русский/английский. 
    


Ответы

Ответ 1



Воспользуйтесь функцией LPAD(): select lpad(to_char(numeric_column_name), 8, ' ') from ... 8 в данном примере - длина целевой строки. PS убежден, что лучшая документация по Oracle - это Oracle Online Documentation

Ответ 2



Еще как вариант: select To_Char(100, '999999999') from Dual Строка будет длиной равной количеству девяток плюс позиция под знак (либо пробел либо "-"). Т.е. в целом для примера длина строки будет 10 символов. Источник: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions181.htm

Как добавить столбец вида TIMESTAMP заданного формата

#sql #oracle


Как в таблицу ORDERS добавить столбец ORDERDATE с заданным форматированием?
Либо как сменить формат у уже существуещего столбца? 

alter TABLE ORDERS ADD ORDERDATE TIMESTAMP 'YYYY-MM-DD HH24:MI:SS'

    


Ответы

Ответ 1



Oracle хранит данные в БД в бинарном виде, поэтому когда речь заходит о форматировании DATE/TIMESTAMP подразумевается ввод и вывод - т.е. как показывать данные при выводе (SELECT) и как их парсить при вводе (INSERT / UPDATE). Обычно это делается на стороне клиента: для типа DATE: alter session set NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"; для типа TIMESTAMP: alter session set NLS_TIMESTAMP_FORMAT="YYYY-MM-DD HH24:MI:SS"; для типа TIMESTAMP WITH TIME ZONE: alter session set NLS_TIMESTAMP_TZ_FORMAT="YYYY-MM-DD HH24:MI:SS"; PS очень советую задуматься об использовании TIMESTAMP WITH TIME ZONE - это поможет избежать многих проблем, особенно если данные будут храниться для/из нескольких различных временных поясов. Также можно управлять настройками по умолчанию при помощи переменной окружения ОС - NLS_TERRITORY - формат даты будет установлен в наиболее распространенный для данной страны.

Как при увеличении одного блока сделать так чтобы он не толкал другой блок

#css #css3


Возможно ли сделать так, чтобы при увеличении одного блока он не толкал другой блок
без использования position: absolute?
Как видите я тут поставил еще margin-top: 200px, но он всё равно толкает вниз h1.

У меня такая ситуация, что в верстке увеличивается целый блок громадный, а ему position:
absolute нельзя задать. Рассматриваются любые другие варианты. 



img {
  width: 100px;
  transition: width 1s ease-in-out;
}

img:hover {
  width: 200px;
}

h1 {
  margin-top: 200px;
}

another element


Ответы

Ответ 1



Можно с помощью transform: scale(n); img { width: 100px; transition: transform 1s ease-in-out; transform-origin: 0 0 0; } img:hover { transform: scale(2); } h1 { margin-top: 200px; }

another element



Ответ 2



Не совсем понятно что вам нужно. Но как вариант, можете задать: .img-block{ max-height:100px; } Тогда картинка будет просто наезжать.

Случайный лес и бэггинг деревьев решений

#python #pandas #машинное_обучение #dataframe #numpy


Запрограммировала случайный лес и бэггинг деревьев решений. 

Что-то видимо не правильно потому, что процент несовпадений выдает одинаковое число
для трех методов, и при изменении выборки ничего не происходит.

Как правильно должна выглядеть программа? Надо ли отдельно реализовать бэггинг и
деревья решений?

Код:

 import numpy as np
 import pandas as pd
 from sklearn.model_selection import cross_val_score
 from sklearn.cross_validation import train_test_split
 from sklearn.ensemble.forest import RandomForestClassifier
 from sklearn.ensemble import BaggingClassifier
 from sklearn.tree import DecisionTreeClassifier
data = pd.read_csv('C:\\Users\\Vika\\Downloads\\1500.csv', ";",decimal =',', skipinitialspace=True)
 data.head()
 kfold = 10
 itog_val1 = {} 
 itog_val2 = {} 
 itog_val3 = {} 
 itog_val4 = {} 
 itog_val5 = {} 
 itog_val6 = {}
 X = data.drop('Y1', axis=1).values[:, :8] 
 y = data['Y1'].values
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
 print ('обучающая выборка X:\n', X_train[:6])
 print ('\n')
 print ('y_train У:\n', y_train[:10])
 print (' \n')
 print ('тестовая выборка Х:\n', X_test[:6])
 print ('\n')
 print ('y_test У\n', y_test[:10])
 first_tree = RandomForestClassifier(n_estimators=100)  
 scores = cross_val_score(first_tree, X_train, y_train, cv=kfold) 
 itog_val1 = scores 
 print(itog_val1)  
 first_tree1 = DecisionTreeClassifier(max_depth=1)    
 scores = cross_val_score(first_tree, X_train, y_train, cv=kfold)
 itog_val4 = scores 
 print(itog_val4)
 first_tree.fit(X_train, y_train) 
 first_tree.score(X_test, y_test)
 y_test_predicted = first_tree.predict(X_test) 
 print ('RandomForestClassifier X\n', X_test[:9])
 print ('\n')
 print ('RandomForestClassifier y\n', y_test[:11]) 
 first_tree1.fit(X_train, y_train)
 first_tree1.score(X_test, y_test)
 y_test_predicted = first_tree1.predict(X_test)
 print ('DecisionTreeClassifier X\n', X_test[:9])
 print ('\n')
 print (' DecisionTreeClassifier y\n', y_test[:11])
 first_bagging.fit(X_train, y_train)
 first_bagging.score(X_test, y_test)
 y_test_predicted = first_bagging.predict(X_test)
 print ('BaggingClassifier X\n', X_test[:9])
 print ('\n')
 print (' BaggingClassifier y\n', y_test[:11])
 res = pd.DataFrame(np.column_stack((y_test, y_test_predicted, X_test)), 
               columns=['Y1','YR'] + data.columns[1:9].tolist())
 (res['Y1']!= res['YR']).mean()
 res1 = pd.DataFrame(np.column_stack((y_test, y_test_predicted, X_test)), 
               columns=['Y1','YD'] + data.columns[1:9].tolist())
 (res1['Y1']!= res1['YD']).mean() 
 res2 = pd.DataFrame(np.column_stack((y_test, y_test_predicted, X_test)), 
               columns=['Y1','YB'] + data.columns[1:9].tolist())
 (res2['Y1']!= res2['YB']).mean() 

    


Ответы

Ответ 1



Вы создали три DataFrame из одних и тех же данных: res = pd.DataFrame(np.column_stack((y_test, y_test_predicted, X_test)), columns=['Y1','YR'] + data.columns[1:9].tolist()) ... res1 = pd.DataFrame(np.column_stack((y_test, y_test_predicted, X_test)), columns=['Y1','YD'] + data.columns[1:9].tolist()) ... res2 = pd.DataFrame(np.column_stack((y_test, y_test_predicted, X_test)), columns=['Y1','YB'] + data.columns[1:9].tolist()) как следствие процент несовпадений - одинаковый

Как преобразовать логические False, True в 1, 0?

#python #python_3x #pandas #dataframe #numpy


Есть ли функция для преобразования булевых значений в числовые? 

Только мне нужно, чтобы False -> 1, а True -> 0.
В принципе можно и replace использовать, но хочется найти более красивый способ.
    


Ответы

Ответ 1



Пример: Исходный DataFrame: In [19]: df = pd.DataFrame({'col':np.random.choice([True, False], 10)}) In [20]: df Out[20]: col 0 False 1 True 2 True 3 False 4 False 5 True 6 False 7 False 8 True 9 False решение: In [22]: df['col'] = (-df['col']).astype(np.int8) In [23]: df Out[23]: col 0 1 1 0 2 0 3 1 4 1 5 0 6 1 7 1 8 0 9 1 In [24]: df.dtypes Out[24]: col int8 dtype: object альтернативный вариант: In [27]: df['col'] = (~df['col']).astype(np.uint8) In [28]: df Out[28]: col 0 1 1 0 2 0 3 1 4 1 5 0 6 1 7 1 8 0 9 1

constexpt function with anonymous union in C++

#cpp #cpp17 #constexpr


Всем привет!

Сейчас у меня такой код:

// Source.hpp

/**
 * @brief Method that checks the endian type on the system.
 * @return DATA_LITTLE_ENDIAN(0x02) - if on the system little endian, otherwise -
DATA_BIG_ENDIAN(0x01).
 */
static inline DATA_ENDIAN_TYPE CheckSystemEndian(void) noexcept
{
    const union {
        const uint16_t value;
        const uint8_t data[sizeof(uint16_t)];
    } endian { 0x0102 };
    return static_cast(endian.data[0]);
}

Class Foo
{
    static const DATA_ENDIAN_TYPE system_endian;
}

// Source.cpp
inline const DATA_ENDIAN_TYPE BinaryDataEngine::system_endian = CheckSystemEndian();


Что требуется:
Мне хочется решать эту задачу в compile-time, следовательно необходимо переделать
функция CheckSystemEndian() на constexp. Однако в этой задаче мне очень мешает union.

Ошибка следующая:


  constexpr function never produces a constant expression.
  Read of member 'data' of union with active member 'value' is not allowed in a constant
expression.


Подсткажите, пожалуйста, способ, как можно добиться требуемой функциональности в
compile-time.
Спасибо. 
    


Ответы

Ответ 1



Насколько я знаю, определить порядок байт (endianness) на этапе компиляции невозможно в принципе (стандартными средствами). Тут нужен reinterpret_cast, а он не считается constexpr выражением. В С++20 для этого появится std::endian, и можно будет писать так: #include constexpr bool is_big_endian = std::endian::native == std::endian::big; constexpr bool is_little_endian = std::endian::native == std::endian::little; Дожидаясь С++20, можно использовать нестандартные фичи компиляторов. Например, GCC умеет так: constexpr bool is_big_endian = __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__; constexpr bool is_little_endian = __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__; Кроме того, у вас в программе неопределенное поведение, ведь С++, в отличие от С, не позволяет читать из неактивного поля union'а. Пруф. Вот пример, как можно исправить код: static inline DATA_ENDIAN_TYPE CheckSystemEndian(void) noexcept { const uint16_t value = 0x0102; return static_cast((uint8_t &)value); } К тому же, так он еще и места меньше занимает.

Ответ 2



Есть вариант а ля cmake или Lisp, мне больше нравится Лисп. Makefile : ... clean: ...TAB... @rm endian.hpp endian ... endian.hpp: endian.cpp ...TAB... @g++ --std=c++11 endian.cpp -o endian ...TAB... @./endian > endian.hpp ... endian.cpp : # include volatile uint16_t const v16 { 0x0102 } ; volatile uint8_t const * pv8 { reinterpret_cast < volatile uint8_t const * > ( & v16 ) } ; bool const little_endian { ( * pv8 ) == 0x02 } ; bool const big_endian { ( * pv8 ) == 0x01 } ; int main ( ) { if(little_endian) std::cout<<"# define MY_LITTLE_ENDIAN "<

суббота, 29 февраля 2020 г.

Нужно ли в REST API выносить названия методов в отдельный файл с настройками?

#java #spring #rest


Пишу rest api на spring. Контроллеры оборачиваю в @RequestMapping, а имена методов
захардкодены. Например @RequestMapping("register"). Стоит ли их выносить в *.properties
файл или есть более "спринговый" способ? Понимаю, что вопрос может показаться довольно
глупым, просто хочу услышать мнение посторонних.
    


Ответы

Ответ 1



Можно создать такой класс: public final class BaseApi { public static final String REGISTER = "/register"; public static final String LOGIN = "/login"; public static final String LOGOUT = "/logout"; private BaseApi() { //prevents instantiation } } И потом при создании контроллера использовать статические импорты. Это нужно для того, чтобы ваши тесты и контроллеры использовали одинаковые константы. Если вы их захардкодите, то при изменении урл, вам понадобится менять и во всех остальных классах, а с таким подходом - только в одном классе.