接上回使用 Python 探索和分析数据 入门的入门,相关的数据列表会贴在文末,有兴趣的可以跟着做一做.
可视化数据
数据科学家会直观呈现数据,以更好地理解数据。 这可能意味着查看原始数据、摘要度量值(如平均值)或绘制数据图表。 图表是一种查看数据的强有力方式,因为我们可以快速地了解适度复杂的模式,而无需定义数学摘要度量值。
直观地表示数据
直观地表示数据通常意味着绘制数据图表。 这样做是为了提供对数据的快速定性评估,这有助于理解结果、查找离群值、了解数字的分布方式等。
尽管有时候我们提前知道哪种图表最有用,但其他时候我们以探索性的方式使用图表。 若要了解数据可视化效果的强大功能,请考虑以下数据:无人驾驶汽车的位置 (x,y)。 在数据的原始形式下,很难看到任何真实的模式。 平均值告诉我们其路径以 x = 0.2 和 y = 0.3 为中心,数值范围似乎介于 -2 和 2 之间。
| 时间 | Location-X | Location-Y |
|---|---|---|
| 0 | 0 | 2 |
| 1 | 1.682942 | 1.080605 |
| 2 | 1.818595 | -0.83229 |
| 3 | 0.28224 | -1.97998 |
| 4 | -1.5136 | -1.30729 |
| 5 | -1.91785 | 0.567324 |
| 6 | -0.55883 | 1.920341 |
| 7 | 1.313973 | 1.507805 |
| 12 | 0.00001 | 0.00001 |
| 13 | 0.840334 | 1.814894 |
| 14 | 1.981215 | 0.273474 |
| 15 | 1.300576 | -1.51938 |
| 16 | -0.57581 | -1.91532 |
| 17 | -1.92279 | -0.55033 |
| 18 | -1.50197 | 1.320633 |
| 19 | 0.299754 | 1.977409 |
| 20 | 1.825891 | 0.816164 |
我们根据上面这个表来推断 平均值告诉我们其路径以 x = 0.2 和 y = 0.3 为中心,数值范围似乎介于 -2 和 2 之间。但是 我们也可以看到7-12 少了数据 暂且按下不表,花开两朵,各表一枝,且说那 时间与X位置的图
如果我们用图表绘制 X 与 Y,最终会得到一个汽车行驶位置的地图。 很明显,这辆车一直在绕圈行驶,但在某个时刻开到了那个圆圈的中心。
可以看到 一直搁原地转圈,图表不限于像上面一样的 2D 散点图,但可用来探索其他类型的数据,例如比例 - 通过饼图、堆积条形图显示 - 数据如何分布 - 使用直方图、箱线图 - 以及两个数据集有何不同。 通常,当我们尝试理解原始数据或结果时,我们可能会试验不同类型的图表,直到我们遇到以视觉上直观的方式解释数据的图表。
使用 Matplotlib 直观呈现数据
Loading our data
1.新建一个grade.csv文件 github.com/kak2019/dem…
1.新建一个grade.csv文件 并从文件中加载数据
//从文本文件中加载数据
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)
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()
嗯,这奏效了;但是图表可以使用一些改进来使我们看到的更清楚。
请注意,您使用了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()
# 创建 特定大小的图
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'])