• 12_4DataFrame和matplotlib模块


    一。Dataframe的分组。

      再网页表格数据 的分析中,可以使用以下语句进行爬取表格。

    res = pd.read_html('https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')  ### 返回的是一个列表  列表中是当前页面的所有表格数据

      read_html可以爬取表格,取出其中所需要的表格进行处理:

    champion = res[0]
    champion.columns = champion.iloc[0]  #### 将第一行的数据 赋值给 列名
    champion.drop([0], inplace=True) #### 将第一行数据 删除掉

      对于这段数据需要进行分组。分组之后进行计数即可。

    champion.groupby('冠军').groups
    champion.groupby('冠军').size().sort_values(ascending=False)

      如果需要统计其他数据,只需要再groupbt中添加列表。

    champion.groupby(['冠军', 'FMVP']).size()

    二。DataFrame的时间数据处理。

      处理时间需要导入一个模块。

    import dateutil

      将时间格式转化成元组

    dateutil.parser.parse("2019 Jan 2nd") 
    datetime.datetime(2019, 1, 2, 0, 0)

      转化列表时间

    pd.to_datetime(['2018-01-01', '2019-02-02'])
    DatetimeIndex(['2018-01-01', '2019-02-02'], dtype='datetime64[ns]', freq=None)

      生成时间序列

    pd.date_range("2019-1-1","2019-2-2", freq='M')
    DatetimeIndex(['2019-01-31'], dtype='datetime64[ns]', freq='M')

    三。matplotlib

      首先导入这个模块

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

      将表格支持中文:

    #### windows下好使
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False

      1.折线图

      首先需要生成一个plot画布

    a = [3,1,10,6]  ### 默认显示Y轴的值
    plt.plot(a)   #### plot()画折现图的函数
    plt.show()   #### 显示画的图表

      需要将一个列表放入该画布展示。

      如果需要同时键入x轴和y轴,可以输入两个:

    plt.plot(x, y, color='k', marker='D', linestyle=':')   ### 画图
    plt.show()       ### 显示

      如果需要设置画布大小可以使用以下语句:

    x = [2,5,7,10]
    y = [1,2,3,4]
    
    plt.figure(figsize=(10,6))  #### 设置画布大小

      可以设置图的标签和x轴y轴

    plt.title('title标题', fontsize=20, color='red')  #### 设置图表的标题
    plt.xlabel('x轴', fontsize=20)   #### 设置x轴的值
    plt.ylabel('y轴', fontsize=20)   #### 设置y轴的值

      其中设置的点数可以通过color,marker,linestyle进行设置。也可以通过plot?进行查询。

      

      2.柱状图

      首先获取数据:

    df = pd.read_csv('./douban_movie.csv')
    df.head()

      将获取到的数据进行处理:

    res = df.groupby('产地').size().sort_values(ascending=False)

      再生成一个bar柱状图,进行个性化设计

    x = res.index
    y = res.values
    plt.figure(figsize=(20,6))
    
    plt.title('每个国家或者地区的电影数量', fontsize=20)
    plt.xticks(rotation=90, fontsize=15, color='red')   ##### 设置x轴字体的大小和颜色
    plt.xlabel('产地', fontsize=20)
    
    plt.yticks(fontsize=15)
    plt.ylabel('数量', fontsize=20)

      如果需要在每个柱状上显示数字,需要进行xy轴的定位

    for a, b in zip(x,y):
    #     plt.text?
        plt.text(a, b+100, b, horizontalalignment='center', fontsize=13)
    
    plt.bar(x, y)
    # plt.savefig?
    plt.show()

     3.曲线图

      绘制曲线图数据处理:

    res = df.groupby(['年代']).size().sort_index()  ### sort_values 按照值进行排序  sort_index 按照索引进行排序
    res = res[:-2]

      曲线图主要是plot,数据比较多的情况:

    x = res.index
    y = res.values
    plt.figure(figsize=(10,6))
    plt.title('历年电影上映数量', fontsize=20, color='red')
    plt.xlabel('年代', fontsize=15)
    plt.xticks(fontsize=13, color='green')
    plt.ylabel('数量', fontsize=20, color='blue')
    plt.yticks(color='blue', fontsize=13)
    plt.plot(x, y)
    plt.show()

      4.绘制饼图:

      饼图中的重点在于使用cut

      cut中传入两个参数,返回值会根据第二个参数切分区域,并将第一个参数中的数值匹配这些区域,如果匹配不上就返回nan。

    pd.cut(np.array([1, 7, 5, 4, 6, 3]), [1,3,5])
    [NaN, NaN, (3.0, 5.0], (3.0, 5.0], NaN, (1.0, 3.0]]
    Categories (2, interval[int64]): [(1, 3] < (3, 5]]

      所以,需要将数据获取,放入其中进行切分:

    df_res = df['时长']
    res = pd.cut(df_res, [0,60,90,120, 140, 1000]) ### df_res 是待分割的源数据  [0,60,90,120, 140, 1000] 是区间 左开右闭

      输出的值是所有电影的归类,这个时候需要对其value_count获取值计数。

    res = res.value_counts()
    (90, 120]      16578
    (0, 60]        10324
    (60, 90]        7727
    (120, 140]      2718
    (140, 1000]     1386

      最后对数据进行个性化设置:

    x = res.index
    y = res.values
    plt.title('电影时长分布饼图', fontsize=20)
    
    patch, l_text, p_text = plt.pie(y, labels = x, autopct='%.2f%%')
    
    for p in p_text:
        p.set_size(15)
        p.set_color('white')
    
    for l in l_text:
        l.set_size(13)
        l.set_color('r')
        
    plt.show()

      hist:直方图。

      画图工具:

      echarts 和 highcharts 。

      

  • 相关阅读:
    oracle 删除表中重复数据留一条
    C# 特性
    oracle 常用简单命令语句
    2017年学习计划
    java web开发基础学习
    Java Axis2支持json
    java基础教程
    axis2 发布webservice
    孤荷凌寒自学python第103天认识区块链017
    孤荷凌寒自学python第102天认识区块链016
  • 原文地址:https://www.cnblogs.com/LZXlzmmddtm/p/11983856.html
Copyright © 2020-2023  润新知