【Python学习】使用pandas和matplotlib分析1949-2016年中国各省市历年GDP数据

    技术2023-10-05  74

    【Python学习】使用pandas和matplotlib分析1949-2016年中国各省市历年GDP数据

    导入包读取数据设置颜色列表绘图分析

    导入包

    由于我是在jupyter notebook进行代码编写的,仅此需要增加语句%matplotlib inline

    import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline

    同时,需要设置显示中文,我使用的是macbook,因此需要增加以下语句:

    plt.rcParams["font.family"] = 'Arial Unicode MS'

    如果是使用windows系统,则需要改为windows的相应字体。

    读取数据

    参考文件:1949-2016年中国各省市历年GDP数据汇总表.xlsx 数据呈现如下形式: 准确来说,第一行是标题,第一列是年份,其他列是每个省份的GDP数据,在这里使用pandas进行读取。需要注意的是,数据文件1949-2016年中国各省市历年GDP数据汇总表.xlsx和代码文件保存在相同的路径,否则,你需要修改datapath制定数据路径。

    # 第一步:数据读取 ## 更加具体地来说,如何把xlsx文件读取进来,如果不知道怎么读取,可以百度搜索“pandas读取xlsx文件” ## pandas是python的数据文件读取库 import pandas as pd datapath = "./1949-2016年中国各省市历年GDP数据汇总表.xlsx" # ./ 表示当前路径 df = pd.read_excel(datapath) print(df)

    使用以下代码熟悉pandas操作,以及读取进来的数据:

    print(type(df)) # 输出df的数据类型 print(df.columns.values) # 输出列标题 print(df.index.values) # 输出行索引 data = df.iloc[:, 0].values # 输出第1列数据 print('年份数据: \n', data)

    结果如下图所示:

    设置颜色列表

    由于绘制的曲线有很多条,所以我们要提前指定颜色

    cnames = [ '#AAF80F', '#7AE7D7', '#00F11F', '#7FFFD4', '#F0FF00', '#F5F5DC', '#FFE4C4', '#000000', '#FFEBCD', '#0000FF', '#8A2BE2', '#A52A2A', '#DEB887', '#5F9EA0', '#7FFF00', '#D2691E', '#FF7F50', '#6495ED', '#FFF8DC', '#DC143C', '#00FFFF', '#00008B', '#8B008B', '#556B2F', '#FF8C00', '#9932CC', '#8B0000', '#E9967A', '#8FBC8F', '#DCDCDC', '#F8F8FF', '#FFD700', '#DAA520', '#808080', '#008000', '#ADFF2F', '#F0FFF0', '#FF69B4', '#CD5C5C', '#4B0082', '#FFFFF0', '#F0E68C', ]

    绘图分析

    这里用到了一个for循环,避免多次书写画图函数,从而可以降低工作量,另外,需要对’——'进行处理,处理方法为:GDP =[0 if x == '——' else x for x in GDP],也就是令它们取值为0。

    # 绘图 fig = plt.figure(figsize=(16, 10)) # figsize设置图像大小 year = df.iloc[:, 0].values for i in range(len(df.columns.values)-1): temp = i+1 # 因为第1列为年份 GDP = df.iloc[:, temp].values GDP =[0 if x == '——' else x for x in GDP] #print(df.columns.values[temp],GDP) plt.plot(year, GDP,color=cnames[temp], label=str(df.columns.values[temp])) plt.legend(loc='upper left') # 显示图例 plt.xlabel('year') plt.ylabel('GDP')

    结果如下图所示:

    【作者简介】陈艺荣,男,目前在华南理工大学电子与信息学院广东省人体数据科学工程技术研究中心攻读博士,担任IEEE Access、IEEE Photonics Journal的审稿人。两次获得美国大学生数学建模竞赛(MCM)一等奖,获得2017年全国大学生数学建模竞赛(广东赛区)一等奖、2018年广东省大学生电子设计竞赛一等奖等科技竞赛奖项,主持一项2017-2019年国家级大学生创新训练项目获得优秀结题,参与两项广东大学生科技创新培育专项资金、一项2018-2019年国家级大学生创新训练项目获得良好结题,发表SCI论文4篇,授权实用新型专利8项,受理发明专利13项。 我的主页 我的Github 我的博客 我的Linkedin

    Processed: 0.017, SQL: 9