Ставьте лайк и смотрите снова, вырабатывайте хорошую привычку
Python версии 3.8.0, средства разработки: Pycharm
Перед словами:
Если вы зашли, потому что увидели заголовок, поздравляю, еще один涨(入)知(坑)识
Возможность.
В этой аналитической статье Douban Movie Top250 вы не найдете такого названия, как确切的答案
.
Но вы можете опровергнуть многие, казалось бы, правильные ответы, например следующие:
«Отсортированы ли Douban Movie Top 250 по рейтингу?»
"Он отсортирован по количеству комментариев?"
«Это должно быть сочетание оценок и комментариев?»
以上的想法或许你曾经也想过,但是都不对。
"Почему бы нет?"
"Сомневаешься во мне! Тогда я проанализирую, почему сегодня для тебя!"
Источники данных из предыдущего раздела:
不想运行代码,只想要数据
,Ряд! В конце статьи获取方式
.
Кроме того, как и в предыдущей статье, суть分析的流程
(стучит по доске)
Теперь давайте начнем сегодняшнюю дорогу анализа фильмов Дубана.
Предположение
«Младший брат, почему это предположение, когда ты подходишь? Что такое предположение?»
«Предположения для результатов нашего анализа. Какие результаты вы хотите получить в конце или какие результаты вам нужно доказать, можно использовать в качестве предположений!»
анализ данных结果导向
Да, что такое ориентация на результат?
Грубо говоря, это根据目的去完成任务
.
То, что вы узнаете из того, через что вы прошли, является вашим собственным опытом, и ни лидерам, ни другим людям все равно. От того, будет ли ваша работа квалифицированной и выдающейся, зависит результат.
根据目的去完成任务,总是会事半功倍。你可以用分析去研究你想要的结果
Это похоже на то, что у меня есть друг, который хочет угостить Сяо 1 меня большим обедом более чем на 200 юаней в выходные, это предположение. Согласно предположению, Xiaoyi может выбрать, что поесть, например, Haidilao, жареный ягненок, все может быть организовано, ужин из морепродуктов или что-то еще, вы сказали, что вы едите Shaxian слишком дорого.
Но наше предположение не похоже на двести юаней, это фиксированное число. Наша гипотеза может быть范围
,Один问题
или未知的点
.
Это соответствует этому анализу, и наши предположения могут быть следующими:
- Какой звездный рейтинг лучше отражает общий рейтинг фильма?
- Связан ли общий рейтинг видео с количеством комментариев?
- Какие показатели связаны с общим рейтингом видео?
Ответив на три вышеуказанных вопроса, вы можете先思考
на мгновение, затем перейдите к следующему разделу
правила анализа данных
Возможно, окружающие скажут вам, когда вы начнете анализировать данные.帕累托法则
, этот закон первоначально использовался для описания распределения богатства в человеческом обществе: 20% людей владеют 80% богатства.
Но сейчас это кажется общеприменимым, и все признали, что:重要的因子通常只占少数
.
"Маленький Брат, согласно принципу Парето, что связывает самое важное?"
«Это не может использовать закон Парето, важность данных не вызывает сомнений!»
Во всем цикле анализа данных очистка данных напрямую определяет результаты анализа.是否准确
, визуализация может发现事实问题
, и ищите出现的原因
, в исследовании данных вы можете сделать больше深层次的数据挖掘
.
Анализ данных, теперь у всех есть понятие, и позже я добавлю теоретические знания об анализе данных.
Очистка данных
«Младший брат, что нам нужно знать перед очисткой данных?»
«Прежде чем что-то делать, нужно сначала понять цель».
Цель очистки данных состоит в том, чтобы清洗脏数据
, для последующей визуализации данных и разработки функций, чтобы обеспечить целостность данных合理性、准确性
.
"Ой, то есть мои данные должны быть чистыми, ошибок быть не может"
«Более того, когда в ваших данных есть выбросы, вам также может понадобиться использовать визуальные диаграммы для обнаружения выбросов в данных».
Например, когда у вас есть поле age в ваших данных, вы не можете просто считать все, что не является целым числом, грязным. Тем, чей возраст меньше 0 и тем, кому больше 150 нужно обратить внимание
Поскольку в этих данных не так много грязных данных, понять концепцию может каждый, конкретный метод очистки будет дополнен в разделе о теоретических знаниях.
вы готовы
После получения данных вам необходимо сначала проверить данные整体缺失情况
''' 1. 查看整体数据类型与缺失情况'''
df_data.info()
Видно, что недостающие данные Douban Movie Top250 следующие:
Data columns (total 21 columns):
id 250 non-null int64
movie_rank 250 non-null object
movie_name 250 non-null object
movie_director 250 non-null object
movie_writer 250 non-null object
movie_starring 250 non-null object
movie_type 250 non-null object
movie_country 250 non-null object
movie_language 250 non-null object
movie_release_date 250 non-null object
movie_run_time 250 non-null object
movie_second_name 2 non-null object
movie_imdb_href 250 non-null object
movie_rating 250 non-null object
movie_comments_user 250 non-null object
movie_five_star_ratio 250 non-null object
movie_four_star_ratio 250 non-null object
movie_three_star_ratio 250 non-null object
movie_two_star_ratio 250 non-null object
movie_one_star_ratio 250 non-null object
movie_note 250 non-null object
"Младший брат, что это показывает?"
«Общие поля данных и то, чего не хватает для каждого поля!»
Как видите, наш набор данных содержит в общей сложности21个字段
, из которых только фильмы又名字段
Есть два пустых данных.
250 самых популярных данных о фильмах Дубана, которые мы просканировали, являются регулярными, и отсутствие пропущенных данных является нормальным.Другие данные в реальном бою могут быть не такими регулярными.
Для некоторых фильмов отсутствует информация о ака, просто введите название фильма
# 用影片名称填充影片又名字段
df_data['movie_second_name'].fillna(df_data['movie_name'],inplace=True)
Со статистикой общих данных, давайте проверим每一个字段
''' 2. 查看单个指标的数据,并进行相应的清洗操作'''
Во-первых, это данные сортировки фильмов:
# 1. 影片排名数据
df_data['movie_rank'].head(5)
0 No.1
1 No.2
2 No.3
3 No.4
4 No.5
Name: movie_rank, dtype: object
Видно, что форма данныхNo.XX
Тип, при моделировании этот тип данных не соответствует требованиям.
Здесь мы удаляем данные No. of No.XX, только保留后面的数字
Вот и все.
df_data['movie_rank'] = df_data['movie_rank'].str.replace('No.', '').astype(int)
Далее идет поле «Тип фильма»:
# 2. 影片类型
df_data['movie_type'].head(5)
0 剧情/犯罪
1 剧情/爱情/同性
2 剧情/爱情
3 剧情/动作/犯罪
4 剧情/喜剧/爱情/战争
Name: movie_type, dtype: object
Вы можете увидеть данные в виде формы XX / XX / XX, данные структурированы, это не требует лечения, если модель может быть独热编码
.
Далее следует поле страны производства фильма:
# 3. 影片制作国家
print(df_data['movie_country'].head(10))
0 美国
1 中国大陆 / 中国香港
2 美国
3 法国
4 意大利
Name: movie_country, dtype: object
Видно, что форма данных имеет вид xx/xx, который делится на /, и данные регулярны, но из-за наличия пробелов их необходимо обрабатывать.
"Это просто, братишка, я сделаю!"
# 这里直接对空格进行替换
df_data['movie_country'] = df_data['movie_country'].str.replace(' ', '')
«Примени то, чему научился, это здорово, парень!»
Далее идет поле языка фильма:
Как и в случае с полем страны производства фильма, здесь есть пробельные символы,同样的处理
метод.
# 同理,直接对空格进行替换
df_data['movie_language'] = df_data['movie_language'].str.replace(' ', '')
Далее дата выхода фильма:
# 5. 影片上映日期
df_data['movie_release_date'].head(5)
0 1994-09-10(多伦多电影节)/1994-10-14(美国)
1 1993-01-01(中国香港)/1993-07-26(中国大陆)
2 1994-06-23(洛杉矶首映)/1994-07-06(美国)
3 1994-09-14(法国)
4 1997-12-20(意大利)
Name: movie_release_date, dtype: object
Вы можете видеть, что некоторые фильмы имеют несколько дат выпуска и городов выпуска.
«Младший брат, как с этим справиться? Есть несколько дат выпуска и городов выпуска»
«Только здесь保留首映日期
, дата сохраняет год, и新增
Список городов скрининга"
df_data['movie_release_date'] = df_data['movie_release_date'].apply(lambda e: re.split(r'/', e)[0])
df_data['movie_release_city'] = df_data['movie_release_date'].apply(lambda e: e[11:-1])
df_data['movie_release_date'] = df_data['movie_release_date'].apply(lambda e: e[:4])
Далее длина видео:
# 6. 影片片长
df_data['movie_run_time'].head(10))
0 142分钟
1 171 分钟
2 142分钟
3 110分钟(剧场版)
4 116分钟
Name: movie_run_time, dtype: object
Вы можете видеть, что продолжительность фильма составляет ХХ минут в этом виде, а некоторые в виде 110 минут (театральная версия)
прямо здесь保留影片分钟数
Только что
df_data['movie_run_time'] = df_data['movie_run_time'].apply(lambda e: re.findall(r'\d+', e)[0]).astype(int)
Далее идет общий рейтинг видео, и количество комментариев к видео:
# 7. 影片总评分,影片评论人数
df_data[['movie_rating', 'movie_comments_user']].head(5)
Просто установите соответствующий формат данных, общий рейтинг видео — тип с плавающей запятой, а количество комментариев к видео — целочисленный тип.
# 这里将影片总评分转换为 float、影评人数转换为 int(默认都是 object类型)
df_data['movie_rating'] = df_data['movie_rating'].astype(float)
df_data['movie_comments_user'] = df_data['movie_comments_user'].astype(int)
Далее идет процент звездных рейтингов фильма:
# 8. 影片星级评分占比
df_data[['movie_five_star_ratio', 'movie_four_star_ratio', 'movie_three_star_ratio',
'movie_two_star_ratio', 'movie_one_star_ratio']].head(5)
Видно, что доля звездных оценок составляет xx%.
Все видео со звездным рейтингом обрабатываются здесь, а百分比转换成小数
Вот и все.
«Младший брат, очистка данных завершена?»
«Предыдущие шаги нужны нам только для того, чтобы лучше визуализировать данные. В следующем процессе визуализации мы проведем целенаправленную очистку данных»
Итак, далее суть(第二次敲黑板
)
визуализация данных
через пару数据可视化
, нашел данные分布
ситуация, даже между данными关联
Информация.
"Какие модули нужны для визуализации?
Для визуализации можно использовать matplotlib, но я использовал seaborn.
«Зачем использовать Seaborn для построения графика?»
seaborn
такой жеmatplotlib
Это также важный сторонний пакет для анализа визуализации данных в Python.но
seaborn
вmatplotlib
Благодаря более продвинутой инкапсуляции API рисование стало проще, а графика стала красивее.Для некоторых особых случаев все же необходимо использовать
matplotlib
Да, это должно бытьseaborn
рассматривается какmatplotlib
добавки, а не заменители.
Соответствующие операции Seaborn могут понять все, а простое руководство будет дано позже.
вы готовы
На предыдущем шаге мы выполнили предварительные обнаружения для каждого поля. Взгляните на описательную статистику для общих данных:
Выполните простую описательную статистику по численным особенностям, включая среднее, медиану, режим, дисперсию, стандартное отклонение, максимальное, минимум и т. Д.
# 描述性数据统计
df_data.describe()
Далее, судья数据类型
, фиксированный класс? Последовательность действий? расстояние? Или соотношение?
Выяснение этого шага в основном для последующей визуализации правильного метода
'''数据类型划分
影片类型、影片制片国家、影片语言: 定类数据<br>
影片片长、影片总评分、影片评论数、影片时间:定距数据
影片5/4/3/2/1星占比:定比数据
'''
В соответствии с оценкой каждого типа данных объекта, приведенного выше, выберите подходящий метод визуализации для завершения визуализации.
Порядковый/упорядоченный анализ признаков
Буду影片类型
Подсчитайте количество вхождений каждого типа после разделения данных на /
'''统计影片类型数据'''
df_data['movie_type'] = df_data['movie_type'].map(lambda e: e.split('/'))
# 将数据转换成一维数组
movie_type_list = np.concatenate(df_data['movie_type'].values.tolist())
# 将一维数组重新生成 Dataframe 并统计每个类型的个数
movie_type_counter = pd.DataFrame(movie_type_list, columns=['movie_type'])['movie_type'].value_counts()
# 生成柱状图的数据 x 和 y
movie_type_x = movie_type_counter.index.tolist()
movie_type_y = movie_type_counter.values.tolist()
рисовать影片类型
гистограмма
ax1 = sns.barplot(x=movie_type_x, y=movie_type_y, palette="Blues_r", )
# Seaborn 需要通过 ax.set_title() 来添加 title
ax1.set_title('豆瓣影片Top250类型统计 by:『知秋小梦』')
# 设置 x/y 轴标签的字体大小和字体颜色
ax1.set_xlabel('影片类型', fontsize=10)
ax1.set_ylabel('类型出现次数', fontsize=10)
# 设置坐标轴刻度的字体大小
ax1.tick_params(axis='x', labelsize=8)
# 显示数据的具体数值
for x, y in zip(range(0, len(movie_type_x)), movie_type_y):
ax1.text(x - 0.3, y + 0.3, '%d' % y, color='black')
plt.show()
Следующие коды отрисовки не отображаются один за другим, а общий код слишком длинный и вам неудобно на него смотреть. Если вам нужен исходный код, в конце статьи есть способ его получить.
Статистика типов видео выглядит следующим образом:
можно увидеть,剧情类占比特别高
, первые пять типов:剧情、爱情、喜剧、犯罪和冒险
.
Среди них есть два эротических, эммм, не скажу какие.
Точно так же影片语言
Подсчитайте количество вхождений каждого языка после передачи/разделения данных
Языковая статистика видео выглядит следующим образом:
можно увидеть,英语类占比特别高
, в первую пятерку языков входят:英语、日语、汉语普通话、法语和德语
.
Я обнаружил более интересное явление. Вы можете увидеть кантонский, шанхайский диалект, хоккиенский диалект, чунцинский диалект, шаньсиский диалект, хунаньский диалект, таншаньский диалект, диалект хакка и сычуаньский диалект. Вы можете посмотреть конкретные видео позже.
То же самое будет影片制片国家/地区
Подсчитайте количество вхождений каждой страны/региона после передачи/разделения данных.
Статистика по странам производства фильма выглядит следующим образом:
голливудская сила稳居榜首
, в первую пятерку стран/регионов производства входят США, Япония, Великобритания, Гонконг, Китай и материковый Китай.
В гонконгских фильмах по-прежнему много классики.
Анализ характеристик интервалов/соотношений
Продолжительность фильма, общий балл фильма и количество комментариев к фильму — все это характеристики фиксированного расстояния и фиксированного отношения, давайте проанализируем их по очереди.
Статистика продолжительности видео выглядит следующим образом:
Продолжительность фильма в основном составляет от 75 до 175, что также соответствует длине большинства современных фильмов.
Видно, что есть еще один фильм под 50 минут, это короткометражный документальный фильм? Мы выложим его позже, посмотрите.
Общий рейтинг видео таков:
Общий балл фильма составляет высший балл 9,7, самый низкий балл 8,3 и самый высокий балл 8,8.
Есть десять фильмов с общей оценкой 9,4 и выше, не знаю,对应的 Top10
?
Количество комментариев к видео следующее:
Количество комментариев к большинству видео относительно сконцентрировано, а количество комментариев составляет менее 75 человек.
Тот, у кого больше всего комментариев, близок к 175w человек, и видно, что разница вполне очевидна.
«Подумайте о том, что мы упоминали ранее帕累托法则(二八原则)
Это применимо? "
Даты выхода фильмов следующие:
Топ-250 фильмов сосредоточены с 2000 по 2017 год, из которых в 2004 году было выпущено больше всего фильмов, достигнув 14.
«Могу ли я спросить, каково это — смотреть по блокбастеру в месяц? Я тоже хочу его испытать!»
Статистика доли звездных обзоров видео выглядит следующим образом:
Кинозвезда разделена на пять уровней, давайте посмотрим每个星级的评论数
распределено:
Распределение звезд не сильно отличается, но распределение пяти и одной звезды, кажется, больше соответствует распределению общего числа отзывов.
«Кажется, применимость принципа 28 достаточно сильна!»
исследование данных
Мы оставили некоторые вопросы в предыдущем разделе, наряду с нашей сегодняшней целью: к чему именно относится общий рейтинг? будет рассмотрено в этом разделе
Готовы узнать ответ?
Сначала решите задачу из предыдущего раздела:
Язык фильма - это фильм на китайском материковом языке:
# 中国大陆参与制作的影片
df_data[df_data['movie_country'].str.contains('中国大陆')][
['movie_rank', 'movie_name', 'movie_release_date',
'movie_type', 'movie_country', 'movie_language']]
Видео продолжительностью до 50 минут:
df_data.sort_values(by='movie_run_time')[
['movie_rank', 'movie_name', 'movie_release_date', 'movie_run_time',
'movie_rating', 'movie_comments_user']].head(1)
«Эммм, это Сяойи, я невежа, я прочитаю статью после того, как напишу ее!»
Пять лучших видео с наибольшим количеством отзывов:
# 评论数最多的前五条影片
df_data.sort_values(by='movie_comments_user', ascending=False)[
['movie_rank', 'movie_name', 'movie_release_date', 'movie_rating',
'movie_comments_user']].head(5)
Фильм с наибольшим количеством отзывов «Побег из Шоушенка» заслуживает своего названия.
Тем не менее, рейтинг 250 лучших фильмов Дубана действительно不是按照评论数排序
(①)
Пятерка фильмов с самым высоким рейтингом
# 评分最高的前五部影片
df_data.sort_values(by='movie_rating', ascending=False)[
['movie_rank', 'movie_name', 'movie_release_date', 'movie_rating',
'movie_comments_user']].head(5)
Нет саспенса, а самый высокий общий балл — [Побег из Шоушенка].
Тем не менее, рейтинг 250 лучших фильмов Дубана действительно不是按照总评分数排序
(②)
Топ 5 фильмов со звездным рейтингом
Ранее мы проанализировали, что распределения с пятью звездами и одной звездой согласуются с общим баллом, давайте посмотрим
# 五星评分人数最多的前五条影片
df_data['five_star_movie_comments_user'] = \
df_data['movie_comments_user'] * df_data['movie_five_star_ratio']
df_data.sort_values(by='five_star_movie_comments_user', ascending=False)[
['movie_rank', 'movie_name', 'movie_release_date', 'movie_rating',
'movie_comments_user']].head(5)
Хотя тоже不对
, но он кажется более надежным, чем два предыдущих сорта! (③)
«Младший брат, рейтинг будет определяться на основе общего балла и количества комментариев?»
"Давай попробуем"
Топ 5 фильмов с самыми рейтинговыми + комментариями
# 评分+评论数最高的前五部影片
df_data.sort_values(by=['movie_rating', 'movie_comments_user'],
ascending=False)[['movie_rank', 'movie_name', 'movie_release_date',
'movie_rating', 'movie_comments_user']].head(5)
Количество обзоров + 5 лучших видео с самым высоким рейтингом
# 评论数+评分最高的前五部影片
df_data.sort_values(by=['movie_comments_user', 'movie_rating'],
ascending=False)[['movie_rank', 'movie_name', 'movie_release_date',
'movie_rating', 'movie_comments_user']].head(5)
Douban Movie Top 250 Сортировка也不是按照评论数+总评分排序
(④)
«Это все еще неправильно, сортировка фильмов не может быть такой простой, как линейная, верно, братишка?»
«Да, для ранжирования фильмов требуется алгоритм ранжирования на основе голосов пользователей, аналогичный средневзвешенному IMDB, и будут учитываться веса некоторых кинокритиков и режиссеров».
Алгоритмы ранжирования фильмов дают понять, что если статья может не получиться, но и脱离
фокус нашего произведения.
Алгоритм оценки видео Douban не был обнародован, я нашел содержание механизма оценки видео Douban в Интернете, все об этом знают.长个见识
Просто делать:
Зарегистрированные пользователи Douban поставят оценку от 1 до 5 звезд, если у них будет хорошее настроение после просмотра фильма (иногда они также приходят, когда у них плохое настроение).
Допустим, фильм оценили 420 000 пользователей. Наша программа преобразует эти 420 000 звездочек от одного до пяти в числа от нуля до десяти и делит их на 420 000, чтобы получить показатель Дубана.
Этот рейтинг будет автоматически появляться везде на Douban, в середине нет обзора, и обычно на него не смотрит редактор.
Каждые несколько минут программа автоматически перезагрузится, включая мнение самого последнего бомбардира.
—— Бей, основатель Douban
В заключение:
предложить гипотезу
Для данных фильма Дубана мы提出了一些小问题
для целей нашего анализа
Очистка данных
Проверьте данные в целом и проверьте наличие отсутствующих данных增补
, проверка данных для каждого поля是否合理
,а также转换
в данные, которые нам понадобятся позже.
визуализация данных
Визуализация позволяет нам иметь интуитивное представление о данных и может проводить вторичные проверки необоснованных данных.
исследование данных
Небольшое решение поднятых вопросов и подробный анализ по отношению к целям.
Конечно, мы упускаем здесь последний шаг: проектирование функций и модели оценки. (Не используется в этом анализе)
думать
Вышеизложенное составляет основное содержание нашего анализа реальных боевых действий сегодня.基础
, но есть и много контента. Первый аналитический проект направлен на то, чтобы все поняли分析流程
.
Студентам, которые считают, что содержания сегодняшнего содержания недостаточно, можно также подумать над следующими вопросами:
- Какие еще параметры могут комбинироваться друг с другом и влиять на общий порядок?
- Их визуальный дисплей вы можете вытянуть из него?
- Как должна быть разработана модель подсчета очков (см. алгоритм ранжирования Жуань Ифэна)?
Получение исходного кода
На данный момент исходный код, связанный с нашим фильмом Douban, выглядит следующим образом:
существует公众号后台
Отвечать豆瓣电影
Получить исходный код Crawling Douban Movie Top250
существует公众号后台
Отвечать电影数据
Получите подробные данные о Douban Movie Top250
существует公众号后台
Отвечать电影分析
Получить и проанализировать исходный код Douban Movie Top250
слова, написанные на спине
Первый реальный боевой проект закончился, и часть контента действительно не понятна, но используется напрямую, не знаю, сможете ли вы это понять.
Однако эти два контента только наша.基础文章
, Дело в том流程
, не надо идти细究
одна из деталей.
Я уже придумал, что сыграть для моего следующего проекта, вы готовы?
下期见!
подумай об этом
Написание технических статей — это более чем один уровень сложности, потому что выводить контент в статьи довольно сложно.
Я закончил писать код за две ночи, но на это у меня ушли все выходные,
点个赞
служба поддержки?
Нелегко быть оригинальным, пожалуйста, лайкни
Первый выпуск статьи: публичный аккаунт [Чжицю Сяомэн]
Синхронизация статей: Наггетс, Цзяньшу
Оригинальная ссылка:Вы знаете, как рейтинг фильмов Douban оценивается?