01-作业:多个柱状图的绘制案例

import matplotlib.pyplot as plt
import numpy as npdef build_data():"""构建数据:return:数据"""res = np.load("./国民经济核算季度数据.npz")columns = res["columns"]values = res["values"]print(columns)print(values)return columns, valuesdef 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, valuesdef 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.0plt.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, valuesdef 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-pandas的认识

"""
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-dataframe属性

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-dataframe的查询操作

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-dataframe的增加操作

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'] + 1data.loc[:,'next_year_age'] = data.loc[:,'age'] + 1print(data)

pandas的认识与dataframe的认识 day04课件代码相关推荐

  1. pandas索引复合索引dataframe数据、索引其中一个水平(level)的所有数据行(index all rows in a level)

    pandas索引复合索引dataframe数据.索引其中一个水平(level)的所有数据行(index all rows in a level) 目录

  2. pandas索引复合索引dataframe数据、索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value).使用元组tuple表达复合索引的指定行 目 ...

  3. pandas索引复合索引dataframe数据、索引其中一个水平(level)的所特定数据行、指定数据行(index a row of a level)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引其中一个水平(level)的所特定数据行.指定数据行(index a row of a level).使用元组tuple表达复合索引的指定行 目录

  4. pandas索引复合索引dataframe数据、索引其中多个水平(level)的多个数据行(index rows from different levels)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引其中多个水平(level)的多个数据行(index rows from different levels and combine).使用元组tupl ...

  5. pandas索引复合索引dataframe数据、索引其中一个水平(level)的特定数据列(index a column of a level)

    pandas索引复合索引dataframe数据.索引其中一个水平(level)的特定数据列(index a column of a level) 目录

  6. pandas创建复合索引dataframe仿真数据集实战(create a multiIndex dataframe)

    pandas创建复合索引dataframe仿真数据集实战(create a multiIndex dataframe) 目录 pandas创建复合索引dataframe仿真数据集实战(create a ...

  7. pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数

    pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数 目录 pandas比较两个da

  8. pandas中两个dataframe的交集和差集

    Pandas中两个dataframe的交集和差集_ljp1919的专栏-CSDN博客_pandas 差集

  9. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一、pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主

    利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目 ...

  10. Python实训day09am【Pandas、Series、DataFrame数据帧】

    Python实训-15天-博客汇总表 目录 1.Pandas 1.1.安装Pandas库 1.2.两种数据对象 2.一列数据Series 2.1.获取Series与数据个数 2.2.切片-loc-il ...

最新文章

  1. Unity iPhone Touch Animation Tutorial,untiy3d iphone简单动画开发教程
  2. 用户控件的定制和使用
  3. NR 5G 非3GPP 接入到核心网络的安全性
  4. Android应用插件式开发解决方法[转]
  5. 【Ubuntu】 使用Xshell5连接Ubuntu16.04
  6. 华为交换机linux版本号,Cisco和华为交换机常用配置命令总结
  7. Vue 给第三方组件加入自定义参数
  8. Apache 分割日志
  9. oracle日期函数函数,Oracle日期函数
  10. postman工具 如何传递当前时间戳和MD5加密
  11. css伪类设置小标签
  12. 个推mastersecret_个推 服务端 SDK
  13. AppStore算法再次升级,运营如何在ASO中破冰?
  14. 论文阅读:[2019 TSE] A Theoretical and Empirical Analysis of Program Spectra Diagnosability
  15. oracle角色数达到上限,ROLE启用个数限制
  16. tiledmap 图块属性_Tiled Editor 图块的两种导入方式
  17. CSS初始化样式应该怎么写
  18. 用飞信批量加好友——解放鼠标,更解放你的手!
  19. torch当中的MseLoss的reduction参数
  20. “北斗一号”卫星导航定位系统与GPS的区别

热门文章

  1. 期货量化交易程序CTP入门指南 二
  2. weblogic安装以及异常解决方法【转】
  3. matlab范德蒙,matlab有效生成范德蒙多矩阵
  4. Ruckus 7372 Multimedia Hotzone Wireless AP 配置
  5. html自动选择省市,jQuery中国省市区地址三级联动插件Distpicker
  6. 检查pdf字体是否全部嵌入
  7. 线性分类器——Fisher线性判别
  8. 平凡人的野望:我们为赛博世界保管记忆
  9. Linux开机自动挂载Windows分区的两种方法
  10. linux系统TongLinkQ安装部署手册