本次的数据集是调查统计的部分程序员里他们会使用的编程语言, 我们统计各个语言会使用的程序员的数量来绘制横向的柱状图:

数据集
源码:
# coding=utf-8
from matplotlib import pyplot as plt
from collections import Counter
import csv
import pandas as pd
# Counter是一个特别牛的库, 可以用来统计一个可迭代对象中值出现的次数, 效率比直接用python循环实现要高,\
# 因此, 一般用到要统计某元素出现的次数时, 要用到Count
# 数据太过庞大, 因而放在csv文件中, 我们从csv文件获取数据有多种方式, 这里介绍两种
# method one:
'''
with open('./data.csv', 'r') as f:
# DictReader接受参数是一个文件流对象(而不是具体的文本), 返回值是一个可迭代对象
csv_reader = csv.DictReader(f)
# 该可迭代对象每一次迭代返回的就是一个键值对构成的字典, 其中键是csv文件最前面的说明, 值是该说明下每一列的值
# print(next(csv_reader)['LanguagesWorkedWith'])
number_counter = Counter()
# 迭代csv_reader这个可迭代对象, 来保存所有的值出现的频率(用以绘图)
for element in csv_reader:
# print(element['LanguagesWorkedWith'])
number_counter.update(element['LanguagesWorkedWith'].split(';'))
'''
# method two(效率更高):
csv_data = pd.read_csv('./data.csv')
langs = csv_data['LanguagesWorkedWith']
ids = csv_data['Responder_id']
number_counter = Counter()
for element in langs:
# print(element['LanguagesWorkedWith'])
number_counter.update(element.split(';'))
# print(number_counter)
# 我门取出数据集前15个最多的数据绘制横向的柱状图, Counter对象的most_common方法可以获取数量最多的n个数据
number_counter = number_counter.most_common(15)
# print(number_counter)
languages = [each[0] for each in number_counter]
popularity = [each[1] for each in number_counter]
# 从高到低显示
languages.reverse()
popularity.reverse()
# print(languages, popularity)
# 类似手写体的style
plt.xkcd()
# 绘制横向的柱状体, 第一个参数是y轴的可迭代对象, 第二个参数是x轴的可迭代对象, 颜色是绿色
plt.barh(languages, popularity, color='#0BF92E')
plt.xlabel('number of people can use')
plt.ylabel('language name')
plt.title('First barh')
plt.tight_layout()
plt.show()
运行结果:

网友评论