Share via


Ciência de dados com uma Máquina Virtual de Ciência de Dados do Ubuntu no Azure

Este passo a passo descreve como concluir várias tarefas comuns de ciência de dados com a DSVM (Máquina Virtual de Ciência de Dados) do Ubuntu. A DSVM do Ubuntu é uma imagem de máquina virtual disponível no Azure, com uma coleção de ferramentas pré-instalada comumente usada para análise de dados e machine learning. O recurso Provisionar a Máquina Virtual de Ciência de Dados do Ubuntu itemiza os principais componentes de software. A imagem DSVM facilita a introdução à ciência de dados em apenas alguns minutos, evitando a necessidade de instalar e configurar cada uma das ferramentas individualmente. Você pode dimensionar facilmente a DSVM, se necessário, e pode pará-la quando ela não estiver em uso. Portanto, o recurso de DSVM é elástico e econômico.

Neste passo a passo, analisamos o conjunto de dados baseado em spam. Baseado em spam é um conjunto de emails que são marcados como spam ou ham (não spam). A base de spam também contém algumas estatísticas sobre o conteúdo do email. Discutiremos as estatísticas mais adiante no passo a passo.

Pré-requisitos

Antes de usar uma DSVM do Linux, você deve abranger estes pré-requisitos:

Baixar o conjunto de dados baseado em spam

O conjunto de dados de base spambase é um conjunto bastante pequeno de dados que contém 4.601 exemplos. O tamanho conveniente e gerenciável desse recurso facilita a exibição de alguns dos principais recursos da DSVM devido aos requisitos modestos de recursos.

Observação

Este passo a passo foi criado usando uma DSVM Linux de tamanho D2 v2. Você pode usar uma DSVM desse tamanho para concluir os procedimentos mostrados neste passo a passo.

Para obter mais espaço de armazenamento, você pode criar mais discos e anexá-los à DSVM. Os discos usam o armazenamento persistente do Azure, portanto, seus dados são preservados mesmo que o servidor seja reprovisionado devido ao redimensionamento ou ao desligamento. Para adicionar um disco e anexá-lo à sua DSVM, conclua as etapas em Adicionar um disco a uma VM do Linux. As etapas para adicionar um disco usam a CLI do Azure, que já está instalada na DSVM. Você pode concluir as etapas inteiramente na própria DSVM. Como outra opção para aumentar o armazenamento, você pode usar Arquivos do Azure.

Para baixar os dados, abra uma janela do terminal e depois execute este comando:

wget --no-check-certificate https://archive.ics.uci.edu/ml/machine-learning-databases/spambase/spambase.data

O arquivo baixado não tem linha de cabeçalho. Vamos criar outro arquivo que tenha um cabeçalho. Execute este comando para criar um arquivo com os devidos cabeçalhos:

echo 'word_freq_make, word_freq_address, word_freq_all, word_freq_3d,word_freq_our, word_freq_over, word_freq_remove, word_freq_internet,word_freq_order, word_freq_mail, word_freq_receive, word_freq_will,word_freq_people, word_freq_report, word_freq_addresses, word_freq_free,word_freq_business, word_freq_email, word_freq_you, word_freq_credit,word_freq_your, word_freq_font, word_freq_000, word_freq_money,word_freq_hp, word_freq_hpl, word_freq_george, word_freq_650, word_freq_lab,word_freq_labs, word_freq_telnet, word_freq_857, word_freq_data,word_freq_415, word_freq_85, word_freq_technology, word_freq_1999,word_freq_parts, word_freq_pm, word_freq_direct, word_freq_cs, word_freq_meeting,word_freq_original, word_freq_project, word_freq_re, word_freq_edu,word_freq_table, word_freq_conference, char_freq_semicolon, char_freq_leftParen,char_freq_leftBracket, char_freq_exclamation, char_freq_dollar, char_freq_pound, capital_run_length_average,capital_run_length_longest, capital_run_length_total, spam' > headers

Em seguida, concatene os dois arquivos:

cat spambase.data >> headers
mv headers spambaseHeaders.data

O conjunto de dados tem vários tipos de estatísticas para cada email:

  • Colunas como word_freq_WORD indicam a porcentagem de palavras no email que correspondem WORD. Por exemplo, se word_freq_make for 1, então, make terá 1% de todas as palavras do e-mail.
  • Colunas como char_freq_CHAR indicam a porcentagem de todos os caracteres no email CHAR.
  • capital_run_length_longest é o maior comprimento de uma sequência de letras maiúsculas.
  • capital_run_length_average é a duração média de todas as sequências de letras maiúsculas.
  • capital_run_length_total é o comprimento total de todas as sequências de letras maiúsculas.
  • spam indica se o email foi considerado spam ou não (1 = spam, 0 = não spam).

Explorar o conjunto de dados um usando o R Open

Vamos examinar os dados e usar o R para fazer um aprendizado de máquina básico. A DSVM vem com CRAN R pré-instalado.

Para obter cópias dos exemplos de código usados neste passo a passo, use o git para clonar o repositório Azure-Machine-Learning-Data-Science. O Git é pré-instalado na DSVM. Na linha de comando do git, execute:

git clone https://github.com/Azure/Azure-MachineLearning-DataScience.git

Abra uma janela de terminal e inicie uma nova sessão de R no console interativo de R. Para importar os dados e configurar o ambiente, execute:

data <- read.csv("spambaseHeaders.data")
set.seed(123)

Este exemplo de código mostra estatísticas resumidas sobre cada coluna:

summary(data)

Para obter uma exibição diferente dos dados:

str(data)

Essa exibição mostra o tipo de cada variável e os primeiros valores no conjunto de dados.

A coluna spam foi lida como um número inteiro, mas é realmente uma variável categórica (ou fator). Para definir seu tipo:

data$spam <- as.factor(data$spam)

Para algumas análises exploratórias, use o pacote ggplot2, uma biblioteca de grafo popular para R. O pacote ggplot2 é pré-instalado na DSVM. Com base nos dados de resumo exibidos anteriormente, temos as estatísticas de resumo sobre a frequência do caractere de ponto de exclamação. Para plotar essas frequências aqui, execute estes comandos:

library(ggplot2)
ggplot(data) + geom_histogram(aes(x=char_freq_exclamation), binwidth=0.25)

Como a barra zero distorce o gráfico, vamos eliminá-lo:

email_with_exclamation = data[data$char_freq_exclamation > 0, ]
ggplot(email_with_exclamation) + geom_histogram(aes(x=char_freq_exclamation), binwidth=0.25)

Uma densidade não trivial acima de 1 que parece interessante. Vamos examinar apenas estes dados:

ggplot(data[data$char_freq_exclamation > 1, ]) + geom_histogram(aes(x=char_freq_exclamation), binwidth=0.25)

Em seguida, divida-os em spam e ham:

ggplot(data[data$char_freq_exclamation > 1, ], aes(x=char_freq_exclamation)) +
geom_density(lty=3) +
geom_density(aes(fill=spam, colour=spam), alpha=0.55) +
xlab("spam") +
ggtitle("Distribution of spam \nby frequency of !") +
labs(fill="spam", y="Density")

Estes exemplos devem ajudá-lo a criar gráficos semelhantes e explorar os dados nas outras colunas.

Treinar e testar um modelo de machine learning

Vamos treinar alguns modelos de machine learning para identificar os emails no conjunto de dados que contêm spam ou ham. Nesta seção, treinamos um modelo de árvore de decisão e um modelo de floresta aleatória. Em seguida, testamos a precisão das previsões.

Observação

O pacote rpart (particionamento recursivo e árvores de regressão) usado no código a seguir já está instalado na DSVM.

Primeiro, dividiremos o conjunto de dados em conjuntos de treinamento e de teste:

rnd <- runif(dim(data)[1])
trainSet = subset(data, rnd <= 0.7)
testSet = subset(data, rnd > 0.7)

Depois, crie uma árvore de decisão para classificar os emails:

require(rpart)
model.rpart <- rpart(spam ~ ., method = "class", data = trainSet)
plot(model.rpart)
text(model.rpart)

Eis o resultado:

Diagrama mostrando a árvore de decisão criada.

Use este exemplo de código para determinar o desempenho dele no conjunto de treinamento:

trainSetPred <- predict(model.rpart, newdata = trainSet, type = "class")
t <- table(`Actual Class` = trainSet$spam, `Predicted Class` = trainSetPred)
accuracy <- sum(diag(t))/sum(t)
accuracy

Para determinar o desempenho dele no conjunto de testes, execute este código:

testSetPred <- predict(model.rpart, newdata = testSet, type = "class")
t <- table(`Actual Class` = testSet$spam, `Predicted Class` = testSetPred)
accuracy <- sum(diag(t))/sum(t)
accuracy

Também tentaremos um modelo de floresta aleatória. Uma floresta aleatória treina várias árvores de decisão. Ele gera uma classe que é o valor de modo das classificações de todas as árvores de decisão individuais. Fornecem uma abordagem do aprendizado de máquina mais potente à medida que corrigem a tendência de um modelo de árvore de decisão de sobreajustar um conjunto de dados de treinamento.

require(randomForest)
trainVars <- setdiff(colnames(data), 'spam')
model.rf <- randomForest(x=trainSet[, trainVars], y=trainSet$spam)

trainSetPred <- predict(model.rf, newdata = trainSet[, trainVars], type = "class")
table(`Actual Class` = trainSet$spam, `Predicted Class` = trainSetPred)

testSetPred <- predict(model.rf, newdata = testSet[, trainVars], type = "class")
t <- table(`Actual Class` = testSet$spam, `Predicted Class` = testSetPred)
accuracy <- sum(diag(t))/sum(t)
accuracy

Tutoriais e passo a passo sobre aprendizado profundo

Além dos exemplos baseados em estrutura, fornecemos também um conjunto abrangente de orientações. Esses passo a passo ajudam você a iniciar o desenvolvimento de aplicativos de aprendizado profundo em domínios de imagem, compreensão de linguagem de texto etc.

  • Executando redes neurais em estruturas diferentes: um passo a passo completo que mostra como migrar o código de uma estrutura para outra. Ele também mostra como comparar o desempenho do modelo e do runtime entre estruturas.

  • Um guia de instruções para criar uma solução de ponta a ponta para detectar produtos em imagens: a técnica de detecção de imagem pode localizar e classificar objetos dentro de imagens. A tecnologia pode fornecer enormes recompensas em muitos domínios de negócios da vida real. Por exemplo, os varejistas podem usar essa técnica para determinar qual produto um cliente pegou na prateleira. Por sua vez, essas informações ajudam as lojas a gerenciar o estoque do produtos.

  • Aprendizado profundo para áudio: Este tutorial mostra como treinar um modelo de aprendizado profundo para detecção de eventos no conjunto de dados de sons urbanos. O tutorial fornece uma visão geral de como trabalhar com dados de áudio.

  • Classificação de documentos de texto: este passo a passo demonstra como criar e treinar duas arquiteturas de rede neural diferentes: a Rede de Atenção Hierárquica e a LSTM (Memória de Longo Prazo). Para classificar documentos de texto, essas redes neurais usam a API Keras para aprendizado profundo. Keras é um front-end para três das estruturas de aprendizado profundo mais populares: Microsoft Cognitive Toolkit, TensorFlow e Theano.

Outras ferramentas

As seções restantes mostram como usar algumas das ferramentas pré-instaladas na DSVM do Linux. Examinamos estas ferramentas:

  • XGBoost
  • Python
  • JupyterHub
  • Rattle
  • PostgreSQL e SQuirreL SQL
  • Azure Synapse Analytics (antigo SQL DW)

XGBoost

XGBoost fornece uma implementação de árvore aumentada rápida e precisa.

require(xgboost)
data <- read.csv("spambaseHeaders.data")
set.seed(123)

rnd <- runif(dim(data)[1])
trainSet = subset(data, rnd <= 0.7)
testSet = subset(data, rnd > 0.7)

bst <- xgboost(data = data.matrix(trainSet[,0:57]), label = trainSet$spam, nthread = 2, nrounds = 2, objective = "binary:logistic")

pred <- predict(bst, data.matrix(testSet[, 0:57]))
accuracy <- 1.0 - mean(as.numeric(pred > 0.5) != testSet$spam)
print(paste("test accuracy = ", accuracy))

O XGBoost também pode chamar a partir do Python ou de uma linha de comando.

Python

Para o desenvolvimento do Python, as distribuições do Anaconda Python 3.5 e 2.7 são pré-instaladas na DSVM.

Observação

A distribuição Anaconda inclui Conda. Você pode usar o Conda para criar ambientes personalizados do Python que tenham diferentes versões ou pacotes instalados neles.

Vamos ler alguns dos conjuntos de dados de spambase e classificar os emails com computadores vetores de suporte no Scikit-learn:

import pandas
from sklearn import svm
data = pandas.read_csv("spambaseHeaders.data", sep = ',\s*')
X = data.ix[:, 0:57]
y = data.ix[:, 57]
clf = svm.SVC()
clf.fit(X, y)

Para fazer previsões:

clf.predict(X.ix[0:20, :])

Para demonstrar como publicar um ponto de extremidade do Azure Machine Learning, vamos criar um modelo mais básico. Usamos as três variáveis que usamos quando publicamos o modelo R anteriormente:

X = data[["char_freq_dollar", "word_freq_remove", "word_freq_hp"]]
y = data.ix[:, 57]
clf = svm.SVC()
clf.fit(X, y)

JupyterHub

A distribuição do Anaconda na DSVM vem com um Jupyter Notebook. Esse recurso é um ambiente multiplataforma para compartilhamento de código e análise Python, R ou Julia. O Jupyter Notebook é acessado com o JupyterHub. Você entra com seu nome de usuário local do Linux e a senha em https://<endereço IP ou nome DNS da DSVM>:8000/. Você pode encontrar todos os arquivos de configuração do JupyterHub no /etc/jupyterhub.

Observação

Para usar o Gerenciador de Pacotes do Python (por meio do comando pip) de um Jupyter Notebook localizado no kernel atual, use este comando na célula de código:

 import sys
 ! {sys.executable} -m pip install numpy -y

Para usar o instalador conda (por meio do comando conda) de um Jupyter Notebook localizado no kernel atual, use este comando em uma célula de código:

 import sys
 ! {sys.prefix}/bin/conda install --yes --prefix {sys.prefix} numpy

Vários blocos de anotações de exemplo já estão instalados na DSVM:

Observação

A linguagem Julia também está disponível na linha de comando na DSVM do Linux.

Rattle

Você pode usar a ferramenta gráfica R Rattle (RAnalytical Tool To Learn Easily) para mineração de dados. O Rattle tem uma interface simples que facilita carregar, explorar e transformar os dados, compilar e avaliar os modelos. Rattle: uma GUI da mineração de dados para o R fornece um passo a passo que demonstra os recursos do Rattle.

Execute estes comandos para instalar e iniciar o Rattle:

if(!require("rattle")) install.packages("rattle")
require(rattle)
rattle()

Observação

Você não precisa instalar o Rattle na DSVM. No entanto, você pode ser solicitado a instalar pacotes adicionais quando o Rattle abrir.

O Rattle usa uma interface baseada em guias. A maioria das guias corresponde às etapas no Processo de ciência de dados de equipe, como carregar os dados ou explorá-los. O processo da ciência de dados flui da esquerda para a direita nas guias. A última guia contém um log dos comandos R que o Rattle executou.

Para carregar e configurar o conjunto de dados:

  1. Para carregar o arquivo, selecione a guia Dados
  2. Escolha o seletor ao lado do Nome de arquivo e depois escolha spambaseHeaders.data
  3. Para carregar o arquivo. Selecione Executar. Você deve ver um resumo de cada coluna, incluindo seu tipo de dados identificado, seja uma entrada, um destino ou outro tipo de variável e o número de valores exclusivos
  4. Rattle identificou corretamente a coluna de spam como o destino. Selecione a coluna spam e, em seguida, defina o Tipo de dados de destino como Categórico

Para explorar os dados:

  1. Selecione a guia Explorar
  2. Para exibir informações sobre os tipos de variável e algumas estatísticas de resumo, selecione Resumo>Executar.
  3. Para exibir os outros tipos de estatísticas sobre cada variável, selecione outras opções, como Descrever ou Básico.

Você também pode usar a guia Explorar para gerar gráficos reveladores. Para criar gráficos com um histograma dos dados:

  1. Selecionar Distribuições
  2. Para word_freq_remove e word_freq_you, selecione Histograma
  3. Selecione Executar. Você deverá ver os dois gráficos de densidade em uma única janela de gráfico, onde a palavra você aparece claramente com muito mais frequência nos e-mails, em comparação com remover

Os gráficos de correlação também são interessantes. Para criar um gráfico:

  1. Para Tipo, selecione Correlação
  2. Selecione Executar
  3. O Rattle avisa que ele recomenda um máximo de 40 variáveis. Selecione Sim para exibir o gráfico

Há algumas correlações interessantes que surgem. Por exemplo, a tecnologia se correlaciona fortemente com HP e laboratórios. Também se correlaciona fortemente a 650 porque o código de área dos doadores do conjunto de dados é 650.

Os valores numéricos para as correlações entre as palavras estão disponíveis na janela Explorar. É interessante observar, por exemplo, que tecnologia está negativamente correlacionado a seu e dinheiro.

O Rattle pode transformar o conjunto de dados para lidar com alguns problemas comuns. Por exemplo, ele pode redimensionar os recursos, atribuir os valores ausentes, lidar com os valores atípicos e remover as variáveis ou observações com dados faltando. O Rattle também pode identificar regras de associação entre as observações e variáveis. Este passo a passo introdutório não abrange essas guias.

O Rattle também pode lidar com análises de cluster. Iremos excluir alguns recursos para facilitar a leitura da saída. Na guia Dados, selecione Ignorar ao lado de cada uma das variáveis, exceto estes 10 itens:

  • word_freq_hp
  • word_freq_technology
  • word_freq_george
  • word_freq_remove
  • word_freq_your
  • word_freq_dollar
  • word_freq_money
  • capital_run_length_longest
  • word_freq_business
  • spam

Retorne à guia Cluster. Selecione KMeans e, em seguida, defina o Número de clusters como 4. Selecione Executar. A janela de saída mostra os resultados. Um cluster tem altas frequências de george e hp, e provavelmente é um email comercial legítimo.

Para compilar um modelo de aprendizado de máquina da árvore de decisão básica:

  1. Selecione a guia Modelo
  2. Para o Tipo, selecione Árvore
  3. Selecione Executar para exibir a árvore no formulário de texto na janela de saída
  4. Selecione o botão Desenhar para exibir uma versão gráfica. A árvore de decisão é semelhante à árvore que obtivemos anteriormente com rpart.

O Rattle pode executar vários métodos de machine learning e avaliá-los rapidamente. Esse é um recurso útil. Veja como fazer isso:

  1. Para Tipo, selecione Tudo
  2. Selecione Executar
  3. Quando o Rattle terminar de ser executado, você poderá selecionar qualquer valor para Tipo, como SVM e exibir os resultados
  4. Você também pode comparar o desempenho dos modelos no conjunto de validação com a guia Avaliar. Por exemplo, a seleção Matriz do Erro mostra a matriz de confusão, erro geral e erro de classe média para cada modelo no conjunto de validação. Você também pode plotar curvas ROC, executar análise de confidencialidade e fazer outros tipos de avaliações de modelo

Quando terminar de compilar seus modelos, selecione a guia Log para exibir o código R que o Rattle executou durante a sessão. Você pode selecionar o botão Exportar para salvá-lo.

Observação

A versão atual do Rattle contém um bug. Para modificar o script ou usá-lo para repetir as etapas posteriormente, você deve inserir um caractere # na frente de Exportar este log… no texto do log.

PostgreSQL e SQuirreL SQL

A DSVM vem com o PostgreSQL instalado. O PostgreSQL é um banco de dados relacional sofisticado e de software livre. Esta seção mostra como carregar o conjunto de dados de base de spam no PostgreSQL e consultá-lo.

Antes de carregar os dados, você precisa permitir a autenticação de senha a partir do host local. Em um prompt de comando, execute:

sudo gedit /var/lib/pgsql/data/pg_hba.conf

Próximo à parte inferior do arquivo de configuração, várias linhas detalham as conexões permitidas:

# "local" is only for Unix domain socket connections:
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

Altere a linha de conexões locais IPv4 para usar md5 em vez de ident, para que possamos entrar com um nome de usuário e senha:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

Em seguida, reinicie o serviço PostgreSQL:

sudo systemctl restart postgresql

Para iniciar o psql (um terminal interativo do PostgreSQL) como o usuário postgres interno, execute este comando:

sudo -u postgres psql

Crie uma nova conta de usuário com o nome de usuário da conta do Linux que você usou para entrar. Crie uma senha:

CREATE USER <username> WITH CREATEDB;
CREATE DATABASE <username>;
ALTER USER <username> password '<password>';
\quit

Entre no psql:

psql

Importe os dados para um novo banco de dados:

CREATE DATABASE spam;
\c spam
CREATE TABLE data (word_freq_make real, word_freq_address real, word_freq_all real, word_freq_3d real,word_freq_our real, word_freq_over real, word_freq_remove real, word_freq_internet real,word_freq_order real, word_freq_mail real, word_freq_receive real, word_freq_will real,word_freq_people real, word_freq_report real, word_freq_addresses real, word_freq_free real,word_freq_business real, word_freq_email real, word_freq_you real, word_freq_credit real,word_freq_your real, word_freq_font real, word_freq_000 real, word_freq_money real,word_freq_hp real, word_freq_hpl real, word_freq_george real, word_freq_650 real, word_freq_lab real,word_freq_labs real, word_freq_telnet real, word_freq_857 real, word_freq_data real,word_freq_415 real, word_freq_85 real, word_freq_technology real, word_freq_1999 real,word_freq_parts real, word_freq_pm real, word_freq_direct real, word_freq_cs real, word_freq_meeting real,word_freq_original real, word_freq_project real, word_freq_re real, word_freq_edu real,word_freq_table real, word_freq_conference real, char_freq_semicolon real, char_freq_leftParen real,char_freq_leftBracket real, char_freq_exclamation real, char_freq_dollar real, char_freq_pound real, capital_run_length_average real, capital_run_length_longest real, capital_run_length_total real, spam integer);
\copy data FROM /home/<username>/spambase.data DELIMITER ',' CSV;
\quit

Agora, vamos explorar os dados e executar algumas consultas com o SQuirreL SQL, uma ferramenta gráfica que pode interagir com bancos de dados por meio de um driver JDBC.

Primeiro, no menu Aplicativos, abra o SQuirreL SQL. Para configurar o driver:

  1. Selecione Windows>Exibir drivers
  2. Clique com o botão direito do mouse em PostgreSQL e selecione Modificar driver
  3. Selecione Caminho da classe extra>Adicionar
  4. Em Nome do arquivo, digite /usr/share/java/jdbcdrivers/postgresql-9.4.1208.jre6.jar
  5. Selecionar Abrir
  6. Selecione Listar drivers. Em Nome da classe, selecione org.postgresql.Driver e, em seguida, OK

Para configurar a conexão com o servidor local:

  1. Selecione Windows>Exibir aliases.
  2. Selecione o botão + para criar um novo alias. No novo nome do alias, insira Banco de dados de spam
  3. Em Driver, selecione PostgreSQL
  4. Define a URL como jdbc:postgresql://localhost/spam
  5. Insira seu nome de usuário e sua senha
  6. Selecione OK
  7. Para abrir a janela Conexão, clique duas vezes no alias do Banco de dados de spam
  8. Selecione Conectar

Para executar algumas consultas:

  1. Selecione a guia SQL
  2. Na caixa de consulta na parte superior da guia SQL, insira uma consulta básica: por exemplo, SELECT * from data;
  3. Pressione Ctrl+Enter para executar a consulta. Por padrão, o SQuirreL SQL retorna as primeiras 100 linhas da consulta

Você pode executar muitas outras consultas para explorar esses dados. Por exemplo, como a frequência da palavra make difere entre o spam e o ham?

SELECT avg(word_freq_make), spam from data group by spam;

Quais são as características do email que frequentemente contêm 3d?

SELECT * from data order by word_freq_3d desc;

A maioria dos emails que têm uma alta ocorrência de 3d são spam aparente. Essas informações podem ser úteis para criar um modelo de previsão para classificar emails.

Para aprendizado de máquina usando dados armazenados em um banco de dados PostgreSQL, o MADlib funciona bem.

Azure Synapse Analytics (antigo SQL DW)

O Azure Synapse Analytics é um banco de dados de expansão baseado em nuvem que pode processar grandes volumes de dados, relacionais e não relacionais. Para obter mais informações, visite O que é o Azure Synapse Analytics?

Para se conectar ao data warehouse e criar a tabela, execute este comando em um prompt de comando:

sqlcmd -S <server-name>.database.windows.net -d <database-name> -U <username> -P <password> -I

No prompt do sqlcmd, execute este comando:

CREATE TABLE spam (word_freq_make real, word_freq_address real, word_freq_all real, word_freq_3d real,word_freq_our real, word_freq_over real, word_freq_remove real, word_freq_internet real,word_freq_order real, word_freq_mail real, word_freq_receive real, word_freq_will real,word_freq_people real, word_freq_report real, word_freq_addresses real, word_freq_free real,word_freq_business real, word_freq_email real, word_freq_you real, word_freq_credit real,word_freq_your real, word_freq_font real, word_freq_000 real, word_freq_money real,word_freq_hp real, word_freq_hpl real, word_freq_george real, word_freq_650 real, word_freq_lab real,word_freq_labs real, word_freq_telnet real, word_freq_857 real, word_freq_data real,word_freq_415 real, word_freq_85 real, word_freq_technology real, word_freq_1999 real,word_freq_parts real, word_freq_pm real, word_freq_direct real, word_freq_cs real, word_freq_meeting real,word_freq_original real, word_freq_project real, word_freq_re real, word_freq_edu real,word_freq_table real, word_freq_conference real, char_freq_semicolon real, char_freq_leftParen real,char_freq_leftBracket real, char_freq_exclamation real, char_freq_dollar real, char_freq_pound real, capital_run_length_average real, capital_run_length_longest real, capital_run_length_total real, spam integer) WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN);
GO

Copie os dados com bcp:

bcp spam in spambaseHeaders.data -q -c -t  ',' -S <server-name>.database.windows.net -d <database-name> -U <username> -P <password> -F 1 -r "\r\n"

Observação

O arquivo baixado contém términos de linha no estilo do Windows. A ferramenta bcp espera términos de linha no estilo do Unix. Use o sinalizador -r para informar bcp sobre isso.

Em seguida, consulte usando sqlcmd:

select top 10 spam, char_freq_dollar from spam;
GO

Você também pode consultar com o SSQuirreL SQL. Siga as etapas semelhantes ao PostgreSQL usando o driver JDBC do SQL Server. O driver JDBC está na pasta /usr/share/java/jdbcdrivers/sqljdbc42.jar.