Кор дар бораи маҳорати истифодаи гурӯҳбандӣ ва визуализатсияи додаҳо дар 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 таҳия кардем ва кор бо додаҳоро идома медиҳем. Ҳар як шахс метавонад дар асоси маълумоти тайёр ва визуалӣ худаш хулоса барорад.

Ба ҳама дониш!

Манбаъ: will.com

Илова Эзоҳ