头歌python-实验7葡萄酒评论分析报告

一:任务描述

本关任务:编写程序,多维度分析葡萄酒数据。

相关知识

葡萄酒评论分析报告描述

文件 winemag-data.csv 包含 编号、国家、描述、评分、价格、省份6列12974行葡萄酒评论的数据。数据格式如下所示:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

number,country,description,points,price,province 30,France,"Red cherry fruit comes laced with....",86,15,Beaujolais 50,Italy,"This blend of Nero Avola and Syrah....",86,15,Sicily 100,US,"Fresh apple, lemon and pear flavors....",88,18,New York‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

通过分析这些数据,用户可以根据产地、评份、价格等挑选适合自己的葡萄酒,商家可以分析消费者的购买行为习惯,可以更加准确地提供适合市场的产品,精准定位客户。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入 价格最高 ,略过价格缺失的数据,输出价格最高的二十款葡萄酒的编号、出产国、评分和价格,按价格降序输出

输入 葡萄酒评分 ,统计各个评分的葡萄酒数量是多少?按评分从低到高顺序输出各个评分的葡萄酒数量的列表;输出拥有葡萄酒数量最多的评分和数量;输出拥有葡萄酒数量最多的评分的葡萄酒的平均价格

输入其他时,输出 输入错误

编程要求

根据提示,在右侧编辑器补充代码,完成葡萄酒评论分析报告代码编写。

测试说明

平台会对你编写的代码进行测试:

示例仅为格式展示,与测试用例无关

测试输入1: 价格最高 预期输出1:

 
  1. [[80290, 'France', 88, 3300.0], [15840, 'France', 96, 2500.0], ...... [69210, 'France', 93, 450.0], [21720, 'France', 95, 440.0]]

测试输入2: 葡萄酒评分 预期输出2:

 
  1. [[80, 38], [81, 71], ...... [95, 140], [96, 50], [97, 26], [98, 8], [99, 3]]
  2. [86, 1743]
  3. 31.02
import pandas as pd
import math

# 定义符号常量,用于索引,使之具有清晰的语义
NUMBER = 0
COUNTRY = 1
POINTS = 3
PRICE = 4


def csv_to_ls(file):
    """接收文件名为参数,用pandas读取文件中的数据,数据部分转为二维列表类型,返回二维列表。"""
    wine_list = pd.read_csv(file).values.tolist()
    return wine_list
    


def top_20_price(wine_list):
    """接收列表格式的葡萄酒数据参数,返回价格最高的二十款葡萄酒的编号、出产国、评分和价格,按价
    格降序输出。
    @参数 wine_list:葡萄酒数据,列表类型
    需要注意的是价格可能有缺失值,此时该数据为nan
    if math.isnan(x) == False可用于判定x的值是不是nan
    nan的数据类型是float,不可以直接用字符串判定方法。
    """
    # 此处补充你的代码





def amount_of_point(wine_list):
    """接收列表格式的葡萄酒数据参数,返回每个评分的葡萄酒数量,忽略没有评分的数据
    例如[...[84, 645], [85, 959],...]表示得分为84的葡萄酒645种,得分85的葡萄酒有959种。
    @参数 wine_list:葡萄酒数据,列表类型
    """
    # 此处补充你的代码




def most_of_point(amount_of_points):
    """接收每个评分的葡萄酒数量的列表为参数,返回获得该分数数量最多的评分和数量的列表。
    @参数 amount_of_points:每个评分的葡萄酒数量,列表类型
    """
    # 此处补充你的代码




def avg_price_of_most_point(wine_list, most_of_points):
    """接收列表格式的葡萄酒数据和获得最多的评分及数量的列表为参数
    忽略缺失价格的数据,返回这个分数的葡萄酒的平均价格,保留2位小数。
    @参数 wine_list:葡萄酒数据,列表类型
    @参数 most_of_points:获得最多的评分及数量,列表类型
    """
    # 此处补充你的代码




def judge(txt):
    """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    filename = 'data/winemag-data.csv'
    wine = csv_to_ls(filename)
    if txt == '价格最高':
        print(top_20_price(wine))  # 价格最高的二十款葡萄酒的编号、出产国、评分和价格,按价格降序输出
    elif txt == '葡萄酒评分':
        amount_point = amount_of_point(wine)
        most_point = most_of_point(amount_point)
        print(amount_point)  # 各个评分的葡萄酒数量
        print(most_point)  # 拥有葡萄酒数量最多的评分和数量
        print(avg_price_of_most_point(wine, most_point))  # 拥有葡萄酒数量最多的评分的葡萄酒的平均价格
    else:
        print('输入错误')


if __name__ == '__main__':
    text = input()
    judge(text)

第2关:葡萄酒评论分析报告——平均分排序和评分最高

import pandas as pd
import math

# 定义符号常量,用于索引,使之具有清晰的语义
NUMBER = 0
COUNTRY = 1
DESCRIPTION = 2
POINTS = 3
PRICE = 4

def csv_to_ls(file):
    """接收文件名为参数,用pandas读取文件中的数据,数据部分转为二维列表类型,返回二维列表。"""
    wine_list = pd.read_csv(file).values.tolist()
    return wine_list


def country_ls(wine_list):
    """接收列表格式的葡萄酒数据为参数,略过标题行,返回不重复的国家名列表,按字母表升序排序,
    若国家名数据缺失,略过该条数据,返回值中不包含空字符串元素。
    @参数 wine_list:葡萄酒数据,列表类型
    """
    country_list = []
    for x in wine_list:
        if x[COUNTRY] not in country_list:
            country_list.append(x[COUNTRY])
    country_list.sort()
    # print(country_list)
    return country_list


def avg_point_sort(wine_list, country):
    """接收列表格式的葡萄酒数据和国家名列表为参数,计算每个国家的葡萄酒的平均得分,
    返回值为国家名和得分的列表,按评分由高到低降序排列。
    @参数 wine_list:葡萄酒数据,列表类型
    @参数 country:国家名,列表类型
    """
    # 此处补充你的代码
score=[]
for i in range




def top_10_point(wine_list):
    """接收列表格式的葡萄酒数据参数,返回评分最高的十款葡萄酒的编号、出产国、评分和价格,按评
    分降序输出。
    需要注意的是评分可能有缺失值,此时该数据为nan
    if math.isnan(x) == False可用于判定x的值是不是nan
    nan的数据类型是float,不可以直接用字符串判定方法。
    @参数 wine_list:葡萄酒数据,列表类型
    """
    # 此处补充你的代码

    


def judge(txt):
    """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    filename = 'data/winemag-data.csv'
    wine = csv_to_ls(filename)
    country = country_ls(wine)
    if txt == '平均分排序':
        print(avg_point_sort(wine, country))  # 每个国家的葡萄酒的平均得分降序输出
    elif txt == '评分最高':
        print(top_10_point(wine))  # 评分最高的十款葡萄酒的编号、出产国、评分和价格,按评分降序输出
    else:
        print('输入错误')


if __name__ == '__main__':
    text = input()
    judge(text)

第3关:葡萄酒评论分析报告——价格最高和葡萄酒评分

import pandas as pd
import math
 
# 定义符号常量,用于索引,使之具有清晰的语义
NUMBER = 0
COUNTRY = 1
POINTS = 3
PRICE = 4
 
 
def csv_to_ls(file):
    """接收文件名为参数,用pandas读取文件中的数据,数据部分转为二维列表类型,返回二维列表。"""
    wine_list = pd.read_csv(file).values.tolist()
    return wine_list
 
 
def top_20_price(wine_list):
    """接收列表格式的葡萄酒数据参数,返回价格最高的二十款葡萄酒的编号、出产国、评分和价格,按价
    格降序输出。
    @参数 wine_list:葡萄酒数据,列表类型
    需要注意的是价格可能有缺失值,此时该数据为nan
    if math.isnan(x) == False可用于判定x的值是不是nan
    nan的数据类型是float,不可以直接用字符串判定方法。
    """
    # 此处补充你的代码
    list1=[]
    for i in wine_list:
        if math.isnan(float(i[-2]))==False:
            list1.append(i)
    list2=sorted(list1,key=lambda x:x[-2],reverse=True)
    list3=[]
    count=1
    for k in list2:
        if count<21:
            list3.append([k[-6],k[-5],k[-3],k[-2]])
            count+=1
    return list3
 
def amount_of_point(wine_list):
    """接收列表格式的葡萄酒数据参数,返回每个评分的葡萄酒数量,忽略没有评分的数据
    例如[...[84, 645], [85, 959],...]表示得分为84的葡萄酒645种,得分85的葡萄酒有959种。
    @参数 wine_list:葡萄酒数据,列表类型
    """
    # 此处补充你的代码
    score_list = []
    list1 = []
    count = 0
    for x in wine_list:
        if x[-3] not in score_list:
            score_list.append(x[-3])
    score_list.sort()
    for i in score_list:
        count = 0
        for j in wine_list:
            if i == int(j[-3]):
                count += 1
        list1.append([i, count])
    return list1
 
 
def most_of_point(amount_of_points):
    """接收每个评分的葡萄酒数量的列表为参数,返回获得该分数数量最多的评分和数量的列表。
    @参数 amount_of_points:每个评分的葡萄酒数量,列表类型
    """
    # 此处补充你的代码
    list1 = sorted(amount_of_points, key=lambda x: x[1], reverse=True)
    return list1[0]
 
 
def avg_price_of_most_point(wine_list, most_of_points):
    """接收列表格式的葡萄酒数据和获得最多的评分及数量的列表为参数
    忽略缺失价格的数据,返回这个分数的葡萄酒的平均价格,保留2位小数。
    @参数 wine_list:葡萄酒数据,列表类型
    @参数 most_of_points:获得最多的评分及数量,列表类型
    """
    # 此处补充你的代码
    sum = 0
    m = 0
    for i in wine_list:
        if most_of_points[0] == int(i[-3]):
            if math.isnan(float(i[-2])) == False:
                sum += float(i[-2])
                m += 1
    return round(sum / m, 2)
 
 
def judge(txt):
    """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    filename = 'data/winemag-data.csv'
    wine = csv_to_ls(filename)
    if txt == '价格最高':
        print(top_20_price(wine))  # 价格最高的二十款葡萄酒的编号、出产国、评分和价格,按价格降序输出
    elif txt == '葡萄酒评分':
        amount_point = amount_of_point(wine)
        most_point = most_of_point(amount_point)
        print(amount_point)  # 各个评分的葡萄酒数量
        print(most_point)  # 拥有葡萄酒数量最多的评分和数量
        print(avg_price_of_most_point(wine, most_point))  # 拥有葡萄酒数量最多的评分的葡萄酒的平均价格
    else:
        print('输入错误')
 
 
if __name__ == '__main__':
    text = input()
    judge(text)

1. 鸢尾花分类问题 案例描述:使用机器学习算法对鸢尾花数据进行分类,将不同种类的鸢尾花进行分类,以预测新鸢尾花的种类。 教程出处:https://www.jianshu.com/p/20e7e1d1a4e4 2. 葡萄酒数据降维问题 案例描述:使用主成分分析(PCA)算法对葡萄酒数据进行降维处理,以减少原始数据的维度并保留重要信息。 教程出处:https://blog.csdn.net/qq_43086661/article/details/107235863 3. 股票数据分析 案例描述:使用Python对股票数据进行分析,包括数据清洗、数据可视化、时间序列分析等。 教程出处:https://www.runoob.com/w3cnote/python-stock-data-analysis.html 4. 网页爬虫 案例描述:使用Python编写爬虫程序,抓取网页上的数据,包括网页文本、图片、视频等。 教程出处:https://www.runoob.com/w3cnote/python-spider-intro.html 5. 社交媒体数据分析 案例描述:使用Python对社交媒体数据进行分析,包括爬取社交媒体数据、数据清洗、情感分析等。 教程出处:https://www.jianshu.com/p/9e9db2c8e3d9 6. 金融数据分析 案例描述:使用Python对金融数据进行分析,包括股票行情分析、投资组合分析、风险管理等。 教程出处:https://www.jianshu.com/p/ba91cc96c5b8 7. 自然语言处理 案例描述:使用Python对自然语言进行处理,包括文本分类、文本相似度计算、情感分析等。 教程出处:https://www.runoob.com/natural-language-processing/natural-language-processing-intro.html 8. 图像处理 案例描述:使用Python对图像进行处理,包括图像滤波、图像分割、图像识别等。 教程出处:https://www.runoob.com/w3cnote/python-image-processing-1.html 推荐中文网站:Python数据之道(https://www.pythonf.cn/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值