Python学习笔记(16)

电影案例

问题1:我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?

movie = pd.read_csv("./资料-边学边练超系统掌握人工智能机器学习算法/day03-资料/2.code/data/IMDB-Movie-Data.csv")
print(movie.head())

print(movie["Rating"].mean())
print(movie["Director"].unique().shape[0])

问题2:对于这一组电影数据,如果我们想rating,runtime的分布情况,应该如何呈现数据?

plt.figure(figsize=(20, 8), dpi=100)
plt.hist(movie["Rating"].values, bins=20)
max_ = movie["Rating"].values.max()
min_ = movie["Rating"].values.min()
plt.xticks(np.linspace(max_, min_, num=21))
plt.grid()
plt.show()

plt.figure(figsize=(20, 8), dpi=100)
plt.hist(movie["Runtime (Minutes)"].values, bins=20)
max_ = movie["Runtime (Minutes)"].values.max()
min_ = movie["Runtime (Minutes)"].values.min()
plt.xticks(np.linspace(max_, min_, num=21))
plt.grid()
plt.show()

问题3:对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?

temp_df = np.zeros([movie["Rating"].shape[0], movie["Director"].unique().shape[0]])
temp_list = [i.split(",") for i in movie["Genre"]]
col = np.unique([j for i in temp_list for j in i])
df = pd.DataFrame(np.zeros([temp_df.shape[0], col.shape[0]]), columns=col)
for i in range(df.shape[0]):
    df.loc[i, temp_list[i]] = 1
df.sum().sort_values(ascending=False).plot(kind="bar", fontsize=10)
plt.show()

numpy,matplotlib,pandas总结

numpy创建的是ndarray对象

Ndarray.size:数组中所有元素的数量

x1 = np.random.rand(5,2,3)  返回5个2行3列的[0,1)内的数组

x2 = np.random.randn(5,2,3)  返回5个2行3列的标准正态分布内的数组

x3 = np.random.standard_normal(size=[5,2])  返回5个2行3列的标准正态分布内的数组

numpy直接索引先行后列

Pandas直接索引是先列后行,不好记,所以pandas用.loc或.iloc就是先行后列了

Numpy中得np.unique(ndarrary对象)

Pandas中对dataframe/series对象,Dataframe.unique(),注意区分

np.all():如果都是Ture,则返回Ture;如果存在一个是False,则返回False

np.any():如果存在一个是True,则返回True;如果全是False,则返回False

三元运算:np.where(条件,x,y) 满足条件,输出x,否则输出y

条件与:np.logical_and(条件1,条件2)

条件或:np.logical_or(条件1,条件2)

按行还是按列取最大值或最小值:axis=0按列;axis=1按行(不一定)

Ndarray对象*3 是对数组中每个元素都乘3

注意是array对象还是列表对象,列表*3只会复制3份一样的

广播机制实现了时两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,只需要满足如下任意一个条件即可。

1.数组的某一维度等长。

2.其中一个数组的某一维度为1 。

广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。

Matplotlib.pyplot 画图

Savefig要放在show前面

多条数据线在一个图像:多次使用plt.plot

plt.xticks(x[::5], x_ticks_label[::5])【类似后面元素x_ticks_label替换前面的元素x作为x轴】

多个坐标轴显示:

需要分别对不同的坐标系设置x轴刻度标签

折线:plot  散点:scatter  柱:bar/barh  直方:hist  饼:pie

Pandas

Series是一列 多个series就成dataframe

无法对某个索引进行修改,只能全部改

.ix:不支持,没得用了

注意:

Dataframe.loc/iloc[]:用的是中括号,不是圆括号

用loc时,取前4行索引的名字:dataframe.index[0:4]

用iloc时,知道列索引名字如何取下标:dataframe.columns.get_indexer([“列索引名字”])

按多个键排序时

先判断open,当相同时再判断high

加/减:.add()、直接+

.query(“列中的值所要满足的条件”)

data.query("open<24 & open>23").head()

# 可以指定值进行一个判断,从而进行筛选操作

data[data["open"].isin([23.53, 23.85])]

Describe直接得出许多结果

Max()、min()、std()标准差、var()方差、median()中位数、idxmax()、idxmin()返回最值位置

Cumsum()、cummax()、cummin()、cumprod()计算前。。个数的累计值/最值

画图注意表明kind

读取

存/读hdf5时要指定一个键,不然会报错

处理缺失值

dropna()不改变原来数据,返回新数据

qcut = pd.qcut(data, q):将data分成q组,得到qcut

再用qcut.value_counts()统计分组

pd.cut(data, bins):bins是自定义分组,[-100, -20, 0, 20, 100]

Pd.get_dummies(data, prefix=”名字”)实现onehot编码

数据合并

Axis=0/1,按列/行索引

How= left/right/inner/outer 左右内外连接

重命名行、列索引

Rename

分组聚合 df.groundby 合并同类项,对合并起来的数据可以取最值、平均等

col.groupby(["color", "object"])["price1"].max()

groupby(["color", "object"])相当于行索引 合并相同的color和object

["price1"].max()相当于列索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值