知識とパンダのデータフレームの理解day04コースウェアコード

01-割り当て:複数の例ヒストグラムを描きます

import matplotlib.pyplot as plt
import numpy as np


def build_data():
    """
    构建数据
    :return:数据
    """
    res = np.load("./国民经济核算季度数据.npz")
    columns = res["columns"]
    values = res["values"]
    print(columns)
    print(values)
    return columns, values


def plot_data(columns, values, min_i, max_i, title, xlabel, ylabel, legend_index, year_index):
    """
    :param columns: 列名
    :param min_i: 最小的列下标
    :param max_i: 最大的列下标
    :param title: 标题
    :param xlabel: 横轴标题
    :param ylabel: 纵轴标题
    :param legend_index: 图例
    :param values:数据
    :param year_index:年份行数下标
    :return:
    """
    # 设置横轴
    x = np.arange(1, max_i - min_i + 2)

    # 设置纵轴
    height = values[year_index, min_i:(max_i + 1)]

    plt.bar(x, height, width=0.5)

    # 进行标注
    for i, j in zip(x, height):
        plt.text(i, j + 100, "%.2f亿元" % j, horizontalalignment='center')
    #
    # 增加标题
    plt.title(title)
    #
    # 设置横纵轴的标题
    plt.xlabel(xlabel)

    plt.ylabel(ylabel)
    #
    # 修改刻度
    xticks = [tmp[:legend_index] for tmp in columns[min_i:max_i + 1]]

    # 设置刻度
    plt.xticks(x, xticks)


def show_data(columns, values):
    """
    结果展示
    :param columns: 列名
    :param values: 数据
    :return: None
    """
    # 1、创建画布
    fig = plt.figure(figsize=(20, 12), dpi=120)
    # 支持中文与负号
    plt.rcParams['font.sans-serif'] = 'SimHei'
    plt.rcParams['axes.unicode_minus'] = False

    # 添加子图
    fig.add_subplot(2, 2, 1)
    title = "2000年第一季度各产业生产总值柱状图"
    xlabel = "产业"
    ylable = "生产总值(亿元)"
    plot_data(columns, values, 3, 5, title, xlabel, ylable, legend_index=4, year_index=0)

    fig.add_subplot(2, 2, 2)
    title = "2017年第一季度各产业生产总值柱状图"
    plot_data(columns, values, 3, 5, title, xlabel, ylable, legend_index=4, year_index=-1)

    fig.add_subplot(2, 2, 3)
    title = "2000年第一季度各行业生产总值柱状图"
    xlabel = "行业"
    ylable = "生产总值(亿元)"
    plot_data(columns, values, 6, 14, title, xlabel, ylable, legend_index=2, year_index=0)

    fig.add_subplot(2, 2, 4)
    title = "2017年第一季度各行业生产总值柱状图"
    plot_data(columns, values, 6, 14, title, xlabel, ylable, legend_index=2, year_index=-1)

    # 保存图片
    plt.savefig("./2000、2017年第一季度各产业、行业生产总值柱状图.png")

    plt.show()


def main():
    """
    主函数
    :return:
    """
    # 构建数据
    columns, values = build_data()

    # 展示结果
    show_data(columns, values)


if __name__ == '__main__':
    main()

円グラフを描画するための02-

import numpy as np
import matplotlib.pyplot as plt

"""
饼图----将各部分全部绘制在同一个饼中,可以提现出各部分的占比
应用场景:
    对比各部分的占比情况
    也可以对比部分与整体的关系
"""


def build_data():
    """
    加载数据
    :return:
    """
    res = np.load("./国民经济核算季度数据.npz")

    # for tmp in res:
    #     print(tmp)

    columns = res['columns']
    values = res['values']

    return columns, values


def show_data(columns, values):
    """
    数据可视化
    :param columns: 数据
    :param values: 数据
    :return: None
    """
    # 1、创建画布
    plt.figure()
    # 支持中文与负号
    plt.rcParams['font.sans-serif'] = 'SimHei'
    plt.rcParams['axes.unicode_minus'] = False
    # 2、绘制图形
    # 绘制饼图
    # 构建绘制饼图的数据
    x = values[-1, 3:6]
    # explode --->表示各部分距离圆心的半径---也可以理解为 各部分之间的间隙
    explode = (0.01, 0.02, 0.01)  # 占半径的占比
    # labels ---每一项的名称
    labels = [tmp[:4] for tmp in columns[3:6]]

    # colors --设置颜色
    colors = ['pink', 'r', 'y']

    # autopct ---用来显示各部分占比
    autopct = "%.1f%%"

    # pctdistance --- 控制着标注的位置,默认为距离圆心0.6个半径的位置
    pctdistance = 0.6

    # labeldistance ---控制着名称的位置,默认为距离圆心1.1个半径的位置
    labeldistance = 1.1

    # radius ---表示饼图的半径
    radius = 1.0

    plt.pie(x, explode=explode, labels=labels, colors=colors, autopct=autopct, pctdistance=pctdistance,
            labeldistance=labeldistance, radius=radius)
    # 将饼图由椭圆 变为圆形
    # 椭圆里面 有个长轴、短轴 --->长轴=短轴--->圆
    plt.axis('equal')

    # 增加标题
    plt.title("2017年各个产业的增加总值占比情况")
    # 设置图例
    plt.legend(labels)
    # 保存图片
    plt.savefig("./2017年各个产业的增加总值占比情况.png")
    # 3、图形展示
    plt.show()


def main():
    """
    主函数
    :return:
    """
    # 1、构建数据
    columns, values = build_data()
    print("columns:\n", columns)
    print("values :\n", values)

    # 2、数据可视化
    show_data(columns, values)


if __name__ == '__main__':
    main()

03-箱ひげ図を描きます

import numpy as np
import matplotlib.pyplot as plt

"""
箱线图---利用最小值、下四分位数、中位数、上四分位数、最大值来进行描述数据
-----可以用来查看数据的是否对称、离散、分布
----别的功能:----借助箱线图分析剔除异常值(远离正常范围的错误的值)
"""


def build_data():
    """
    加载数据
    :return:
    """
    res = np.load("./国民经济核算季度数据.npz")

    # for tmp in res:
    #     print(tmp)

    columns = res['columns']
    values = res['values']

    return columns, values


def show_data(columns, values):
    """
    数据可视化
    :param columns: 数据
    :param values: 数据
    :return: None
    """
    # 1、创建画布
    plt.figure()
    # 支持中文与负号
    plt.rcParams['font.sans-serif'] = 'SimHei'
    plt.rcParams['axes.unicode_minus'] = False
    # 2、绘制图形
    # 绘制箱线图
    x = (values[:, 3], values[:, 4], values[:, 5])
    # x = (values[:, 3],)
    # 缺口
    # meanline=True,showmeans=True  同时使用,才能在箱线图上显示出均值
    # vert=False ---绘制水平的箱子
    # labels 名称
    labels = [tmp[:4] for tmp in columns[3:6]]
    # sym --异常值的形状
    plt.boxplot(x, notch=True, meanline=True, showmeans=True, labels=labels,sym='*')

    # plt.boxplot(x, notch=True, meanline=True, showmeans=True)
    # 3、图形展示
    plt.show()


def main():
    """
    主函数
    :return:
    """
    # 1、构建数据
    columns, values = build_data()
    print("columns:\n", columns)
    print("values :\n", values)

    # 2、数据可视化
    show_data(columns, values)


if __name__ == '__main__':
    main()

# 了解更多:https://matplotlib.org/gallery/index.html

04-パンダを理解します

"""
numpy ---科学计算库
结构核心:ndarray
    连续内存的、存储单一数据类型的、多维的数组对象

matplotlib---数据可视化库
能绘制2-d、3-d图
绘图三部曲:
    1、创建画布
    2、绘制图形
    3、图形展示
pandas --- 专门用于进行数据处理的库
内部封装了numpy matplotlib部分的功能 ---pandas内部也可以进行统计分析、数据可视化
结构核心:
    1、Series
        --一维结构
        --可以通过一维数组、列表来生成,也可以通过获取dataframe中的一列来生成
        --只有行索引,没有列索引
    2、DataFrame  ---重中之重
        ---二维结构
        ---可以通过二维数组、大字典来生成
        ---既有行索引,又有列索引
    3、pannel --三维结构(了解)
"""
import numpy as np
import pandas as pd

# 加载数据
res = np.load("./国民经济核算季度数据.npz")
columns = res['columns']
values = res['values']
print("columns :\n", columns)
print("values :\n", values)
# 将columns与 values 拼接成一个二维数组
# data = np.vstack((columns,values))
# print("data:\n",data)

# 构建df 的行名称
index_content = ["index_" + str(i) for i in range(values.shape[0])]
print("index_content:\n", index_content)

# 将二维数组转化为dataframe
# dataframe 相比于二维数组,多了行名称(行索引)、列名称(列索引)
df = pd.DataFrame(
    data=values,
    columns=columns,
    index=index_content
)
print("df:\n", df)
print("df 的类型:\n", type(df))

# 自己创建dataframe
# 利用大字典创建dataframe
# df = pd.DataFrame(
#     data={
#         "name": ['zs', 'ls', 'ww', 'oo', 'hh', 'jj', 'gg', 'kk'],
#         "high": [178.0, 179, 165.5, 160.5, 168.6, 172.0, 182, 189.0],
#         "score": [99, 98, 97, 90, 89, 99, 96.5, 88.5],
#         'class': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
#         'group': ['1', '1', '2', '2', '1', '1', '2', '2']
#     },
#     index=["stu_1", "stu_2", "stu_3", "stu_4", "stu_5", "stu_6", "stu_7", "stu_8"]
# )
# print("df:\n", df)
# print("df 的类型:\n", type(df))


# 获取 df里面的时间这一列
# 从df中取出一列,就是Series,只有行名称,没有列名称
# se = df['时间']
# print("se:\n",se)
# print("se 的类型:\n",type(se))

# 自己创建一个series
# 利用列表、一维数组来生成series
se = pd.Series(
    data=np.array(['zs', 'ls', 'ww', 'oo', 'hh', 'jj', 'gg', 'kk']),
    index=["stu_1", "stu_2", "stu_3", "stu_4", "stu_5", "stu_6", "stu_7", "stu_8"]
)

print("se:\n", se)
print("se 的类型:\n", type(se))















05-pandaが保存したファイルを読むために

import pandas as pd

"""
1、文本文件 ----由若干行字符构成的计算机文件,它是一种典型的顺序文件
        csv文件---默认以逗号分隔的一种文本文件
2、excel文件--
        以.xlsx 、.xls为结尾的表格文件
"""
# sep ,delimiter ---分隔符

# 读取文本文件
# data = pd.read_table(
#     filepath_or_buffer="./meal_order_info.csv",  # 路径+ 名称
#     delimiter=",",  # 分隔符
#     header='infer',  # 列名称为自动识别
#     # header=0,  # 可以手动的指定某一行为列名称
#     encoding="ansi",  # 编码格式
#     # usecols=[0, 1],  # 可以指定只读取指定的列
#     # index_col=0,  # 指定某一列 为行索引
#     nrows=5,  # 指定读取前n行数据
# )

# 其它的参数可以参考 read_table
# data = pd.read_csv(
#     filepath_or_buffer="./meal_order_info.csv",  # 路径+ 名称
#     encoding='ansi'
# )


# 加载excel文件
data = pd.read_excel(
    io="./meal_order_detail.xlsx",  # 路径+ 名称
    sheetname=0,  # 读取的表的序号
    header=0,  # 列索引名称
    # index_col  # 可以指定某一列为行索引
    # parse_cols=[0, 1]  # 某些版本起作用,可以用来读取指定的列
)
print("data:\n", data)
print("data 的类型:\n", type(data))

# pandas中的读取操作---pd.read_xxxx()
# pandas 中的保存操作---df.to_xxx()
# 将data 保存为csv文件
# data.to_csv(
#     path_or_buf="./jj.csv",  # 保存的文件的路径+ 名称
#     sep=',',  # 分隔符
#     header=False,  # 保存的时候保存列名称 # 置为False 则不保存列名称
#     index=False,  # 保存的时候保存行名称 # 置为False 则不保存行名称
#     mode='a',  # 重写模式
# )

06-データフレームプロパティ

import pandas as pd

# 加载detail
data = pd.read_excel("./meal_order_detail.xlsx")
# print("data:\n", data)
# print("data 的类型:\n", type(data))
# print("*" * 100)

# values index columns dtypes size  ndim shape
# print("data 的维度:\n", data.ndim)
# print("data 的形状:\n", data.shape)
# print("data 的元素的个数:\n", data.size)

# print("data 的行索引:\n",data.index)
# print("data 的列索引:\n",data.columns)


# pd.DataFrame 将二维数组转化为df, 也可以通过df.values 将df转化为二维数组
# print("data 的values :\n", data.values)
# print("data 的values的类型 :\n", type(data.values))

# 返回每一列的元素的数据类型
# print("data 的元素的数据类型:\n", data.dtypes)


# 构建series
se = data['dishes_name']
print('se:\n', se)
print("se 的类型:\n", type(se))

print("se 的形状:\n", se.shape)
print("se 的维度:\n", se.ndim)

print("se 的元素个数:\n", se.size)
print("se 的元素的数据类型:\n", se.dtypes)

print("se 的values \n", se.values)

print("se 的行索引 :\n", se.index)

07-データフレームのクエリ操作

import pandas as pd

# 加载detail
data = pd.read_excel("./meal_order_detail.xlsx")

data.index = ["index_" + str(i) for i in range(data.shape[0])]

print('data:\n', data)
print('data 的列索引名称:\n', data.columns)
print("*" * 100)

# dataframe 索引的第一种方式 ---先列后行 ---先后索引
# 获取某一列元素--dishes_name
# print("获取 dishes_name 列:\n", data['dishes_name'])

# 获取某一列元素的 前n行数据 --下标切片
# print('获取单列的 前n行数据:\n', data['dishes_name'][:5])
# 获取某一列元素的 前n行数据 ---head()
# print('获取单列的 前n行数据:\n', data['dishes_name'].head(10))
# 获取某一列元素的 后 n行数据 ---下标切片
# print('获取某一列元素的 后 n行数据:\n', data['dishes_name'][-5:])
# 获取某一列元素的 后 n行数据 ---tail()
# print('获取某一列元素的 后 n行数据:\n', data['dishes_name'].tail(10))
# 获取某一列元素的 前n行数据  --- 行名称列表
# print('获取单列的 前n行数据:\n', data['dishes_name'][['index_0', 'index_1', 'index_2']])
# 获取某一列元素的 前n行数据 ---行名称切片
# print('获取单列的 前n行数据:\n', data['dishes_name']['index_0':'index_2'])


# 获取多列元素---dishes_name detail_id order_id
# print("获取多列元素 :\n",data[['dishes_name','detail_id','order_id']])

# 获取多列元素的前n行 ---下标切片 --后n行---下标切片
# print("获取多列元素的前n行 :\n",data[['dishes_name','detail_id','order_id']][:5])
# 获取多列元素的前n行 ---head() ---后n 行tail
# print("获取多列元素的前n行 :\n", data[['dishes_name', 'detail_id', 'order_id']].head(10))

# 注意:::: ----获取多列元素的前n行 --不可以使用 行名称列表
# print("获取多列元素的前n行 :\n", data[['dishes_name', 'detail_id', 'order_id']][['index_0', 'index_1', 'index_2']]) # 不能使用
# 获取多列元素的前n行 ------行名称切片
# print("获取多列元素的前n行 :\n", data[['dishes_name', 'detail_id', 'order_id']]['index_0':'index_2'])

08-データフレームの操作の増加

import pandas as pd

# 加载users
data = pd.read_excel('./users.xlsx')
print("data:\n", data)
print('data 的列索引:\n', data.columns)

# 给data 添加一列 next_year_age
# data['next_year_age'] = data['age'] + 1

data.loc[:,'next_year_age'] = data.loc[:,'age'] + 1

print(data)

公開された128元の記事 ウォン称賛24 ビュー4260

おすすめ

転載: blog.csdn.net/return_min/article/details/103910468