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

تبصرو شامل ڪريو