مراحل ساده برای تحلیل داده با ChatGPT و پایتون 

مراحل ساده برای تحلیل داده با ChatGPT و پایتون 

نوشته شده توسط: نگین فاتحی
تاریخ انتشار: ۱۸ شهریور ۱۴۰۳
آخرین بروزرسانی: 18 شهریور 1403
زمان مطالعه: 7 دقیقه
۰
(۰)

تحلیل داده با هوش مصنوعی ChatGPT راهی ساده و کاربردی برای ساده‌سازی این فرآیند پیچیده است. داده‌ها در مهندسی داده (Data Engineering) بخش بزرگی از فرآیند علم داده یا “Data Science” را تشکیل می‌دهند. در CRISP-DM، این مرحله فرآیند «آماده‌سازی داده» یا “Data Preparation” نامیده می‌شود. این زمینه شامل وظایفی مانند جذب، تبدیل و تضمین کیفیت داده است. 

دوره آموزش مهندسی داده [Data Engineering] نیک آموز

در مقاله پیش‌رو، ما وظایف معمول مهندسی داده را با استفاده از ChatGPT و پایتون حل خواهیم کرد. هدف ما از این کار، پیوند دو رشته پرطرفدار این روزها است: مهندسی داده و مهندسی پرامپت.

۵ مرحله از مهندسی داده تا مهندسی پرامپت با ChatGPT

در این بخش، پنج مرحله را با یکدیگر طی می‌کنیم تا با کمک مهندسی پرامپت (Prompt Engineering)، آماده‌سازی داده‌ها را ممکن کنیم. ما در این مقاله، از نسخه ۳.۵ ChatGPT استفاده کردیم.

  1. ایجاد یک فریم داده

بیایید در ابتدا، با یک مشکل ساده شروع کنیم. بنابراین Data Frame ساده‌ای را با کمک کتاب‌خانه Pandas پایتون و یک مجموعه داده نمونه ایجاد کنیم. جدول ۱ شاخص‌های ملی است که توسط بانک جهانی آمریکا ارائه شده‌اند.

 

قاره  کشور سال  دسته بندی متغیر مقدار
آسیا چین  ۲۰۲۲ اقتصاد  تولید ناخالص داخلی  ۱۸.۱
آسیا  چین  ۲۰۲۲ جمعیت شناسی جمعیت ۱۴۱۲
آمریکای شمالی  ایالات متحده آمریکا ۲۰۲۲ اقتصاد تولید ناخالص داخلی  ۲۵.۵
آمریکای شمالی ایالات متحده آمریکا ۲۰۲۲ جمعیت شناسی جمعیت ۳۳۳
اروپا آلمان ۲۰۲۲ اقتصاد تولید ناخالص داخلی  ۳.۹
اروپا آلمان ۲۰۲۲ جمعیت شناسی جمعیت ۸۴

 

ایجاد یک فریم داده

 

به‌منظور ایجاد یک فریم داده از نمونه بالا، مکالمه جدیدی را با ChatGPT آغاز می‌کنیم و پرامپت زیر را به او می‌دهیم:

 

Create a Pandas table with the following data:
Continent, Country, Year, Category, Variable, Value
Asia, China, 2022, Economy, GDP, 18.1
Asia, China, 2022, Demographics, Population, 1412
North America, USA, 2022, Economy, GDP, 25.5
North America, USA, 2022, Demographics, Population, 333
Europe, Germany, 2022, Economy, GDP, 3.9
Europe, Germany, 2022, Demographics, Population, 84

 

در پاسخ، این هوش مصنوعی کد پایتون زیر را تولید کرد:

 

import pandas as pd
data = {
   'Continent': ['Asia', 'Asia', 'North America', 'North America', 'Europe', 'Europe'],
   'Country': ['China', 'China', 'USA', 'USA', 'Germany', 'Germany'],
   'Year': [2022, 2022, 2022, 2022, 2022, 2022],
   'Category': ['Economy', 'Demographics', 'Economy', 'Demographics', 'Economy', 'Demographics'],
   'Variable': ['GDP', 'Population', 'GDP', 'Population', 'GDP', 'Population'],
   'Value': [18.1, 1412, 25.5, 333, 3.9, 84]
}
df = pd.DataFrame(data)
print(df)

 

هنگام اجرای اسکریپت، می‌بینیم که خروجی با مشخصات ما مطابقت دارد:

 

ایجاد یک فریم داده

 

با وجود آن‌که ما از نمونه‌ای برای آزمایش خود استفاده کردیم، اما کد تولیدشده در بخش‌های بعدی، در اصل می‌تواند مجموعه داده‌های بزرگ‌تری را مدیریت کند.

  1. تبدیل و خلاصه کردن فریم داده

برای کار در زمینه علم داده، ساختار جدولی که با اولین پرامپت خود ایجاد کردیم، بهینه نیست. در عوض، یک “Flat Table” قابلیت اسکن جدول و درک آن را بالاتر می‌برد. 

در جدول ۱، شاخص‎های «تولید ناخالص داخلی» و «جمعیت»، با دو ستون به نام‌های «متغیر» و «مقدار» نشان داده شده است. در مقابل، همان‌طور که در جدول ۲ می‌بینید، یک Flat Table شامل ستون‌های جداگانه برای هر شاخص خواهد بود.

 

قاره کشور سال تولید ناخالص داخلی جمعیت
آسیا چین ۲۰۲۲ ۱۸.۱ ۱۴۱۲
آمریکای شمالی ایالات متحده آمریکا ۲۰۲۲ ۲۵.۵ ۳۳۳
اروپا آلمان ۲۰۲۲ ۳.۹ ۸۴

 

تبدیل فرمت جدول ۱ به فرمت جدول ۲ “Pivoting” نامیده می‌شود. پس این بخش را هم با ChatGPT انجام می‌دهیم. برای این منظور، ما در گفت‌وگوی خود با این چت‌بات، پیام دوم را به‌شکل زیر نوشتیم:

 

Transform the table into the following format:
Continent, Country, Year, GDP, Population
Asia, China, 2022, 18.1, 1412
North America, USA, 2022, 25.5, 333
Europe, Germany, 2022, 3.9, 84

 

پرامپت بالا براساس نمونه‌ای از فرمت داده‌های مورد نیاز است. در نتیجه درخواست ما، ChatGPT کد پایتون را به‌صورت زیر تنظیم کرد:

 

import pandas as pd
data = {
   'Continent': ['Asia', 'Asia', 'North America', 'North America', 'Europe', 'Europe'],
   'Country': ['China', 'China', 'USA', 'USA', 'Germany', 'Germany'],
   'Year': [2022, 2022, 2022, 2022, 2022, 2022],
   'Category': ['Economy', 'Demographics', 'Economy', 'Demographics', 'Economy', 'Demographics'],
   'Variable': ['GDP', 'Population', 'GDP', 'Population', 'GDP', 'Population'],
   'Value': [18.1, 1412, 25.5, 333, 3.9, 84]
}
df = pd.DataFrame(data)
# Pivot the table
pivot_df = df.pivot_table(index=['Continent', 'Country', 'Year'], columns='Category', values='Value').reset_index()
# Rename the columns
pivot_df.columns.name = None
pivot_df.columns = [column if column != 'Variable' else None for column in pivot_df.columns]
print(pivot_df)

 

این کد به‌نظر درست می‌آید؛ اما با اجرای آن متوجه شدیم که خروجی آن چیزی نیست که ما درخواست کرده بودیم:

 

تبدیل و خلاصه کردن فریم داده

 

به‌جای ستون‌های «تولید ناخالص داخلی» و «جمعیت»، جدول شامل دو ستون به نام‌های «دموگرافیک» و «اقتصاد» است. برای رفع این مشکل، پرامپت بعدی را ارسال کردیم:

 

The columns are not correct, you should have used
the variables GDP and population

 

در پاسخ، ChatGPT اشتباه خود را تصحیح و نسخه دیگری از کد پایتون را به‌شکل زیر تولید کرد:

 

import pandas as pd
data = {
   'Continent': ['Asia', 'Asia', 'North America', 'North America', 'Europe', 'Europe'],
   'Country': ['China', 'China', 'USA', 'USA', 'Germany', 'Germany'],
   'Year': [2022, 2022, 2022, 2022, 2022, 2022],
   'Category': ['Economy', 'Demographics', 'Economy', 'Demographics', 'Economy', 'Demographics'],
   'Variable': ['GDP', 'Population', 'GDP', 'Population', 'GDP', 'Population'],
   'Value': [18.1, 1412, 25.5, 333, 3.9, 84]
}
df = pd.DataFrame(data)
# Pivot the table
pivot_df = df.pivot_table(index=['Continent', 'Country', 'Year'], columns='Variable', values='Value').reset_index()
# Rename the columns
pivot_df.columns.name = None
pivot_df.columns = ['Continent', 'Country', 'Year', 'GDP', 'Population']
print(pivot_df)

 

اجرای این اسکریپت نشان می‌دهد که Pivoting این‌بار به‌درستی انجام شده است؛ چون به خروجی زیر رسیدیم:

 

تبدیل و خلاصه کردن فریم داده

 

  1. غنی‌ سازی فریم داده

یکی دیگر از وظایف معمول مهندسی داده، غنی‌سازی مجموعه داده (Enrich a Dataset) با اطلاعات اضافی است. برای این منظور، ما از ChatGPT خواستیم که کدهای کشور ISO را با ارسال پیام زیر به داده‌های ما اضافه کند:

 

For each country, in the table above, add its ISO code

 

خروجی مدل رضایت‌بخش بود؛ چون پاسخ را تنظیم کرد و قطعه کد زیر را تحویل داد:

 

import pandas as pd
data = {
   'Continent': ['Asia', 'Asia', 'North America', 'North America', 'Europe', 'Europe'],
   'Country': ['China', 'China', 'USA', 'USA', 'Germany', 'Germany'],
   'Year': [2022, 2022, 2022, 2022, 2022, 2022],
   'Category': ['Economy', 'Demographics', 'Economy', 'Demographics', 'Economy', 'Demographics'],
   'Variable': ['GDP', 'Population', 'GDP', 'Population', 'GDP', 'Population'],
   'Value': [18.1, 1412, 25.5, 333, 3.9, 84]
}
iso_codes = {
   'China': 'CN',
   'USA': 'US',
   'Germany': 'DE'
}
df = pd.DataFrame(data)
# Add ISO code column
df['ISO Code'] = df['Country'].map(iso_codes)
# Pivot the table
pivot_df = df.pivot_table(index=['Continent', 'Country', 'ISO Code', 'Year'], columns='Variable', values='Value').reset_index()
# Rename the columns
pivot_df.columns.name = None
pivot_df.columns = ['Continent', 'Country', 'ISO Code', 'Year', 'GDP', 'Population']
print(pivot_df)

 

اجرای اسکریپت نشان می‌دهد که یک ستون جدید، با کدهای ISO به فریم داده اضافه شده است:

 

غنی‌سازی فریم داده

 

  1. استخراج یک ستون

اجازه دهید ستون جدید “GDP per capita” را با تقسیم تولید ناخالص داخلی یک کشور بر جمعیت آن استخراج کنیم. برای انجام این کار، ما این پیام را ارسال کردیم:

 

Derive a new column "GDP per capita" by dividing the GDP
of a country by its population size

 

در پاسخ، مدل کد را به‌صورت زیر اصلاح کرد:

 

import pandas as pd
data = {
   'Continent': ['Asia', 'Asia', 'North America', 'North America', 'Europe', 'Europe'],
   'Country': ['China', 'China', 'USA', 'USA', 'Germany', 'Germany'],
   'Year': [2022, 2022, 2022, 2022, 2022, 2022],
   'Category': ['Economy', 'Demographics', 'Economy', 'Demographics', 'Economy', 'Demographics'],
   'Variable': ['GDP', 'Population', 'GDP', 'Population', 'GDP', 'Population']
   'Value': [18.1, 1412, 25.5, 333, 3.9, 84]
}
iso_codes = {
   'China': 'CN',
   'USA': 'US',
   'Germany': 'DE'
}
df = pd.DataFrame(data)
# Add ISO code column
df['ISO Code'] = df['Country'].map(iso_codes)
# Pivot the table
pivot_df = df.pivot_table(index=['Continent', 'Country', 'ISO Code', 'Year'], columns='Variable', values='Value').reset_index()
# Calculate GDP per capita
pivot_df['GDP per capita'] = pivot_df['GDP'] / pivot_df['Population']
# Rename the columns
pivot_df.columns.name = None
pivot_df.columns = ['Continent', 'Country', 'ISO Code', 'Year', 'GDP', 'Population', 'GDP per capita']
print(pivot_df)

 

با اجرای این کد روی پایتون، خروجی مدنظرمان را به‌شکل زیر گرفتیم:

 

استخراج یک ستون

 

  1. تجزیه‌ و تحلیل داده‌ ها

پس از تکمیل Pivoting و تبدیل داده‌ها، ماجرای اصلی شروع می‌شود: تجزیه‌وتحلیل آن‌ها. اجازه دهید در نهایت ضریب همبستگی بین تولید ناخالص داخلی و جمعیت کشورها را محاسبه کنیم. برای این منظور، آخرین پرامپت را نوشته و به ChatGPT ارسال کردیم:

 

Use the table above to calculate the correlation coefficient between
the GDP and the population of the countries

 

خروجی این پرامپت، قطعه کد زیر شد:

 

import pandas as pd
data = {
   'Continent': ['Asia', 'Asia', 'North America', 'North America', 'Europe', 'Europe'],
   'Country': ['China', 'China', 'USA', 'USA', 'Germany', 'Germany'],
   'Year': [2022, 2022, 2022, 2022, 2022, 2022],
   'Category': ['Economy', 'Demographics', 'Economy', 'Demographics', 'Economy', 'Demographics'],
   'Variable': ['GDP', 'Population', 'GDP', 'Population', 'GDP', 'Population'],
   'Value': [18.1, 1412, 25.5, 333, 3.9, 84]
}
df = pd.DataFrame(data)
# Pivot the table
pivot_df = df.pivot_table(index=['Continent', 'Country', 'Year'], columns='Variable', values='Value').reset_index()
# Calculate correlation coefficient
correlation_coefficient = pivot_df['GDP'].corr(pivot_df['Population'])
print("Correlation Coefficient: {:.3f}".format(correlation_coefficient))

 

با اجرای این اسکریپت پایتون، یک همبستگی مثبت بین دو متغیر پیدا می‌کنیم که نشان از دقت ChatGPT است:

 

تجزیه‌وتحلیل داده‌ها

 

آنچه در تحلیل داده با ChatGPT خواندیم

انجام وظایف علم داده با کمک هوش مصنوعی، بسیار جذاب و دل‌چسب است؛ چون دیگر درگیر وظایف روتین و معمولی نمی‌شویم. بنابراین می‌توانیم روی کارهای پیچیده و تحلیل‌های عمیق زمان بگذاریم و خلاقیت‌مان را دوچندان کنیم. استفاده از ChatGPT برای تحلیل داده در سطوح اولیه راه‌کار مناسبی است؛ اما پیش از به‌کارگیری کدها، باید خودتان دست‌به تست شوید. استفاده از Pylint – تحلیل‌گر کدهای استاتیک پایتون – هنوز هم در عصر هوش مصنوعی ایده خوبی برای به‌کارگیری کدهای تولیدشده AI است. 

شما درباره استفاده از هوش مصنوعی برای زمینه‌های پیچیده مانند علم داده چه فکری می‌کنید؟ تابه‌حال چند درصد از کارهای خودتان را با این مدل‌ها پیش برده‌اید؟ ما پذیرای دیدگاه تخصصی شما در این باره هستیم که می‌توانید در بخش نظرات همین مقاله، آن را با ما و سایر مخاطبان به‌اشتراک بگذارید.

چه رتبه ای می‌دهید؟

میانگین ۰ / ۵. از مجموع ۰

اولین نفر باش

گوش به زنگ یلدا
title sign
معرفی نویسنده
نگین فاتحی
مقالات
35 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
نگین فاتحی

از اسفند 99 مشغول گشت‌وگذار توی دنیای کلمات هستم؛ با این هدف که خوب بنویسم و این چشم‌انداز که کمک‌های موثری کنم. حالا سه‌ ساله که توی زمینه‌های گوناگون بازاریابی آنلاین مطالعه می‌کنم و یکی از حوزه‌های موردعلاقم، رفتارشناسی مخاطبان این فضا هست. دستاوردهای این مطالعه شده نوشتن محتوایی که امیدوارم شما بخونی، لُب‌کلام رو متوجه بشی، لذت ببری و با دست پر صفحه رو ترک کنی؛ شایدم بقیه نوشته‌هام رو بخونی :)

title sign
دیدگاه کاربران