源视频传送门【python教程】数据分析——numpy、pandas、matplotlib_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com
基础视频看完后决定换个学习方法,看了视频开始的问题,然后开始自己捣腾。
问题:对于一组电影数据,了解rating和runtime的分布情况。
导入数据后,先查看数据格式:
df = pd.read_csv("IMDB-Movie-Data.csv")
print(df.head(1))
然而pycharm并没有给出想要的结果
要找的两项都被隐藏了orz,解决方法
>>加入显示设置
pd.set_option("display.max_columns", 30) # 30可以设置更大
>>可以直接打印列名
print(df.columns.values)
之后处理就和作者不同了,我选择切片后直接作图
df = df[["Rating", "Runtime (Minutes)"]]
df = df.sort_values(by="Rating", ascending=False)
print(df.head(5), '\n', df.tail(5)) # 查看数据信息最高9.0分,最低1.9分
粗略查看数据信息后,导入matplotlib,分为20组做直方图。
df_Time = df["Runtime (Minutes)"]
plt.hist(df_Time, 20)
plt.title("Runtime distribution")
plt.xticks()
plt.ylabel("Counts")
plt.xlabel("Runtime")
plt.show()
作者的处理:先将该行数据值全部取出
runtime_data = df["Runtime (Minutes)"].values # 以字符串形式取出某一列值
之后类似地将数据导入作图,不过作者设置固定间距分组,同时调整了x轴坐标。
num_bin = (max_runtime - min_runtime)//6
plt.figure(figsize=(10, 6), dpi=80)
plt.hist(runtime_data, num_bin)
plt.title("Runtime distribution", fontsize=25)
plt.ylabel("Counts", fontsize=15)
plt.xlabel("Runtime", fontsize=15)
plt.xticks(range(min_runtime, max_runtime+6, 6))
plt.show()
结果显示为
但都存在一个问题,x轴显示与直方图不同步。
打印max_runtime、min_runtime分别为 191、 66,差值125刚好被5整除,则间距设置为5。
num_bin = (max_runtime - min_runtime)//5
完美显示!
但求知欲满满的我怎会就此满足,如果间距不是刚好被整除呢?
接下来Rating排序就遇到了这个问题,Rating最大值和最小值为9.0和1.9,怎么都不能被整除!
作者在一通操作后,搬出来一句万用句子,等到下次再来讨论这个问题。
不甘心的我一番搜索之后,终于解决了这个办法,按照组距设置x轴坐标即可
Rating = df["Rating"].values
max, min = Rating.max(), Rating.min()
bins = int((max - min) // 0.5)
class_interval = (max - min)/bins
plt.figure(figsize=(20, 8), dpi=60)
x_ticks = [1.9 + class_interval*i for i in range(bins+1)] # 按照组距设置x轴坐标
plt.xticks(x_ticks, fontsize=15)
plt.title("Movie Rating distribution", fontsize=25)
plt.xlabel("Rating", fontsize=20)
plt.ylabel("Counts", fontsize=20)
plt.grid()
plt.hist(Rating, bins, rwidth=1)
plt.show()
可以看出坐标线和直方图完美契合。x轴坐标自动取小数显示,实际是分数。
至此,直方图绘制完成。