Python画图

xiaoxiao2021-02-28  118

有的时候需要将数据进行可视化,python画图是一个不错的选择。现在需要分析学校新生的男女比例以及出生年份分布,我选择分别使用饼图和柱状图来描述。

code-1 饼图,新生男女比例

# coding:utf-8 # 读取csv数据进行可视化分析,分析新生男女比例 import pandas as pd import numpy as np import matplotlib.pyplot as plt from collections import Counter # 注意磁盘目录最好写成/,如果是\可能会引起解释错误 # 数据库导出excle的时候最好导出成xlsx(2007版本之后的)格式,xls格式运行错误 file = 'F:/python数据分析/测试数据/2017allstu.xlsx' # 读取csv文件 df = pd.read_excel(file) # 输出前10行 # print(df.head(10)) # print(df) # print(type(df)) # loc返回的是列标签+行数据,['标签名']列标签数据 y = df.loc[:]['XB'] # 将获取到的列数据转换成list # print(y.tolist()) # 将存有性别的列表转化为字典 sex = Counter(y.tolist()) print('男生人数:%d' % sex.get(1)) # 根据键获取字典中的值 print('女生人数:%d' % sex.get(2)) # 添加文本内容 plt.text(-1.32208, -0.445, '%d' % sex.get(1)) plt.text(1.13444, 0.403213, '%d' % sex.get(2)) # 定义饼状图的标签,标签是列表 labels = [u'男', '女'] # 定义数值 sizes = [sex.get(1), sex.get(2)] colors = ['yellowgreen', 'lightskyblue'] # 设置画图中文显示字体 # plt.rcParams['font.sans-serif'] = ['SimHei'] plt.title(u'中原工学院2017届新生男女比例') patches, l_text, p_text = plt.pie(sizes, labels=labels, colors=colors, labeldistance=1.1, autopct='%3.1f%%', shadow=False, startangle=90, pctdistance=0.6) # 改变文本的大小 # 方法是把每一个text遍历。调用set_size方法设置它的属性 for t in l_text: t.set_size = (30) for t in p_text: t.set_size = (20) # 设置x,y轴刻度一致,这样饼图才能是圆的 plt.axis('equal') plt.legend() plt.show()

显示效果:

code-2 分析新生出生年份分布

# coding:utf-8 # 统计新生年龄段 import pandas as pd import numpy as np from collections import Counter import matplotlib.pyplot as plt file = 'F:/python数据分析/测试数据/2017allstu.xlsx' # 返回解析excle的结果 df = pd.read_excel(file) # 获得新生所有的出生日期 birthdays = df.loc[:]['CSRQ'] # 使用numpy获取出生日期的年份,返回的是列表 bdl = np.array(birthdays, dtype='datetime64[Y]') # 统计列表中年份出现个数,以字典形式返回 years = Counter(bdl) # 根据key升序排列,返回的是一个列表 # dict.items() 函数以列表返回可遍历的(键, 值) 元组数组 # key=lambda asd: asd[0] 定义匿名表达式,参数是asd(遍历列表所得),返回值是asd[0]也就是键(asd[1]是值) # reverse表示排序方式,False正序(默认),True反序 dic = sorted(years.items(), key=lambda asd: asd[0], reverse=False) # 将已排序列表包含的元组进行分离 yob = [] # 出生年份 num = [] # 该年人数 for key, value in dic: yob.append(key) num.append(value) # range(len(yob))表示很横坐标的范围,num表示柱状图数值,tick_label表示横坐标标签 plt.bar(range(len(yob)), num, tick_label=yob) plt.title(u'中原工学院2017届新生出生年份柱状图') plt.show()

显示效果:

总结: 1、数据获取(重点) python从文本中读取数据,文本形式多样(.csv、.xlsx、txt等),注意文本字符编码,读取之后的数据量是否准确。 2、数据处理 获取到数据之后需要经过一系列处理才能,将需要的数据用到画图的参数中,在上面的例子中感觉对日期、时间类型的处理复杂。需要列表、字典、集合、元组、字符串的基础知识。 此外需要使用一些外部的模块:numpy、pandas、matplotlib、collections等,需要了解一些关键函数的使用方法(参数及返回值)。上面贴出的代码关键部分都有详细解释,可以学习参考。

注:由于数据私密性问题,2017allstu.xlsx不再贴出,仅写出表头及测试数据供参考。

转载请注明原文地址: https://www.6miu.com/read-69866.html

最新回复(0)