首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

数据分析奥斯卡女神们,谁是你心中的No.1?

  • 24-03-05 02:22
  • 4719
  • 7002
blog.csdn.net

640?wx_fmt=jpeg


作者 | 徐麟

转载自数据森麟(公众号 ID:shujusenlin)


前言


在开始今天的正文前,首先带来一首经典的由奥黛丽·赫本演唱的《Moon River》,也是电影《蒂凡尼的早餐》中的主题曲。



640?wx_fmt=jpeg


一年一度的奥斯卡奖于上月落下了帷幕,截止到今年,奥斯卡已经走过了91年的历程。奥斯卡奖在为我们带来一次又一次的视觉盛宴同时,也为我们提供了更进一步了解活跃在影坛的女神们的机会。


女神节将至,我们首先主要祝愿广大的女性同胞美丽永驻。同时我们来为大家盘点一下那些在奥斯卡闪耀过的女神们,她们“惊艳了时光,温柔了岁月”,带给喜爱她们的人们一段段美好的回忆。


数据来源

要先感谢小F(Python大本营作者)之前的一篇文章( 奥斯卡,究竟谁一直在陪跑 )的启发,让我们找到了能够全面地获取女神们奥斯卡相关数据网站 - 时光网,首先我们获取的是时光网上历届奥斯卡最佳女主角的入围及获奖信息,我们从中确定了此次数说的女神们:


640?wx_fmt=png

  

获得了历届获奖以及提名名单后,我们就要进入女神们的主页:


640?wx_fmt=jpeg


女神们的主页信息还是很丰富的,主要是两个部分(a)上图左下角女神们的身高,星座以及出生年份 (b)上图中间网友对女神的喜爱度评分。有了这两部分的信息,我们就可以开始在后面的部分对女神们进行一系列的分析了。


部分的爬取代码如下:



 
 

driver = webdriver.Chrome()
driver.maximize_window() 
driver.close() 
driver.switch_to_window(driver.window_handles[0]) 

for i in range(queens_name.shape[0]):
    url = queens_name['profile'][i]
    js='window.open("'+url+'")'
    driver.execute_script(js)
    driver.close() 
    driver.switch_to_window(driver.window_handles[0])
    try:
        queens_name['photo'][i] = driver.find_element_by_xpath('//*[@id="personDetailRegion"]/div[1]/span/a').get_attribute('href')
        queens_name['height_star'][i] = driver.find_element_by_xpath('//*[@id="personDetailRegion"]/dl[1]').text
        queens_name['born_home'][i] = driver.find_element_by_xpath('//*[@id="personDetailRegion"]/dl[2]').text
        queens_name['count_score'][i] = driver.find_element_by_xpath('//*[@id="personRating"]/div[2]').text
    except:
    err_list=err_list+[i]


数说女神 -- 欢迎度

在开始数说女神与奥斯卡直接的故事前,我们先来看一下女神在大家心中的受欢迎程度,主要看的就是时光网上女神的喜爱度和投票人数两项指标:


640?wx_fmt=png


奥黛丽·赫本在榜单中的位置体现了她在观众心中无可替代的地位,赫本年轻时用出众的容貌和演技一次次在电影中惊艳这个世界,随着岁月的流逝,她选择了优雅地老去,致力于慈善事业,用一颗善良的心带给这个世界一份温柔。


费雯·丽在榜单中仅次于赫本,塑造的郝思嘉这一经典形象也是影响了一代又一代的观众。同时在榜单中我们也看到了娜塔莉·波特曼和凯特·温斯莱特这些年轻观众更为熟知的女神身影。

数说女神 -- 关注度

下面我们要看的就是女神们的受关注度,主要看的是有多少人在网站中为女神们进行评价:


640?wx_fmt=png


这份榜单,相对于之前的受欢迎度,可能出场的女神更为被年轻观众所熟知。同时在两份榜单中出现的只有奥黛丽·赫本和凯特·温斯莱特,她们也分别代表着经典和现代。


值得一提的是,榜单中排名前四的女神们,目前只有娜塔莉·波特曼染指过最佳女主角的奖项。其它三位高人气女神海瑟薇、朱莉和奈特莉,我们希望她们能够在未来拍出更多经典的作品,捧起奥斯卡最佳女主角的小金人奖杯。


数说女神 -- 提名&获奖

看完了女神的受欢迎度和关注度,我们来看一个大家都会比较关注的问题,那就是究竟哪位女神最受奥斯卡奖的青睐,获得最多次的奥斯卡最佳女主角奖:


640?wx_fmt=png


可以看到凯瑟琳·赫本以四次获奖的成绩在这个榜单中独占鳌头,说起赫本,可能奥黛丽·赫本的名字要更加熟悉一些,但实际上,在奥斯卡奖的认可度方面,凯瑟琳·赫本要更胜一筹。同时也看到了有13位女神两次获得奥斯卡奖最佳女主角,其中就有大名鼎鼎的费雯·丽、希拉里·斯万克以及 “奥斯卡常青树“ 梅丽尔·斯特里普。


只要是和奖项相关的,就总是会“几家欢喜几家愁”,下面我们就来看一下各位女神入围最佳女主角奖的次数:


640?wx_fmt=png


梅丽尔斯·特里普以17次入围的表现毫无争议地在这项对比中遥遥领先,更加值得注意的是,这项数据可能在未来被继续刷新,我们也拭目以待。通过这份数据,我们也可以感受到奖项竞争的激烈情况,奥黛丽·赫本和葛利亚·嘉逊这种世界巨星也仅仅分在在5次和7次入围中有1次的获奖记录。


同时我们也看到黛博拉·寇儿和艾琳·邓恩分别入围6次和5次最佳女主角,最终都与奖项无缘,我们一方面可能会感觉评委会有些不近人情,另一方面也更加体现出了奖项的含金量。


数说女神 -- 年龄

有人说“年龄是女人的秘密”,但是对于女神们来说,年龄只是一个符号。真正的女神会在不同的年龄去散发不同的光芒,每一束光芒都足以照亮这个世界。首先看一下那些入围时较为年长的女神:


640?wx_fmt=png


可以看到在这些女神面前,年龄真的只是一个标记,无碍她们散发自己的光芒。朱迪·丹奇更是在自己 72、73、80 岁的时候三次入围最佳女主角的提名。在10次最年长的提名中,杰西卡·坦迪和凯瑟琳·赫本分别在自己 81、75岁的时候最终摘得桂冠。


我们同时也来看一下,那些年少成名,入围时最为年轻的女神们:


640?wx_fmt=png


有两位都是在自己15岁前就入围最佳女主角的提名,想想大家的 15 岁,真的是要惊叹于她们把握机遇的能力。在10次最年轻的入围提名中,只有玛丽·玛特琳在1987年最终赢得桂冠,也成为了迄今为止最年轻的影后。


我们看一下各个年份入围者的平均年龄:


640?wx_fmt=png


大家可以会从中看到一些有趣的事情,我们就加上一条线性拟合的趋势线来让大家更清晰地去解读这些数据:


640?wx_fmt=png


这条趋势线是可以通过我们的线性检验,也说明了奥斯卡愈发的看重演员的资历,年龄真的越来越成为了一种符号,真正的女神就是可以在不同的年龄都展现属于自己的光芒。


数说女神 -- 身高

”年龄不是问题,身高也不是差距“。下面我们就来说说身高,有些人会比较武断地对女神的标准身高下一些定义,然而通过我们的数据分析,会发现女神们的身高实际上是很多元化的。利用好自己身材上的优势,展现出属于自己的魅力,才是最为重要的。


首先看一下身材高挑的女神们:


640?wx_fmt=png


女神中不乏有许多超过180cm的模特身材,身高其实真的并不能代表所有。榜单中排名前茅的妮可·基德曼身高180cm,然而其前夫汤姆·克鲁斯身高仅仅是173cm,虽然现在已是劳燕分飞,但也不失为一段佳话。


特别值得一提的是榜单中的裴淳华是《消失的爱人》女主角罗莎曼德·派克为自己起的中文名,未来也希望越来越多的女神们为自己起上一个好听的中文名。下面我们来看一下那些身材娇小的女神们:


640?wx_fmt=png


榜单中出现了许多熟悉的身影,比如伊丽莎白·泰勒、朱迪·福斯特 ,她们的身高都没有超过160cm,但并不妨碍她们成为大家记忆中永恒的女神。


下面我们仿照之前的入围年龄分析,看一下历年入围的影后平均身高:


640?wx_fmt=png


可以看到整体趋势与入围的年龄整体上涨趋势有所不同,所呈现的趋势更像是一个抛物线,我们不妨进行一下二次项拟合:


640?wx_fmt=png


这条曲线也通过了参数的显著性检验,我们可以看到在1980、90年代的入围名单中,身高趋势线达到了一个峰值,之后有所下降。我们结合着不同时期出生的女神身高情况来进行对比:


640?wx_fmt=png


1950-1970之间出生的女神身高确实相对比较高,这样可以解释了上面入围者身高趋势的变化情况。我们也希望通过这部分的分析让大家能够尽量不要那么去看重一个人的身高,女神们的成功也证明了成功与否与身高无关。


数说女神 -- 遗珠

纵使我们将奥斯卡最佳女主角所有的提名者放在一起,也会发现有很多留给我们经典回忆的女神们,并没有出现在榜单。下面我们就选取了部分未被提名过的女神们,为大家列出:


640?wx_fmt=png


名单中有许多我们耳熟能详的女神名字,比如苏菲·玛索、玛丽莲·梦露以及在《肖申克的救赎》中海报中出现的丽塔·海华丝。希望未来奥斯卡能够让更多的女神们得以入围。


部分分析代码如下:


 
 

k <- lm(age~year,data = reward)
reward$smooth_age <- predict(k,year = reward$year)
ggplot(reward,aes(x=year))+geom_line(aes(y=age),size=1.5)+
    theme_bw()+
    ggtitle('各年度入围者平均年龄')+
    theme(axis.text.x = element_text(size=18),
    axis.text.y = element_text(size=18),
    plot.title = element_text(hjust=0.5,size=35,face='bold'),
    panel.grid = element_blank(),
    legend.position = 'none',
    axis.title = element_text(size=25)
    )+geom_line(aes(y=smooth_age),col='darkblue',size=1.5)


结语

盘点完这些“惊艳了时光,温柔的岁月”的女神们,我们不妨静下心来,花上一点时间,找个安静的地方,选上一部电影佳作。静静地品味女神们为我们塑造过的经典角色。


本文的完整代码:

https://github.com/shujusenlin/oscar


欢迎大家留言与我们一起聊聊你心中的女神~


(本文为 AI科技大本营转载文章,转载请联系原作者)


◆

征稿

◆


640?wx_fmt=png

推荐阅读:

  • 300道Python面试题,备战春招!

  • 2018中国开发者真实现状:40岁不做开发,算法工程师最稀缺!

  • Python之父龟叔推荐的学习视频,有趣、好玩,全是好评!

  • 数据分析奥斯卡女神们,谁是你心中的No.1?

  • 5年Go语言经验薪资翻倍! 这份全球职业报告中, 区块链开发者薪资排第三, 前两名你绝对想不到!(含完整版下载资源)

  • 女神节 | 那些奋斗在IT领域的“女神”们

  • 聊天宝解散,多闪、马桶MT还会远吗?| 畅言

  • 程序员撒狗粮!3 天开发自己的婚礼小程序!

  • 为啥程序员下班后只关显示器从不关电脑?

                         640?wx_fmt=png

❤点击“阅读原文”,查看历史精彩文章。

是否曾对着后端项目目录抓耳挠腮?密密麻麻的文件和文件夹,到底谁是谁的 “爸爸”?🤯 别慌!今天就以 Node.js + Express + MySQL 技术栈为例,带你拆解企业级后端项目的目录结构 —— 从 router 到 controller,从 service 到 model,每一层目录如何分工协作?为什么数据库配置要单独拎出来?代码分层到底能带来多少效率提升?🚀 往下看,5 分钟让你秒懂后端目录的 “成长逻辑”,从此告别 “目录文盲”!

一、为什么后端目录结构很重要?

  • 协作高效:多人开发时,清晰的分层让代码职责明确,避免 “aghetti code”(意大利面式混乱代码)。
  • 维护轻松:修改功能或排查问题时,能快速定位到对应模块,减少 “大海捞针” 式调试。
  • 扩展性强:新增功能或更换技术栈时,分层结构能降低模块间的耦合度,方便迭代。

二、企业级后端目录长啥样?

以一个用户管理系统为例,典型目录结构如下:

bash
代码解读
复制代码
user-system/ ├── src/ # 核心代码目录 │ ├── config/ # 配置层:数据库、环境变量等 │ │ └── db.js # MySQL连接池配置 │ ├── models/ # 数据模型层:定义数据库表结构 │ │ └── userModel.js # 用户表模型 │ ├── services/ # 服务层:处理复杂业务逻辑 │ │ └── userService.js # 用户业务逻辑 │ ├── controllers/ # 控制器层:处理请求/响应 │ │ └── userController.js# 用户请求处理 │ ├── routers/ # 路由层:定义API接口 │ │ └── userRouter.js # 用户路由 │ └── app.js # 应用入口:启动服务、加载中间件 ├── .env # 环境变量文件(数据库密码等敏感信息) ├── package.json # 依赖管理 └── README.md # 项目说明

三、核心目录层详解

1. 配置层(config)

作用:集中管理敏感信息(如数据库密码)和环境配置,避免硬编码。
示例:MySQL 连接池配置(src/config/db.js)

小伙伴们自己部署服务器时~用的就是这个和数据库相连噢❗

javascript

arduino
代码解读
复制代码
const mysql = require('mysql2/promise'); require('dotenv').config(); // 加载.env文件中的环境变量 // 创建连接池(生产环境自动从环境变量获取配置) const pool = mysql.createPool({ host: process.env.DB_HOST, // 数据库地址(如:localhost) user: process.env.DB_USER, // 用户名 password: process.env.DB_PASSWORD, // 密码 database: process.env.DB_NAME, // 数据库名 connectionLimit: 10, // 最大连接数 }); module.exports = pool; // 导出连接池供其他模块使用

2. 数据模型层(models)

作用:封装数据库操作细节,定义表结构和 CRUD 方法。
示例:用户表模型(src/models/userModel.js)

javascript

javascript
代码解读
复制代码
const pool = require('../config/db'); // 引入连接池 // 获取用户列表 const getAllUsers = async () => { const [rows] = await pool.execute('SELECT * FROM users'); return rows; }; // 根据ID获取用户 const getUserById = async (userId) => { const [rows] = await pool.execute('SELECT * FROM users WHERE id = ?', [userId]); return rows[0]; }; module.exports = { getAllUsers, getUserById };

3. 服务层(services)

作用:处理复杂业务逻辑(如数据校验、跨表查询),调用模型层但不直接操作 HTTP 请求。
示例:用户业务逻辑(src/services/userService.js)

javascript

javascript
代码解读
复制代码
const userModel = require('../models/userModel'); // 获取用户并校验是否存在 const getUserAndCheck = async (userId) => { const user = await userModel.getUserById(userId); if (!user) throw new Error('用户不存在'); // 业务逻辑校验 return user; }; module.exports = { getUserAndCheck };

4. 控制器层(controllers)

作用:处理 HTTP 请求和响应,调用服务层逻辑,返回数据给前端。
示例:用户请求处理(src/controllers/userController.js)

javascript

ini
代码解读
复制代码
const userService = require('../services/userService'); // 获取用户信息接口 const getUser = async (req, res) => { try { const userId = req.params.id; const user = await userService.getUserAndCheck(userId); // 调用服务层 res.status(200).json({ data: user }); // 返回JSON响应 } catch (error) { res.status(404).json({ error: error.message }); // 处理异常 } }; module.exports = { getUser };

5. 路由层(routers)

作用:定义 API 接口路径,绑定请求方法(GET/POST 等)和控制器。
示例:用户路由(src/routers/userRouter.js)

javascript

ini
代码解读
复制代码
const express = require('express'); const router = express.Router(); const userController = require('../controllers/userController'); // 定义GET请求:/api/users/:id router.get('/:id', userController.getUser); module.exports = router;

6. 应用入口(app.js)

作用:启动服务,加载中间件(如 JSON 解析)和路由。
示例:启动 Express 服务(src/app.js)

javascript

ini
代码解读
复制代码
const express = require('express'); const userRouter = require('./routers/userRouter'); // 引入用户路由 const app = express(); // 中间件:解析JSON请求体 app.use(express.json()); // 挂载用户路由:所有请求以/api/users开头 app.use('/api/users', userRouter); // 启动服务,端口从环境变量获取(默认3000) const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`Server running on http://localhost:${port}`); });

四、关键问题解答

Q1:为什么要分层?直接在路由里写 SQL 不行吗?

  • 反例:路由里直接写 SQL 会导致代码混乱,修改逻辑时牵一发而动全身。
  • 正解:分层后,模型层专注数据库操作,服务层专注业务逻辑,控制器专注 HTTP 交互,职责分离更清晰。

Q2:环境变量文件(.env)有什么用?

  • 存放敏感信息(如数据库密码),避免代码仓库泄露风险。

  • 示例.env内容:

    plaintext

    ini
    代码解读
    复制代码
    DB_HOST=localhost DB_USER=root DB_PASSWORD=your-secret-password DB_NAME=user_system PORT=3000

Q3:生产环境如何部署?

  1. 修改.env为生产环境配置(如数据库地址改为远程服务器)。

  2. 使用 PM2 等工具管理进程:

    bash

    bash
    代码解读
    复制代码
    npm install pm2 -g pm2 start src/app.js --name "user-system"

五、总结:目录结构的核心原则

  1. 单一职责:每个目录层只做一件事(如models只操作数据库,services只处理业务逻辑)。

  2. 高内聚低耦合:模块内部功能紧凑,模块之间依赖尽可能少。

  3. 可维护性优先:通过分层和规范命名,让新人也能快速上手项目。

下次看到后端项目目录,再也不用慌啦!💪 现在就动手搭建一个属于自己的分层项目吧~

互动问题:你在开发中遇到过最混乱的目录结构是什么样的?欢迎在评论区吐槽!👇

注:本文转载自blog.csdn.net的AI科技大本营的文章"https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/88361308"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top