学习日志 · 2022年10月18日 0

Python编程竞赛 2022竞赛练习题

说明

此训练题是2022年Python编程竞赛
平台:http://www.zuoyizuo.com/
为防止官方文件失效,所有文件在:https://pan.ymypay.cn/zh-CN/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/ 都可以找到
2018年的训练题可在:https://gitee.com/shtlls/python-exercises/tree/master

模块一 语法基础与算法分析

1.1:求两数之和

任务详情
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出“和”为目标值的两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案,数组中元素不能重复输入。

请根据上面的要求,编写相应的算法,将右边的函数 twoSum() 补充完整。

举例

给定 nums = [2, 7, 11, 15],target = 9;

nums[0] + nums[1] = 2 + 7 = 9,返回[0, 1]。

任务要求
1. 代码编写必须在右边指定的区域编写;

2. 函数接收两个变量,一个是整数数组 nums:list,另一个是目标值 target: int;

3. 如果存在两种或以上符合目标值 target 的情况,返回下标相加之和较小的数组;

4. 函数返回的值必须为一个数组,list数据类型,元素排序为正序排序,如返回 [1, 3] 符合条件,[3, 1] 不符合条件。

测试用例
用例一

输入:[2,3,2,4], 7

输出:[1, 3]


用例二

输入:[2, 6, 7, 7], 9

输出:[0, 2]
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
class Solution:

    def twoSum(self, nums: list, target: int) -> list:
        flag = False
        list1 = []
        for i, value1 in enumerate(nums):
            if flag:
                break
            for j, value2 in enumerate(nums):
                if value1 + value2 == target:
                    if i == j:
                        continue
                    list1.append(i)
                    list1.append(j)
                    flag = True
                    break
        return list1
此代码算法:穷举,是则退出记录两个数,不是就是无

1.2:判断数组重复元素

任务详情
编写一个函数 arrayRepeat(),对于任意输入的一个整数数组,如果整数数组中存在重复元素且重复元素均不相邻,函数返回 字符"01";

如果整数数组每个元素均不相同且偶数元素个数大于奇数元素个数,函数返回字符"02";

如果整数数组均不满足上述两个条件,函数返回字符 "03"

任务要求
1. 代码编写必须在右边指定的区域编写;

2. 函数接收一个变量 arr,list 数据类型;

3. 函数返回值必须为字符串数据类型。

测试用例 
输入:[1, 2, 6, 4, 6]    输出:'01';
输入:[2, 3, 8, 5, 6]    输出:'02';
输入:[2, 2, 5, 3, 5]    输出:'03';
输入:[0, 0, 0, 0, 0]    输出:'03'。
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
class Solution:
    
    def arrayRepeat(self, arr: list) -> str:
        beforstr = None
        even = 0
        odd = 0
        flag2 = False
        set_lst = set(arr)
        # set会生成一个元素无序且不重复的可迭代对象,也就是我们常说的去重
        if len(set_lst) == len(arr):
            # 没有重复元素
            flag = False
        else:
            # 有重复元素
            flag = True
        for i, value1 in enumerate(arr):
            # 相邻 且是重复元素
            if beforstr != value1:
                beforstr = value1
            # 相邻 且是重复元素 但之前不是空
            elif beforstr is not None:
                flag2 = True
                return "03"
            # 判断偶数奇数
            if value1 % 2 == 0:
                even = even + 1
            else:
                odd = odd + 1
        if even > odd and flag2 == False and flag != True:
            return "02"
        elif not flag2:
            return "01"
        else:
            return "03"

1.3:简单数学公式

任务详情
编写Python程序计算下列数学表达式的结果并输出,结果向上取整保留整数。
res = √(( 3 ^ 4 + 5 * 6 ^ 5) / num)
程序接收变量 num,返回的是 res。

注明:

* 代表乘。如 2 * 3 代表2乘以3,结果是 6;

^ 代表次方。如2 ^ 3代表2的3次方,结果是 8。

任务要求
1. 程序接收 int 类型的变量 num,返回结果 res 数据类型是 int。

测试用例
输入:30        输出:37

解释:√((3^4+5*6^5)/30)=36.03...,向上取整结果是37。



输入:5          输出:89

解释:√((3^4+5*6^5)/5)=88.27...,向上取整结果是89。
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import math


class Solution:

    def SpMtFml(self, num: int) -> int:
	    return math.ceil(math.sqrt((3**4+5*6**5)/num))

1.4:句子拼写检查

任务详情
给定一段英文句子,判断句中单词拼写是否满足以下规则。
除以下特殊情况外,句子中第一个单词首字母必须大写,其它所有单词小写:
1. 如果句中的某个单词或短语,字母全部为大写,则该单词或短语拼写正确。比如“USA”、“UK”、“JUST  DO  IT”等;
2. “Python”、“Java”、“MachineLearning”、“DataMining”四个单词必须为双引号中给出的形式,否则拼写不正确;
3. 如果句中单词为“数字+字母”的混合形式,比如“5G”,该单词所有字母全部大写。

任务要求
1. 输入英文句子为 str 类型,输出为 bool 类型;

2. 如果句子满足规则要求,程序返回结果为 True;否则返回 False。

测试用例
输入:'I love Python'        输出:True
输入:'python love me'        输出:False

输入: 'JUST DO IT'        输出:True
输入: 'I come from HK'        输出:True
输入: 'Machinelearning is so hot'        输出:False
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
class Solution:
    def detectCapital(self, st1: str) -> bool:
        print(st1)
        str = st1.split(" ")
        i=0
        for value1 in str:
            i = i + 1
            if value1[0].isupper():
                break
        if i >= len(str):
            return False
        else:
            return True

1.5:重复子字符串

任务详情
给定一个字符串 s,判断它是否由它的子串重复多次构成。如果由子串重复多次构成,输出子串,否则输出整个字符串。

任务要求
给定字符串 s 为 str 类型,输出字符串为 str 类型。

测试用例
输入:'abcabc'
输出:'abc'


输入:'abefd'
输出:'abefd'


输入:''
输出:''

# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
class Solution:
    
    def patternRepeatedSubstring(self, s: str) -> str:
        wz = (s + s).find(s, 1)
        ss = s
        if wz != len(s):
            # 重复
            ss = s[0:wz]
        return ss

模块二 网页处理与文本分析

2.1:选取网页表格中的数字

任务详情
给定一个由表格构成的网页,返回指定位置中的数字,数字类型要转换为 int 类型。

后台给出指定位置,位置由行(row)和列(col)构成,如 row = 2, col = 1, 表示第二行第一列,对应的数字是 249;

程序返回的数字必须是 int 类型,类型不正确将导致结果不正确;
后台给出的所有的位置都在表格中,无需考虑边界情况;
表格的第一行是列名,由 A-Z 构成,共 26 列;第一列是行索引,由 1-30 构成,共 30 行。

任务要求
程序给出 int 类型的参数 row 和 col;

程序返回参数是 int 类型。

测试用例
输入:row=29, col=20
输出:252
解释:表格第 29 行第 20 列中的数字是 252

输入:row=23, col=15
输出:582
解释:表格第 23 行第 15 列中的数字是 252

输入:row=10, col=11
输出:219
文件链接:http://72.itmc.org.cn:80/JS001/open/show/random-num/index.html
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/random-num.html
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup


class Solution:

    def table_num(self, row: int, col: int) -> int:
        html = requests.get("http://72.itmc.org.cn:80/JS001/open/show/random-num/index.html")
        soup = BeautifulSoup(html.content.decode(), "html.parser")
        for i, value in enumerate(soup.find_all("tr")):
            if i == 0:
                continue
            tds = value.find_all("td")
            if tds[0].contents[0] == str(row):
                return int(tds[col].contents[0])

2.2:商品信息关键词权重计算

任务详情

根据提供的商品文本信息,对商品的标题内容、属性内容和描述内容进行分词(不包含标题和商品的属性名),完成文本分析工作。
请根据以上要求,将以下所需的函数补充完整。
本任务提供了 jieba 中文分词库和 requests 库。

任务要求
1. 构建函数 wordTfidf(),对商品中除停用词外的关键词,计算其TF-IDF值;

2. 返回文本中 TF-IDF 最大的前5个关键词,返回结果为 list 数据类型;

3. 只保留词性为 n、nr、ns 的关键词;

4. 下方给出的文本编码为UTF-8。

测试用例
输入:任务中商品信息

输出:['裙子', '***', '***', ...]

(此处隐藏剩余四个关键词的数据)

文件链接:http://72.itmc.org.cn/JS001/data/user/14115/61/fj_chiffon_lady_dress.txt
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_chiffon_lady_dress.txt

2.3:微信公众号排行榜分析

任务详情
下方的网页为微信公共号数据分析展示页,网页数量为1。

请根据网页给出的信息,完成以下任务,将右边的函数 weixinData() 补充完整。

给定原创排行榜里任一微信公众号的名称,请判断该公众号是否满足以下条件:

1.“头条平均阅读”数 > 90000

2.“原创平均阅读”数 > 80000

3.“预估活跃粉丝”数 < 300万

如果满足,函数 weixinData() 返回大写英文单词“YES”,否则返回“NO”。

任务要求
1. 函数接收 str 数据类型的微信公众号名称 name;

2. 函数返回为英文字符“YES”或“NO”,返回参数为 str 数据类型;

3. 不得修改函数 weixinData() 的名称;

4. 题目所需网站链接已经在下方给出,编码方式为UTF-8。

测试用例
输入:“占豪”            输出:“NO”

输入:“Vista看天下” 输出:“YES”

文件链接:http://72.itmc.org.cn:80/JS001/open/show/weixindata.html
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/weixindata.html
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import re

import requests
import bs4


class Solution:
    def weixinData(self, name: str) -> str:
        # 从此处开始编写代码
        url = 'http://72.itmc.org.cn:80/JS001/open/show/weixindata.html'
        res = bs4.BeautifulSoup(requests.get(url).content.decode(), "html.parser")
        for i, value in enumerate(res.find_all("tr")):
            tds = value.find_all("td")
            if len(tds) == 0:
                continue
            name1 = tds[1].span.span.contents[0]
            if name1 == None:
                continue
            # 头条平均阅读数
            tt = tds[4].contents[0]
            # 原创平均阅读数
            yc = tds[7].contents[0]
            # 预估活跃粉丝
            yg = tds[3].contents[0]
    
            if str(name1) == name:
                if (str(tt) == "10万+" or int(tt) > 90000) and (str(yc) == "10万+" or int(yc) > 80000):
                    if str(yg).find("万") != -1:
                        ygint = str(yg).replace("万", "")
                        ygint = float(ygint)
                        if ygint < 300:
                            return "YES"
                        else:
                            return "NO"
                    else:
                        return "NO"
                else:
                    return "NO"
        # 代码编写结束

2.4:爱丽丝梦游仙境文本规范化

任务详情
采用Python自带的函数库进行数据操作,完成任务下方《爱丽丝梦游仙境》英文文本词频的分析。
请将右边的函数  aliceText() 补充完整,使其能够输出某个单词的词频。

任务要求
1. 不得直接使用 Jieba 库对文本进行分词;

2. 函数 aliceText() 接收一个英文单词 word,str 数据类型;返回该单词的词频,int 数据类型;

3. 只保留单词长度大于等于 3 的单词的词频统计;

4. 英文单词不区分大小写;

5. 不同时态和单复数的英文单词为不同英文单词,不需要合并词频统计。如果文本中没有该单词,词频为0;

6. 文本可以使用 requests 库进行读取,UTF-8 编码方式,否则无法正确读取文本。

测试用例
输入:'Pictures'        输出:3
输入:'nothing'        输出:13
输入:'caterpillar'     输出:14
输入:'python'          输出:0

文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/76/fj_alice_adventure.txt
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_alice_adventure.txt
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import re

import requests


class Solution:
    def aliceText(self, word: str) -> int:
        res = requests.get("http://72.itmc.org.cn:80/JS001/data/user/14115/76/fj_alice_adventure.txt")
        content = res.content.decode()
        content = content.lower()
        word = word.lower()
        words = re.findall("\w+", content)
        sum = 0
        for i in words:
            if word == i:
                sum = sum + 1
        return sum

2.5:影片票房任务

任务详情
给定内地某日票房排行榜,输入指定影片名称 movie_name,如:'金刚川'。完成以下任务:

1. 任务一:获取指定影片的上映天数。如“金刚川”上映20天,返回 20;“一日成交”上映首日,返回0,“翱翔雄心”点映,返回 -1;

2. 任务二:获取指定影片的综合票房(万元)。如“金刚川”,返回 432.33;

3. 任务三:获取指定影片的排片占比。如“金刚川”,返回 0.248。

任务要求
1. 程序接收 str 类型的变量 movie_name,返回 list 类型的变量;

2. 返回列表包含参数如下:[任务一:int, 任务二:float,任务三:float];

3. 任务一中,如果是上映天数是“上映首日”,返回0;如果上映天数是“点映”,返回 -1;

4. 任务三中需要将百分比形式转换为小数点形式。如 '24.8%' 需要转换为 0.248;如果票房 <0.1%,返回 0.001;

5. 票房信息排行榜在下方给出,utf-8编码。

测试用例
输入:'金刚川'
输出:[20, 431.33, 0.248]


输入:'半条棉被'
输出:[69, 2.54, 0.001]

文件链接:http://72.itmc.org.cn:80/JS001/open/show/box_office_on_a_certain_day.html
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/box_office_on_a_certain_day.html
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import re

import bs4
import requests


class Solution:
    def BoxOfficeSpider(self, movie_name: str) -> list:
	    res = requests.get("http://72.itmc.org.cn:80/JS001/open/show/box_office_on_a_certain_day.html")
	    content = res.content.decode()
	    rem = re.findall("<p class=movie-name>(.*?)</p>[\S\s]*?<span class=releaseInfo>(.*?)</span>[\S\s]*?<div class=\"boxDesc-wrap red-color\">(.*?)</div>[\S\s]*?<div class=countRate-wrap>(.*?)</div>", content)
	    for i in rem:
	        if i[0] == movie_name:
	            sy = i[1].replace("上映","").replace("天","").replace("首日","")
	            if sy == "":
	                syint = 0
	            elif sy.find("点映") != -1:
	                syint = 0
	            else:
	                syint = int(sy)
	            return [syint, float(i[2].replace("%", "")), round(float(i[3].replace("%","").replace("&lt;",""))/100,3)]
	            
	        
	    

2.6:商品搜索结果分析

任务详情
根据任务详情下方提供的网页(数量为1),完成商品搜索结果分析。

请将右侧的函数 itemSearch() 补充完整,使其能完成以下功能:

对于网页中出现的任一网店名称 ,函数返回以下信息,请将以上获取的信息保存在数组中,按顺序返回。

任务要求
该网店对应商品,是否参与满减促销(非满件促销),返回值为 True 或 False;

该网店对应商品的价格,是否存在会员价,如果存在,则返回会员价,返回类型为 float(保留1位小数),如果不存在,返回原始价格;

该网店对应商品的评论数,返回类型为 int;

如果该网店存在两个及以上商品,返回价格较高的商品信息;如果商品价格相同,返回搜索结果最靠前的商品信息;

链接地址在下方专题地址中给出,点击链接可以直接获取。

测试用例
输入:"花花公子官方旗舰店"    输出:[False, 139.0, 4400]

解释:该网店价格最高的商品未参加满减促销活动,对应价格为139.0,商品评论数为4400



输入:"陌芙丝欧旗舰店"           输出:[True, 139.0, 12000]

解释:该网店价格最高的商品参加满减促销活动,对应价格为139.0,商品评论数为12000



输入:"合众服饰专营店"           输出:[True,118.0,10000]

解释:该网店价格最高的商品参加满减促销活动,对应价格为118.0,商品评论数为10000

说明
1. 会员价格是商品价格右边小字出现的价格信息;
2. 评论数为“1万+”就代表评论数为“10000”;
3. 函数接收“网店名称”这一变量,返回类型为数组;
4. 不得修改函数的名称;
5.“满减促销”和“满件促销”是不一样的概念;
6. 网页中存在相同店铺名称的商品,请注意甄别。

文件链接:http://72.itmc.org.cn:80/JS001/open/show/ecjd.html
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/ecjd.html

2.7:商品关键词权重分析

任务详情
请使用 杭州大牌女装.txt 文本完成提取文本中权重最高的 5 个关键词的任务。

任务要求
1. 程序以数组的形式返回五个关键词,关键词类型是 str;
2. 使用结巴库内置的TextRank 算法抽取关键词,只返回关键词,不必返回权重。关键词的词性必须是名词和动词;

3. 返回的5个关键词至少要有4个关键词与系统内置的答案一致;
4. 返回关键词不需要考虑顺序;

5. 杭州大牌女装.txt使用 requests 库读取,UTF-8编码,链接在下方给出;

6. Jieba库词性表及说明.xlsx 也在下方给出,作为参考。

测试用例
输入:无
输出:['印花' ,'关键词2','关键词3','关键词4','关键词5']

文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/77/fj_Jieba词性表及说明.xlsx
                  http://72.itmc.org.cn:80/JS001/data/user/14115/77/fj_5392_hangzhou_top_woman_wear.txt
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_Jieba%E8%AF%8D%E6%80%A7%E8%A1%A8%E5%8F%8A%E8%AF%B4%E6%98%8E.xlsx
                  https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_5392_hangzhou_top_woman_wear.txt
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import requests
import jieba.analyse


class Solution:
    def itemAnalyse(self) -> list:
        res = requests.get("http://72.itmc.org.cn:80/JS001/data/user/14115/77/fj_5392_hangzhou_top_woman_wear.txt")
        a = jieba.analyse.textrank(res.content.decode(), topK=5, allowPOS=("n","v"))
        return a

模块三 数据处理与分析

3.1:电商订单数据清洗

 任务详情 
请根据系统提供的订单数据表,按要求完成以下任务:

统计订单表格中,商品描述(choice_description)中为“NaN”的数量,并将其批量替换为“banana”,

请根据以上要求,将函数 nanCount() 补充完整,函数的返回值为整数值,既为“NaN”的数量。

任务要求
1. 订单数据表为以逗号为分隔符的csv文件,编码方式为 UTF-8;

2. 注意:DataFrame 由后台生成,作为参数 order_data 传递到 nonCount() 中,不需要生成新的 DataFrame;

3. DataFrame 读取为订单数据表;

3. 返回值为 NaN 的数量,int 数据类型。



订单数据访问地址请见下方:

文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/63/fj_order_data.csv
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_order_data.csv
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import pandas
class Solution:
    def nanCount(self, order_data:'DataFrame') -> int:
        # 从此处开始编写代码
        # 后台读取csv示例代码如下(参考)
        order_data = pandas.read_csv("http://72.itmc.org.cn:80/JS001/data/user/14115/63/fj_order_data.csv", sep=',')
        
        return order_data.isnull().sum()['choice_description']       
        # 代码编写结束

3.2:电商订单数据计算

任务详情
请根据系统提供的订单数据表,按要求完成以下三个任务:

传入一个字符串,返回订单总金额 (quantity * item_price) 最大或最小的商品,并返回商品的名称(item_name)。

请根据以上要求,将函数 salesStr() 补充完整,函数的返回值为字符(str),比如:"Steak Burrito"

订单数据访问地址请见下方:

字段名	中文含义
order_id	商品编号
quantity	数量
item_name	商品名称
choice_description	描述
item_price	单价
任务要求
1. 传入一个字符串('max' 或 'min'),返回订单总金额最大或最小的商品的名称(item_name) ;

2. 传入的字符串不区分大小写,即传入值可能是"Max",也可能是"max";

3. 传入"max",返回订单总金额 (quantity * item_price) 最大的商品名称;传入“min”,返回订单总金额 (quantity * item_price) 最小的商品名称;

4. 返回字符串区分大小写,且保留字符串中间空格。

文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/80/fj_order_data.csv
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_order_data.csv
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import pandas as pd


class Solution:
    def salesStr(self, condition: str) -> str:

        # url ='http://72.itmc.org.cn:80/JS001/data/user/14115/80/fj_order_data.csv'
        # chipo = pd.read_csv(url, sep = ',')
        # condition = condition.lower()
        # chipo.loc[:, 'Price'] = 0.0
        # for i,row in chipo.iterrows():
        #     chipo['Price'].at[i] = int(chipo['quantity'].at[i]) * float(chipo['item_price'].at[i].replace("$",""))
        # if condition == "min":
        #     name = chipo.min(numeric_only=None)[2]
        # else:
        #     name = chipo.max(numeric_only=None)[2]
        # return name
        url = 'http://72.itmc.org.cn:80/JS001/static/data/python/3030/80/fj_order_data.csv'
        chipo = pd.read_csv(url, sep=',')
        chipo['item_price'] = chipo['item_price'].str.replace("$", "",regex=True).astype(float)
        chipo['s'] = chipo['quantity'] * chipo['item_price']
        g = chipo.groupby(['item_name']).sum()['s']
        print(g.index)
        if condition.lower() == "min":
            return g.idxmin()
        if condition.lower() == "max":
            return g.idxmax()

3.3:DataFrame计算平均值

任务详情
给定一个DataFrame对象 df,要求返回各行的平均值。
具体操作如下:

添加新列 'avg' 用于计算各行的平均值;

使用数组返回新列 'avg'。

任务要求
程序接收 DataFrame 对象 df,返回结果是 list 数据类型;

注意:平均值需要四舍五入保留两位小数。

测试用例
输入:


0	1	2	3	4	5	6
0	24	27	7	23	25	7	21
1	16	30	8	4	26	30	8
2	18	28	7	17	17	16	25
输出:

[19.14, 17.43, 18.29]

解释:首先生成新列'avg',需要注意平均数需要四舍五入保留小数点后两位


0	1	2	3	4	5	6	avg
0	24	27	7	23	25	7	21	19.14
1	16	30	8	4	26	30	8	17.43
2	18	28	7	17	17	16	25	18.29


输入:


0	1	2	3
0	10	19	4	7
1	9	5	28	14
2	30	27	1	13
3	21	14	19	9
4	1	25	30	16

输出:[10.0, 14.0, 17.75, 15.75, 18.0]

解释:首先生成新列'avg',其次返回'avg'列


0	1	2	3	avg
0	10	19	4	7	10.00
1	9	5	28	14	14.00
2	30	27	1	13	17.75
3	21	14	19	9	15.75
4	1	25	30	16	18.00

# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
class Solution:
    
    def CalAvg(self, df: 'pandas.DataFrame') -> list:
        
        xdf = df.mean(axis=1).round(2)
        df.loc[:, 'avg'] = 0.0
        df['avg'] = xdf
        return list(df['avg'])

3.4:乐高商店收入计算

题目描述
我们需要完成乐高商店的分析,请你根据指引完成以下任务:

使用 Pandas 读取数据;

去掉没有价格的数据,将销量为空的数据填充为0;

计算所有产品总收入;

计算该数据中产品价格的平均值;

程序后台传入产品标题title,要求计算该产品的收入(收入总计);

将总收入、平均价格、产品收入保存到列表里,返回给后台。

题目要求
程序传入标题title数据类型是str;

程序传出数据类型是列表类型,列表中所有元素的数据类型均是 float;

如果产品标题title存在多个,则计算相同title商品的总收入;

平均价格需要四舍五入保留小数点后2位。

测试用例
输入:’乐高旗舰店官网大电影系列70837Shimmer&Shine闪亮水疗馆玩具积木’
输出;[xxx, xxx, 1598.0]
解释:总收入和平均价格隐藏,当前产品收入总计是1598.0

输入:’乐高旗舰店幻影忍者系列70668雷电忍者杰的暴风战机’
输出:[xxx, xxx, 259073.0]
解释:总收入和平均价格隐藏,当前产品收入总计是259073.0

输入:’乐高旗舰店官网创意百变高手系列10261大型过山车积木成人送礼’
输出:[xxx, xxx, 41986.0]

数据说明
文本数据是excel文件,字段含义如下:

字段	含义	实例
title	商品名	乐高旗舰店官网 LEGO积木 儿童玩具男孩 积木拼装玩具益智
age_range	商品对应的年龄等级	适用年纪6+岁
price	商品价格	899.0
sales_num	售卖数量	217.0

文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/241/fj_lego_tmallshop_sales_data.xlsx
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_lego_tmallshop_sales_data.xlsx
未通过
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import pandas as pd


class Solution:
    def task(self, title):
        pand = pd.read_excel("http://72.itmc.org.cn:80/JS001/data/user/14115/241/fj_lego_tmallshop_sales_data.xlsx",sheet_name="Sheet1")
        
        pand['sales_num'] = pand['sales_num'].fillna(0)
        line = pand.shape[0]
        z = pand.sum(numeric_only=True)['price']
        pj = pand.sum(numeric_only=True)['sales_num']
        for i in range(0,line):
            name = pand.loc[i]['title']
            sal = pand.loc[i]['sales_num']
            price = pand.loc[i]['price']
            pjj = 0.0
            if sal != 0:
                pjj = round(z/line,2)
            if name == title:
                return [z,pjj,sal*price]

3.5:部门平均薪资汇总计算

任务说明
        读取给定的职工薪酬考勤簿,职工薪酬考勤簿由两个表格组成,分别是 基本薪资 工作表和 上班通勤 工作表。要求计算每一个部门内部的平均薪资,并把结果 降序 排列,返回给判定程序。

        员工个人薪酬计算过程如下:

        1.薪资由两部分组成, 月基本薪资 和 通勤工资,另外需要扣除需要缴纳的 社保费及公积金;

        2.月基本薪资 = 基本薪资 + 岗位工资 + 绩效工资;

        3.通勤工资中计算如下:

            日薪 = (基本薪资 + 岗位工资 + 绩效工资) / 应出勤天数

            时薪 = 日薪 / 8

        4.通勤工资中,法定节假日加班薪资是工作日加班的 2 倍,周末加班工资是工作日加班的 1.5 倍,工作日加班工资与时薪 相同;

        5.通勤工资需要扣除因请假导致的缺勤,请假/小时需要扣除的工资按照时薪计算。

        6.社保费及公积金个人缴费按照社会保险缴费基数计算:

            a.养老保险个人缴费比例是 8%

            b.医疗保险个人缴费比例是 2%

            c.失业保险个人缴费比例是 1%

            d.公积金缴费比例是 10%

       

        示例:
        小王基本薪资 2000,岗位工资 2000,社会保险缴费基数是 2000。绩效工资 0,应出勤天数 20 天,请假 1 天,工作日加班 8 小时,法定节假日加班 4 小时,周末加班 4 小时。

        小王基本薪资+岗位工资+绩效工资是:2000 + 2000 = 4000;

        小王时薪:4000 / 20 / 8 = 25;

        小王加班工资:25 * 8 + 25 * 4 * 1.5 + 25 * 4 * 2 = 550;

        小王请假扣除:25 * 8 = 200;

        小王五险一金扣除:2000 * 0.08 + 2000 * 0.02 + 2000 * 0.01 + 2000 * 0.1 = 420;

        小王本月实发工资:4000 + 550 - 200 - 420 = 3930。

        假设小王所在部门有 5 个人,5 个人工资分别是 4050,4010,4120,4000,4500。小王所在部门的平均工资是:(3930+ 4010 + 4120 + 4000 + 4500) /5 = 4112。同理可算出其他部门的平均工资。



        注意:返回结果需四舍五入保留小数点后两位!  

        返回结果参数类型是 pd.Series。Series 的索引应为部门名,Series 的数据应为部门平均工资,Series 的 Name 属性应修改为 “平均薪资”。

任务要求
程序无需接收参数输入,需要返回结果参数的格式是 pd.Series;

返回结果时需要四舍五入保留小数点后两位,计算过程内保留小数点后两位可能导致最后结果不正确;

部门平均工资需要降序排列;

本题所需的基本薪资表和上班通勤表均在职工薪酬工作簿中,按需读取。

Series 数据的类型应为 float 64,Name 属性应为 “平均薪资”。

index 的属性名应为部门。

测试用例
部分返回数据:

部门  
销售部       15767.86
运营部       ****
工程部       ****  
财务部       ****  
研发部       ****  
市场部       ****  
人力资源部    4233.27  
Name: 平均薪资, dtype: float64
附件信息
职工薪酬簿.xlsx,职工薪酬工作簿由 基本薪资 工作表和 上班通勤 工作表组成。

基本薪资工作表。基本薪资工作表包含个人所属部门,各部分薪资状况和社会保险缴纳基数。共 7 个部门共 50 条数据,其中只有销售部有绩效工资。

上班通勤工作表。上班通勤工作表包含本月应出勤天数,实际出勤天数。请假加班天数等。工作表中的名字与基本薪资工作表中的名字一一对应。共 50 条数据。

文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/242/fj_employee_salary_work_books.xlsx
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_employee_salary_work_books.xlsx
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import pandas as pd


class Solution:
    
    def department_salary_summary(self) -> pd.Series:
        
        pass

3.6:编制比较资产负债表

任务描述


“A企业资产负债表.xlsx”文件的“比较资产负债表”包含 A 企业 2020 年和 2021 年的资产负债数据,请完成以下指定任务。

使用 0 填充表格中的空值;

计算 2021 年各项目变动额和变动率并添加相关数据列;

程序接受某项目的项目名称 name,要求输出该项目对应的变动额和变动率。

任务要求


代码要编辑在 balance_sheet 函数下;

变动额需要四舍五入保留小数点后 2 位,变动率需要四舍五入保留小数点后 4 位;

变动额和变动率的数据类型都是浮点数数据类型;

程序只判定 return后的结果值,输出(print)后的结果值不作为判断依据;

程序返回结果的数据类型为列表。



测试用例


输入:name="负债总计"

输出:[26928392.51, 0.2567]

解释:负债总计变动额是 26928392.51,变动率是 0.2567



输入:name="无形资产"

输出:[-600000.0, -0.0667]

解释:无形资产变动额是 -600000.0,变动率是 -0.0667



输入:name="负债合计"

输出:[26928392.51, 0.2567]



代码提示


我们通过将 Series 转换为列表的形式,将其中的数字提取出来。



通过如下案例,我们取出 DataFrame 中的 1。

In [1]: import pandas as pd

# 定义一个 DataFrame
In [2]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])

# 预览下 df
In [3]: df
Out[3]:
   A  B
0  1  2
1  3  4

# 通过列名取出 A 列
In [4]: df['A']
Out[4]:
0    1
1    3
Name: A, dtype: int64

# 取出 A 列再将 A 列转换为列表
In [5]: df['A'].tolist()
Out[5]: [1, 3]

# 取出列表中的第一个元素,就是我们想要的 1
In [6]: df['A'].tolist()[0]
Out[6]: 1


文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/243/fj_Interprice_balance_data.xlsx
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_Interprice_balance_data.xlsx
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import pandas as pd


class Solution:
    def balance_sheet(self, name):
        pand = pd.read_excel("http://72.itmc.org.cn:80/JS001/data/user/14115/243/fj_Interprice_balance_data.xlsx",sheet_name="比较资产负债表")
        pand = pand.fillna(0)
        line = pand.shape[0]
        
        for i in range(0,line):
        
            if pand.loc[i]['项目'] == name:
                ling = pand.loc[i]['2020.12.31']
                yi = pand.loc[i]['2021.12.31']
                break
        
        c = round(yi-ling,2)
        lv = round(c / ling,4)
        return [c,lv]

3.7:某店铺不同地区销售情况分析

题目描述
下方是某店铺在 2 月份的订单数据,共 28010 行、7 列。 在该数据中,每一行代表一笔订单,每一笔订单可以 看做是一位顾客(买家),价格相同的产品可视为同一产品;

请编写程序,完成以下任务:
程序传入参数 area(收货地址),要求计算该地区订单的’订单的付款转化率’、’买家全额支付的转化率’、’买家实际支付总金额’、’客单价’、’销量(订单量)最多的产品的价格’、’买家实际支付总金额在所有地区实际支付总金额中的占比’,并将结果以列表形式返回。

题目要求
程序接收 str 类型的 area,返回的结果为 list 数据类型;

返回的结果中,列表中各个数据的数据类型为 str,其中转化率数据及占比数据需以百分比的形式输出,并且需要保留小数点后2位,如’13.14%’,其余结果不需要以百分比形式输出,但需要保留小数点后2位;

如果某地区所有买家的买家实际支付金额为 0,即该地区没有付费行为。则该地区的’客单价’、’销量(订单量)最多的产品的价格’需返回字符串’本地区无销量’,其他结果则正常计算;

如果该产品(订单)被全额退款,那么该产品不计入销量。

参考公式
付款转化率 = 付款订单数 / 总订单数;

买家全额支付的转化率 = 买家全额支付的订单数 / 总订单数;

客单价 = 实际支付金额 / 支付买家数;

测试用例
输入:area = ‘河南省’
输出:[‘81.99%’, ‘61.18%’, ‘56354.03’, ‘92.84’, ‘37.00’, ‘2.96%’]
解释:河南省’订单的付款转化率’为’81.99%’,’买家全额支付的转化率’为’61.18%’,’买家实际支付总金额’为’56354.03’,’客单价’为’92.84’,’销量(订单量)最多的产品的价格’为’37.00’,’买家实际支付总金额在所有地区实际支付总金额中的占比’为’2.96%’



输入:area = ‘江苏省’
输出:[‘86.78%’, ‘66.75%’, ‘159359.18’, ‘109.22’, ‘37.00’, ‘8.38%’]

文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/240/fj_7568_tmall_order_report.csv
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_7568_tmall_order_report.csv
未通过
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import pandas as pd


class Solution:
    def task(self, area: str) -> list:
        pand = pd.read_csv("http://72.itmc.org.cn:80/JS001/data/user/14115/240/fj_7568_tmall_order_report.csv")
        
        line = pand.shape[0]
        fkdds = 0
        dds = 0
        qa = 0
        sj = 0.0
        sysj = 0.0
        cp = {}
        for i in range(0, line):
            if pand.loc[i]['买家实际支付金额'] != 0.0:
                sysj = sysj + pand.loc[i]['总金额'] - pand.loc[i]['退款金额']
            if pand.loc[i]['收货地址'] == area:
                dds = dds + 1
                if pand.loc[i]['买家实际支付金额'] != 0.0:
                    sj = sj + pand.loc[i]['总金额'] - pand.loc[i]['退款金额']
                    fkdds = fkdds + 1
                if pand.loc[i]['买家实际支付金额'] == pand.loc[i]['总金额']:
                    qa = qa + 1
                if str(pand.loc[i]['总金额']) in cp:
                    cp[str(pand.loc[i]['总金额'])] = cp[str(pand.loc[i]['总金额'])] + 1
                else:
                    cp[str(pand.loc[i]['总金额'])] = 0
        
        a = str(round(fkdds / dds, 4) * 100) + "%"
        b = str(round(qa / dds, 4) * 100) + "%"
        c = round(sj, 2)
        d = round(sj / fkdds, 2)
        max = None
        for i in cp:
            if max is None:
                max = i
                continue
            if cp[max] < cp[i]:
                max = i
        e = max
        f = str(round(sj / sysj, 4) * 100) + "%"
        return [a,b,c,d,e,f]

3.8:用户职位信息统计

任务详情
请根据任务下方提供的用户职位统计信息表,完成以下任务:

职位表中每个字段含义如下:

字段	说明	
user_id	用户序号	
age	用户年龄	
gender	用户性别	
occupation	用户职位	
zip_code	用户邮编	
编写一个职位统计函数 jobStatistics(),给定表格里的任一职位,统计其以下信息

1. 任务一:统计该职位女性用户的百分占比(结果保留两位小数),输出数据类型为 str;

2. 任务二:统计该职位女性用户百分占比在所有职位女性用户百分占比中的排名(降序),输出数据类型为 int。

将以上2个结果保存在 数组(list) 中,按顺序返回。

任务要求
1. 程序接收一个 str 类型的变量 op,返回一个 list 类型的变量;

2. "gender" 列中,"F" 代表女性,"M" 代表男性;

3. 返回结果格式如下:[任务一: str, 任务二: int]。

测试用例
输入:'artist'

输出:[ '46.43%', 4]

解释:该职位中女性用户占据该职位所有用户的46.43%,该职位女性占比排名在所有职位女性占比排名中位列第 4



输入:'student'

输出:['30.61%', 10]

解释:该职位中女性用户占据该职位所有用户的30.61%,该职位女性占比排名在所有职位女性占比排名中位列第 10

文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/67/fj_jobstatics.xlsx
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_jobstatics.xlsx
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import pandas as pd


class Solution:
    def jobStatistics(self, occupation: str) -> list:
        url = 'http://72.itmc.org.cn:80/JS001/static/data/python/3030/67/fj_jobstatics.xlsx'
        chipo = pd.read_excel(url)
        list1 = []
        y = chipo.groupby(by=['occupation']).count()
        for i in y.index:
            x = chipo[chipo['occupation'] == i].groupby(by=chipo['gender']).count()
            if "F" in x.index:
                t = round(x.at['F', 'age'] / x['age'].sum() * 100, 2)
            else:
                t = 0.00
            y.at[i, 'test'] = t
            if i == occupation:
                list1.append(str("%.2f" % t) + "%")
        y.sort_values(by=['test'], ascending=False, inplace=True)
        m = 0
        for i in y.index:
            m += 1
            if i == occupation:
                list1.append(m)
                break
        return list1

3.9:某知名网站高质量视频主挖掘

任务详情
根据下方提供的某知名网站视频信息数据,构造一个打分模型,并根据分值挖掘高质量视频主,要求输入视频主的名字author,返回对应的UP主分层。



IFL模型
针对视频主的视频信息构建了IFL模型,以评估视频的质量。



I (Interaction_rate)

I 值反映的是平均每个视频的互动率,互动率越高,表明其视频更能产生用户的共鸣,使其有话题感。
I = (总弹幕数 + 总评论数) / (总播放量 * 统计范围内视频数量) * 100。


F (Frequence)
F 值表示的是每个视频的平均发布周期,每个视频之间的发布周期越短,说明内容生产者创作视频的时间也就越短,创作时间太长,不是忠实粉丝的用户可能将其遗忘。
F = (统计范围内最晚发布视频时间 - 最早发布视频时间) / 发布视频的数量。

如果 F 的值为 0,表示该视频主仅发布一条视频。那么将 F 的值重新赋值为 F 的最大值 + 1,如原有数据中,F 的最大值是 100,那么就将 F 的最大值设置为 100 + 1 = 101。


L (Like_rate)
L值表示的是统计时间内发布视频的平均点赞率,越大表示视频质量越稳定,用户对up主的认可度也就越高。
L = (点赞数 * 1 + 投币数 * 2 + 收藏数 * 3 + 分享数 * 4) / (播放量 * 发布视频数) * 100。



维度打分
维度确认的核心是分值确定,按照设定的标准,我们给每个视频主的 I/F/L 值打分,分值的大小取决于我们的偏好,
即我们越喜欢的行为,打的分数就越高 :

- I 值。表示 up 主视频的平均评论率,这个值越大,就说明其视频越能使用户有话题,当I值越大时,分值越大。

- F 值。表示视频的平均发布周期,我们当然想要经常看到,所以这个值越大时,分值越小。

- L 值。表示发布视频的平均点赞率,S 值越大时,质量越稳定,分值也就越大。



视频主主分层 我们根据每一项指标是否高于平均值,把UP主划分为8类,我们根据案例中的情况进行划分,具体如下表



视频主分类	I值是否大于平均值	F值是否小于平均值	L值是否大于平均值	解释
高质量视频主	1	1	1	用户活跃高,更新周期短,视频质量高
高质量拖更视频主	1	0	1	用户活跃高,更新周期长,视频质量高
高质量内容高深视频主	0	1	1	用户活跃低,更新周期短,视频质量高
高质量内容高深拖更视频主	0	0	1	用户活跃低,更新周期长,视频质量高
接地气活跃视频主	1	1	0	用户活跃高,更新周期短,视频质量低
活跃视频主	0	1	0	用户活跃低,更新周期短,视频质量低
接地气视频主	1	0	0	用户活跃高,更新周期长,视频质量低
还在成长的视频主	0	0	0	用户活跃低,更新周期长,视频质量低




数据链接已经在下方给出: 各字段表示含义如下:

字段名	含义
pubdate	发布时间
bv	BV号
url	视频链接
title	标题
author	作者
description	视频简介
tag	标签
favorites	收藏
coins	投币
danmu	弹幕
likes	点赞
reply	评论
views	播放量
share	分享
任务要求
1. 程序接收 str 类型的变量 author,返回结果的数据类型是str类型;

2. 便于数据美观,IFL 的值需要保留小数点后两位(四舍五入);

3. 数据中可能存在重复数据;

4. 某知名视频网站视频数据为逗号分割的 csv 文件,utf-8 编码。

测试用例
输入:'龙爪洪荒'

输出:'高质量拖更视频主'



输入:'AO摆渡人'

输出:'活跃视频主'

文件链接:http://72.itmc.org.cn:80/JS001/data/user/14115/94/fj_B_video_web_data.csv
备用链接:https://pan.ymypay.cn/api/raw/?path=/Files/Python%E7%AB%9E%E8%B5%9B%E6%96%87%E4%BB%B6/fj_B_video_web_data.csv
# 1. 运行或提交代码不需要自己编写测试用例,后台自动进行测试检查。
# 2. 您编写代码的区域需要限制在Solution类或其他类和函数体内,保证输入与输出符合任务要求即可。
# 3. 点击“提交代码”按钮,系统将查看程序是否正确,并保存代码,记录任务数据。
# 4. 提交代码次数越多,任务得分越低。
# 5. 点击右上方“结束任务”按钮,系统将在后台计算任务得分,任务结束。
# -*- coding: utf-8 -*-
import pandas as pd


class Solution:
    
    def videoMining(self, author: str) -> str:
        
        
        pass
    


微信扫描下方的二维码阅读本文