<jupyter_start><jupyter_text>Предобработка<jupyter_code>answers = {}
data['profit'] = data['revenue'] - data['budget']
data['genres_array'] = data['genres'].str.split('|')
data['overview_len'] = data['overview'].str.split().str.len()
data['cast_array'] = data['cast'].str.split('|')
data['production_array'] = data['production_companies'].str.split('|')
data['release_date'] = data['release_date'].apply(pd.to_datetime)

def movie_title(row):
    clean_title = row['original_title'].to_string(index=False).strip(' ')
    clean_imdb_id = row['imdb_id'].to_string(index=False).strip(' ')
    return f'{clean_title} ({clean_imdb_id})'<jupyter_output><empty_output><jupyter_text>1. У какого фильма из списка самый большой бюджет?<jupyter_code>row = data[data['budget'] == data['budget'].max()][['imdb_id', 'original_title']]
answers['1'] = movie_title(row)
print(answers['1'])<jupyter_output>Pirates of the Caribbean: On Stranger Tides (tt1298650)<jupyter_text>2. Какой из фильмов самый длительный (в минутах)?<jupyter_code>row = data[data['runtime'] == data['runtime'].max()][['imdb_id', 'original_title']]
answers['2'] =  movie_title(row)
print(answers['2'])<jupyter_output>Gods and Generals (tt0279111)<jupyter_text>3. Какой из фильмов самый короткий (в минутах)?<jupyter_code>row = data[data['runtime'] == data['runtime'].min()][['imdb_id', 'original_title']]
answers['3'] = movie_title(row)
print(answers['3'])<jupyter_output>Winnie the Pooh (tt1449283)<jupyter_text>4. Какова средняя длительность фильмов?<jupyter_code>answers['4'] = round(data['runtime'].mean())
print(answers['4'])<jupyter_output>110<jupyter_text>5. Каково медианное значение длительности фильмов?<jupyter_code>answers['5'] = round(data['runtime'].median())
print(answers['5'])<jupyter_output>107<jupyter_text>6. Какой самый прибыльный фильм? Внимание! Здесь и далее под «прибылью» или «убытками» понимается разность между сборами и бюджетом фильма. (прибыль = сборы - бюджет) в нашем датасете это будет (profit = revenue - budget)<jupyter_code>row = data[data['profit'] == data['profit'].max()][['imdb_id', 'original_title', 'profit']]
answers['6'] = movie_title(row)
print(answers['6'])<jupyter_output>Avatar (tt0499549)<jupyter_text>7. Какой фильм самый убыточный?<jupyter_code>row = data[data['profit'] == data['profit'].min()][['imdb_id', 'original_title', 'profit']]
answers['7'] = movie_title(row)
print(answers['7'])<jupyter_output>The Lone Ranger (tt1210819)<jupyter_text>8. У скольких фильмов из датасета объем сборов оказался выше бюджета?<jupyter_code>answers['8'] = data[data['profit'] > 0]['imdb_id'].count()
print(answers['8'])<jupyter_output>1478<jupyter_text>9. Какой фильм оказался самым кассовым в 2008 году?<jupyter_code>max_profit = data[data['release_year'] == 2008]['profit'].max()
row = data[(data['release_year'] == 2008) & (data['profit'] == max_profit)][['imdb_id', 'original_title', 'profit']]
answers['9'] = movie_title(row)
print(answers['9'])<jupyter_output>The Dark Knight (tt0468569)<jupyter_text>10. Самый убыточный фильм за период с 2012 по 2014 г. (включительно)?<jupyter_code>min_profit = data[data['release_year'].between(2012, 2014)]['profit'].min()
row = data[(data['release_year'].between(2012, 2014)) & (data['profit'] == min_profit)]
answers['10'] = movie_title(row)
print(answers['10'])<jupyter_output>The Lone Ranger (tt1210819)<jupyter_text>11. Какого жанра фильмов больше всего?<jupyter_code>genres = data.explode('genres_array').groupby('genres_array')['imdb_id'].count().sort_values(ascending=False)
answers['11'] = genres.index[0]
print(answers['11'])<jupyter_output>Drama<jupyter_text>12. Фильмы какого жанра чаще всего становятся прибыльными?<jupyter_code>with_profit = data[data['profit'] > 0]
genres = with_profit.explode('genres_array').groupby('genres_array')['imdb_id'].count().sort_values(ascending=False)
answers['12'] = genres.index[0]
print(answers['12'])<jupyter_output>Drama<jupyter_text>13. У какого режиссера самые большие суммарные кассовые сбооры?<jupyter_code>answers['13'] = data.groupby('director').sum()['revenue'].sort_values(ascending=False).index[0]
print(answers['13'])<jupyter_output><NAME><jupyter_text>14. Какой режисер снял больше всего фильмов в стиле Action?<jupyter_code>variants = ['<NAME>', '<NAME>', '<NAME>', '<NAME>', '<NAME>']

action_directors = data[data['director'].isin(variants)]

action_directors = action_directors[action_directors['genres'].str.contains('Action')] \
    .groupby('director')['imdb_id'] \
    .count() \
    .sort_values(ascending=False)

answers['14'] = action_directors.index[0]
print(answers['14'])<jupyter_output><NAME><jupyter_text>15. Фильмы с каким актером принесли самые высокие кассовые сборы в 2012 году?<jupyter_code>data_2012 = data[data['release_year'] == 2012]
revenue = data_2012.explode('cast_array').groupby('cast_array')['revenue'].sum().sort_values(ascending=False)
answers['15'] = revenue.index[0]
print(answers['15'])<jupyter_output><NAME><jupyter_text>16. Какой актер снялся в большем количестве высокобюджетных фильмов?<jupyter_code>cast_budget = Counter()

def count_cast_budget(row):
    for cast in row['cast_array']:
        cast_budget[cast] += 1

data[data['budget'] > data['budget'].median()].apply(count_cast_budget, axis='columns')
answers['16'], _ = cast_budget.most_common(1)[0]
print(answers['16'])
high_budget = data[data['budget'] > data['budget'].median()]
cast_hist = high_budget.explode('cast_array').groupby('cast_array')['imdb_id'].count().sort_values(ascending=False)
answers['16'] = cast_hist.index[0]
print(answers['16'])<jupyter_output><NAME><jupyter_text>17. В фильмах какого жанра больше всего снимался Nicolas Cage?<jupyter_code>cage = data[data['cast'].str.contains('Nicolas Cage')]
genres = cage.explode('genres_array').groupby('genres_array')['imdb_id'].count().sort_values(ascending=False)
answers['17'] = genres.index[0]
print(answers['17'])<jupyter_output>Action<jupyter_text>18. Самый убыточный фильм от <NAME>ictures<jupyter_code>paramount = data[data['production_companies'].str.contains('Paramount Pictures')]
answers['18'] = movie_title(paramount.sort_values(by='profit').head(1))
print(answers['18'])<jupyter_output>K-19: The Widowmaker (tt0267626)<jupyter_text>19. Какой год стал самым успешным по суммарным кассовым сборам?<jupyter_code>answers['19'] = data.groupby('release_year')['revenue'].sum().sort_values(ascending=False).index[0]
print(answers['19'])<jupyter_output>2015<jupyter_text>20. Какой самый прибыльный год для студии Warner Bros?<jupyter_code>warner = data[data['production_companies'].str.contains('Warner Bros')]
answers['20'] = warner.groupby('release_year')['revenue'].sum().sort_values(ascending=False).index[0]
print(answers['20'])<jupyter_output>2014<jupyter_text>21. В каком месяце за все годы суммарно вышло больше всего фильмов?<jupyter_code>answers['21'] = data.groupby(by=data['release_date'].dt.month)['imdb_id'].count().sort_values(ascending=False).index[0]
print(calendar.month_name[answers['21']])<jupyter_output>September<jupyter_text>22. Сколько суммарно вышло фильмов летом? (за июнь, июль, август)<jupyter_code>answers['22'] = data[data['release_date'].dt.month.between(6,8)]['imdb_id'].count()
print(answers['22'])<jupyter_output>450<jupyter_text>23. Для какого режиссера зима – самое продуктивное время года?<jupyter_code>directors = data[data['release_date'].dt.month.isin([12,1,2])].groupby('director')['imdb_id'].count().sort_values(ascending=False)
answers['23'] = directors.index[0]
print(answers['23'])<jupyter_output><NAME><jupyter_text>24. Какая студия дает самые длинные названия своим фильмам по количеству символов?<jupyter_code>title_len = {}
def title_count(row):
    for p in row['production_array']:
        title_len.setdefault(p, [])
        title_len[p].append(len(row['original_title']))
        

data.apply(title_count, axis='columns')
result = []
for p in title_len:
    result.append( (sum(title_len[p]) / len(title_len[p]), p)  )
_, answers['24'] = sorted(result, reverse=True)[0]
print(answers['24'])
with_len = data.explode('production_array')[['production_array', 'original_title']]
with_len['original_title_len'] = with_len['original_title'].apply(len)
answers['24'] = with_len.groupby('production_array')['original_title_len'] \
    .mean() \
    .sort_values(ascending=False) \
    .index[0]
print(answers['24'])<jupyter_output>Four By Two Productions<jupyter_text>25. Описание фильмов какой студии в среднем самые длинные по количеству слов?<jupyter_code>answers['25'] = data.explode('production_array') \
    .groupby('production_array')['overview_len'] \
    .mean() \
    .sort_values(ascending=False) \
    .index[0]
print(answers['25'])<jupyter_output>Midnight Picture Show<jupyter_text>26. Какие фильмы входят в 1 процент лучших по рейтингу? по vote_average<jupyter_code>variants = [
    ['Inside Out', 'The Dark Knight', '12 Years a Slave'],
    ['BloodRayne', 'The Adventures of Rocky & Bullwinkle'],
    ['Batman Begins', 'The Lord of the Rings: The Return of the King', 'Upside Down'],
    ['300', 'Lucky Number Slevin', 'Kill Bill: Vol. 1'],
    ['Upside Down', 'Inside Out', 'Iron Man'],
]
best_99 = data[data['vote_average'] > data['vote_average'].quantile(.99)]['original_title']
best_set = set(best_99.unique())
answers['26'] = 'unknown'

for variant in variants:
    variant_set = set(variant)
    if set(variant).issubset(best_set):
        answers['26'] = ', '.join(variant)
    break

print(answers['26'])<jupyter_output>Inside Out, The Dark Knight, 12 Years a Slave<jupyter_text>27. Какие актеры чаще всего снимаются в одном фильме вместе?<jupyter_code>pairs = Counter()
def count_pairs(row):
    for i, cast in enumerate(row['cast_array']):
        for cast2 in row['cast_array'][i:]:
            if cast != cast2:
                pairs[', '.join(sorted([cast, cast2]))] += 1

data.apply(count_pairs, axis='columns')
answers['27'], _ = pairs.most_common(1)[0]
print(answers['27'])<jupyter_output><NAME>, <NAME><jupyter_text>Submission<jupyter_code>display(answers)
# и убедиться что ни чего не пропустил)
print(len(answers))<jupyter_output>27
{'fraction_non_alphanumeric': 0.1765231196666005, 'fraction_numerical': 0.03224846199642786, 'mean_word_length': 8.410830999066294, 'pattern_counts': {'":': 0, '<': 102, '<?xml version=': 0, '>': 107, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '29', 'dir': 'jupyter-structured-clean-dedup', 'id': '413477', 'license': 'MIT', 'n_tokens_mistral': 4133, 'n_tokens_neox': 4050, 'n_words': 592, 'path': 'module_1/Movies_IMBD_v4.1.ipynb', 'repo_name': 'kudryashov-sv/scds', 'size': '10172'}