Python 数据分析day_1:认识Notebook,及NumPy , Pandas 和 Matplotlib基本使用方法


Python 数据分析day_1:认识Notebook,及NumPy , Pandas 和 Matplotlib基本使用方法
python 数据分析 day2 数组的运算及矩阵
python 数据分析 day3 矩阵及利用线性回归处理boston数据集
python 数据分析 day4 pandas 之 Series
python 数据分析day4 Pandas 之 DataFrame

1.认识Notebook

1.1 三大神器

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

1.2 热身任务

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

names = ['白起', '庄周', '狄仁杰', '吕布', '达摩']
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 np
import pandas as pd
import 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.ndarray
# 注意,在计算均值时,默认在0轴方向计算,在1轴方向计算需要声明
np.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_score
score_df

在这里插入图片描述

max_score = score_df.max(axis=0)
min_score = score_df.min(axis=0)

score_df.loc['最高分'] = max_score
score_df.loc['最低分'] = min_score

score_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 np
import pandas as pd
import 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)
array4

array5 = np.random.randint(10, 100, 10)
array5

array6 = 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))
array11

array12 = 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 和 or

array15[(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] #4
array16[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])
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值