使用 Python 探索和分析数据 入门的入门2 可视化数据

404 阅读4分钟

接上回使用 Python 探索和分析数据 入门的入门,相关的数据列表会贴在文末,有兴趣的可以跟着做一做.

可视化数据

数据科学家会直观呈现数据,以更好地理解数据。 这可能意味着查看原始数据、摘要度量值(如平均值)或绘制数据图表。 图表是一种查看数据的强有力方式,因为我们可以快速地了解适度复杂的模式,而无需定义数学摘要度量值。

直观地表示数据

直观地表示数据通常意味着绘制数据图表。 这样做是为了提供对数据的快速定性评估,这有助于理解结果、查找离群值、了解数字的分布方式等。

尽管有时候我们提前知道哪种图表最有用,但其他时候我们以探索性的方式使用图表。 若要了解数据可视化效果的强大功能,请考虑以下数据:无人驾驶汽车的位置 (x,y)。 在数据的原始形式下,很难看到任何真实的模式。 平均值告诉我们其路径以 x = 0.2 和 y = 0.3 为中心,数值范围似乎介于 -2 和 2 之间。

时间Location-XLocation-Y
002
11.6829421.080605
21.818595-0.83229
30.28224-1.97998
4-1.5136-1.30729
5-1.917850.567324
6-0.558831.920341
71.3139731.507805
120.000010.00001
130.8403341.814894
141.9812150.273474
151.300576-1.51938
16-0.57581-1.91532
17-1.92279-0.55033
18-1.501971.320633
190.2997541.977409
201.8258910.816164

我们根据上面这个表来推断 平均值告诉我们其路径以 x = 0.2 和 y = 0.3 为中心,数值范围似乎介于 -2 和 2 之间。但是 我们也可以看到7-12 少了数据 暂且按下不表,花开两朵,各表一枝,且说那 时间与X位置的图

image.png 如果我们用图表绘制 X 与 Y,最终会得到一个汽车行驶位置的地图。 很明显,这辆车一直在绕圈行驶,但在某个时刻开到了那个圆圈的中心。

image.png 可以看到 一直搁原地转圈,图表不限于像上面一样的 2D 散点图,但可用来探索其他类型的数据,例如比例 - 通过饼图、堆积条形图显示 - 数据如何分布 - 使用直方图、箱线图 - 以及两个数据集有何不同。 通常,当我们尝试理解原始数据或结果时,我们可能会试验不同类型的图表,直到我们遇到以视觉上直观的方式解释数据的图表。

使用 Matplotlib 直观呈现数据

Loading our data

1.新建一个grade.csv文件 github.com/kak2019/dem…

1.新建一个grade.csv文件 并从文件中加载数据

github.com/kak2019/dem…

//从文本文件中加载数据
df_students = pd.read_csv('grades.csv',delimiter=',',header='infer')

2.数据处理

//移除掉缺失数据的行
df_students = df_students.dropna(axis=0, how='any')

3.计算一下(上一篇文章讲过复习一下)

# 成绩大于60分就算过 看看谁过了谁没过
passes  = pd.Series(df_students['Grade'] >= 60)

image.png 3.把计算处理得到的数据添加新列到原来的列表中

# 保存数据 添加新列 
df_students = pd.concat([df_students, passes.rename("Pass")], axis=1)

使用 Matplotlib 可视化数据

DataFrames 提供了一种探索和分析表格数据的好方法,但有时一张图片值一千行和一列。该Matplotlib库提供了绘图数据可视化,可以大大提升你的能力分析数据的基础。

让我们从一个显示每个学生成绩的简单条形图开始。


# Create a bar plot of name vs grade
plt.bar(x=df_students.Name, height=df_students.Grade)

# Display the plot
plt.show()

Figure_1.png

嗯,这奏效了;但是图表可以使用一些改进来使我们看到的更清楚。

请注意,您使用了Matplotlib 中的 pyplot类来绘制图表。这个类提供了大量的方法来改善情节的视觉元素。例如,以下代码:

  • 指定条形图的颜色。
  • 为图表添加标题(所以我们知道它代表什么)
  • 为 X 和 Y 添加标签(因此我们知道哪个轴显示了哪些数据)
  • 添加网格(以便更轻松地确定条形值)
  • 旋转 X 标记(以便我们可以读取它们) 好的 咱们继续
#创建名称和成绩的条形图
plt.bar(x=df_students.Name, height=df_students.Grade, color='orange')

# 定制化图表
plt.title('Student Grades')
plt.xlabel('Student')
plt.ylabel('Grade')
plt.grid(color='#95a5a6', linestyle='--', linewidth=2, axis='y', alpha=0.7)
plt.xticks(rotation=90)

# 显示
plt.show()

Figure_1.png

# 创建 特定大小的图

fig = plt.figure(figsize=(8,3))

检查现实世界数据

实际的数据绝不可能像编出来的一样完美无缺,所有数据都是全的.肯定会有缺漏


import pandas as pd
from matplotlib import pyplot as plt

df_students = pd.read_csv('grade.csv',delimiter=',',header='infer')
df_students = df_students.dropna(axis=0, how='any')

passes  = pd.Series(df_students['Grade'] >= 60)

df_students = pd.concat([df_students, passes.rename("Pass")], axis=1)

Create a function that we can re-use

def show_distribution(var_data): ''' This function will make a distribution (graph) and display it '''

# Get statistics
min_val = var_data.min()
max_val = var_data.max()
mean_val = var_data.mean()
med_val = var_data.median()
mod_val = var_data.mode()[0]

print('Minimum:{:.2f}\nMean:{:.2f}\nMedian:{:.2f}\nMode:{:.2f}\nMaximum:{:.2f}\n'.format(min_val,
                                                                                        mean_val,
                                                                                        med_val,
                                                                                        mod_val,
                                                                                        max_val))

# Create a figure for 2 subplots (2 rows, 1 column)
fig, ax = plt.subplots(2, 1, figsize = (10,4))

# Plot the histogram
ax[0].hist(var_data)
ax[0].set_ylabel('Frequency')

# Add lines for the mean, median, and mode
ax[0].axvline(x=min_val, color = 'gray', linestyle='dashed', linewidth = 2)
ax[0].axvline(x=mean_val, color = 'cyan', linestyle='dashed', linewidth = 2)
ax[0].axvline(x=med_val, color = 'red', linestyle='dashed', linewidth = 2)
ax[0].axvline(x=mod_val, color = 'yellow', linestyle='dashed', linewidth = 2)
ax[0].axvline(x=max_val, color = 'gray', linestyle='dashed', linewidth = 2)

# Plot the boxplot
ax[1].boxplot(var_data, vert=False)
ax[1].set_xlabel('Value')

# Add a title to the Figure
fig.suptitle('Data Distribution')

# Show the figure
fig.show()

show_distribution(df_students['Grade'])

image.png