ሃይ ሀብር!
ዛሬ በፓይዘን ውስጥ የመረጃ ማሰባሰብ እና የእይታ መሳሪያዎችን የመጠቀም ችሎታ ላይ እንሰራለን። በቀረበው ውስጥ
በባህላዊ ፣ በመጀመሪያ ፣ ግቦቹን እንገልፃለን-
- በጾታ እና በዓመት የቡድን መረጃ እና የሁለቱም ፆታዎች የልደት መጠን አጠቃላይ ተለዋዋጭ ሁኔታዎችን በዓይነ ሕሊናህ ተመልከት;
- በታሪክ ውስጥ በጣም ተወዳጅ ስሞችን ያግኙ;
- በመረጃው ውስጥ ያለውን አጠቃላይ ጊዜ በ 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()
በታሪክ ውስጥ በጣም የታወቁ ስሞችን እንፈልግ፡-
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)
ሙሉውን የጊዜ ቆይታ በመረጃው ውስጥ በ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()
ለእያንዳንዱ አመት ምን ያህል ስሞች በ 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()
ከጠቅላላው የጊዜ ክፍተት ውስጥ 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()
የበርካታ ታዋቂ ሰዎችን ዝርዝር (ፕሬዚዳንቶች፣ ዘፋኞች፣ ተዋናዮች፣ የፊልም ጀግኖች) እንዘርዝር እና በስም ተለዋዋጭነት ላይ ያላቸውን ተጽዕኖ እንገምግም።
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()
ለተግባር፣ በስም ተለዋዋጭነት ላይ ያላቸውን ተፅእኖ በምስል ለመገምገም ከመጨረሻው ምሳሌ ላይ የታዋቂውን ሰው ህይወት ወደ ምስላዊ እይታ ማከል ይችላሉ።
በዚህ ላይ ሁሉም ግቦቻችን ተሳክተዋል እና ተሟልተዋል. በፓይዘን ውስጥ የመረጃ ማሰባሰብ እና ምስላዊ መሳሪያዎችን አጠቃቀም ተክተናል እና ከመረጃ ጋር የበለጠ እንሰራለን። ሁሉም ሰው ዝግጁ በሆነ ፣ በሚታየው መረጃ ላይ ድምዳሜ ላይ መድረስ ይችላል።
ሁሉም እውቀት!
ምንጭ: hab.com