Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Hoy Habr!

Karon magtrabaho kami sa kahanas sa paggamit sa data grouping ug visualization tools sa Python. Sa gihatag dataset sa Github Atong analisahon ang daghang mga kinaiya ug maghimo usa ka hugpong sa mga visualization.

Pinaagi sa tradisyon, sa sinugdanan, atong gihubit ang mga tumong:

  • Pag-grupo sa datos pinaagi sa sekso ug tuig ug handurawa ang kinatibuk-ang dinamika sa gidaghanon sa pagkahimugso sa duha ka lalaki;
  • Pangitaa ang labing inila nga mga ngalan sa kasaysayan;
  • Bahina ang tibuok yugto sa panahon sa datos ngadto sa 10 ka bahin ug para sa matag usa pangitaa ang pinakasikat nga ngalan sa matag gender. Alang sa matag ngalan nga makit-an, tan-awa ang mga dinamika niini sa paglabay sa panahon;
  • Alang sa matag tuig, kuwentaha kon pila ka mga ngalan ang nasakup sa 50% sa mga tawo ug i-visualize (atong makita ang lain-laing mga ngalan sa matag tuig);
  • Pagpili 4 ka tuig gikan sa kinatibuk-ang agwat ug ipakita alang sa matag tuig ang pag-apod-apod pinaagi sa unang letra sa ngalan ug sa kataposang letra sa ngalan;
  • Paghimo usa ka lista sa daghang bantog nga mga tawo (presidente, mag-aawit, aktor, bayani sa sine) ug susihon ang ilang impluwensya sa dinamika sa mga ngalan. Pagtukod og visualization.

Gamay nga mga pulong, daghang code!

Ug lakaw na ta.

Igrupo nato ang datos pinaagi sa sekso ug tuig ug tan-awonon ang kinatibuk-ang dynamics sa rate sa pagkahimugso sa duha ka lalaki:

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()

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Atong pangitaon ang labing inila nga mga ngalan sa kasaysayan:

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)

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Atong bahinon ang tibuok yugto sa panahon sa datos ngadto sa 10 ka bahin ug alang sa matag usa atong makita ang pinakasikat nga ngalan sa matag gender. Alang sa matag nakit-an nga ngalan, among gitan-aw ang mga dinamika niini sa tibuuk nga panahon:

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()

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Alang sa matag tuig, among gikalkulo kung pila ka mga ngalan ang nasakup sa 50% sa mga tawo ug mahanduraw kini nga datos:

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()

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Atong pilion ang 4 ka tuig gikan sa tibuok agwat ug ipakita sa matag tuig ang pag-apod-apod pinaagi sa unang letra sa ngalan ug sa kataposang letra sa ngalan:

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()

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Maghimo kita og usa ka lista sa daghang mga bantog nga mga tawo (mga presidente, mag-aawit, aktor, mga bayani sa sine) ug susihon ang ilang impluwensya sa dinamika sa mga ngalan:

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()

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Pagtrabaho sa kahanas sa paggamit sa paggrupo ug paghanduraw sa datos sa Python

Alang sa pagpraktis, mahimo nimong idugang ang yugto sa kinabuhi sa usa ka sikat nga tawo sa pagtan-aw gikan sa katapusan nga pananglitan aron makita nga makita ang ilang impluwensya sa dinamika sa mga ngalan.

Niini, ang tanan namong mga tumong nakab-ot ug natuman. Nahanas na namo ang paggamit sa data grouping ug visualization tools sa Python, ug motrabaho pa kami uban sa datos. Ang matag usa makahimo og mga konklusyon sa andam na, makita nga datos.

Tanan nga kahibalo!

Source: www.habr.com

Idugang sa usa ka comment