青年失业率

需求分析

  如今越来越多的人在毕业后开始了求职和工作,但面对如此大的竞争压力和其他因素都面临的事业的可能性,本案例主要为计算请年工作者的失业率。

实验步骤

步骤一:将数据集读入内存

   在这个数据集里一共有两个数据集,分别命名为"unemployment_male.csv"及"unemployment_female.csv"。由于有两个数据集,如果我们仍然一个一个分别的写"oepn…csv.reader()…for"的方式显然太麻烦,除了名字不同之外,读入数据的所有步骤是相同,所以我们将读入数据的方式模块化,用自定义函数,将这个过程包装起来。

实现步骤

1、引入模块csv
2、自定义函数read_csv(),输入参数为path,指数据集存放路径

  • 以只读的方式打开文件,将文件保存为f
  • 新建列表content,用于保存数据
  • 对文件f用csv.reader()方法,并保存为reader
  • 对reader使用for循环,提取其中每一行数据,添加到content中
  • 返回content

3、用自定义函数read_csv()读取数据集,分别保存为unemploy_male及unemploy_female
4、打印unemploy_male前两行数据

代码实现

import csv
def read_csv(path):
    f = open(path, "r")
    content = []
    reader = csv.reader(f)
    for row in reader:
        content.append(row)
    f.close()
    return content
unemploy_male = read_csv("unemployment_male.csv")
unemploy_female = read_csv("unemployment_female.csv")
print(unemploy_male[:2])

结果如下图所示。

在这里插入图片描述

步骤二:按名字选取数据

  如果我希望通过国家的名字获得这个国家相应的数据的时候,应该怎么做呢?在类Youth中添加函数,用于抽取该国家对应的数据

实现步骤

1、新增加函数gen_by_country,输入参数为country,表示需要查找的国家名称
2、对self.dataset进行循环
3、若列表中的第一个元素等于country,则直接返回这一列表
4、若执行完所有,没有一个国家与之匹配,则打印"对不起,没有此国家!"

代码实现

class Youth_Correct:
    def __init__(self, dataset):
        self.dataset = dataset
    def gen_by_country(self, country):
        for row in self.dataset:
               if row[0] == country:
                       return row
                              print("对不起,没有此国家!")
import pickle
with open("unemployment_male.pickle", "rb") as f:
        unemploy_male = pickle.load(f)
with open("unemployment_female.pickle", "rb") as f:
       unemploy_female = pickle.load(f)
un_male_youth = Youth(unemploy_male)
china_un_male = un_male_youth.gen_by_country("China")
print(china_un_male)
print(un_male_youth.gen_by_country("C"))

结果如下图所示。
在这里插入图片描述

步骤三:按时间选取数据

  除了按国家名字选择数据之外,还会有按时间年份来选择;这个练习需要你继续在Youth类中添加按时间选择数据的函数。

实现步骤

和国家不同的是,年份是选择一列数,需要先找到该年份所在列表中的位置,再对整个列表中每个元素进行循环抽取

  • 根据已写的类Youth,添加类内函数gen_by_time,输入参数为时间time
  • 首先需要找到输入年份所在数据集中列的位置,用range函数产生与数据集第一排元素相同长度的数字列表,并对该列表进行for循环
    • 抽取数据集第一行列表与此次循环数字相应位置的元素,同输入年份的字符串进行比较,若两者相同,则将此数字保存为posi_of_time,表示需要抽取年份所在列表位置
  • 新建变量content,用于保存抽取的数据
  • 变量posi_of_time有可能是不存在的,所以这里我们使用try…except结构来保证代码的运行正确
    • 在try下,对数据集除第一个列表元素之外进行for循环,并根据变量posi_of_time来抽取每个循环元素对应的年份数据,并添加到变量content中
      如果posi_of_time不存在,则会出现错误,使用try…except结构的情况下,错误会直接进入except;在excpet中,打印"对不起,没有此年份!",并直接返回,无返回内容
  • 返回变量content
  • 传入数据集unemploy_male初始化类Youth,并保存为un_male_youth
  • 使用类内方法gen_by_time,抽取2014年的数据,并保存为un_male_2014
  • 打印变量un_male_2014

代码实现

class Youth:
    
    def __init__(self, dataset):
        self.dataset = dataset
    
    def gen_by_country(self, country):
        
        for row in self.dataset:
            if row[0] == country:
                return row
        
        print("对不起,没有此国家!")
    
    def gen_by_time(self, time):
        
        for i in range(len(self.dataset[0])):
            if self.dataset[0][i] == str(time):
                posi_of_time = i
        
        content = []
        
        try: 
            for row in self.dataset[1:]:
                content.append(row[posi_of_time])
        except:
            print("对不起,没有此年份!")
            return
        
        return content

un_male_youth = Youth(unemploy_male)
un_male_2014 = un_male_youth.gen_by_time(2014)
print(un_male_2014)
print(un_male_youth.gen_by_time(2017))

结果如下图所示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值