Homeداده کاویمتغیرها و انواع داده در Python | آموزش جامع با مثال

متغیرها و انواع داده در Python | آموزش جامع با مثال

متغیرها و انواع داده در پایتون (Python Variables and Data Types)؛ راهنمای جامع با مثال‌های کاربردی

متغیرها (Variables) و انواع داده (Data Types) از بنیادی‌ترین مفاهیم برنامه‌نویسی Python هستند. هر برنامه برای ذخیره، پردازش و تحلیل اطلاعات به داده نیاز دارد و نوع هر داده مشخص می‌کند چه عملیاتی را می‌توان روی آن انجام داد.

برای مثال، تعداد سفارش‌های یک فروشگاه باید به‌صورت عدد صحیح ذخیره شود، قیمت محصولات معمولاً به نوع عددی اعشاری نیاز دارد، نام مشتری یک مقدار متنی است و وضعیت پرداخت را می‌توان با مقدار منطقی True یا False نمایش داد.

در Python، متغیرها برای ارجاع به اشیای مختلف استفاده می‌شوند و هر شیء یک نوع مشخص دارد. Python از سیستم Dynamic Typing استفاده می‌کند؛ بنابراین لازم نیست هنگام تعریف متغیر، نوع آن را از قبل اعلام کنید.

در این راهنما یاد می‌گیرید:

  • متغیر در Python چیست و چگونه ساخته می‌شود؟
  • تفاوت Variable، Object و Data Type چیست؟
  • انواع داده اصلی Python کدام‌اند؟
  • چگونه نوع یک مقدار را با type() و isinstance() بررسی کنیم؟
  • چگونه نوع داده‌ها را به‌درستی تبدیل کنیم؟
  • تفاوت داده‌های Mutable و Immutable چیست؟
  • نوع داده چه تأثیری بر تحلیل داده با Python و کتابخانه Pandas دارد؟
  • چگونه از خطاهای رایج مربوط به متغیرها و انواع داده جلوگیری کنیم؟

۱. متغیر (Variable) در پایتون چیست؟

متغیر در Python نامی است که به یک شیء (Object) ارجاع می‌دهد. این نام به برنامه‌نویس اجازه می‌دهد در بخش‌های مختلف برنامه به یک مقدار دسترسی داشته باشد و از آن در محاسبات یا عملیات مختلف استفاده کند.

برای مثال:

age = 28
name = "Baraman"
height = 1.78
is_student = True

در این مثال چهار متغیر ساخته‌ایم:

نام متغیرمقدارنوع داده
age28int
name"Baraman"str
height1.78float
is_studentTruebool

درک یک نکته مهم است: در Python، متغیر خودش یک محفظه با نوع ثابت نیست. نام متغیر به یک شیء اشاره می‌کند و نوع به آن شیء تعلق دارد.

نحوه تخصیص مقدار به متغیر

برای تعریف یک متغیر از عملگر انتساب (=) استفاده می‌شود:

variable_name = value

مثال:

sales = 250

در این دستور، نام sales به شیء عددی 250 ارجاع داده می‌شود.

می‌توان مقدار یک متغیر را در ادامه برنامه تغییر داد:

sales = 250
sales = 320

print(sales)

خروجی:

320

در این مثال، نام sales ابتدا به عدد ۲۵۰ و سپس به عدد ۳۲۰ ارجاع داده شده است.

آیا نوع متغیر در Python ثابت است؟

خیر. Python یک زبان با نوع‌دهی پویا (Dynamically Typed Language) است. یعنی یک نام می‌تواند در طول اجرای برنامه به اشیایی با انواع متفاوت ارجاع دهد.

data = 100

print(type(data))

data = "Python"

print(type(data))

خروجی:

<class 'int'>
<class 'str'>

در ابتدا data به یک عدد صحیح اشاره می‌کند و سپس به یک رشته متنی ارجاع داده می‌شود.

این ویژگی انعطاف‌پذیری زیادی ایجاد می‌کند، اما برنامه‌نویس باید هنگام تغییر نوع داده مراقب عملیات ناسازگار باشد.

۲. قواعد نام‌گذاری متغیرها در Python

انتخاب نام مناسب برای متغیرها باعث خوانایی بیشتر کد و کاهش خطاهای برنامه‌نویسی می‌شود.

Python برای نام‌گذاری متغیرها قواعد مشخصی دارد:

۱. نام متغیر باید با یک حرف یا علامت زیرخط (_) شروع شود.

۲. نام متغیر نمی‌تواند با عدد شروع شود.

۳. استفاده از فاصله در نام متغیر مجاز نیست.

۴. حروف، اعداد و علامت زیرخط می‌توانند در ادامه نام استفاده شوند.

۵. نام متغیرها به حروف بزرگ و کوچک حساس است؛ بنابراین age و Age دو نام متفاوت هستند.

۶. کلمات رزروشده Python مانند if، for، class و return را نمی‌توان به‌عنوان نام متغیر استفاده کرد.

مثال:

# Valid variable names
age = 28
user_name = "Ali"
total_sales = 1500
_private_value = 10
product2 = "Laptop"

# Invalid variable names
# 2product = "Laptop"
# user name = "Ali"
# class = "Python"

چرا استفاده از snake_case توصیه می‌شود؟

در Python، سبک رایج نام‌گذاری متغیرها و توابع، snake_case است. در این روش کلمات با علامت زیرخط از یکدیگر جدا می‌شوند.

مثال:

customer_name = "Sara"
monthly_revenue = 25000
average_order_value = 125.75

این نام‌ها از نام‌های مبهمی مانند x، a1 یا value2 خواناتر هستند؛ به‌خصوص در پروژه‌های تحلیل داده که ممکن است ده‌ها یا صدها متغیر داشته باشند.

برای مطالعه استانداردهای نام‌گذاری می‌توانید به راهنمای رسمی PEP 8 – Style Guide for Python Code مراجعه کنید.

۳. انواع داده در Python (Python Data Types)

هر شیء در Python دارای یک نوع مشخص است. نوع داده تعیین می‌کند که چه عملیات و رفتارهایی برای آن شیء تعریف شده‌اند.

انواع داده داخلی Python را می‌توان به چند گروه اصلی تقسیم کرد:

گروهانواع دادهکاربرد
عددی (Numeric)int, float, complexمحاسبات ریاضی و عددی
متنی (Text)strذخیره و پردازش متن
منطقی (Boolean)boolنمایش درست یا نادرست بودن یک شرط
نبود مقدارNoneTypeنمایش نبود یک مقدار
دنباله‌ای (Sequence)list, tuple, rangeنگهداری مجموعه‌ای از مقادیر با ترتیب مشخص
مجموعه‌ای (Set)set, frozensetنگهداری مقادیر یکتا
نگاشت (Mapping)dictذخیره اطلاعات به شکل کلید و مقدار
داده باینری (Binary)bytes, bytearray, memoryviewکار با داده‌های باینری

در ادامه، انواع مهم‌تر را با مثال بررسی می‌کنیم.

۴. انواع داده عددی (Numeric Data Types)

Python سه نوع داده عددی اصلی دارد: int، float و complex.

۴.۱. عدد صحیح (int)

نوع int برای ذخیره اعداد صحیح، بدون بخش اعشاری، استفاده می‌شود.

مثال:

age = 28
number_of_orders = 150
temperature = -5

print(type(age))

خروجی:

<class 'int'>

کاربردهای رایج int عبارت‌اند از:

  • تعداد کاربران یک سامانه
  • تعداد محصولات فروخته‌شده
  • شماره مراحل یک فرایند
  • تعداد دفعات انجام یک عملیات
  • شمارش نمونه‌ها در یک مجموعه داده

مثال در تحلیل داده:

total_orders = 1250
completed_orders = 1180
cancelled_orders = 70

print(total_orders - completed_orders)

خروجی:

70

۴.۲. عدد اعشاری (float)

نوع float برای ذخیره اعداد دارای بخش اعشاری استفاده می‌شود.

مثال:

product_price = 125.75
average_score = 18.65
temperature = 36.8

print(type(product_price))

خروجی:

<class 'float'>

کاربردهای رایج:

  • قیمت محصولات
  • میانگین فروش
  • درصد رشد
  • اندازه‌گیری‌های فیزیکی
  • نتایج محاسبات آماری
  • داده‌های آزمایشگاهی

مثال:

total_sales = 12500.50
number_of_orders = 100

average_order_value = total_sales / number_of_orders

print(average_order_value)

خروجی:

125.005

نکته مهم درباره دقت float: اعداد اعشاری در Python معمولاً با نمایش ممیز شناور دودویی ذخیره می‌شوند. به همین دلیل بعضی مقادیر اعشاری را نمی‌توان دقیقاً نمایش داد.

print(0.1 + 0.2)

خروجی ممکن است چنین باشد:

0.30000000000000004

این رفتار یک ویژگی شناخته‌شده نمایش اعداد ممیز شناور است، نه لزوماً خطای محاسباتی برنامه‌نویس.

برای مقایسه تقریبی اعداد اعشاری می‌توان از math.isclose() استفاده کرد:

import math

result = 0.1 + 0.2

print(math.isclose(result, 0.3))

خروجی:

True

برای محاسبات مالی که به دقت ده‌دهی مشخص نیاز دارند، استفاده از ماژول decimal می‌تواند مناسب‌تر باشد.

from decimal import Decimal

price1 = Decimal("0.10")
price2 = Decimal("0.20")

print(price1 + price2)

خروجی:

0.30

۴.۳. اعداد مختلط (complex)

نوع complex برای نمایش اعداد مختلط استفاده می‌شود. این اعداد شامل بخش حقیقی و موهومی هستند.

z = 3 + 4j

print(type(z))
print(z.real)
print(z.imag)

خروجی:

<class 'complex'>
3.0
4.0

این نوع داده در برخی کاربردهای مهندسی، پردازش سیگنال، ریاضیات و محاسبات علمی اهمیت دارد.

۵. داده متنی (String – str)

نوع str برای ذخیره و پردازش رشته‌های متنی استفاده می‌شود.

رشته می‌تواند شامل حروف، اعداد، فاصله‌ها، علائم نگارشی و کاراکترهای Unicode باشد.

مثال:

name = "Baraman"
city = "Tehran"
product_code = "PRD-1025"

print(type(name))

خروجی:

<class 'str'>

برای تعریف رشته می‌توان از کوتیشن تکی یا دوتایی استفاده کرد:

first_name = 'Ali'
last_name = "Ahmadi"

عملیات رایج روی رشته‌ها

اتصال رشته‌ها (Concatenation):

first_name = "Ali"
last_name = "Ahmadi"

full_name = first_name + " " + last_name

print(full_name)

خروجی:

Ali Ahmadi

تبدیل حروف به بزرگ یا کوچک:

text = "Python Data Analysis"

print(text.upper())
print(text.lower())

دسترسی به بخشی از رشته (Slicing):

language = "Python"

print(language[0])
print(language[0:3])

خروجی:

P
Pyt

استفاده از f-string:

برای ترکیب متن و متغیرها می‌توان از f-string استفاده کرد:

name = "Sara"
age = 25

message = f"{name} is {age} years old."

print(message)

خروجی:

Sara is 25 years old.

آیا عددی که داخل کوتیشن قرار دارد، عدد است؟

خیر. این دو مقدار از نظر نوع داده متفاوت‌اند:

number1 = 100
number2 = "100"

print(type(number1))
print(type(number2))

خروجی:

<class 'int'>
<class 'str'>

مقدار اول عدد صحیح است، اما مقدار دوم یک رشته متنی شامل سه کاراکتر است.

بنابراین:

print(100 + 50)

خروجی:

150

اما:

print("100" + "50")

خروجی:

10050

در حالت دوم، Python دو رشته را به یکدیگر متصل می‌کند؛ جمع عددی انجام نمی‌شود.

۶. نوع داده منطقی (Boolean – bool)

نوع bool فقط دو مقدار ممکن دارد:

  • True: درست
  • False: نادرست

این نوع داده در شرط‌ها، فیلترکردن داده‌ها، کنترل جریان برنامه و تصمیم‌گیری‌های منطقی کاربرد دارد.

مثال:

is_active = True
is_paid = False

print(type(is_active))

خروجی:

<class 'bool'>

عملیات مقایسه‌ای و تولید مقدار Boolean

عملگرهای مقایسه‌ای در Python نتیجه‌ای از نوع bool تولید می‌کنند.

age = 25

print(age > 18)
print(age == 25)
print(age < 18)

خروجی:

True
True
False

عملگرهای مهم مقایسه‌ای:

عملگرمعنی
==برابر با
!=نابرابر با
>بزرگ‌تر از
<کوچک‌تر از
>=بزرگ‌تر یا مساوی
<=کوچک‌تر یا مساوی

کاربرد Boolean در تحلیل داده

فرض کنید می‌خواهیم مشخص کنیم کدام سفارش‌ها پرداخت شده‌اند:

order_price = 250
minimum_price = 200

is_eligible = order_price >= minimum_price

print(is_eligible)

خروجی:

True

مقدار Boolean می‌تواند برای فیلترکردن داده‌ها در Pandas نیز استفاده شود؛ برای مثال، انتخاب تمام سفارش‌هایی که ارزش آن‌ها بیشتر از یک مقدار مشخص است.

۷. مقدار None در Python چیست؟

None یک مقدار ویژه در Python است که برای نمایش نبود مقدار (Absence of a Value) استفاده می‌شود.

نوع آن NoneType است و تنها یک مقدار از این نوع وجود دارد: None.

مثال:

result = None

print(result)
print(type(result))

خروجی:

None
<class 'NoneType'>

کاربردهای رایج None عبارت‌اند از:

  • زمانی که هنوز مقداری برای یک متغیر تعیین نشده است.
  • زمانی که یک تابع مقدار مشخصی برنمی‌گرداند.
  • زمانی که یک نتیجه یا داده در دسترس نیست.
  • زمانی که نبود مقدار باید به‌صورت صریح نمایش داده شود.

مثال:

user_email = None

if user_email is None:
    print("Email is not available.")

خروجی:

Email is not available.

تفاوت None با صفر و رشته خالی

این مقادیر یکسان نیستند:

value1 = None
value2 = 0
value3 = ""
value4 = False
مقدارمفهومنوع داده
Noneنبود مقدارNoneType
0عدد صفرint
""رشته خالیstr
Falseمقدار منطقی نادرستbool

در برنامه‌نویسی و تحلیل داده، اشتباه‌گرفتن این مقادیر می‌تواند باعث نتیجه‌گیری نادرست شود.

برای بررسی None معمولاً از is None استفاده می‌کنیم:

if value1 is None:
    print("Missing value")

۸. ساختارهای داده در Python: List، Tuple، Dictionary و Set

علاوه بر انواع پایه، Python ساختارهایی برای نگهداری مجموعه‌ای از داده‌ها ارائه می‌دهد. چهار ساختار مهم آن list، tuple، dict و set هستند.

۸.۱. لیست (List)

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

sales = [120, 150, 180, 210]

sales.append(250)

print(sales)

خروجی:

[120, 150, 180, 210, 250]

دسترسی به عناصر:

print(sales[0])
print(sales[-1])

خروجی:

120
250

کاربردهای List:

  • ذخیره مقادیر فروش روزانه
  • نگهداری نمرات دانشجویان
  • ذخیره مجموعه‌ای از نام مشتریان
  • جمع‌آوری نتایج یک آزمایش

۸.۲. تاپل (Tuple)

تاپل نیز یک مجموعه مرتب از مقادیر است، اما برخلاف List تغییرناپذیر (Immutable) است.

coordinates = (35.6892, 51.3890)

print(coordinates[0])

خروجی:

35.6892

پس از ایجاد Tuple نمی‌توان عناصر آن را مستقیماً تغییر داد:

coordinates = (35.6892, 51.3890)

# This will raise TypeError:
# coordinates[0] = 40.0

Tuple برای نگهداری مجموعه‌هایی از مقادیر که نباید از طریق عملیات معمول تغییر کنند، مناسب است.

نکته: تغییرناپذیری Tuple به معنی تغییرناپذیری تمام اشیای داخل آن نیست. اگر یک Tuple شامل یک List باشد، خود List همچنان می‌تواند تغییر کند.

۸.۳. دیکشنری (Dictionary)

Dictionary داده‌ها را به شکل جفت‌های کلید و مقدار (Key-Value Pairs) ذخیره می‌کند.

مثال:

customer = {
    "name": "Sara",
    "age": 28,
    "city": "Tehran",
    "is_active": True
}

print(customer["name"])

خروجی:

Sara

برای تغییر مقدار یک کلید:

customer["age"] = 29

برای اضافه‌کردن یک کلید جدید:

customer["email"] = "sara@example.com"

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

۸.۴. مجموعه (Set)

Set مجموعه‌ای از مقادیر یکتا است؛ یعنی مقادیر تکراری در آن نگهداری نمی‌شوند.

numbers = {1, 2, 3, 3, 4, 4, 5}

print(numbers)

خروجی:

{1, 2, 3, 4, 5}

یکی از کاربردهای مهم Set حذف مقادیر تکراری و انجام عملیات مجموعه‌ای است.

group_a = {1, 2, 3, 4}
group_b = {3, 4, 5, 6}

print(group_a.intersection(group_b))
print(group_a.union(group_b))

خروجی:

{3, 4}
{1, 2, 3, 4, 5, 6}

۹. چگونه نوع داده را در Python بررسی کنیم؟

دو ابزار مهم برای بررسی نوع داده، تابع‌های type() و isinstance() هستند.

تابع type()

تابع type() نوع دقیق یک شیء را برمی‌گرداند.

age = 28
price = 125.75
name = "Python"
is_active = True

print(type(age))
print(type(price))
print(type(name))
print(type(is_active))

خروجی:

<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>

تابع isinstance()

تابع isinstance() بررسی می‌کند که آیا یک شیء از یک نوع مشخص یا زیرنوع آن است یا خیر.

age = 28

print(isinstance(age, int))
print(isinstance(age, str))

خروجی:

True
False

برای بررسی چند نوع احتمالی نیز می‌توان از Tuple استفاده کرد:

value = 25.5

if isinstance(value, (int, float)):
    print("Numeric value")

تفاوت مهم: type() نوع دقیق شیء را نشان می‌دهد، اما isinstance() برای بررسی سازگاری نوع و وراثت نیز مناسب است.

برای مثال، در Python نوع bool زیرنوعی از int است:

print(isinstance(True, int))

خروجی:

True

به همین دلیل اگر می‌خواهید صرفاً مقدارهای Boolean را از اعداد جدا کنید، باید این رفتار را در طراحی بررسی نوع در نظر بگیرید.

۱۰. تبدیل نوع داده در Python (Type Casting)

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

تبدیل نوع داده (Type Conversion یا Type Casting) معمولاً با تابع‌هایی مانند موارد زیر انجام می‌شود:

تابعکاربردمثال
int()تبدیل به عدد صحیحint("25")
float()تبدیل به عدد اعشاریfloat("12.5")
str()تبدیل به رشتهstr(100)
bool()تبدیل به مقدار منطقیbool(1)
list()تبدیل به لیستlist((1, 2))
tuple()تبدیل به تاپلtuple([1, 2])
set()تبدیل به مجموعهset([1, 1, 2])

مثال تبدیل رشته به عدد صحیح

age = "28"

age = int(age)

print(age)
print(type(age))

خروجی:

28
<class 'int'>

مثال تبدیل رشته به عدد اعشاری

price = "125.75"

price = float(price)

print(price)

خروجی:

125.75

مثال تبدیل عدد به رشته

product_id = 1025

product_id = str(product_id)

print(type(product_id))

خروجی:

<class 'str'>

آیا همه مقادیر قابل تبدیل هستند؟

خیر. تبدیل نوع داده ممکن است با خطا مواجه شود.

value = "twenty"

number = int(value)

خروجی:

ValueError

دلیل آن است که رشته "twenty" نمایش عددی قابل‌تبدیلی برای تابع int() نیست.

برای جلوگیری از توقف ناخواسته برنامه، می‌توان خطای تبدیل را مدیریت کرد:

user_input = "twenty"

try:
    number = int(user_input)
    print(number)

except ValueError:
    print("Please enter a valid integer.")

خروجی:

Please enter a valid integer.

نکته: تبدیل نوع باید بر اساس معنای داده انجام شود، نه صرفاً ظاهر آن. برای مثال، کد پستی 02145 ممکن است از ارقام تشکیل شده باشد، اما یک شناسه است و نباید مانند یک عدد معمولی با آن رفتار کرد.

۱۱. تفاوت Mutable و Immutable در Python

یکی از مفاهیم مهم در Python، تفاوت اشیای تغییرپذیر (Mutable) و تغییرناپذیر (Immutable) است.

  • Mutable: شیء پس از ایجاد می‌تواند بدون ساخت یک شیء جدید، تغییر کند.
  • Immutable: مقدار شیء پس از ایجاد قابل تغییر نیست؛ عملیات ظاهراً تغییردهنده معمولاً شیء جدیدی ایجاد می‌کند.
نوع دادهوضعیت تغییرپذیری
intImmutable
floatImmutable
boolImmutable
strImmutable
tupleImmutable
listMutable
dictMutable
setMutable
frozensetImmutable

مثال: تغییرپذیری List

numbers = [10, 20, 30]

numbers[0] = 100

print(numbers)

خروجی:

[100, 20, 30]

لیست تغییر کرده است.

مثال: تغییرناپذیری String

text = "Python"

# This operation is invalid:
# text[0] = "J"

این دستور خطای TypeError ایجاد می‌کند؛ زیرا رشته‌ها تغییرناپذیر هستند.

چرا Mutable و Immutable اهمیت دارند؟

این تفاوت هنگام کار با چند متغیر که به یک شیء مشترک ارجاع می‌دهند اهمیت زیادی دارد.

list_a = [1, 2, 3]

list_b = list_a

list_b.append(4)

print(list_a)
print(list_b)

خروجی:

[1, 2, 3, 4]
[1, 2, 3, 4]

هر دو نام به یک List مشترک ارجاع می‌دهند؛ بنابراین تغییر آن از طریق list_b در list_a نیز قابل مشاهده است.

اگر به یک کپی مستقل نیاز دارید:

list_a = [1, 2, 3]

list_b = list_a.copy()

list_b.append(4)

print(list_a)
print(list_b)

خروجی:

[1, 2, 3]
[1, 2, 3, 4]

این موضوع در پردازش مجموعه‌های داده، توابع و پروژه‌های بزرگ Python اهمیت عملی دارد.

۱۲. تفاوت = و == در Python چیست؟

این دو علامت از نظر کاربرد کاملاً متفاوت‌اند:

  • = عملگر انتساب (Assignment Operator) است.
  • == عملگر مقایسه برابری (Equality Operator) است.

مثال:

age = 25

print(age == 25)

خروجی:

True

در خط اول مقدار ۲۵ به نام age اختصاص داده شده است. در خط دوم بررسی می‌شود که آیا مقدار age برابر با ۲۵ است یا خیر.

همچنین is با == تفاوت دارد:

  • == برابری مقدارها را بررسی می‌کند.
  • is بررسی می‌کند که دو ارجاع به یک شیء واحد اشاره می‌کنند یا خیر.

برای بررسی None معمولاً باید از is None استفاده کرد.

۱۳. نقش انواع داده در تحلیل داده با Python

شناخت انواع داده فقط برای نوشتن برنامه‌های ساده اهمیت ندارد؛ بلکه یکی از مراحل ضروری در تحلیل داده (Data Analysis) است.

در پروژه‌های واقعی، داده‌ها ممکن است از فایل‌های CSV، Excel، پایگاه داده، API یا سامانه‌های سازمانی دریافت شوند. نوع داده‌ای که هنگام ورود به برنامه ثبت می‌شود، همیشه با معنای واقعی آن مطابقت ندارد.

برای مثال، ممکن است ستون قیمت در یک فایل CSV به‌صورت متن خوانده شود؛ درحالی‌که برای محاسبه میانگین یا مجموع فروش باید عددی باشد.

مثال: مشکل نوع داده در تحلیل فروش

فرض کنید اطلاعات زیر را دریافت کرده‌ایم:

sales = ["100", "200", "300"]

print(type(sales[0]))

خروجی:

<class 'str'>

این مقادیر رشته هستند. برای محاسبه مجموع فروش باید آن‌ها را به نوع عددی تبدیل کنیم:

sales = ["100", "200", "300"]

numeric_sales = [int(value) for value in sales]

total_sales = sum(numeric_sales)

print(total_sales)

خروجی:

600

چرا کد پستی و شناسه نباید لزوماً عدد باشند؟

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

اما باید بین داده عددی (Numeric Data) و شناسه (Identifier) تفاوت قائل شد.

برای مثال:

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

برای نمونه، تبدیل کد پستی "02145" به عدد 2145 باعث از دست رفتن صفر ابتدایی می‌شود. بنابراین انتخاب نوع داده باید بر اساس معنای واقعی ستون صورت گیرد.

۱۴. بررسی انواع داده در Pandas

کتابخانه Pandas یکی از ابزارهای اصلی تحلیل داده در Python است. هنگام کار با DataFrame، نوع داده هر ستون اهمیت زیادی دارد؛ زیرا بر محاسبات، فیلترکردن، ذخیره‌سازی و مدیریت مقادیر گمشده اثر می‌گذارد.

ابتدا کتابخانه را وارد می‌کنیم:

import pandas as pd

data = {
    "product": ["Laptop", "Mouse", "Keyboard"],
    "price": [1200.50, 25.75, 45.00],
    "quantity": [5, 20, 10],
    "available": [True, True, False]
}

df = pd.DataFrame(data)

بررسی نوع داده ستون‌ها با dtypes

print(df.dtypes)

خروجی:

product        object
price         float64
quantity        int64
available        bool
dtype: object

ویژگی dtypes نوع داده هر ستون را نمایش می‌دهد.

بررسی اطلاعات کلی DataFrame

df.info()

این دستور اطلاعاتی مانند تعداد ردیف‌ها، تعداد ستون‌ها، نوع داده ستون‌ها و تعداد مقادیر غیرگمشده را نمایش می‌دهد.

تبدیل نوع داده با astype()

اگر نوع یک ستون مشخص باشد و تبدیل موردنظر معتبر باشد، می‌توان از astype() استفاده کرد:

df["quantity"] = df["quantity"].astype("float64")

برای تبدیل یک ستون متنی به عدد، در صورت معتبر بودن مقادیر، می‌توان نوشت:

df["price"] = df["price"].astype(float)

استفاده از pd.to_numeric()

اگر داده‌ها ممکن است شامل مقدارهای نامعتبر باشند، تابع pd.to_numeric() ابزار مناسب‌تری برای تبدیل و کنترل خطا است.

df = pd.DataFrame({
    "price": ["100", "250", "invalid", "400"]
})

df["price"] = pd.to_numeric(
    df["price"],
    errors="coerce"
)

print(df)

خروجی:

   price
0  100.0
1  250.0
2    NaN
3  400.0

با تنظیم errors="coerce"، مقادیر غیرقابل‌تبدیل به مقدار گمشده NaN تبدیل می‌شوند.

این روش باید با دقت استفاده شود؛ زیرا اگر داده نامعتبر ناشی از اشتباه در منبع داده باشد، تبدیل آن به مقدار گمشده می‌تواند اطلاعات مربوط به مشکل را پنهان کند. بهتر است تعداد و محل مقادیر نامعتبر نیز بررسی شود.

تفاوت None، NaN و pd.NA در Pandas

در تحلیل داده، مفهوم مقدار گمشده (Missing Value) اهمیت زیادی دارد.

در Python و Pandas چند نمایش رایج برای نبود مقدار وجود دارد:

  • None: مقدار ویژه Python برای نبود مقدار.
  • NaN: مقدار ویژه رایج برای نمایش داده عددی ناموجود.
  • pd.NA: نشانگر مقدار گمشده در انواع داده Nullable در Pandas.

این مقادیر از نظر نوع و رفتار یکسان نیستند. برای بررسی مقدارهای گمشده در DataFrame معمولاً از این دستور استفاده می‌شود:

df.isna()

برای شمارش مقدارهای گمشده در هر ستون:

df.isna().sum()

مستندات رسمی Pandas درباره Missing Data تفاوت این نمایش‌ها و نحوه مدیریت آن‌ها را توضیح می‌دهد.

۱۵. Type Hint در Python چیست؟

اگرچه Python برای تعریف متغیرها به اعلام نوع داده نیاز ندارد، می‌توان از Type Hint یا Type Annotation برای مشخص‌کردن نوع مورد انتظار استفاده کرد.

مثال:

age: int = 28

name: str = "Sara"

price: float = 125.75

is_active: bool = True

Type Hint به خوانایی کد کمک می‌کند و ابزارهایی مانند mypy و ویرایشگرهای برنامه‌نویسی می‌توانند از آن برای شناسایی برخی ناسازگاری‌های احتمالی استفاده کنند.

اما نکته مهم این است که Type Hint به‌صورت پیش‌فرض مقدار را در زمان اجرا تبدیل یا اعتبارسنجی نمی‌کند.

مثال:

age: int = "twenty"

Python در حالت عادی صرفاً به دلیل این annotation الزاماً خطا ایجاد نمی‌کند؛ زیرا Type Hint به‌تنهایی یک سیستم اعتبارسنجی اجباری در زمان اجرا نیست.

برای مطالعه بیشتر به Python Documentation – typing مراجعه کنید.

۱۶. اشتباهات رایج درباره متغیرها و انواع داده در Python

در پروژه‌های آموزشی و عملی، برخی خطاها بارها تکرار می‌شوند.

اشتباهعلتراهکار
جمع دو عدد به‌صورت متنمقادیر از نوع str هستندبررسی و تبدیل نوع داده
تبدیل کد پستی به عددتوجه‌نکردن به معنای دادهنگهداری شناسه‌ها به‌صورت رشته
استفاده از نام‌های مبهمنام‌گذاری ضعیفاستفاده از نام‌های توصیفی
اشتباه‌گرفتن None و 0درک نادرست مقدار گمشدهبررسی صریح None
تغییر ناخواسته یک List از طریق متغیر دیگرارجاع دو نام به یک شیءاستفاده از کپی مناسب
فرض اینکه Type Hint نوع را تحمیل می‌کنددرک نادرست annotationاعتبارسنجی جداگانه ورودی
تبدیل بدون بررسی داده‌های نامعتبراستفاده نادرست از Type Castingمدیریت خطا و بررسی مقادیر

۱۷. یک مثال عملی: ساخت و تحلیل داده‌های فروش

برای ترکیب مفاهیم این مقاله، یک مجموعه داده کوچک از سفارش‌های فروش ایجاد می‌کنیم.

import pandas as pd

orders = {
    "order_id": ["A101", "A102", "A103", "A104"],
    "customer": ["Ali", "Sara", "Reza", "Mina"],
    "price": ["120.50", "250.00", "invalid", "180.00"],
    "quantity": [2, 1, 3, 2],
    "is_paid": [True, True, False, True]
}

df = pd.DataFrame(orders)

# Convert price to numeric
df["price"] = pd.to_numeric(
    df["price"],
    errors="coerce"
)

# Calculate order value
df["total_value"] = df["price"] * df["quantity"]

# Inspect data types
print(df.dtypes)

# Calculate total sales
print(df["total_value"].sum())

در این مثال:

  1. order_id و customer از نوع متنی هستند.
  2. price ابتدا به‌صورت رشته وارد شده است.
  3. pd.to_numeric() قیمت‌ها را به مقادیر عددی تبدیل می‌کند.
  4. مقدار نامعتبر به NaN تبدیل می‌شود.
  5. quantity یک مقدار عددی صحیح است.
  6. is_paid وضعیت پرداخت را با Boolean نشان می‌دهد.
  7. ستون total_value ارزش هر سفارش را محاسبه می‌کند.

نکته تحلیلی مهم: در این مثال، مجموع فروش بر اساس مقادیر معتبر محاسبه می‌شود و سفارش دارای قیمت نامعتبر در محاسبه عددی وارد نمی‌شود. در یک پروژه واقعی، پیش از گزارش نهایی باید تعداد سفارش‌های دارای قیمت نامعتبر و اثر حذف آن‌ها بر نتایج بررسی شود.

۱۸. جمع‌بندی: چرا شناخت متغیرها و انواع داده ضروری است؟

متغیرها و انواع داده پایه اصلی برنامه‌نویسی Python و یکی از پیش‌نیازهای مهم تحلیل داده هستند.

در این مقاله آموختیم که:

  • متغیر نامی برای ارجاع به یک شیء است.
  • هر شیء در Python دارای نوع داده مشخصی است.
  • Python از Dynamic Typing استفاده می‌کند.
  • انواع داده اصلی شامل int، float، complex، str، bool و NoneType هستند.
  • ساختارهای list، tuple، dict و set برای نگهداری مجموعه داده‌ها کاربرد دارند.
  • type() و isinstance() برای بررسی نوع داده استفاده می‌شوند.
  • توابعی مانند int()، float() و str() برای تبدیل نوع داده به کار می‌روند.
  • تفاوت Mutable و Immutable بر نحوه مدیریت اشیا و تغییر داده‌ها اثر می‌گذارد.
  • در تحلیل داده با Pandas باید نوع هر ستون بر اساس معنای واقعی آن انتخاب شود.

اصل مهم در تحلیل داده: پیش از انجام محاسبات، نوع و معنای هر متغیر را بررسی کنید. صرفاً عددی‌بودن ظاهر یک مقدار به این معنی نیست که باید به‌عنوان داده عددی با آن رفتار شود.

در ادامه مسیر یادگیری Python، آشنایی عمیق‌تر با عملگرها، شرط‌ها، حلقه‌ها، توابع و ساختارهای داده به شما کمک می‌کند برنامه‌های کاربردی‌تر و قابل‌اعتمادتری بنویسید.

پرسش‌های متداول (FAQ)

۱. متغیر در Python چیست؟

متغیر در Python نامی است که به یک شیء در حافظه ارجاع می‌دهد. با استفاده از متغیر می‌توان به داده دسترسی داشت و آن را در بخش‌های مختلف برنامه استفاده کرد.

۲. انواع داده اصلی در Python کدام‌اند؟

انواع داده اصلی Python شامل int برای اعداد صحیح، float برای اعداد اعشاری، complex برای اعداد مختلط، str برای متن، bool برای مقادیر منطقی و NoneType برای مقدار None هستند.

۳. آیا Python یک زبان با نوع‌دهی پویا است؟

بله. Python از Dynamic Typing استفاده می‌کند. بنابراین هنگام تعریف متغیر نیازی به اعلام نوع آن نیست و یک نام می‌تواند در زمان اجرا به اشیایی با انواع متفاوت ارجاع دهد.

۴. چگونه نوع یک متغیر را در Python بفهمیم؟

با استفاده از تابع type() می‌توان نوع دقیق شیء را بررسی کرد:

value = 25

print(type(value))

برای بررسی سازگاری یک شیء با یک نوع مشخص می‌توان از isinstance() استفاده کرد.

۵. تفاوت int و float چیست؟

int برای اعداد صحیح مانند 25 و 100 استفاده می‌شود، درحالی‌که float برای اعداد دارای بخش اعشاری مانند 25.5 و 100.75 کاربرد دارد.

۶. تفاوت str و int چیست؟

str برای ذخیره متن و int برای ذخیره اعداد صحیح استفاده می‌شود. برای مثال، 100 یک عدد صحیح است، اما "100" یک رشته متنی است.

۷. چگونه یک رشته را به عدد تبدیل کنیم؟

برای تبدیل رشته به عدد صحیح از int() و برای تبدیل به عدد اعشاری از float() استفاده می‌شود:

number1 = int("100")
number2 = float("12.5")

البته رشته باید قالب عددی معتبر داشته باشد.

۸. تفاوت None و False چیست؟

None نشان‌دهنده نبود مقدار است، اما False یک مقدار منطقی است که نشان می‌دهد یک شرط نادرست است. این دو از نظر نوع و مفهوم متفاوت‌اند.

۹. تفاوت List و Tuple چیست؟

هر دو برای نگهداری مجموعه‌ای مرتب از مقادیر استفاده می‌شوند؛ اما List تغییرپذیر است و Tuple تغییرناپذیر. بنابراین List برای مجموعه‌هایی که نیاز به تغییر دارند و Tuple برای مجموعه‌هایی که قرار است ثابت بمانند مناسب است.

۱۰. آیا کد پستی باید از نوع int باشد؟

معمولاً خیر. کد پستی، شماره تلفن و شناسه‌ها اغلب باید به‌صورت str ذخیره شوند؛ زیرا ماهیت آن‌ها شناسایی است، نه محاسبه ریاضی. تبدیل آن‌ها به عدد ممکن است صفرهای ابتدایی را حذف کند.

۱۱. چگونه نوع داده ستون‌های یک DataFrame را بررسی کنیم؟

در Pandas می‌توان از ویژگی dtypes برای مشاهده نوع داده ستون‌ها و از متد info() برای دریافت اطلاعات کلی DataFrame استفاده کرد.

df.dtypes
df.info()

۱۲. آیا Type Hint نوع متغیر را در زمان اجرا کنترل می‌کند؟

خیر. Type Hint عمدتاً برای مستندسازی، خوانایی کد و کمک به ابزارهای بررسی ایستا (Static Type Checkers) استفاده می‌شود. برای اعتبارسنجی واقعی داده‌های ورودی باید منطق جداگانه تعریف شود.

منابع و مستندات معتبر

برای یادگیری عمیق‌تر متغیرها و انواع داده در Python، منابع رسمی زیر پیشنهاد می‌شوند:

۱. Python Documentation – Built-in Types
مستندات رسمی انواع داده داخلی Python، شامل اعداد، رشته‌ها، Boolean و ساختارهای داده.
https://docs.python.org/3/library/stdtypes.html

۲. Python Documentation – Data Model
توضیح مفاهیم Object، Type، Identity و مدل داده در Python.
https://docs.python.org/3/reference/datamodel.html

۳. Python Tutorial – Data Structures
راهنمای رسمی ساختارهای داده مانند List، Tuple و Dictionary.
https://docs.python.org/3/tutorial/datastructures.html

۴. Python Documentation – typing
مستندات رسمی Type Hint و Type Annotation.
https://docs.python.org/3/library/typing.html

۵. PEP 8 – Style Guide for Python Code
راهنمای استاندارد نام‌گذاری متغیرها و سبک نوشتن کد Python.
https://peps.python.org/pep-0008/

۶. Pandas Documentation – Essential Basic Functionality
راهنمای کار با DataFrame و قابلیت‌های پایه Pandas.
https://pandas.pydata.org/docs/user_guide/basics.html

۷. Pandas Documentation – Working with Missing Data
راهنمای مدیریت مقادیر گمشده و تفاوت None، NaN و pd.NA.
https://pandas.pydata.org/docs/user_guide/missing_data.html

۸. Pandas API – to_numeric()
مستندات تبدیل داده‌ها به نوع عددی و مدیریت مقادیر غیرقابل‌تبدیل.
https://pandas.pydata.org/docs/reference/api/pandas.to_numeric.html

Share: 

No comments yet! You be the first to comment.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *