数据分析踩坑笔记
1.使用百度echarts 绘制中国地图
- echarts geo地图由于某些原因被封了,拿不到数据包,现在官方推荐使用百度地图的api,因此需要申请百度地图的开发者key. 申请地址
- 除了正常引入echarts的包之外,还需要引入bmap,cdn 脚本如下:
<script src="https://cdn.bootcss.com/echarts/3.8.5/extension/bmap.min.js"></script>
2.’Series’ objects are mutable, thus they cannot be hashed
- 在使用Python pandas时试图用apply函数直接将所有的字母转化为浮点数,写了如下代码:
data_object.apply(lambda x: dict_object[x])
其中dict_object为字典,保存的字母到浮点数的映射,字母为key, data_object为原始数据,出现了上面的错误。经调试发现原来pandas apply函数与我想象的并不一致,我原因为隐函数中传递的是单个的值(类似map),但实际上传递的是整个Series, 所以可以使用这样的表达:
normalize data:
data.apply(lambda x: (x – np.min(x)) / (np.max(x) – np.min(x)))另外,关于这个错误更通用的描述,以及dict类型为什么会报错,我在stackoverflow上找到了这个回答,“Series objects are mutable and cannot be hashed” error 大意就是 python 中的dict以键值对的形式来存储数据,key与value之间通过hash关联(很多语言中的map也是如此),所以key必须是不可变的值,比如int, string, tuple. 而在我这个问题中,series是可变类型(mutable),所以不可作为key.
然后我又尝试了一下一层FOR循环加map,
for col in data_object_col: data[col].values = list(map(lambda x: dict_object[x], data[col].values))
结果依然报错,AttributeError: can’t set attribute, 看来numpy.array与list还是有些不一样啊,不想再继续纠结这个问题,于是直接上了两层for循环:
for col in data_object_col: for i in range(len(data[col].values)): data[col].values[i] = dict_object[data[col].values[i]]
问题解决
3.sklearn 使用LDA对监督学习数据降维时,出现 Value Error: Unknown label type
- 经调试,发现出错的是下面这段代码。这段代码的主要意思是从label中提取独特的值,剔除重复值。但是支持的label值居然只有binary和muticlass(二分和多分类),而我传入的是连续值,经调试发现,确实是continuous,所以导致出错。
- 在stackoverflow上找到类似回答:LogisticRegression: Unknown label type: ‘continuous’ using sklearn in python ,总之就是需要将连续值转化为Multiclass值,使用labelEncoder. LabelEncoder将所有的标签值分别映射到一个从0开始的int值,比如我这里有53个标签值,那么转化后的结果就是0 – 52这53个值,保留了大小关系,但是忽略了具体的值差异。感觉这是一个不靠谱的操作,因为这个降维后的结果我完全看不懂了,我将n_components设置为10,然而得到却只有一个类别。。。
4.sklearn 使用ensemble.BaggingRegressor时python崩溃,重启后程序阻塞
- 代码如下:
> model = Ridge(alpha=alpha) print("Begin to ensemble") clf = ensemble.BaggingRegressor(model, n_jobs=-1, n_estimators = 10) print("Bagging") clf.fit(x_train, y_train.ravel())
- 阻塞的代码为clf.fit(), 除此之外没有任何报错信息,但是有一个警告,
DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().y = column_or_1d(y, warn=True)
- 根据这个警告在stackoverflow上找到了一个类似的问题,a-column-vector-y-was-passed-when-a-1d-array-was-expected从题主的描述中可以发现他也有类似的问题——程序被阻塞,但是回答的答案只给了如何解决警告。改了之后程序依然阻塞
- 于是只能自己debug, 单步调试,发现程序阻塞的地方代码如下:
- 虽然不认识这段代码,但是大意可以猜出来这是根据传入的njob来控制并发的一个循环,这可能和我电脑的配置有关,于是我将njob设置为1,基本上就不并行了,然后果然就解决问题了:
> clf = ensemble.BaggingRegressor(model, n_jobs=-1, n_estimators = 10)
5.Numpy.cov AttributeError: ‘float’ object has no attribute ‘shape’
点击量:13328
1 条评论
11 · 2019年10月29日 下午3:29
1