Aracılığıyla paylaş


Öğretici: SQL makine öğrenmesi ile R'de kümeleme gerçekleştirmek için verileri hazırlama

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Azure SQL Yönetilen Örnek

Bu dört bölümden oluşan öğretici serisinin ikinci bölümünde, SQL Server Machine Learning Services ile R'de veya Büyük Veri Kümelerinde kümeleme gerçekleştirmek için veritabanından verileri hazırlayacaksınız.

Bu dört bölümden oluşan öğretici serisinin ikinci bölümünde, SQL Server Machine Learning Services ile R'de kümeleme gerçekleştirmek için veritabanındaki verileri hazırlayacaksınız.

Bu dört bölümden oluşan öğretici serisinin ikinci bölümünde, SQL Server 2016 R Services ile R'de kümeleme gerçekleştirmek için veritabanındaki verileri hazırlayacaksınız.

Bu dört bölümden oluşan öğretici serisinin ikinci bölümünde, Azure SQL Yönetilen Örneği Machine Learning Services ile R'de kümeleme gerçekleştirmek için veritabanından verileri hazırlayacaksınız.

Bu makalede şunları nasıl yapacağınızı öğreneceksiniz:

  • R kullanarak müşterileri farklı boyutlarda ayırma
  • Veritabanındaki verileri R veri çerçevesine yükleme

Birinci bölümde önkoşulları yüklemiş ve örnek veritabanını geri yüklemişsinizdir.

Üçüncü bölümde R'de K-Means kümeleme modeli oluşturmayı ve eğitmeyi öğreneceksiniz.

Dördüncü bölümde, yeni verilere göre R'de kümeleme gerçekleştirebilen bir veritabanında saklı yordam oluşturmayı öğreneceksiniz.

Önkoşullar

  • Bu öğreticinin ikinci bölümünde birinci bölümü tamamladığınız varsayılır.

Ayrı müşteriler

RStudio'da yeni bir RScript dosyası oluşturun ve aşağıdaki betiği çalıştırın. SQL sorgusunda müşterileri aşağıdaki boyutlara göre ayırıyorsunuz:

  • orderRatio = iade siparişi oranı (kısmen veya tamamen iade edilen toplam sipariş sayısı ile toplam sipariş sayısı)
  • itemsRatio = iade öğesi oranı (döndürülen toplam öğe sayısı ile satın alınan ürün sayısı)
  • monetaryRatio = getiri tutarı oranı (döndürülen toplam parasal öğe miktarı ile satın alınan tutar)
  • frequency = dönüş sıklığı

connStr işlevinde ServerName değerini kendi bağlantı bilgilerinizle değiştirin.

# Define the connection string to connect to the tpcxbb_1gb database

connStr <- "Driver=SQL Server;Server=ServerName;Database=tpcxbb_1gb;uid=Username;pwd=Password"

#Define the query to select data
input_query <- "
SELECT ss_customer_sk AS customer
    ,round(CASE 
            WHEN (
                       (orders_count = 0)
                    OR (returns_count IS NULL)
                    OR (orders_count IS NULL)
                    OR ((returns_count / orders_count) IS NULL)
                    )
                THEN 0.0
            ELSE (cast(returns_count AS NCHAR(10)) / orders_count)
            END, 7) AS orderRatio
    ,round(CASE 
            WHEN (
                     (orders_items = 0)
                  OR (returns_items IS NULL)
                  OR (orders_items IS NULL)
                  OR ((returns_items / orders_items) IS NULL)
                 )
            THEN 0.0
            ELSE (cast(returns_items AS NCHAR(10)) / orders_items)
            END, 7) AS itemsRatio
    ,round(CASE 
            WHEN (
                     (orders_money = 0)
                  OR (returns_money IS NULL)
                  OR (orders_money IS NULL)
                  OR ((returns_money / orders_money) IS NULL)
                 )
            THEN 0.0
            ELSE (cast(returns_money AS NCHAR(10)) / orders_money)
            END, 7) AS monetaryRatio
    ,round(CASE 
            WHEN (returns_count IS NULL)
            THEN 0.0
            ELSE returns_count
            END, 0) AS frequency
FROM (
    SELECT ss_customer_sk,
        -- return order ratio
        COUNT(DISTINCT (ss_ticket_number)) AS orders_count,
        -- return ss_item_sk ratio
        COUNT(ss_item_sk) AS orders_items,
        -- return monetary amount ratio
        SUM(ss_net_paid) AS orders_money
    FROM store_sales s
    GROUP BY ss_customer_sk
    ) orders
LEFT OUTER JOIN (
    SELECT sr_customer_sk,
        -- return order ratio
        count(DISTINCT (sr_ticket_number)) AS returns_count,
        -- return ss_item_sk ratio
        COUNT(sr_item_sk) AS returns_items,
        -- return monetary amount ratio
        SUM(sr_return_amt) AS returns_money
    FROM store_returns
    GROUP BY sr_customer_sk
    ) returned ON ss_customer_sk = sr_customer_sk";

Verileri bir veri çerçevesine yükleme

Şimdi sorgudaki sonuçları bir R veri çerçevesine döndürmek için aşağıdaki betiği kullanın.

# Query using input_query and get the results back
# to data frame customer_data

library(RODBC)

ch <- odbcDriverConnect(connStr)

customer_data <- sqlQuery(ch, input_query)

# Take a look at the data just loaded
head(customer_data, n = 5);

Aşağıdakine benzer sonuçlar görmeniz gerekir.

  customer orderRatio itemsRatio monetaryRatio frequency
1    29727          0          0      0.000000         0
2    26429          0          0      0.041979         1
3    60053          0          0      0.065762         3
4    97643          0          0      0.037034         3
5    32549          0          0      0.031281         4

Kaynakları temizle

Bu öğreticiye devam etmeyecekseniz tpcxbb_1gb veritabanını silin.

Sonraki Adımlar

Bu öğretici serisinin ikinci bölümünde şunların nasıl yapılacağını öğrendiniz:

  • R kullanarak müşterileri farklı boyutlarda ayırma
  • Veritabanındaki verileri R veri çerçevesine yükleme

Bu müşteri verilerini kullanan bir makine öğrenmesi modeli oluşturmak için bu öğretici serisinin üçüncü bölümünü izleyin: