python搞直方图遇到的问题

发布时间 2023-07-11 01:20:34作者: sbsdnyn

我是初学python,请别见笑,如有好的意见,还望提出。嫌字多的,直接看末尾的结论。

在学习python过程中,看到一个b站的教程,名字是Python获取小说数据并分析(为了避免广告嫌疑不打链接了),本来一个爬虫的小例子,折腾了一天时间。在这里分享出来,看能不能帮助到有需要的人。

程序大概是这样:

1、用requests获取一个小说网页的数据,大概就是类别,书名,字数等信息,用etree提出来。

2、把etree提出的信息放进字典,作pandas的dataframe(下面简称df)。

3、然后展示df,df.describe(),df.groupby('类别').count(),这几个都没事,然后df.类别.hist(),我去,死活不出来,这次说的大坑就是这个问题。

我也不确定我是不是真的解决了,因为我确实也没完全弄懂,都是乱试,把过程分享一下(人家教程是为了卖课的,所以直方图就给展示了一下,具体没教)。

坑一:#%%分段执行

教程用的vscode,讲课老师在代码里用#%%就可以把代码分段,然后一段段执行(在控制台)。到了hist那里,人家就直接出图了。

我是用的pycharm,加了#%%代码没反应,然后百度,n多搜索后发现一个有点靠谱的,说在视图开科学视图,我在pycharm里找了半天没有,又搜索了n久后,才看到一个真正靠谱的,人家说专业版才有科学视图,社区版的要装模块 cell mode。然后赶紧安装,装好后果真可以,用##来分段。起码算是可以分段用了。

坑二、不出图不报错

教程里运行df.类别.hist()时,控制台出来直方图。我搞一直不出图,只显示Out[10]: <Axes: >,也不报错。

(我现在有点怀疑,当初是不是弹出的figure,我一直没看到,因为它并不是弹出,而是最小化在任务栏,我是今天搞好后才发现,所以不能确定是不是昨天本来就可以正常出图。昨天搞到半夜3、4点,估计都麻木了。)

坑三、不出图,搞出错来了

一通百度后,改的啥都快记不清了,有改过\.virtualenvs\pyqt5-W-iCKkHt\Lib\site-packages\matplotlib\mpl-data\里面的matplotlibrc,好像涉及到backend: Agg,#interactive: True什么的,好像之前是False,因为当时控制台有个错误大概意思是打开交互模式,还有什么Qtagg,这些我都不懂,一通修改尝试后,有出别的错,然后就是各种百度,也更新了matplotlib这个库,还有用这个库设置各种不太懂的命令,反正最后还是不出图。放弃,决定第2天用vscode试试。

坑四、vscode中

装好vscode,复制过去代码,#%%并不能用,有了pycharm里的教训,知道要装模块了,一通百度,在vscode中装了jupyter扩展(这到底是vscode的一个扩展,还是pyhton的一个模块) ,然后代码可以#%%分段了,然后运行,说缺少ipykernel库,我又在cmd中装了,装完这俩,是可以分段执行了,但hist时,提示错误matplotlib is required for plotting when the default backend "matplotlib" is selected,那就在cmd继续安装matplotlib 。总之一顿装,好像还装过一个叫ipython的,反正弄完之后,vscode终于出图了。

坑五、重回pycharm

那如果我在pycharm终端把那一堆库都装一遍会不会也可以呢,于是乎一通安装。运行到hist时,令人惊喜的发现状态栏有个python的图标,点开后居然是个单窗口的直方图,Figure,原来这样。我不确定昨天是不是有,因为昨天搞得太麻了。但有个问题是Figure窗口总是无响应卡死,关了之后,整个控制台也跟着退出。又是一顿百度搜索,终于发现了办法:

import matplotlib as plt
plt.use("Qt5Agg")
plt.rcParams['font.sans-serif'] = ['Kaitt', 'SimHei'] #这个解决了不显示汉字的问题。
df.类别.hist()
 
结论一(非正题):
1、网上看教程自学就是容易遇到难解的问题,需要花大量时间和经历去解决,也不一定最后能搞定。
2、尽量不要像我一样认死理,在人家没教,你也水平不行的时候,非要达到人家弄的样子,虽然知道意义并不大,应该把这个时间花在继续学习上。
3、vscode运行真是顺畅,界面也简介,代码看着也很友好。但pycharm功能是真的强大,像本例中df.类别,这个类别(包括其他表头)它都能联想出来(还是在控制台),vscode在代码界面就不行,更别说控制台。还有pycharm的实时模板,保存即格式化代码等,也可能是我用习惯了,真是好用。但就是超级吃内存,动不动就奔2g去了。
4、所有这些都是我摸索尝试的,可能有不对的地方,仅供参考。欢迎提意见,我是爱学习的。
 
结论二(正题):
1、想弄分段执行代码,和直方图,装下面这几个:
ipython(不确定)、jupyter(我在vscode里装的扩展#%%)、ipykernel(cmd里装的,应该是分段执行用的)、matplotlib(应该是画图用的)、cell mode(pycharm社区版里分段执行##)。
2、pycharm画图时Figure卡死无响应,就matplotlib.use("Qt5Agg")。
3、直方图不显示汉字,就plt.rcParams['font.sans-serif'] = ['Kaitt', 'SimHei']。
4、运行出错说什么打开交互式的,就修改\site-packages\matplotlib\mpl-data\里面的matplotlibrc,#interactive: True。