✳️ بخش سوم، آموزش EDA (تحلیل اکتشافی داده ها) و آمار (آمار توصیفی و آمار تفسیری)
———————————————————————-
🔸 رسم نمودار scatter matrix روی ستون ها و بررسی اونها دو به دو با همدیگر:
🔹 رسم نمودار histogram روی ستون مورد نظر (نمودار فراوانی در هر دسته):
▫️ رسم نمودار histogram روی کل دیتافریم:
🟣 انجام تحلیل های مربوط به آمار توصیفی روی داده های پروازی)
🔻 بدست آوردن میانگین تاخیر در رسیدن به مقصد:
▫️ یکی از مشکلات اساسی میانگین، داده های outlier یا پرت هستند که میانگین رو به سمت خودشون میکشند. داده outlier باعث میشه که باقی داده ها نزدیک به همدیگر نباشند.
🟠 روش های مقابله با داده های outlier)
- میانگین اصلاح شده (Trimmed Mean): به عنوان مثال، ده درصد بالای داده ها و ده درصد پایین داده ها از لحاظ تعداد رو حذف کن، و از 80 درصد وسط داده ها میانگین بگیر. کد Trimmed Mean در پکیج Scipy موجود است. (Scipy یک پکیج است که روی مباحث آماری کار میکند و توابع آماری فراوانی درون خود دارد.)
- میتونیم از median هم استفاده کنیم. median داده هارو از کوچک به بزرگ sort میکنه و عدد وسط داده ها که نصف داده ها ازون بیشتر و نصف داده ها ازون کمتر هستن رو بهمون میده.
- تابع mode مشخص میکنه کدام مقدار بیشترین تکرار رو داشته.
- تابع واریانس (هر عدد رو منهای میانگین میکنه، و به توان دو میرسونه. سپس همرو با هم جمع میکنه و تقسیم بر تعداد میکنه).
🟢 قانون Three Sigma: اگر نمودار histogram نرمال باشد (یعنی در مرکز تعداد زیاد است و هرچقدر از مرکز فاصله بگیریم، تعداد در هر دو طرف مرکز بصورت متقارن کم و کمتر میشود)، داریم:
🔺 68 درصد داده ها در یک برابری انحراف استاندارد کمتر تا یک برابری انحراف استاندارد بیشتر قرار دارند. (یعنی اگر میانگین رو منهای انحراف استاندارد کنیم، تا میانگین رو به علاوه انحراف استاندارد کنیم، 68 درصد داده ها در اون محدوده قرار دارند).
🔺 95 درصد داده ها در محدوده دو برابری انحراف استاندارد کمتر تا دو برابری انحراف استاندارد بیشتر قرار دارند.
🔺 99.73 درصد داده ها در محدوده سه برابری انحراف استاندارد کمتر، تا سه برابری انحراف استاندارد بیشتر قرار دارند.
🔹 یکی از کاربردهای خوب Three Sigma حذف راحت داده های نویز میباشد. به عنوان مثال میتونیم بگیم داده هایی که در بازه سه برابری انحراف استاندارد کمتر و سه برابری انحراف استاندارد بیشتر نیفتادن رو حذف کن.
▫️اگر دُم نمودار histogram به سمت راست بیشتر باشه، میگن چولگی مثبت یا چولگی به راست داره و بالعکس.
🔸 محسابه چولگی (skewness) ستون موردنظر:
🔹 محاسبه تیزی قله (Kurtosis):
———————————————————————-
🔸 رسم نمودار scatter matrix روی ستون ها و بررسی اونها دو به دو با همدیگر:
pd.plotting.scatter_matrix(
df[["age", "duration", "campaign"]],
figsize = (15, 15),
diagonal = "kde")
plt.show
🔹 رسم نمودار histogram روی ستون مورد نظر (نمودار فراوانی در هر دسته):
df["age"].hist()
▫️ رسم نمودار histogram روی کل دیتافریم:
df.hist(color = "k",
bins = 30,
figsize = (15, 10))
plt.show()
مقدار بین مشخص میکند اطلاعات به چند قسمت مساوی تقسیم بشوند.
🟣 انجام تحلیل های مربوط به آمار توصیفی روی داده های پروازی)
🔻 بدست آوردن میانگین تاخیر در رسیدن به مقصد:
data["arr_delay"].mean()
▫️ یکی از مشکلات اساسی میانگین، داده های outlier یا پرت هستند که میانگین رو به سمت خودشون میکشند. داده outlier باعث میشه که باقی داده ها نزدیک به همدیگر نباشند.
🟠 روش های مقابله با داده های outlier)
- میانگین اصلاح شده (Trimmed Mean): به عنوان مثال، ده درصد بالای داده ها و ده درصد پایین داده ها از لحاظ تعداد رو حذف کن، و از 80 درصد وسط داده ها میانگین بگیر. کد Trimmed Mean در پکیج Scipy موجود است. (Scipy یک پکیج است که روی مباحث آماری کار میکند و توابع آماری فراوانی درون خود دارد.)
from scipy import stats
stats.trim_mean(data["arr_delay"], 0.1)
- میتونیم از median هم استفاده کنیم. median داده هارو از کوچک به بزرگ sort میکنه و عدد وسط داده ها که نصف داده ها ازون بیشتر و نصف داده ها ازون کمتر هستن رو بهمون میده.
data["arr_delay"].median()
نکته مهم: median نسبت به داده های نویز مقاوم هست.
- تابع mode مشخص میکنه کدام مقدار بیشترین تکرار رو داشته.
data["arr_delay"].mode()
- تابع واریانس (هر عدد رو منهای میانگین میکنه، و به توان دو میرسونه. سپس همرو با هم جمع میکنه و تقسیم بر تعداد میکنه).
data["arr_delay"].var()
تابع واریانس دو مشکل دارد. یک اینکه به داده های نویز حساس است و دوم اینکه از جنس داده ها نیست چون به توان دو رسیده. اگر ازش جذر (رادیکال) بگیریم مقدار درست میشه و درواقع به اون مقدار رادیکال گرفته شده میگن انحراف استاندارد.
data["arr_delay"].std() ---> واریانسی که رادیکال گرفته روش
انحراف استاندارد: میانگین اختلاف داده ها نسبت به میانگین
🟢 قانون Three Sigma: اگر نمودار histogram نرمال باشد (یعنی در مرکز تعداد زیاد است و هرچقدر از مرکز فاصله بگیریم، تعداد در هر دو طرف مرکز بصورت متقارن کم و کمتر میشود)، داریم:
🔺 68 درصد داده ها در یک برابری انحراف استاندارد کمتر تا یک برابری انحراف استاندارد بیشتر قرار دارند. (یعنی اگر میانگین رو منهای انحراف استاندارد کنیم، تا میانگین رو به علاوه انحراف استاندارد کنیم، 68 درصد داده ها در اون محدوده قرار دارند).
🔺 95 درصد داده ها در محدوده دو برابری انحراف استاندارد کمتر تا دو برابری انحراف استاندارد بیشتر قرار دارند.
🔺 99.73 درصد داده ها در محدوده سه برابری انحراف استاندارد کمتر، تا سه برابری انحراف استاندارد بیشتر قرار دارند.
🔹 یکی از کاربردهای خوب Three Sigma حذف راحت داده های نویز میباشد. به عنوان مثال میتونیم بگیم داده هایی که در بازه سه برابری انحراف استاندارد کمتر و سه برابری انحراف استاندارد بیشتر نیفتادن رو حذف کن.
▫️اگر دُم نمودار histogram به سمت راست بیشتر باشه، میگن چولگی مثبت یا چولگی به راست داره و بالعکس.
🔸 محسابه چولگی (skewness) ستون موردنظر:
data["arr_delay"].skew()
🔹 محاسبه تیزی قله (Kurtosis):
data["arr_delay"].kurtosis()
اگر مقدار بالایی باشه نشون دهنده اینه که داده ها اکثرا نزدیک میانگین هستن و در یک نقطه تجمع کردن.
🔸 برای تحلیل دو متغیره، correlation وجود دارد. به ما این قابلیت رو میده که بتونیم بفهمیم کدوم دوتا متغیر با همدیگه رابطه خطی مستقیم دارن. correlation مثبت یعنی با زیاد شدن یک متغیر، یک متغیر دیگه نیز زیاد بشه و بالعکس. correlation عددی بین مثبت یک و منفی یک میباشد. correlation رابطه خطی را نشان میدهد.
اگر مقدار corr صفر باشد، یعنی دو ستون مد نظر هیچ ارتباطی با یکدیگر ندارند.
🔴 رسم correlation روی مجموعه داده:
———————————————————————-
🔷 بخش Data Visualization
یکی از کتابخانه هایی که در این بخش استفاده میکنیم، Matplotlib میباشد.
🔻 رسم نمودار histogram:
🔸 مشخص کردن لیبل برای X و Y، و مشخص کردن noscript:
🟢 استفاده از subplot:
▫️ رسم boxplot (نمایش کمینه و بیشینه، چارک اول و چارک سوم، median یا چارک دوم ستون مورد نظر):
🔸 چارک اول: یک چهارم داده ها کمتر از اون هستند.
🔹 چارک دوم (میانه): نصف داده ها کمتر و نصف داده ها بیشتر از اون هستند.
🔺 چارک سوم: سه چهارم داده ها کمتر از اون هستند.
🟨 با استفاده از چارک اول و چارک سوم میتونیم متوجه بشیم تکرار داده ها کجا متمرکز شده است. معمولا تعداد تکرار بین چارک اول و سوم خیلی زیاد میباشد.
اگر مقدار corr صفر باشد، یعنی دو ستون مد نظر هیچ ارتباطی با یکدیگر ندارند.
🔴 رسم correlation روی مجموعه داده:
data.corr()
———————————————————————-
🔷 بخش Data Visualization
یکی از کتابخانه هایی که در این بخش استفاده میکنیم، Matplotlib میباشد.
import matplotlib.pyplot as plt
🔻 رسم نمودار histogram:
plt.hist(df["comb08"])
🔸 مشخص کردن لیبل برای X و Y، و مشخص کردن noscript:
plt.xlabel("Test X")
plt.ylabel("Test Y")
plt.noscript("Test Title")
plt.show()🟢 استفاده از subplot:
fig, ax = plt.subplots()
ax.hist(df["comb08"], range=(10, 50), bins=5)
▫️ رسم boxplot (نمایش کمینه و بیشینه، چارک اول و چارک سوم، median یا چارک دوم ستون مورد نظر):
fig, ax = plt.subplots()
ax.boxplot(df["comb08"], label=["All"])
ax.set(noscript="MPG Distribution", ylabel="MPG for vehicles")
برای حذف نویزها از نمودار میتونیم showfliers رو فالس بزاریم:
ax.boxplot(df["comb08"], label=["All"], showfliers=False)
🔸 چارک اول: یک چهارم داده ها کمتر از اون هستند.
🔹 چارک دوم (میانه): نصف داده ها کمتر و نصف داده ها بیشتر از اون هستند.
🔺 چارک سوم: سه چهارم داده ها کمتر از اون هستند.
🟨 با استفاده از چارک اول و چارک سوم میتونیم متوجه بشیم تکرار داده ها کجا متمرکز شده است. معمولا تعداد تکرار بین چارک اول و سوم خیلی زیاد میباشد.
🔸 رسم نمودار خطی ساده:
🔻 چند نمونه رسم نمودار با pandas:
🟢 کتابخانه دیگری برای بصری سازی داده ها به نام Seaborn وجود دارد. seaborn مبتنی بر matplotlib میباشد. از لحاظ شکل و شمایل و هارمونی رنگی، seaborn به نسبت بقیه بهتر عمل کرده.
✔️ رسم catplot در seaborn:
🔔 رسم چند نمونه نمودار با seaborn:
avg_by_year = df.groupby(["year"], as_index=False).agg({'comb08': 'mean'}).round(2)
fig, ax1 = plt.subplots()
ax1.plot(avg_by_year["year"], avg_by_year["comb08"])🔻 چند نمونه رسم نمودار با pandas:
avg_by_year.plot(kind="box", noscript="Gas Mileage")
avg_by_year.plot(kind="line", noscript="Gas Mileage")
avg_by_year.plot(kind="bar", noscript="Gas Mileage")
avg_by_year.plot(kind="area", noscript="Gas Mileage")
🟢 کتابخانه دیگری برای بصری سازی داده ها به نام Seaborn وجود دارد. seaborn مبتنی بر matplotlib میباشد. از لحاظ شکل و شمایل و هارمونی رنگی، seaborn به نسبت بقیه بهتر عمل کرده.
import seaborn as sns
sns.set_style("darkgrid")
✔️ رسم catplot در seaborn:
sns.catplot(data=df,
y='comb08',
x='cylinders',
kind='bar');
🔔 رسم چند نمونه نمودار با seaborn:
sns.displot(data=df, x='fuelCost08', hue='year', aspect=2.5);
sns.displot(data=df, x='fuelCost08', hue='date_range', aspect=2.5);
sns.displot(data=df, x='fuelCost08', col='date_range')
sns.catplot(data=df,
x='date_range',
y='comb08',
kind='box',
showfliers=False);
sns.relplot(data=df,
x='cylinders',
y='comb08',
col='date_range',
hue='drive',
kind='scatter');