Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

ارے حبر!

آج ہم Python میں ڈیٹا گروپنگ اور ویژولائزیشن ٹولز استعمال کرنے کی مہارت پر کام کریں گے۔ فراہم کردہ میں Github پر ڈیٹا سیٹ آئیے کئی خصوصیات کا تجزیہ کریں اور تصورات کا ایک سیٹ بنائیں۔

روایت کے مطابق، شروع میں، ہم اہداف کی وضاحت کرتے ہیں:

  • جنس اور سال کے لحاظ سے ڈیٹا کو گروپ کریں اور دونوں جنسوں کی شرح پیدائش کی مجموعی حرکیات کا تصور کریں۔
  • تاریخ میں سب سے زیادہ مقبول نام تلاش کریں؛
  • ڈیٹا میں پورے وقت کی مدت کو 10 حصوں میں تقسیم کریں اور ہر ایک کے لیے ہر جنس کا سب سے مشہور نام تلاش کریں۔ پائے جانے والے ہر نام کے لیے، وقت کے ساتھ اس کی حرکیات کا تصور کریں۔
  • ہر سال کے لیے، حساب لگائیں کہ 50% لوگوں نے کتنے ناموں کا احاطہ کیا ہے اور تصور کریں (ہم ہر سال کے لیے مختلف نام دیکھیں گے)؛
  • کل وقفہ سے 4 سال کا انتخاب کریں اور ہر سال کے لیے نام کے پہلے حرف اور نام کے آخری حرف کے ذریعے تقسیم دکھائیں۔
  • کئی مشہور لوگوں (صدر، گلوکار، اداکار، فلمی ہیرو) کی فہرست بنائیں اور ناموں کی حرکیات پر ان کے اثر کا اندازہ لگائیں۔ ویژولائزیشن بنائیں۔

کم الفاظ، زیادہ کوڈ!

اور چلو۔

آئیے ڈیٹا کو جنس اور سال کے لحاظ سے گروپ کریں اور دونوں جنسوں کی شرح پیدائش کی مجموعی حرکیات کو دیکھیں:

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt

years = np.arange(1880, 2011, 3)
datalist = 'https://raw.githubusercontent.com/wesm/pydata-book/2nd-edition/datasets/babynames/yob{year}.txt'
dataframes = []
for year in years:
    dataset = datalist.format(year=year)
    dataframe = pd.read_csv(dataset, names=['name', 'sex', 'count'])
    dataframes.append(dataframe.assign(year=year))

result = pd.concat(dataframes)
sex = result.groupby('sex')
births_men = sex.get_group('M').groupby('year', as_index=False)
births_women = sex.get_group('F').groupby('year', as_index=False)
births_men_list = births_men.aggregate(np.sum)['count'].tolist()
births_women_list = births_women.aggregate(np.sum)['count'].tolist()

fig, ax = plt.subplots()
fig.set_size_inches(25,15)

index = np.arange(len(years))
stolb1 = ax.bar(index, births_men_list, 0.4, color='c', label='Мужчины')
stolb2 = ax.bar(index + 0.4, births_women_list, 0.4, alpha=0.8, color='r', label='Женщины')

ax.set_title('Рождаемость по полу и годам')
ax.set_xlabel('Года')
ax.set_ylabel('Рождаемость')
ax.set_xticklabels(years)
ax.set_xticks(index + 0.4)
ax.legend(loc=9)

fig.tight_layout()
plt.show()

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

آئیے تاریخ کے سب سے مشہور نام تلاش کرتے ہیں:

years = np.arange(1880, 2011)

dataframes = []
for year in years:
    dataset = datalist.format(year=year)
    dataframe = pd.read_csv(dataset, names=['name', 'sex', 'count'])
    dataframes.append(dataframe)

result = pd.concat(dataframes)
names = result.groupby('name', as_index=False).sum().sort_values('count', ascending=False)
names.head(10)

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

آئیے ڈیٹا میں پورے وقت کو 10 حصوں میں تقسیم کرتے ہیں اور ہر ایک کے لیے ہمیں ہر جنس کا سب سے مشہور نام ملتا ہے۔ ہر پائے جانے والے نام کے لیے، ہم پورے وقت میں اس کی حرکیات کا تصور کرتے ہیں:

years = np.arange(1880, 2011)
part_size = int((years[years.size - 1] - years[0]) / 10) + 1
parts = {}
def GetPart(year):
    return int((year - years[0]) / part_size)
for year in years:
    index = GetPart(year)
    r = years[0] + part_size * index, min(years[years.size - 1], years[0] + part_size * (index + 1))
    parts[index] = str(r[0]) + '-' + str(r[1])

dataframe_parts = []
dataframes = []
for year in years:
    dataset = datalist.format(year=year)
    dataframe = pd.read_csv(dataset, names=['name', 'sex', 'count'])
    dataframe_parts.append(dataframe.assign(years=parts[GetPart(year)]))
    dataframes.append(dataframe.assign(year=year))
    
result_parts = pd.concat(dataframe_parts)
result = pd.concat(dataframes)

result_parts_sums = result_parts.groupby(['years', 'sex', 'name'], as_index=False).sum()
result_parts_names = result_parts_sums.iloc[result_parts_sums.groupby(['years', 'sex'], as_index=False).apply(lambda x: x['count'].idxmax())]
result_sums = result.groupby(['year', 'sex', 'name'], as_index=False).sum()

for groupName, groupLabels in result_parts_names.groupby(['name', 'sex']).groups.items():
    group = result_sums.groupby(['name', 'sex']).get_group(groupName)
    fig, ax = plt.subplots(1, 1, figsize=(18,10))

    ax.set_xlabel('Года')
    ax.set_ylabel('Рождаемость')
    label = group['name']
    ax.plot(group['year'], group['count'], label=label.aggregate(np.max), color='b', ls='-')
    ax.legend(loc=9, fontsize=11)

    plt.show()

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

ہر سال کے لیے، ہم حساب لگاتے ہیں کہ 50% لوگ کتنے ناموں کا احاطہ کرتے ہیں اور اس ڈیٹا کو تصور کرتے ہیں:

dataframe = pd.DataFrame({'year': [], 'count': []})
years = np.arange(1880, 2011)
for year in years:
    dataset = datalist.format(year=year)
    csv = pd.read_csv(dataset, names=['name', 'sex', 'count'])
    names = csv.groupby('name', as_index=False).aggregate(np.sum)
    names['sum'] = names.sum()['count']
    names['percent'] = names['count'] / names['sum'] * 100
    names = names.sort_values(['percent'], ascending=False)
    names['cum_perc'] = names['percent'].cumsum()
    names_filtered = names[names['cum_perc'] <= 50]
    dataframe = dataframe.append(pd.DataFrame({'year': [year], 'count': [names_filtered.shape[0]]}))

fig, ax1 = plt.subplots(1, 1, figsize=(22,13))
ax1.set_xlabel('Года', fontsize = 12)
ax1.set_ylabel('Разнообразие имен', fontsize = 12)
ax1.plot(dataframe['year'], dataframe['count'], color='r', ls='-')
ax1.legend(loc=9, fontsize=12)

plt.show()

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

آئیے پورے وقفے سے 4 سال کا انتخاب کریں اور ہر سال کے لیے نام کے پہلے حرف اور نام کے آخری حرف سے تقسیم دکھائیں:

from string import ascii_lowercase, ascii_uppercase

fig_first, ax_first = plt.subplots(1, 1, figsize=(14,10))
fig_last, ax_last = plt.subplots(1, 1, figsize=(14,10))

index = np.arange(len(ascii_uppercase))
years = [1944, 1978, 1991, 2003]
colors = ['r', 'g', 'b', 'y']
n = 0
for year in years:
    dataset = datalist.format(year=year)
    csv = pd.read_csv(dataset, names=['name', 'sex', 'count'])
    names = csv.groupby('name', as_index=False).aggregate(np.sum)
    count = names.shape[0]

    dataframe = pd.DataFrame({'letter': [], 'frequency_first': [], 'frequency_last': []})
    for letter in ascii_uppercase:
        countFirst = (names[names.name.str.startswith(letter)].count()['count'])
        countLast = (names[names.name.str.endswith(letter.lower())].count()['count'])

        dataframe = dataframe.append(pd.DataFrame({
            'letter': [letter],
            'frequency_first': [countFirst / count * 100],
            'frequency_last': [countLast / count * 100]}))

    ax_first.bar(index + 0.3 * n, dataframe['frequency_first'], 0.3, alpha=0.5, color=colors[n], label=year)
    ax_last.bar(index + bar_width * n, dataframe['frequency_last'], 0.3, alpha=0.5, color=colors[n], label=year)
    n += 1

ax_first.set_xlabel('Буква алфавита')
ax_first.set_ylabel('Частота, %')
ax_first.set_title('Первая буква в имени')
ax_first.set_xticks(index)
ax_first.set_xticklabels(ascii_uppercase)
ax_first.legend()

ax_last.set_xlabel('Буква алфавита')
ax_last.set_ylabel('Частота, %')
ax_last.set_title('Последняя буква в имени')
ax_last.set_xticks(index)
ax_last.set_xticklabels(ascii_uppercase)
ax_last.legend()

fig_first.tight_layout()
fig_last.tight_layout()

plt.show()

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

آئیے کئی مشہور لوگوں (صدر، گلوکار، اداکار، فلمی ہیرو) کی فہرست بناتے ہیں اور ناموں کی حرکیات پر ان کے اثرات کا جائزہ لیتے ہیں:

celebrities = {'Frank': 'M', 'Britney': 'F', 'Madonna': 'F', 'Bob': 'M'}
dataframes = []
for year in years:
    dataset = datalist.format(year=year)
    dataframe = pd.read_csv(dataset, names=['name', 'sex', 'count'])
    dataframes.append(dataframe.assign(year=year))

result = pd.concat(dataframes)

for celebrity, sex in celebrities.items():
    names = result[result.name == celebrity]
    dataframe = names[names.sex == sex]
    fig, ax = plt.subplots(1, 1, figsize=(16,8))

    ax.set_xlabel('Года', fontsize = 10)
    ax.set_ylabel('Рождаемость', fontsize = 10)
    ax.plot(dataframe['year'], dataframe['count'], label=celebrity, color='r', ls='-')
    ax.legend(loc=9, fontsize=12)
        
    plt.show()

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

Python میں گروپ بندی اور ڈیٹا ویژولائزیشن کے استعمال کی مہارت پر کام کرنا

مشق کے لیے، آپ ناموں کی حرکیات پر ان کے اثر و رسوخ کو بصری طور پر جانچنے کے لیے آخری مثال سے کسی مشہور شخصیت کی زندگی کے دورانیے کو تصور میں شامل کر سکتے ہیں۔

اس پر ہمارے تمام مقاصد حاصل اور پورے ہو گئے۔ ہم نے Python میں ڈیٹا گروپنگ اور ویژولائزیشن ٹولز کے استعمال میں مہارت حاصل کر لی ہے، اور ہم ڈیٹا کے ساتھ مزید کام کریں گے۔ ہر کوئی ریڈی میڈ، تصوراتی ڈیٹا پر نتیجہ اخذ کر سکتا ہے۔

تمام علم!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں