اي حبر!
اڄ اسان Python ۾ ڊيٽا کي گروپ ڪرڻ ۽ ڏسڻ لاءِ اوزار استعمال ڪرڻ جي مهارت تي ڪم ڪنداسين. مهيا ڪيل ۾
روايت موجب، شروعات ۾، اچو ته مقصدن جي وضاحت ڪريون:
- جنس ۽ سال جي لحاظ کان گروپ ڊيٽا ۽ ٻنهي جنس جي پيدائش جي شرح جي مجموعي متحرڪ ڏسڻ؛
- هر وقت جا سڀ کان مشهور نالا ڳوليو؛
- ڊيٽا ۾ سڄي وقت جي مدت کي 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()
ٽريننگ لاءِ، توھان نالن جي حرڪيات تي انھن جي اثر کي واضح طور تي جانچڻ لاءِ آخري مثال کان نمايان شخصيت جي زندگيءَ جو عرصو شامل ڪري سگھو ٿا.
ان سان اسان جا سڀئي مقصد حاصل ۽ پورا ٿي ويا. اسان Python ۾ ڊيٽا کي گروپ ڪرڻ ۽ ڏسڻ لاءِ اوزار استعمال ڪرڻ جي مهارت پيدا ڪئي آهي، ۽ اسان ڊيٽا سان ڪم جاري رکنداسين. هرڪو پاڻ تيار ڪيل، بصري ڊيٽا جي بنياد تي نتيجو ڪڍي سگهي ٿو.
سڀني کي ڄاڻ!
جو ذريعو: www.habr.com