Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Përshëndetje, Habr!

Sotët do të eksplorojmë aftësinë e përdorimit të mjeteve për grupimin dhe vizualizimin e të dhënave në Python. Në datasetin e ofruar në Github do të analizojmë disa karakteristika dhe do të ndërtojmë një shumësi vizualizimesh.

Si zakonisht, në fillim, do të përcaktojmë objektivat:

  • TĂ« grupojmĂ« tĂ« dhĂ«nat sipas gjinive dhe viteve dhe tĂ« vizualizojmĂ« dinamikĂ«n e pĂ«rgjithshme tĂ« lindjeve pĂ«r tĂ« dy gjinjtĂ«;
  • TĂ« gjejmĂ« emrat mĂ« tĂ« njohur tĂ« tĂ« gjitha kohĂ«rave;
  • TĂ« ndajmĂ« periudhĂ«n kohore nĂ« tĂ« dhĂ«na nĂ« 10 pjesĂ« dhe pĂ«r secilĂ«n tĂ« gjejmĂ« emrin mĂ« tĂ« njohur pĂ«r çdo gjini. PĂ«r secilin emĂ«r tĂ« gjetur, tĂ« vizualizojmĂ« dinamikĂ«n e tij pĂ«r tĂ« gjithĂ« kohĂ«n;
  • PĂ«r çdo vit tĂ« llogarisim sa emra pĂ«rbĂ«jnĂ« 50% tĂ« popullsisĂ« dhe tĂ« vizualizojmĂ« (do tĂ« shohim larmishmĂ«rinĂ« e emrave pĂ«r çdo vit);
  • TĂ« zgjedhim 4 vite nga e gjithĂ« periudha dhe tĂ« tregojmĂ« pĂ«r secilin vit shpĂ«rndarjen sipas shkronjĂ«s sĂ« parĂ« nĂ« emĂ«r dhe sipas shkronjĂ«s sĂ« fundit nĂ« emĂ«r;
  • TĂ« pĂ«rpilojmĂ« njĂ« listĂ« me disa njerĂ«z tĂ« njohur (presidentĂ«, kĂ«ngĂ«tarĂ«, aktorĂ«, personazhe filmash) dhe tĂ« vlerĂ«sojmĂ« ndikimin e tyre nĂ« dinamikĂ«n e emrave. TĂ« ndĂ«rtojmĂ« njĂ« vizualizim tĂ« dukshĂ«m.

Më pak fjalë, më shumë kod!

Dhe, le të shkojmë.

Të grupojmë të dhënat sipas gjinive dhe viteve dhe të vizualizojmë dinamikën e përgjithshme të lindjeve për të dy gjinjtë:

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='Meshkuj')
stolb2 = ax.bar(index + 0.4, births_women_list, 0.4, alpha=0.8, color='r', label='Femra')

ax.set_title('Lindjet sipas gjinive dhe viteve')
ax.set_xlabel('Vitet')
ax.set_ylabel('Lindje')
ax.set_xticklabels(years)
ax.set_xticks(index + 0.4)
ax.legend(loc=9)

fig.tight_layout()
plt.show()

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Të gjejmë emrat më të njohur të të gjitha kohërave:

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)

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Do t'i ndajmë të gjithë periudhën kohore në të dhëna në 10 pjesë dhe për çdo pjesë do të gjejmë emrin më të zakonshëm për secilin gjend. Për secilin emër të gjetur, do ta vizualizojmë dinamikën e tij për tërë kohën:

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('Vitet')
    ax.set_ylabel('Fertiliteti')
    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()

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Për çdo vit do të llogaritim sa emra mbulojnë 50% të njerëzve dhe do të vizualizojmë këto të dhëna:

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('Vitet', fontsize = 12)
ax1.set_ylabel('Diversiteti i emrave', fontsize = 12)
ax1.plot(dataframe['year'], dataframe['count'], color='r', ls='-')
ax1.legend(loc=9, fontsize=12)

plt.show()

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Do të zgjedhim 4 vjet nga periudha e gjithëkohshme dhe do të shfaqim për secilin vit shpërndarjen sipas shkronjës së parë në emër dhe sipas shkronjës së fundit në emër:

nga nga 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('Shkronja e alfabetit')
ax_first.set_ylabel('Frekuenca, %')
ax_first.set_title('Shkronja e parë në emër')
ax_first.set_xticks(index)
ax_first.set_xticklabels(ascii_uppercase)
ax_first.legend()

ax_last.set_xlabel('Shkronja e alfabetit')
ax_last.set_ylabel('Frekuenca, %')
ax_last.set_title('Shkronja e fundit në emër')
ax_last.set_xticks(index)
ax_last.set_xticklabels(ascii_uppercase)
ax_last.legend()

fig_first.tight_layout()
fig_last.tight_layout()

plt.show()

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Do të përgatisim një listë me disa njerëz të njohur (presidentë, këngëtarë, aktorë, personazhe filmash) dhe do të vlerësojmë ndikimin e tyre në dinamikën e emrave:

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('Vitet', fontsize = 10)
    ax.set_ylabel('Lindshmëria', fontsize = 10)
    ax.plot(dataframe['year'], dataframe['count'], label=celebrity, color='r', ls='-')
    ax.legend(loc=9, fontsize=12)
        
    plt.show()

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Po zhvillojmë aftësinë për të përdorur grupimin dhe vizualizimin e të dhënave në Python

Për stërvitje, mund të shtoni periudhën e jetës së celebritetit në vizualizim, në mënyrë që të vlerësoni ndikimin e tyre në dinamikën e emrave.

Kjo Ă«shtĂ« gjithçka, ne arritĂ«m dhe pĂ«rmbushĂ«m tĂ« gjitha qĂ«llimet tona. Ne punuam me aftĂ«sinĂ« e pĂ«rdorimit tĂ« mjeteve tĂ« grupimit dhe vizualizimit tĂ« tĂ« dhĂ«nave nĂ« Python dhe do tĂ« vazhdojmĂ« tĂ« punojmĂ« me tĂ« dhĂ«na mĂ« tej. Çdo kush mund tĂ« nxjerrĂ« pĂ«rfundime nga tĂ« dhĂ«nat e gatshme dhe tĂ« vizualizuara.

Të gjithë mundësi për njohuri!

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster