Домашняя работа по уроку 4.2

Выполнил Мартысюк Илья. группа PY-3


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)


Задание 1: Построить график изменения количества имен Ruth и Robert с 1900 по 2000
Out[22]:
<matplotlib.axes._subplots.AxesSubplot at 0x10d803eb8>

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)


Задание 2: Построить гистограмму по количеству их имен с 1900 по 2000 с 5-летними промежутками.
Out[58]:
<matplotlib.axes._subplots.AxesSubplot at 0x10c14b4a8>

In [32]:
print('Задание 3: Построить круговую диаграмму по количеству употреблений для ТОП-10 популярных имен,'
      'начинающихся на R, за 1950 год.')
plot_data = compile_data_to_step_3(1, 1950)
plot_data.plot.pie(y='Count')


Задание 3: Построить круговую диаграмму по количеству употреблений для ТОП-10 популярных имен,начинающихся на R, за 1950 год.
Out[32]:
<matplotlib.axes._subplots.AxesSubplot at 0x10f2a3e10>

In [101]:
print('Задание 4: Построить точечную диаграмму по количеству согласных букв в именах'
      'и частоте употребления за 100 лет.')
plot_data = compile_data_to_step_4()
plot_data.plot.scatter(x='Conson', y='Count')


Задание 4: Построить точечную диаграмму по количеству согласных букв в именахи частоте употребления за 100 лет.
Out[101]:
<matplotlib.axes._subplots.AxesSubplot at 0x108a18198>