Pandas数据分析:快速图表可视化各类操作详解+实例代码(一)
highlight: a11y-light
我正在参加「掘金·启航计划」
前言
一般我们做数据挖掘或者是数据分析,再或者是大数据开发提取数据库里面的数据时候,难免只能拿着表格数据左看右看,内心总是希望能够根据自己所想立马生成一张数据可视化的图表来更直观的呈现数据。而当我们想要进行数据可视化的时候,往往需要调用很多的库与函数,还需要数据转换以及大量的代码处理编写。这都是十分繁琐的工作,确实只为了数据可视化我们不需要实现数据可视化的工程编程,这都是数据分析师以及拥有专业的报表工具来做的事情,日常分析的话我们根据自己的需求直接进行快速出图即可,而Pandas正好就带有这个功能,当然还是依赖matplotlib库的,只不过将代码压缩更容易实现。下面就让我们来了解一下如何快速出图。
Pandas数据分析系列专栏已经更新了很久了,基本覆盖到使用pandas处理日常业务以及常规的数据分析方方面面的问题。从基础的数据结构逐步入门到处理各类数据以及专业的pandas常用函数讲解都花费了大量时间和心思创作,如果大家有需要从事数据分析或者大数据开发的朋友推荐订阅专栏,将在第一时间学习到Pandas数据分析最实用常用的知识。此篇博客篇幅较长,涉及到处理文本数据(str/object)等各类操作,值得细读实践一番,我会将Pandas的精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。
一、基础绘图:plot
Series和DataFrame上的plot方法只是plt.plot()的简单包装,这里我们用一段实际数据来进行可视化展示:
这是一段真实地铁通行量特征数据,我们用此数据进行展示:
df_flow['客流量'].plot()
如果索引由日期组成,则调用gcf().autofmt_xdate()方法可以很好地格式化x轴。
在DataFrame上,plot()可以方便地用标签绘制所有列:
df_flow_mark[['湿度','风级','降水量']].plot()
可以使用plot()中的x和y关键字绘制一列与另一列的对比,比如我们想要使用星期六的客流量和星期日的客流量作对比:
df_flow_7=df_flow[df_flow['日期']=='星期日'].iloc[:7,:]
df_flow_7.rename(columns={'客流量':'星期日客流量'},inplace=True)
df_flow_6=df_flow[df_flow['日期']=='星期六'].iloc[:7,:]
df_flow_6.rename(columns={'客流量':'星期六客流量'},inplace=True)
df_compare=pd.concat([columns_convert_df(df_flow_7['星期日客流量']),columns_convert_df(df_flow_6['星期六客流量'])],axis=1)
df_compare.plot(x='星期日客流量',y='星期六客流量')
二、底图板块
根据Pandas包装后的kind关键字我们梳理一下底图种类:
也可以使用DataFrame.plot方法创建这些其他绘图
``` df.plot.area df.plot.barh df.plot.density df.plot.hist df.plot.line df.plot.scatter df.plot.bar df.plot.box df.plot.hexbin df.plot.kde df.plot.pie
``` 除了这些类型,还有DataFrame.hist()和DataFrame.boxplot()方法,它们使用单独的接口。
最后,pandas中有几个绘图功能。以Series或DataFrame作为参数的绘图。其中包括:
- Scatter Matrix
- Andrews Curves
- Parallel Coordinates
- Lag Plot
- Autocorrelation Plot
- Bootstrap Plot
- RadViz
分别是: - 散射矩阵 - 安德鲁斯曲线 - 平行坐标 - 滞后图 - 自相关图 - 引导图 - 拉德维兹图
绘图也可以用错误条或表格进行装饰。
1.条形图
df_flow_mark['客流量'].plot(kind='bar')
df_flow_mark['客流量'].plot.bar()
多个标签图表也可以一齐绘出:
df_flow_mark[['风级','降水量']].plot.bar()
要生成堆叠条形图,传递stacked=True:
df_flow_mark[['风级','降水量']].plot.bar(stacked=True)
长久看这个maatplotlib的默认地图有点疲劳了,我这里换个主题,还是一样的效果不碍事。
要获得水平条形图可以使用barh方法:
df_flow_mark[['风级','降水量']].plot.barh(stacked=True)
2.直方图
可以使用DataFrame.plo.hist()和Series.plot.hist()方法绘制直方图.
df4 = pd.DataFrame(
{
"a": np.random.randn(1000) + 1,
"b": np.random.randn(1000),
"c": np.random.randn(1000) - 1,
},
columns=["a", "b", "c"],
)
plt.figure();
df4.plot.hist(alpha=0.5)
直方图可以使用stacked=True进行叠加。可以使用bins关键字更改bin大小。
df4.plot.hist(stacked=True, bins=20);
可以传递matplotlib hist支持的其他关键字。例如,水平和累积直方图可以通过orientation='horizontal'
和cumulative=True
绘制。
有关详细信息,可以参阅hist方法和matplotlib hist文档。\ 现有接口DataFrame.hist,但仍然可以使用hist绘制直方图
plt.figure();
df_flow_mark['风级'].hist();
DataFrame.hist()可以在多个子地块上绘制列的直方图:
plt.figure();
df_flow_mark[['风级','降水量']].diff().hist(color="k", alpha=0.5, bins=50);
可以指定by关键字来绘制分组直方图:
``` data = pd.Series(np.random.randn(1000))
data.hist(by=np.random.randint(0, 4, 1000), figsize=(6, 4)); ```
此外,还可以在DataFrame.plot.hist()中指定by关键字:
data = pd.DataFrame(
{
"a": np.random.choice(["x", "y", "z"], 1000),
"b": np.random.choice(["e", "f", "g"], 1000),
"c": np.random.randn(1000),
"d": np.random.randn(1000) - 1
}
)
data.plot.hist(by=["a", "b"], figsize=(10, 5));
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见
- 一文速学数模-集成预测模型Boost(提升方法)原理以及框架 模型速览
- Python-sklearn机器学习之旅:我的第一个机器学习实战项目
- 斯皮尔曼相关(spearman)相关性分析一文详解 python实例代码
- sklearn预测评估指标计算详解:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1score
- 机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线
- Pandas数据分析:快速图表可视化各类操作详解 实例代码(一)
- Pandas数据分析:快速图表可视化各类操作详解 实例代码(二)
- Pandas数据分析:处理文本数据(str/object)各类操作 代码一文详解(一)
- 决策树(Decision Tree)算法详解及python实现
- PCA(主成分分析法)原理以及应用 代码实现
- 机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线
- 深度学习面试常见问题
- 数据预处理归一化详细解释
- 一文速学-熵权法实战确定评价指标权重
- 机器学习:基于概率的朴素贝叶斯分类器详解--Python实现以及项目实战
- 机器学习:贝叶斯分类器详解(一)-贝叶斯决策理论与朴素贝叶斯
- 秩和比综合评价法(RSR)详解及Python实现和应用
- SVM(Support Vector Machines)支持向量机算法原理以及应用详解 Python代码实现
- 机器学习:基于概率的朴素贝叶斯分类器详解--Python实现以及项目实战
- 机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线