python爬虫可视化base.py中 self.width = _opts.get("width", "900px") AttributeError: 'str' object has no attribute 'get'
时间: 2023-12-13 12:04:49 浏览: 239
这错误常见于将字符串对象当作字典对象进行使用时出现。在这个问题中,`_opts`应该是一个字典对象,但是在某个地方将其赋值为了一个字符串对象。这导致在尝试调用`get()`方法时,Python会抛出`AttributeError`异常。
为了解决这个问题,你需要检查代码中所有对`_opts`的使用,并确保其在所有情况下都是一个字典对象。你可以使用`type()`函数来检查变量的类型,例如:
```
print(type(_opts))
```
如果你发现在某个地方`_opts`被赋值为了一个字符串对象,你需要找到这个地方并修改它,确保`_opts`是一个字典对象。
相关问题
c = ( HeatMap(init_opts=opts.InitOpts(width='1080px')) .add_xaxis(df.corr().index.tolist()) .add_yaxis( "相关系数", df.corr().columns.tolist(), data, label_opts=opts.LabelOpts(is_show=True, position="inside"), ) .set_global_opts( title_opts=opts.TitleOpts( title="相关系数热力图", subtitle='数据来源:bestcities.org', pos_left='center'), legend_opts=opts.LegendOpts( is_show=False ), xaxis_opts=opts.AxisOpts( type_="category", splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts( opacity=1 ) ), axislabel_opts=opts.LabelOpts( rotate=90, font_size =12 ), interval=0 ), yaxis_opts=opts.AxisOpts( name ='', type_="category", splitarea_opts=opts.SplitAreaOpts( is_show=True, areastyle_opts=opts.AreaStyleOpts( opacity=1 ) ), axislabel_opts=opts.LabelOpts( font_size =12 ), interval=0 ), visualmap_opts=opts.VisualMapOpts( min_=-1, max_=1, is_calculable=True, pos_left='right', is_show=False ), ) ) c.render_notebook() data = df[['排名', '平均WiFi速度', '联合办公空间的数量', '购买咖啡的平均价格', '出租车平均价格(每公里)', '酒吧2杯啤酒的平均价格', '一居室公寓月均价', '在当地中级餐厅用餐的平均费用', '平均日照时数', 'Tripadvisor上“要去的地方”的数量', '带有#的照片数量']] ## 数据标准化 from sklearn.preprocessing import MinMaxScaler model_scaler = MinMaxScaler() data_scaled = model_scaler.fit_transform(data)
这段代码看起来是使用Python中的matplotlib库来绘制数据的相关系数热力图,数据是从一个名为bestcities.org的网站获取的。主要使用了HeatMap、add_xaxis、add_yaxis、set_global_opts、TitleOpts、LegendOpts、AxisOpts、SplitAreaOpts、LabelOpts、VisualMapOpts等方法来设置图表的各种属性,最后调用c.render_notebook()方法将图表渲染到notebook中。另外,代码中还用到了sklearn.preprocessing库中的MinMaxScaler类对数据进行标准化处理。
import pandas as pd import numpy as np path_marry=r"D:\迅雷下载\新建文件夹\数据集\数据可视化数据集\结婚离婚\结婚数据.csv" path_divorse=r"D:\迅雷下载\新建文件夹\数据集\数据可视化数据集\结婚离婚\离婚数据.csv" marry_data=pd.read_csv(path_marry) divorse_data=pd.read_csv(path_divorse) divorse_data =divorse_data.set_index(divorse_data["地区"]).drop(columns=["地区"]) show_data3=divorse_data["2019年"] x_axis_data=show_data3.index.tolist() y_axis_data1=show_data2.values.tolist() y_axis_data2=show_data3.values.tolist() c=( Bar(init_opts=opts.InitOpts( width="800px",height="700px" ) ) .add_xaxis(x_axis_data) .add_yaxis("2019年结婚登记数量(万对)",y_axis_data1) .add_yaxis("2019年离婚登记数量(万对)",y_axis_data2) .reversal_axis() .set_series_opts(label_opts=opts.LabelOpts( position="right" ) .set_global_opts( title_opts=opts.TitleOpts( title="全国各省2019年结婚登记数量(万对)" ) ) ) ) c.render_notebook()这段代码哪有问题,如何修改
这段代码有以下几个问题需要修改:
1. `show_data2` 在代码中未定义,应该使用 `marry_data["2019年"]`,即将 `show_data2` 修改为 `marry_data["2019年"]`。
2. `set_series_opts` 和 `set_global_opts` 方法之间缺少一个右括号,应该在 `position="right"` 后面添加一个右括号。
3. `Bar` 类需要从 `pyecharts.charts` 模块导入,可以在代码开头添加 `from pyecharts.charts import Bar`。
修改后的代码如下所示:
```
import pandas as pd
import numpy as np
from pyecharts.charts import Bar
import pyecharts.options as opts
path_marry = r"D:\迅雷下载\新建文件夹\数据集\数据可视化数据集\结婚离婚\结婚数据.csv"
path_divorse = r"D:\迅雷下载\新建文件夹\数据集\数据可视化数据集\结婚离婚\离婚数据.csv"
marry_data = pd.read_csv(path_marry)
divorse_data = pd.read_csv(path_divorse)
divorse_data = divorse_data.set_index(divorse_data["地区"]).drop(columns=["地区"])
show_data2 = marry_data["2019年"]
show_data3 = divorse_data["2019年"]
x_axis_data = show_data3.index.tolist()
y_axis_data1 = show_data2.values.tolist()
y_axis_data2 = show_data3.values.tolist()
c = (
Bar(init_opts=opts.InitOpts(width="800px", height="700px"))
.add_xaxis(x_axis_data)
.add_yaxis("2019年结婚登记数量(万对)", y_axis_data1)
.add_yaxis("2019年离婚登记数量(万对)", y_axis_data2)
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(
title_opts=opts.TitleOpts(title="全国各省2019年结婚登记数量(万对)")
)
)
c.render_notebook()
```
修改后的代码已经可以在 Jupyter Notebook 中正常运行,并且可以生成可视化图表。
阅读全文