Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Quick start

Son Güncelleme:Oct 04, 2026

DataFrame, MaxCompute için yapılandırılmış bir veri API'si sağlar. Bu konu, DataFrame nesneleri oluşturmanızı ve filtreleme, toplama ile birleştirme gibi yaygın veri işlemlerini adım adım gösterir.

Veri hazırlığı

Örneklerde sırasıyla kullanıcı, film ve değerlendirme verilerini içeren u.user, u.item ve u.data dosyaları kullanılır.

  1. Tabloları oluşturun:

    • Kullanıcı verileri için pyodps_ml_100k_users tablosu.

      CREATE TABLE IF NOT EXISTS pyodps_ml_100k_users
      (
        user_id    BIGINT COMMENT 'User ID',
        age        BIGINT COMMENT 'Age',
        sex        STRING COMMENT 'Gender',
        occupation STRING COMMENT 'Occupation',
        zip_code   STRING COMMENT 'Zip code'
      );
    • Film verileri için pyodps_ml_100k_movies tablosu.

      CREATE TABLE IF NOT EXISTS pyodps_ml_100k_movies
      (
          movie_id            BIGINT COMMENT 'Movie ID',
          title              STRING COMMENT 'Movie title',
          release_date       STRING COMMENT 'Release date',
          video_release_date STRING COMMENT 'Video release date',
          IMDb_URL           STRING COMMENT 'IMDb URL',
          unknown            TINYINT COMMENT 'Unknown',
          Action             TINYINT COMMENT 'Action',
          Adventure          TINYINT COMMENT 'Adventure',
          Animation          TINYINT COMMENT 'Animation',
          Children           TINYINT COMMENT 'Children',
          Comedy             TINYINT COMMENT 'Comedy',
          Crime              TINYINT COMMENT 'Crime',
          Documentary        TINYINT COMMENT 'Documentary',
          Drama              TINYINT COMMENT 'Drama',
          Fantasy            TINYINT COMMENT 'Fantasy',
          FilmNoir           TINYINT COMMENT 'Film Noir',
          Horror             TINYINT COMMENT 'Horror',
          Musical            TINYINT COMMENT 'Musical',
          Mystery            TINYINT COMMENT 'Mystery',
          Romance            TINYINT COMMENT 'Romance',
          SciFi              TINYINT COMMENT 'Sci-Fi',
          Thriller           TINYINT COMMENT 'Thriller',
          War                TINYINT COMMENT 'War',
          Western            TINYINT COMMENT 'Western'
      );
    • Değerlendirme verileri için pyodps_ml_100k_ratings tablosu.

      CREATE TABLE IF NOT EXISTS pyodps_ml_100k_ratings
      (
          user_id    BIGINT COMMENT 'User ID',
          movie_id  BIGINT COMMENT 'Movie ID',
          rating    BIGINT COMMENT 'Rating',
          timestamp BIGINT COMMENT 'Timestamp'
      )
  2. Tunnel Upload özelliğini kullanarak yerel veri dosyalarını MaxCompute tablolarına aktarın. Tunnel işlemleri hakkında daha fazla bilgi için bkz. Tunnel Commands.

    Tunnel upload -fd | path_to_file/u.user pyodps_ml_100k_users;
    Tunnel upload -fd | path_to_file/u.item pyodps_ml_100k_movies;
    Tunnel upload -fd | path_to_file/u.data pyodps_ml_100k_ratings;

DataFrame işlemleri

pyodps_ml_100k_movies, pyodps_ml_100k_users ve pyodps_ml_100k_ratings tablolarını hazırladıktan sonra IPython ortamında DataFrame işlemlerini keşfedebilirsiniz.

Not

IPython, Python gerektirir. Yüklemek için pip install IPython komutunu çalıştırın, ardından etkileşimli ortamı başlatmak için ipython komutunu çalıştırın.

  1. Bir ODPS nesnesi oluşturun.

    import os
    from odps import ODPS
    # Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set to your Access Key ID,
    # and the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set to your Access Key Secret.
    # We recommend that you avoid hardcoding the Access Key ID and Access Key Secret in your code.
    o = ODPS(
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        project='your-default-project',
        endpoint='your-end-point',
    )
    
  2. Bir tablodan DataFrame nesnesi oluşturun.

    from odps.df import DataFrame
    users = DataFrame(o.get_table('pyodps_ml_100k_users'));
  3. Sütun adlarını ve veri türlerini dtypes özelliği ile görüntüleyin.

    print(users.dtypes)

    Çıktı:

    odps.Schema {
      user_id             int64
      age                 int64
      sex                 string
      occupation          string
      zip_code            string
    }
  4. İlk N satırı head yöntemiyle önizleyin.

    print(users.head(10))

    Çıktı:

       user_id  age  sex     occupation  zip_code
    0        1   24    M     technician     85711
    1        2   53    F          other     94043
    2        3   23    M         writer     32067
    3        4   24    M     technician     43537
    4        5   33    F          other     15213
    5        6   42    M      executive     98101
    6        7   57    M  administrator     91344
    7        8   36    M  administrator     05201
    8        9   29    M        student     01002
    9       10   53    M         lawyer     90703
  5. Belirli sütunlarla çalışmak için aşağıdaki yöntemlerden birini kullanın:

    • Bir sütun alt kümesi seçin.

      print(users[['user_id', 'age']].head(5))

      Çıktı:

         user_id  age
      0        1   24
      1        2   53
      2        3   23
      3        4   24
      4        5   33
    • Belirli sütunları hariç tutun.

      print(users.exclude('zip_code', 'age').head(5))

      Çıktı:

         user_id  sex  occupation
      0        1    M  technician
      1        2    F       other
      2        3    M      writer
      3        4    M  technician
      4        5    F       other
    • Sütunları hariç tutun ve hesaplanmış sütunlar ekleyin. Örneğin, sex değeri M ise True, aksi takdirde False olan sex_bool adlı bir boolean sütun oluşturun.

      print(users.select(users.exclude('zip_code', 'sex'), sex_bool=users.sex == 'M').head(5))

      Çıktı:

         user_id  age  occupation  sex_bool
      0        1   24  technician      True
      1        2   53       other     False
      2        3   23      writer      True
      3        4   24  technician      True
      4        5   33       other     False
  6. Erkek ve kadın kullanıcı sayısını hesaplayın.

    print(users.groupby(users.sex).agg(count=users.count()))

    Çıktı:

       sex  count
    0    F    273
    1    M    670
  7. Kullanıcıları mesleğe göre gruplandırın, azalan düzende sıralayın ve en çok kullanılan ilk 10 mesleği görüntüleyin.

    df = users.groupby('occupation').agg(count=users['occupation'].count())
    df1 = df.sort(df['count'], ascending=False)
    print(df1.head(10))

    Çıktı:

          occupation  count
    0        student    196
    1          other    105
    2       educator     95
    3  administrator     79
    4       engineer     67
    5     programmer     66
    6      librarian     51
    7         writer     45
    8      executive     32
    9      scientist     31

    Daha kısa bir sözdizimi için value_counts yöntemini de kullanabilirsiniz. Döndürülen satır sayısı options.df.odps.sort.limit ile sınırlıdır. Daha fazla bilgi için bkz. Configuration.

    df = users.occupation.value_counts()[:10]
    print(df.head(10)) 

    Çıktı:

          occupation  count
    0        student    196
    1          other    105
    2       educator     95
    3  administrator     79
    4       engineer     67
    5     programmer     66
    6      librarian     51
    7         writer     45
    8      executive     32
    9      scientist     31
  8. Üç tabloyu join ile birleştirin ve sonucu pyodps_ml_100k_lens adlı yeni bir tabloya kaydedin.

    movies = DataFrame(o.get_table('pyodps_ml_100k_movies'))
    ratings = DataFrame(o.get_table('pyodps_ml_100k_ratings'))
    o.delete_table('pyodps_ml_100k_lens', if_exists=True)
    lens = movies.join(ratings).join(users).persist('pyodps_ml_100k_lens')
    print(lens.dtypes)

    Çıktı:

    odps.Schema {
      movie_id                          int64       
      title                             string      
      release_date                      string      
      ideo_release_date                 string      
      imdb_url                          string      
      unknown                           int64       
      action                            int64       
      adventure                         int64       
      animation                         int64       
      children                          int64       
      comedy                            int64       
      crime                             int64       
      documentary                       int64       
      drama                             int64       
      fantasy                           int64       
      filmnoir                          int64       
      horror                            int64       
      musical                           int64       
      mystery                           int64       
      romance                           int64       
      scifi                             int64       
      thriller                          int64       
      war                               int64       
      western                           int64       
      user_id                           int64       
      rating                            int64       
      timestamp                         int64       
      age                               int64       
      sex                               string      
      occupation                        string      
      zip_code                          string      
    }

DataFrame veri işleme

İlk olarak Iris veri kümesini indirin. Aşağıdaki adımlarda DataWorks içindeki bir PyODPS düğümü kullanılır. Daha fazla bilgi için bkz. Develop a PyODPS 3 task.

  1. Test veri tablosu oluşturun.

    DataWorks'te bir tablo oluşturun:

    1. Business Flow bölmesinde MaxCompute öğesine sağ tıklayın ve Create Table seçeneğini belirleyin. Create Table iletişim kutusunda bir Path seçin, bir Name girin ve tablo düzenleyicisine gitmek için Create düğmesine tıklayın.

    2. Düzenleme sayfasının sol üst köşesindeki DDL image.png simgesine tıklayın.

    3. Aşağıdaki DDL ifadesini girin ve tabloyu oluşturmak için ifadeyi çalıştırın.

      CREATE TABLE pyodps_iris (
          sepallength double COMMENT 'sepal length (cm)',
          sepalwidth double COMMENT 'sepal width (cm)',
          petallength double COMMENT 'petal length (cm)',
          petalwidth double COMMENT 'petal width (cm)',
          name string COMMENT 'name'
      ) ;
  2. Test verilerini yükleyin.

    1. Yeni tabloya sağ tıklayın, Import Data seçeneğini belirleyin ve indirdiğiniz veri kümesini yüklemek için Next düğmesine tıklayın.

      Import Data iletişim kutusunda Veri Aktarma Yöntemi olarak Upload Local File, Dosya Biçimi olarak CSV seçin. İndirilen iris.csv dosyasını seçin. Sınırlayıcı olarak Comma, Kaynak Karakter Seti olarak GBK ve Başlangıç Satırı olarak 1 ayarlayın. İlk Satır Üst Bilgi İçeriyor mu sorusuna Yes seçeneğini işaretleyin. Veri önizlemesinin doğru olduğunu onayladıktan sonra Next düğmesine tıklayın.

    2. Verileri aktarmak için Match by Position seçeneğine tıklayın.

  3. Business Flow bölmesinde MaxCompute öğesine sağ tıklayın, Create Node seçeneğini belirleyin ve kodunuzu saklamak ve çalıştırmak için bir PyODPS düğümü oluşturmak üzere PyODPS 3 seçeneğini belirleyin.

  4. Kodu girin ve Çalıştır simgesine image.png tıklayın. Kod çalıştıktan sonra sonuçları aşağıdaki Run log sekmesinde görüntüleyebilirsiniz. Kod aşağıdaki gibidir:

    from odps import ODPS
    from odps.df import DataFrame, output
    import os
    # Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set to your Access Key ID,
    # and the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set to your Access Key Secret.
    # We recommend that you avoid hardcoding the Access Key ID and Access Key Secret in your code.
    o = ODPS(
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        project='your-default-project',
        endpoint='your-end-point',
    )
    # Create a DataFrame object named iris from the MaxCompute table.
    iris = DataFrame(o.get_table('pyodps_iris'))
    print(iris.head(10))
    # Print part of the iris DataFrame.
    print(iris.sepallength.head(5))
    # Use a custom function to calculate the sum of two columns in the iris DataFrame.
    print(iris.apply(lambda row: row.sepallength + row.sepalwidth, axis=1, reduce=True, types='float').rename('sepaladd').head(3))
    # Specify the output names and types for the function.
    @output(['iris_add', 'iris_sub'], ['float', 'float'])
    def handle(row):
        # Use the yield keyword to return multiple output rows.
        yield row.sepallength - row.sepalwidth, row.sepallength + row.sepalwidth
        yield row.petallength - row.petalwidth, row.petallength + row.petalwidth
    # Print the first 5 rows of the result. axis=1 indicates a row-by-row operation.
      print(iris.apply(handle, axis=1).head(5))

    Sonuçlar:

    # print(iris.head(10))
       sepallength  sepalwidth  petallength  petalwidth         name
    0          4.9         3.0          1.4         0.2  Iris-setosa
    1          4.7         3.2          1.3         0.2  Iris-setosa
    2          4.6         3.1          1.5         0.2  Iris-setosa
    3          5.0         3.6          1.4         0.2  Iris-setosa
    4          5.4         3.9          1.7         0.4  Iris-setosa
    5          4.6         3.4          1.4         0.3  Iris-setosa
    6          5.0         3.4          1.5         0.2  Iris-setosa
    7          4.4         2.9          1.4         0.2  Iris-setosa
    8          4.9         3.1          1.5         0.1  Iris-setosa
    9          5.4         3.7          1.5         0.2  Iris-setosa
    # print(iris.sepallength.head(5))
       sepallength
    0          4.9
    1          4.7
    2          4.6
    3          5.0
    4          5.4
    # print(iris.apply(lambda row: row.sepallength + row.sepalwidth, axis=1, reduce=True, types='float').rename('sepaladd').head(3))
       sepaladd
    0       7.9
    1       7.9
    2       7.7
    # print(iris.apply(handle,axis=1).head(5))
       iris_add  iris_sub
    0       1.9       7.9
    1       1.2       1.6
    2       1.5       7.9
    3       1.1       1.5
    4       1.5       7.7