In [1]:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
PATH = '/Users/martysyuk/Documents/Python 3 Coding/Repositorys/PY-3-Learning/homeworks/names/'
START_YEAR = 1900
STOP_YEAR = 2000
NAMES = ['Ruth', 'Robert']
CONCAT_ON = ['Year', 'Pos']
COLUMNS = ['Name', 'Gender', 'Count']
In [103]:
def get_data_from_file(_start, _stop, _step):
_data = dict()
if _start == _stop:
_file_name = PATH + 'yob' + str(_start) + '.txt'
_data[_start] = pd.read_csv(_file_name, names=COLUMNS)
else:
for _year in range(_start, _stop, _step):
_file_name = PATH + 'yob' + str(_year) + '.txt'
_data[_year] = pd.read_csv(_file_name, names=COLUMNS)
try:
_pd_data = pd.concat(_data, names=CONCAT_ON)
except ValueError:
_pd_data = pd.DataFrame(data=_data, columns=COLUMNS)
return _pd_data
def compile_data_to_step_1_2(step):
_data = get_data_from_file(START_YEAR, STOP_YEAR, step)
_data = _data.groupby([_data.index.get_level_values(0), 'Name']).sum()
_return_data = _data.query('Name == {}'.format(NAMES)).unstack('Name')
return _return_data
def compile_data_to_step_3(_step, _year):
_names = list()
_data = get_data_from_file(_year, _year, _step)
_data = _data.groupby('Name').sum()
for _name in _data.index.get_level_values(0):
if _name.startswith('R'):
_names.append(_name)
_data = _data.query('Name == {}'.format(_names)).sort_values(by='Count', ascending=False).head(10)
return _data
def get_consonants_count(_word):
_consons = 'aeiouy'
_word_set = _word.lower()
_return_data = sum(_letter in _consons for _letter in _word_set)
return _return_data
def compile_data_to_step_4():
_data = get_data_from_file(START_YEAR, STOP_YEAR, 5)
_data = _data.groupby('Name', as_index=False).sum()
_data['Conson'] = _data.apply(lambda row: get_consonants_count(row.Name), axis=1)
_data = _data.groupby('Name').sum().sort_values(by='Count', ascending=False)
return _data
In [22]:
print('Задание 1: Построить график изменения количества имен Ruth и Robert с 1900 по 2000')
plot_data = compile_data_to_step_1_2(1)
plot_data.plot(title='Step 1 year', grid=True)
Out[22]:
In [58]:
print('Задание 2: Построить гистограмму по количеству их имен с 1900 по 2000 с 5-летними промежутками.')
plot_data = compile_data_to_step_1_2(10)
plot_data.plot.bar(title='Step 5 year', grid=True)
Out[58]:
In [32]:
print('Задание 3: Построить круговую диаграмму по количеству употреблений для ТОП-10 популярных имен,'
'начинающихся на R, за 1950 год.')
plot_data = compile_data_to_step_3(1, 1950)
plot_data.plot.pie(y='Count')
Out[32]:
In [101]:
print('Задание 4: Построить точечную диаграмму по количеству согласных букв в именах'
'и частоте употребления за 100 лет.')
plot_data = compile_data_to_step_4()
plot_data.plot.scatter(x='Conson', y='Count')
Out[101]: