Есть два вопроса на тему 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 шт):
Ну, задача не сильно тривиальная для новичка, поэтому дам набросок ответа по первому пункту. Думаю, со вторым уже надо самому :-) Как-то так, наверное:
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)
Сначала создаем новую таблицу 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("|"))
Теперь уже можем решить ваше задания:
Группировка, затем подсчет и выбор (сколько хотим) наибольших:
df1.groupby("company").company.count().nlargest(3)Universal Pictures 173 Warner Bros. 168 Paramount Pictures 122То же самое, только сначала выбор года 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, :]