Есть два вопроса на тему Data Science

я сейчас прохожу онлайн курс и там есть два вопроса на которые не могу правильно ответить.

Нужно провести анализ данных на основе датасета сайта IMBD https://drive.google.com/open?id=1nokVzSNxkUPil3aYRBI_fgzx25gtSEta и ответить на два вопроса :

1.Какая студия сняла больше всего фильмов? Варианты ответа:

  • Universal Pictures (Universal)
  • Paramount Pictures
  • Columbia Pictures
  • Warner Bros
  • Twentieth Century Fox Film Corporation

Ответ "Universal Pictures (Universal)" не правильный. уже проверял

2.Какая студия сняла больше всего фильмов в 2015 году?

Варианты ответа:

  • Universal Pictures
  • Paramount Pictures
  • Columbia Pictures
  • Warner Bros- это ответ тоже не правильный.
  • Twentieth Century Fox Film Corporation

Как будет выглядеть 2 кода на python которые дают ответы на данные вопросы?


Ответы (3 шт):

Автор решения: Sergey

Ну, задача не сильно тривиальная для новичка, поэтому дам набросок ответа по первому пункту. Думаю, со вторым уже надо самому :-) Как-то так, наверное:

import pandas as pd

# Вводим данные
df = pd.read_csv('data.csv')

# Список киностудий
company = df['production_companies']

# Подсчитываем число вхождений каждой киностудии
counter = {}
for k in company: 
    counter[k] = counter.setdefault(k, 0) + 1

# Сортируем по количеству фильмов
sc = sorted(counter.items(), key=lambda t: t[1])

# Печатаем результат
for k,v in sc:
    print(k, v)
→ Ссылка
Автор решения: MarianD

Сначала создаем новую таблицу df2 по одной кинокомпании в столбце company.

Это нужно сделать потому, что в оригинальной таблице в столбце production_companies может быть несколько кинокомпаний перечисленных через символ |.

df1 = pd.concat(pd.DataFrame({
          "company": company,
          "year": row["release_year"],
          }, index=[ind])
              for ind, row in df.iterrows()
                  for company in row["production_companies"].split("|"))

Теперь уже можем решить ваше задания:

  1. Группировка, затем подсчет и выбор (сколько хотим) наибольших:

    df1.groupby("company").company.count().nlargest(3)
    
    Universal Pictures    173
    Warner Bros.          168
    Paramount Pictures    122
    
  2. То же самое, только сначала выбор года 2015:

    df1[df1.year == 2015].groupby("company").company.count().nlargest(3)
    
    Warner Bros.                              12
    Universal Pictures                        10
    Twentieth Century Fox Film Corporation     8
    

Примечание:

Мне кажется (на основании моих результатов), что вы в своем вопросе заменили варианты ответов между заданиями:

  • к заданию 1 принадлежат варианты ответов из задания 2 и наоборот.
→ Ссылка
Автор решения: Илья Митусов

1.

import pandas as pd

data = pd.read_csv('data.csv')    

# разделяем названия компаний
data['production_companies'].str.split('|', expand=True)

# соединим год выпуска со списком компаний
frame = pd.concat([data['release_year'],
                   data['production_companies'].str.split('|', expand=True)],
                   axis=1)

# сделаем единный столбец с названиями компаний
frame = frame.melt(id_vars=['release_year'])

# посмотрим на компании, которые встречаются чаще всего
frame['value'].value_counts()

2.

# выбрать только те значения, которые удовлетворяют условию
flt = data['release_year'] == 2015

# проделать то же самое, что и в первом вопросе но уже на:
data.loc[flt, :]
→ Ссылка