python - 从 csv 数据绘制频率直方图的错误
问题描述
我正在 python3 上使用带有 pandas 模块的 csv 文件。csv文件由5列组成:职位、公司名称、职位描述、评论数量、职位位置;我想绘制一个频率直方图,我只选择包含“机械工程师”一词的工作,并找到“机械工程师”工作的 5 个最常见位置的频率。
所以,我定义了一个变量 engloc 来存储所有“机械工程师”的工作。
engloc=df[df.position.str.contains('mechanical engineer|mechanical engineering', flags=re.IGNORECASE, regex=True)].location
并用我在网上找到的代码用 matplotlib 做了一个直方图
x = np.random.normal(size = 1000)
plt.hist(engloc, bins=50)
plt.gca().set(title='Frequency Histogram ', ylabel='Frequency');
但它是这样打印的
我如何绘制一个正确的频率直方图,它只使用 5 个最常见的位置来绘制包含“机械工程师”字样的工作,而不是将所有位置都放在图中?
解决方案
以下几行的内容应该可以帮助您处理数字数据:
import numpy as np
counts_, bins_ = np.histogram(englog.values)
filtered = [(c,b) for (c,b) in zip(counts_,bins_) if counts_>=5]
counts, bins = list(zip(*filtered))
plt.hist(bins[:-1], bins, weights=counts)
对于字符串类型,请尝试:
from collections import Counter
coords, counts = list(zip(*Counter(englog.values).most_common(5)))
plt.bar(coords, counts)
推荐阅读
- css - 进度条中的文本需要重新定位
- reactjs - 如何为 Table 组件呈现导入的数据
- hibernate - 休眠:[实体] 未映射
- android-studio - 添加一些依赖项后出现 GradleCompatible 错误?
- swift - “data.map(Result.success)”如何工作并返回一种结果?
- laravel - 多个 ajax 调用的 CSRF 令牌问题
- java - Gradle 找不到 JUnit 平台
- python - 如何使 python 装饰器与继承的类一起工作
- android - 如何创建像 Material.io 这样的底部导航栏
- python-3.x - 根据条件向 pandas DataFrame 添加一列,该列是另一个 DataFrame 中一列部分的总和