前言:
作者:神的孩子在跳舞
本人是刚开始学机器学习的小白,以下都是我的学习笔记,有一些是我自己理解的话,所以可能有不对的地方或者有些话只适合我自己理解(仅供参考),不对的希望大家能指出来,另外我创建了一个机器学习交流群903419026
,各位跟我一样的小白可以进来多交流交流,互相促进,大佬看见了可以进来指导一下(狗头)。我的微信:chenyunzhiLBP
Matplotlib入门
*
– 一. Matplotlib作用
– 二. Matplotlib三层结构
– 三. Matplotlib之HelloWorld
–
+ 3.1 辅助显示层
– 四中文编码问题
一. Matplotlib作用
可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法, 是专门用于开发2D(3D)图表的包
- 能将数据进行可视化,更直观的呈现
- 使数据更加客观、更具说服力
二. Matplotlib三层结构
- 容器层:Canvas(画板)、Figure(画布)、Axes(坐标)组成
- 辅助显示层:主要作用添加坐标轴描述,标题等内容
- 图像层:设定要画一个什么样的图像:plot,scatter…
三. Matplotlib之HelloWorld
绘制图像流程【掌握】
- 创建画布 – plt.figure(figsize=(20,8),dpi=) (1)figsize:指定图的长宽
(2)dpi:图像的清晰度 - 绘制图像 – plt.plot(x, y)
- 显示图像 – plt.show()
所需要的包
import matplotlib.pyplot as plt
代码展示,画出折线图
plt.figure(figsize=(10,10),dpi=100)
plt.plot([1,2,3,4,5],[12,12,3,4,5])
plt.savefig("test.png")
plt.show()


3.1 辅助显示层
上面已经用到了 容器层和 图像层,那么我们接下来添加 辅助显示层
- 添加自定义x,y刻度
plt.xticks(x, 刻度值)
x:要显示的刻度值
plt.yticks(y, 刻度值)
y:要显示的刻度值
可以通过y[::5]切片的方式,每隔5个格刻度值
- 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)
- 添加x轴、y轴描述信息及标题
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.title("标题")
- 显示图例
plt.legend(loc="best")
- 多个坐标系显示
plt.subplots(nrows=, ncols=)
- 图像保存
plt.savefig("路径")
代码展示
案例:显示温度变化状况
需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度
import random
import matplotlib
from matplotlib.font_manager import FontProperties
myfont=FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf',size=14)
sns.set(font=myfont.get_name())
x=range(60)
y_shanghai=[random.uniform(15,18) for i in x]
y_beijing = [random.uniform(-5, 5) for i in x]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x, y_shanghai, label="上海", color="r", linestyle="--")
plt.plot(x, y_beijing, label="北京")
plt.plot(x,y_shanghai)
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
plt.grid(True,linestyle='--',alpha=0.5)
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示")
plt.legend(loc="best")
plt.show()

四中文编码问题
可能会出现中文编码问题,如以下情况
在顶上添加以下代码就可以了
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

本人博客:https://blog.csdn.net/weixin_46654114
本人b站求关注:https://space.bilibili.com/391105864
转载说明:跟我说明,务必注明来源,附带本人博客连接。
请给我点个赞鼓励我吧

Original: https://blog.csdn.net/weixin_46654114/article/details/116092015
Author: 神的孩子都在歌唱
Title: 学Python不会Matplotlib是什么?一文教你入门Matplotlib
相关阅读
Title: dataframe 更改某列某值_第17篇:Pandas-遍历DataFrame对象
DataFrame的遍历方式主要有三种
DataFrame.iterrows()按行顺序优先,接着依次按列迭代DataFrame.iteritems()按列顺序优先,接着依次按行迭代DataFrame.itertuples()按行顺序优先,接着依次按列迭代
下图的DataFrame沿用上一篇的示例。
剧名,集數,主演,監製
"風雨晴Come Rain, Come Shine",20,石修、黃日華、苗僑偉、湯鎮業、陳秀珠,
佛山贊先生Kung Fu Master of Fat Shan,20,呂良偉、黃日華、歐陽佩珊,
飛鷹The Hawk,20,鄭少秋、趙雅芝,李鼎倫
英雄出少年The Young Heroes of Shaolin,20,石修、黃日華、苗橋偉、董瑋,邱家雄
富貴榮華Brothers Four,20,鄭少秋、陳秀珠,
突破Break Through,20,"陳百強, 翁靜晶, 毛舜筠, 莊靜而",
读者实践本示例前,请使用Pandas.read_csv()函数加载该csv文件。
df=pd.read_csv('./result.csv')
如下图所示
按行遍历
通过for迭代df.iterrows接口,idx是输出DataFrame内部的索引值,data输出每行单元格的值
for idx,data in df.iterrows():
print("[{}]: {}".format(idx,data))
输出如下
如果我们仅输出每一行特定的列,例如索引为2的列,那么我们使用如下代码
for idx,data in df.iterrows():
print("[{}]: {}".format(idx,data[2]))
其工作的逻辑如下所示
输出如下图
来一个有点实质意义的示例吧,例如我要将当前DataFrame中每行的第2列的所有值满足20,都改成35,但这种编程方式是不鼓励的,因为性能非常糟糕
for idx,row in df.iterrows():
if row[1]=='20':
row[1]='35'
如下所示,需要注意的是,当前DataFrame除了索引列外,其他列的单元格,要么是str类型,要么是NaN类型
按行优先的遍历方式,还有itertuples( )函数,它将返回一个生成器,该生成器以元组生成行值。 让我们尝试一下:
for data in df.itertuples():
print(data)
输出如下图
itertuples()方法有两个参数:index和name。我们可以通过将index参数设置为False来选择不显示索引列:
for data in df.itertuples(index=False):
print(data)
元组不再显示Index,输出如图
就像您已经注意到的那样,Pandas.itertuples生成器产生具有默认名称Pandas的命名元祖。 您可以选择自己喜欢的任何名称,但始终最好选择与数据相关的名称,如下用例所示
for data in df.itertuples(index=False,name='Drama'):
print(data)
输出如下图
对于按itertuples()方式的行优先遍历,如果我们只想返回某列的数据,可以在for迭代器返回的tuple添加列索引,
for data in df.itertuples(index=False,name='Drama'):
print(data[2])
输出如下图
按列遍历
现在,要遍历此DataFrame,我们将使用items( )或iteritems( )函数:
df.items()
这将返回一个生成器:
我们可以使用它来生成col_name和数据对。 这些对将包含列名和该列的每一行数据。 让我们遍历列名及其数据:
for colName,data in df.items():
print("colName:[{}]ndata:{}".format(colName,data))
其items的逻辑是,先列后行的逻辑依次遍历每个单元格中数据
输出是:
如果我们按列优先,仅遍历某一行依次遍历所有列
for colName,data in df.iteritems():
print("colName:[{}]ndata:{}".format(colName,data[2]))
如下图所示
性能问题
Panda的官方文档警告说,迭代DataFrame是一个降低性能的过程。 如果要遍历DataFrame修改数据,不建议在迭代行时修改数据,因为Pandas有时会返回行中的数据副本而不是其引用,这意味着并非所有数据都会被更改。我们对上面的三种迭代方式做一些简单的性能基准
如下图,按行遍历的iterrows的性能是最差的,而按行遍历返回tuple的方式性能是最好的,其次是按列遍历的i考虑的teritems是可以考虑的
对于小型数据集,可以使用to_string()方法显示所有数据。 对于具有许多列和行的较大数据集,可以使用head(n)或tail(n)方法打印出DataFrame的前n行(n的默认值为5)。
Original: https://blog.csdn.net/weixin_35808305/article/details/112449882
Author: 袁大岛
Title: dataframe 更改某列某值_第17篇:Pandas-遍历DataFrame对象
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/329274/
转载文章受原作者版权保护。转载请注明原作者出处!