数据分析-numpy、pandas、matplotlib
数据分析–numpy、pandas、matplotlib
Matplotlib
Matplotlib是一个用于创建静态、动态和交互式图形的2D绘图库。它可以绘制线图、散点图、直方图等各种类型的图表,用于可视化数据和结果。
1、创建图表和子图
plt.figure():创建一个新的图表。plt.subplots():创建一个包含多个子图的图表。
2、绘制图形
-
plt.plot():绘制折线图。 *x: x 轴的数据。y: y 轴的数据。color(或c): 线条的颜色。linestyle(或ls): 线条的风格,如实线 (-)、虚线 (--)。linewidth(或lw): 线条的宽度。marker: 点的标记样式,如圆圈 (o)、方块 (s)。markersize(或ms): 点的大小。label: 线条的标签,用于图例。
-
plt.scatter():绘制散点图。 *x: x 轴的数据。y: y 轴的数据。color(或c): 点的颜色。marker: 点的标记样式,如圆圈 (o)、方块 (s)。s: 点的大小。alpha: 点的透明度。label: 点的标签,用于图例。
-
plt.bar():绘制柱状图。 *x: 柱状图的 x 轴位置。height(或y): 柱状图的高度。width: 柱状图的宽度。color(或c): 柱状图的颜色。edgecolor: 柱状图的边框颜色。linewidth: 柱状图的边框宽度。tick_label: 柱状图的刻度标签。align: 柱状图的对齐方式。
-
plt.hist():绘制直方图。 *x: 数据。bins: 分组数量或分组边界。color(或c): 直方图的颜色。edgecolor: 直方图的边框颜色。alpha: 直方图的透明度。label: 直方图的标签,用于图例。
-
plt.pie():绘制饼图。 *x: 饼图的数值。labels: 饼图每个部分的标签。colors: 饼图每个部分的颜色。explode: 突出显示某些部分。autopct: 控制饼图上显示的百分比格式。startangle: 饼图开始的角度。
-
plt.imshow(): 显示图像数据。
3、图表装饰和设置
plt.title():设置图表标题。
plt.xlabel() 和 plt.ylabel():设置 x 轴和 y 轴标签。
plt.xlim() 和 plt.ylim():设置 x 轴和 y 轴的显示范围。
plt.xticks() 和 plt.yticks():设置 x 轴和 y 轴的刻度标签。
plt.legend():显示图例。
plt.grid():显示网格线。
plt.color():设置颜色。
plt.():设置线条样式。
plt.marker():设置标记样式。
plt.text(): 在图中添加文本。
plt.annotate(): 添加带有箭头的注释。
4、图像保存与显示
plt.savefig():保存图表为图片文件。plt.show():显示图表。
6、中文
- fontproperties=zhfont1
# fname 为 你下载的字体库路径,注意 SourceHanSansSC-Bold.otf 字体的路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")
plt.title("中文题目", fontproperties=zhfont1)
python
Numpy
NumPy(Numerical Python)是一个开源的Python科学计算库,它提供了强大的多维数组对象和用于处理这些数组的函数。NumPy是许多其他Python科学计算库的基础,例如pandas和matplotlib。它也可以用于线性代数、傅立叶变换和随机数生成等方面。
1、创建数组
np.array():从列表或元组等序列对象创建数组。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr)
# 输出:[1 2 3 4 5]
python
np.zeros():创建全零数组。
zeros_arr = np.zeros((2, 3))
print(zeros_arr)
"""
输出:
[[0. 0. 0.]
[0. 0. 0.]]
"""
python
np.ones():创建全一数组。
ones_arr = np.ones((3, 2))
print(ones_arr)
"""
输出:
[[1. 1.]
[1. 1.]
[1. 1.]]
"""
python
np.arange():创建等差数组。
arange_arr = np.arange(1, 10, 2)
print(arange_arr)
# 输出:[1 3 5 7 9]
python
np.linspace():创建等间距数组。
linspace_arr = np.linspace(1, 10, 5)
print(linspace_arr)
# 输出:[ 1. 3.25 5.5 7.75 10. ]
python
np.random.rand():创建指定形状的随机数组,返回的为[0.0,1.0]的数。
random_arr = np.random.rand(2, 3)
print(random_arr)
"""
输出:
[[0.09762701 0.43037873 0.20552675]
[0.08976637 0.15257277 0.08977303]]
"""
python
np.random.uniform():创建指定形状的范围数组
random_uniform = np.random.uniform(low=1,high=10,size=(2,3))
print(random_uniform)
"""
输出:
[[4.59762701 1.43037873 9.20552675]
[3.08976637 8.15257277 6.08977303]]
"""
python
np.random.randn():从标准正态分布中返回一个或多个样本值
np.random.normal(loc=0.0,scale=1.0,size=None):
loc:float,此概率分布的均值(对应着整个的中心)
scale:float,此概率分布的标准差(对应着分布的宽度,scale越大越矮胖,scale越小越瘦高)
size:int or tuple of ints,输出的shape,默认为None,只输出一个值
np.random.randint:创建指定形状的范围数组,类型为整数
np.random.randint:创建指定形状的范围数组,类型为整数
2、数组操作
ndarray.shape:返回数组的形状。
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)
# 输出:(2, 3)
python
ndarray.ndim:返回数组的维数。
print(arr.ndim)
# 输出:2
python
ndarray.dtype:返回数组的数据类型。
print(arr.dtype)
# 输出:int64
python
ndarray.size:返回数组的元素总数。
print(arr.dtype)
# 输出:6
python
ndarray.reshape():改变数组的形状。
reshaped_arr = arr.reshape(3, 2)
print(reshaped_arr)
"""
输出:
[[1 2]
[3 4]
[5 6]]
"""
python
ndarray.ravel()、ndarray.flatten():将多维数组转换为一维数组。
raveled_arr = arr.ravel()
print(raveled_arr)
# 输出:[1 2 3 4 5 6]
python
ndarray.transpose():转置数组。
transposed_arr = arr.transpose()
print(transposed_arr)
"""
输出:
[[1 2]
[3 4]
[5 6]]
"""
python
3、数组运算
np.add():数组元素求和。
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
sum_arr = np.add(arr1, arr2)
print(sum_arr)
# 输出:[5 7 9]
python
np.subtract():数组元素求差。
diff_arr = np.subtract(arr1, arr2)
print(diff_arr)
# 输出:[-3 -3 -3]
python
np.multiply():数组元素相乘。
prod_arr = np.multiply(arr1, arr2)
print(prod_arr)
# 输出:[4 10 18]
python
np.divide():数组元素相除。
div_arr = np.divide(arr2, arr1)
print(div_arr)
# 输出:[4. 2.5 2. ]
python
np.dot():数组的点积。
dot_product = np.dot(arr1, arr2)
print(dot_product)
# 输出:32
python
np.sum():计算数组元素的和。
sum_elements = np.sum(arr1)
print(sum_elements)
# 输出:6
python
np.mean():计算数组元素的平均值。
mean_value = np.mean(arr2)
print(mean_value)
# 输出:5.0
python
np.where:三元运算符,替换值
# 在数组中,小于10的改为0,不小于的改为10
np.where(array<10,0,10)
python
np.clip:裁剪,替换值
# 把小于10的替换为10,大于20的替换为20
array.clip(10,20)
python
4、数组索引和切片
使用索引访问数组元素。
array[0] # 取第一个值(一维)
array[2,3] # 取第三行第四列的值(二维)
# 取第二层第三行第四列的值(三维)
array[1,2,3]
python
使用切片访问部分数组 。
# 一维
array[1:5] # 取第二行到第五行
# 冒号(:)可以省略
array[1,:] # 取第二行
array[2:,:] # 取第三行到最后一行
array[[2,3,10],:] # 取第3、4、11行
array[:,0] # 取第一列
array[:,2:] # 取第三行到最后一列
array[:,[0,2]] # 取第1、3列
# 二维
# 取第三行到第五行、第二列到第四列的结果
array[2:5,1:4] # 取得是交叉点的位置
# 取多个不相邻的点
# 选出来的结果: (0,0) (2,1) (2,3)
# 第一行第一列,第三行第二列,第三行第四列
array[[0,2,2],[0,1,3]]
python

5、数组聚合和统计
np.min()和np.max():计算数组的最小值和最大值。np.mean()和np.median():计算数组的平均值和中位数。np.std()和np.var():计算数组的标准差和方差。np.unique():返回数组中的唯一值。
6、数组拼接和分割
np.hstack()、np.vstack():水平和垂直堆叠数组。
np.concatenate():沿指定轴拼接数组。
arr3 = np.array([7, 8, 9])
concat_arr = np.concatenate((arr1, arr3))
print(concat_arr)
# 输出:[1 2 3 7 8 9]
python
np.split():将数组分割为多个子数组。
split_arr = np.split(concat_arr, 2)
print(split_arr)
"""
输出:
[array([1, 2, 3]), array([7, 8, 9])]
"""
python
Pandas
pandas是一个数据处理库,提供了用于快速、灵活地处理结构化数据的数据结构。它主要包括两种数据结构:Series(一维标记数组)和DataFrame(二维标记数据结构),可以用来处理缺失数据、合并/连接数据、重塑数据等。
1、创建数据结构
pd.Series():创建一个序列(一维数组)。
s = pd.Series([1, 2, 3, 4, 5])
python
pd.DataFrame():创建一个数据帧(二维表格)。
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
python
2、数据读取与写入
pd.read_csv():从 CSV 文件中读取数据。
data = pd.read_csv('data.csv')
python
pd.to_csv():将数据写入 CSV 文件。
data.to_csv('data.csv', index=False)
python
3、数据查看
df.head()和df.tail():查看数据框的前几行和后几行。df.info():显示数据帧的基本信息,包括列名和数据类型。df.describe():显示数据帧的统计摘要信息,如平均值、标准差等。
4、数据选择与过滤
- 使用标签选择行列:
df['A']或df.loc[:, 'A']。 - 使用位置选择行列:
df.iloc[0](位置下标)。 - 使用条件选择行列:
df[df['A'] > 1]。
5、数据处理
df.dropna() :删除缺失值。
# inplace原地替换,不用重新赋值
df.dropna(inplace=True)
python
df.fillna():填充缺失值。
filled_df = df.fillna(value=0)
python
df.drop_duplicates(): 删除重复值。
df.drop_duplicates(inplace=True)
python
df.drop():删除指定行或列。
new_df = df.drop(columns=['C'])
python
df.rename():重命名列名或索引名。
renamed_df = df.rename(columns={'A': 'new_A'})
python
6、数据操作与计算
df.sum()、df.mean()、df.std()、df.var():对数据进行求和、均值、标准差、方差等计算。
df.sort_values()、df.sort_index():对数据进行排序。
# 按指定列的值对数据框进行排序。
sorted_df = df.sort_values(by='A', ascending=False)
#按索引排序数据框。
sorted_df = df.sort_index()
python
df.replace():替换特定值。
replaced_df = df.replace({1: 'one', 2: 'two'})
python
df.value_counts():计算每个唯一值的频率。
counts = df['A'].value_counts()
python
7、数据分组与聚合
df.groupby():按列分组。
groupby_A = df.groupby('A')
python
聚合函数(如 mean()、sum()):对分组后的数据进行聚合计算。
8、数据合并与连接
df1.join(df2):根据df1合并df2
pd.concat():按行或列将多个数据框连接在一起。
new_df = pd.concat([df1, df2], axis=0)
python
pd.merge():根据指定列将两个数据框合并。
merged_df = pd.merge(df1, df2, on='key')
python
9、数据转换
df.pivot():将数据从长格式转换为宽格式。
pivoted_df = df.pivot(index='date', columns='variable', values='value')
python
df.melt():将数据从宽格式转换为长格式。
melted_df = df.melt(id_vars=['id'], value_vars=['var1', 'var2'])
python
df.apply():对数据框中的每一列应用函数。
df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
python
df.astype():将数据框中的数据类型转换为指定类型。
df['A'] = df['A'].astype(str)
python
10、时间序列
pd.date_range():生成日期范围。
dates = pd.date_range('2022-01-01', periods=10)
python
pd.to_datetime():将字符串转换为日期时间格式。
dates = pd.to_datetime(['2022-01-01', '2022-01-02'])
python
频率的缩写:
| 别名 | 偏移量类型 | 说明 |
|---|---|---|
| D | Day | 每日历日 |
| B | BusinessDay | 每工作日 |
| H | Hour | 每小时 |
| T或min | Minute | 每分钟 |
| S | Second | 每秒 |
| L或ms | Milli | 每毫秒 |
| U | Micro | 没微秒 |
| M | MonthEnd | 每月最后一个日历日 |
| BM | BusinessMonthEnd | 每月最后一个工作日 |
| MS | MonthBegin | 每月第一个日历日 |
| BMS | BusinessMonthBegin | 每月第一个工作日 |
