博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 数据分析day_1:认识Notebook,及NumPy , Pandas 和 Matplotlib基本使用方法
阅读量:3773 次
发布时间:2019-05-22

本文共 4472 字,大约阅读时间需要 14 分钟。

数据分析

1.认识Notebook

1.1 三大神器

NumPy --> 保存数据和数据运算 --> SciPy

Pandas -->Panel Data Set --> 提供了核心的数据结构来展示和处理数据–>展示和处理数据(整合了NumPy 和 Matplotlib)
Matplotlib -->数据可视化(把数据变成漂亮的图表)

1.2 热身任务

热身任务:用随机的方式生成5个学生3门课程的成绩(百分制的成绩),统计每个学生的平均分,统计每门课的最高分和最低分

import randomnames = ['白起', '庄周', '狄仁杰', '吕布', '达摩']courses = ['语文', '数学', '英语']n, m = len(names), len(courses)scores = [[random.randint(60, 100) for _ in range(m)] for _ in range(n)]#[[93, 98, 85], [88, 76, 70], [69, 85, 61], [91, 75, 64], [70, 60, 66]]for i, score in enumerate(scores):    avg_score = sum(score) / m    print(f'{
names[i]}的平均分:{
avg_score:.1f}')"""白起的平均分:92.0庄周的平均分:78.0狄仁杰的平均分:71.7吕布的平均分:76.7达摩的平均分:65.3"""for i, course in enumerate(courses): temp = [scores[j][i] for j in range(n)] max_score, min_score = max(temp), min(temp) print(f'{
course}的最高分: {
max_score}') print(f'{
course}的最低分: {
min_score}')"""语文的最高分: 96语文的最低分: 65数学的最高分: 98数学的最低分: 70英语的最高分: 78英语的最低分: 61"""

1.3 利用numpy 和 pandas 解决上述问题

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt

NumPy

NumPy的核心是ndarray,它可以用来表示多维数组。

ndarray在保存和运算能力上,远远强过Python中的list类型。

# 将嵌套列表处理成NumPy的二维数组scores = np.array(scores)print(scores)"""array([[93, 98, 85],       [88, 76, 70],       [69, 85, 61],       [91, 75, 64],       [70, 60, 66]])"""type(scores) # numpy.ndarraynp.round(scores.mean(axis=1), 1) #[92. , 78. , 71.7, 76.7, 65.3]scores.max(axis=0) #[93, 98, 85]scores.min(axis=0) #[69, 60, 61]scores.std(axis=0) # [10.49571341, 12.51239386,  8.42377588]

Pandas

核心数据类型DataFrame,跟我们平时用的二维表一模一样。

score_df = pd.DataFrame(data=scores, columns=courses, index=names)score_df

在这里插入图片描述

avg_score = np.round(score_df.mean(axis=1), 1)avg_score

在这里插入图片描述

score_df['平均分'] = avg_scorescore_df

在这里插入图片描述

max_score = score_df.max(axis=0)min_score = score_df.min(axis=0)score_df.loc['最高分'] = max_scorescore_df.loc['最低分'] = min_scorescore_df

在这里插入图片描述

score_df.to_excel('学生成绩统计表.xlsx')# 配置支持中文的字体plt.rcParams['font.sans-serif'] = ['FangSong']# 魔法指令%config InlineBackend.figure_format = 'svg'score_df.loc['白起': '达摩'].plot(kind='bar', y=['语文', '数学', '英语'])plt.xticks(rotation=0)plt.savefig('学生成绩柱状图.svg')plt.show()

在这里插入图片描述

2.NumPy

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt%matplotlib inline  #内嵌图%config InlineBackend.figure_format = 'svg'  # 出的图为矢量图

2.1 创建一维数组

# 用array函数通过list创建创建一维数组array1 = np.array([1, 10, 100, 1000])# 用arange函数指定起止范围创建一维数组array2 = np.arange(1, 101, 2)array2# 通过函数linspace用间隔均匀的数字生成一维数组array3 = np.linspace(-5, 5, 80)array3# 通过随机的方式创建一维数组array4 = np.random.random(10)array4array5 = np.random.randint(10, 100, 10)array5array6 = np.random.normal(170, 7, 100)array6

2.2 创建二维数组

# 用嵌套列表创建二维数组array7 = np.array([[1, 2, 3], [3, 4, 5], [5, 5, 6]])array7# 通过对一维数组调形创建二维数组array8 = np.random.randint(60, 101, 15).reshape((3, 5))array8# 创建全0,全1,指定元素的二维数组# array9 = np.zeros((5, 4), dtype=np.int)# array9 = np.ones((5, 4), dtype=np.int)array9 = np.full((5, 4), 100)array9# 创建单位矩阵array10 = np.eye(10)array10# 用随机的方式创建二维数组array11 = np.random.randint(60, 101, (5, 3))array11array12 = np.array(array11, dtype='d')array12

2.2,1 数组的属性和方法

# 数组元素的个数array12.size# 数组元素的数据类型array12.dtype# 数组的维度(dimension)array12.ndim# 数组的形状array12.shape# 数组中每个元素占用的内存空间(字节)array12.itemsize# 数组总共占用的内存空间(字节)array12.nbytes

2.2.2 和描述性统计相关的方法

# 和描述性统计相关的方法print(array12.sum())print(array12.mean())print(array12.max())print(array12.min())print(array12.std())print(array12.var())# 在指定的轴上进行描述性统计运算print(array12.sum(axis=1))print(array12.mean(axis=0))array13 = np.random.randint(10, 101, 10)array13# 数组就地排序array13.sort()array13# 调用numpy的sort函数给数组排序,返回排好序的数组,原数组不变np.sort(array13)# 去重np.unique(array13)

2.3 二维数组切片

索引

array13[0], array13[-1]# 数组的关系运算会产生一个布尔数组array13 > 50# 布尔索引(用布尔类型的数组作为索引,True对应的元素保留,False对应的元素去掉)array13[array13 > 50]# 可以用& 或者 | 对两个布尔数组进行运算,相当于Python中and 和 orarray15[(array15>50) & (array15%2==0)]array15[(array15>50) | (array15%2==0)]# 花式索引(fancy index)array15[[2,3,0,0,-1,-4,5,6]]

切片

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

array16=np.arange(1,10).reshape(3,3)array16"""array([[1, 2, 3],       [4, 5, 6],       [7, 8, 9]])"""array16[1][0] #4array16[1,0] # 4#二维数组切片array16[1:,:2]"""array([[4, 5],       [7, 8]])"""array16[::2,::2]"""array([[1, 3],       [7, 9]])"""#花式索引array16[[0,1,2],[0,1,2]] #array([1, 5, 9])

2.4三维数组(涉及图像处理,重要)

在这里插入图片描述

# 读取图片创建三维数组guido = plt.imread('guido.jpg')guido.shape# 查看数组的维度guido.ndim# 通过数组显示图片plt.imshow(guido)# 通过切片实现抠图操作guido_head = guido[30: 350, 90: 310]plt.imshow(guido_head)# 垂直翻转plt.imshow(guido[::-1])# 水平翻转plt.imshow(guido[:, ::-1])plt.imshow(guido[:, :, ::-1])

转载地址:http://ikbvn.baihongyu.com/

你可能感兴趣的文章
类加载机制
查看>>
了解jdk1.8版本一些新的特性
查看>>
Java高级篇之网络通讯
查看>>
浅谈篇之线程池
查看>>
Lambda 表达式
查看>>
字符串函数MySQL
查看>>
8个SQL讲解优化
查看>>
MySQL实战续(二)
查看>>
安装Elastic和kibana
查看>>
什么是搜索
查看>>
全文检索工具elasticsearch
查看>>
Vue之条件渲染实战
查看>>
Vue之侦听属性
查看>>
求职指南(1)
查看>>
MySQL day11
查看>>
MySQL day12
查看>>
JSONP原理
查看>>
Vue.js学习笔记—插值的操作(1)
查看>>
CSS的四种方式实现水平居中
查看>>
RISC-V生态架构浅析(认识RISC-V)
查看>>