python 爬取机动车国环公布信息(二)

标题:python 爬取机动车国环公布信息(二)

鉴于:python 爬取机动车国环公布信息(一)尚有部分未写完,现补充后面数据处理的部分。
上一篇链接:https://blog.csdn.net/weixin_44816589/article/details/103937000
运行上一篇程序得到文件vecc_data_get_file.csv,本篇直接对这个文件进行处理。

直接上代码:

import csv
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def data_draw_pencentage(x, y_1, y_2, y_3):
    """
    :param x: 横坐标
    :param y_1: 纵坐标数据1
    :param y_2: 纵坐标数据2
    :param y_3: 纵坐标数据3
    :return:
    """
    try:
        x_list = x
        y_1_list = y_1
        y_2_list = y_2
        y_3_list = y_3
        x_title = x_list[0]    # 横坐标轴名称,日期
        y_1_title = y_1_list[0]   # 纵坐标数据名称,国内企业,左上角
        y_2_title = y_2_list[0]   # 纵坐标数据名称,国内车型数,左上角
        y_3_title = y_3_list[0]   # 纵坐标数据名称,国内车型数,左上角
        title = y_1_title[:2] + '国六车辆概况'       # 图表名称,居中上方
        x_list.remove(x_title)                      # 横轴数据列表去除第一个元素字符“日期”
        x_num_list = range(len(x_list))
        y_1_list.remove(y_1_title)                  # 纵坐标数据列表去除第一个元素字符“国内企业”
        y_2_list.remove(y_2_title)                  # 纵坐标数据列表去除第一个元素字符“国内车型数”
        y_3_list.remove(y_3_title)                  # 纵坐标数据列表去除第一个元素字符“国内车辆数”

        for i in range(len(y_1_list)):              # 字符格式转换为字符串格式
            y_1_list[i] = int(y_1_list[i])
            y_2_list[i] = int(y_2_list[i])
            y_3_list[i] = int(y_3_list[i])
        y_1_sum = y_1_list[-1]                      # 列表最后一位元素为累计总值
        y_2_sum = y_2_list[-1]                      # 列表最后一位元素为累计总值
        y_3_sum = y_3_list[-1]                      # 列表最后一位元素为累计总值
        for i in range(len(y_1)):
            y_1_list[i] = y_1_list[i] / y_1_list[-1]     # 累计值相对于累计总值的比值
            y_2_list[i] = y_2_list[i] / y_2_list[-1]     # 累计值相对于累计总值的比值
            y_3_list[i] = y_3_list[i] / y_3_list[-1]     # 累计值相对于累计总值的比值
        plt.figure(figsize=(18, 16))                 # 新建图不,同时设置尺寸(此代码可不写,则默认)
        plt.plot(x_num_list, y_1_list, marker='o', label=y_1_title + '--(当前值)' + str(y_1_sum))    # 第 1 条曲线,同时设置label,线型标签,左上角
        plt.plot(x_num_list, y_2_list, marker='*', label=y_2_title + '--(当前值)' + str(y_2_sum))    # 第 2 条曲线,同时设置label,线型标签,左上角
        plt.plot(x_num_list, y_3_list, marker='+', label=y_3_title + '--(当前值)' + str(y_3_sum))    # 第 3 条曲线,同时设置label,线型标签,左上角
        plt.grid(axis='y')        # 设置垂直于y轴的网格线,如果去掉axis=“y”,则为十字交叉网格线
        plt.legend()              # label 生效,即左上角线型标签生效
        plt.xticks(x_num_list, x_list, rotation=45)   # 设置x轴标签,改成日期,且倾斜45°
        # plt.subplots_adjust(left=0.05, bottom=0.15, right=0.95, top=0.90)          # 设置图表下边界距离
        plt.subplots_adjust(bottom=0.15)          # 设置图表下边界距离
        plt.xlabel('日期')           # 设置横轴名称
        plt.ylabel('累计值/累计总值')    # 设置纵轴名称
        try:
            plt.title(title)               # 设置图表标题
        except:
            print("未输入图标标题")
            pass
        plt.show()        # 使作图生效
    except:
        print("draw warning")
# def data_file_open(i, j):
def main():
    with open('vecc_data_get_file.csv') as data_file:
        odata_all = csv.reader(data_file)
        # print(odata_all)
        print("---------------------------")
        """ 新建7个空列表,用来存储需要的数据列表 """
        date_temp = []    # 日期
        corp_in_temp = []    # 国内企业
        car_type_num_in = []    # 国内车型数
        car_pro_num_in = []    # 国内车辆数
        corp_out_temp = []    # 国外企业
        car_type_num_out = []    # 国外车型数
        car_pro_num_out = []    # 国外车辆数
        """ 数据读取过程 """
        for row in odata_all:
            date_temp.append(row[0])
            corp_in_temp.append(row[7])
            car_type_num_in.append(row[8])
            car_pro_num_in.append(row[9])
            corp_out_temp.append(row[10])
            car_type_num_out.append(row[11])
            car_pro_num_out.append(row[12])
        date_temp_2 = []   # 第一次调用data_draw_pencentage函数后,data_temp的第一个元素“日期”被remove掉,故重新准备一个与data_temp相同的列表
        for i in date_temp:  # 新建列表,逐项赋值过程
            date_temp_2.append(i)
        print("date_temp", date_temp)
        data_draw_pencentage(date_temp, corp_in_temp, car_type_num_in, car_pro_num_in)      # 函数调用
        print("date_temp", date_temp)
        data_draw_pencentage(date_temp_2, corp_out_temp, car_type_num_out, car_pro_num_out)   # 函数调用

if __name__ == "__main__":
    main()

代码中有详细解释,不再赘述。

运行后结果:

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值