Python数据统计(用4种图表显示)

matplotlib画四种图表的实例

    def findPositionClassify(self):
        sql = "select avg(job_meansalary),job_taskid,task_title from job_position,job_collect_task where "+\
              "job_position.job_taskid = job_collect_task.task_id group by job_taskid,task_title"
        result = self.execute(sql,params=None)
        self.commit()
        return self.fetch()
        pass

    def findCityPositionClassify(self):
        sql = "select avg(t1.job_meansalary) as m,t1.job_taskid,t2.task_title,t1.job_city from "+\
                "job_position t1 left join job_collect_task t2 "+\
                "on t1.job_taskid = t2.task_id group by job_taskid,job_city,t2.task_title order by "+\
                "t1.job_taskid asc,m desc"
        result = self.execute(sql,params=None)
        self.commit()
        return self.fetch()
        pass
    def bingshuju(self):
        sql = "select avg(job_position.job_meansalary),job_city from job_position where job_taskid = '1' group by job_taskid,job_city order by avg(job_position.job_meansalary) desc;"
        result = self.execute(sql, params=None)
        self.commit()
        return self.fetch()
        pass
    def sandiantu(self):
        sql = "select job_taskid,job_city,avg(job_position.job_meansalary) from job_position group by job_taskid,job_city;"
        result = self.execute(sql, params=None)
        self.commit()
        return self.fetch()
        pass

调用函数并存成json文件

import json
jp = JobPositionDao()

print(jp.findCityPositionClassify())    #点线图的数据
print(jp.findPositionClassify())   #3个语言的平均工资(柱状图)
print(jp.bingshuju())   #前五个是饼图数据(城市的平均工资占比)
print(jp.sandiantu()) #每个语言每个城市的平均薪资
print(jp.textfunc())    #工作需求,用于jieba


with open('F:\\py\\pythonsientific\\day05\\2.json','w')as fp:
    dict1 = {}
    for i in jp.findCityPositionClassify():
        dict1[i[0]]={i[2]:i[3]}
    a = json.dumps(dict1)
    json.dump(a,fp)
with open('F:\\py\\pythonsientific\\day05\\3.json','w',encoding='utf-8')as fp:
    dict3 = {}
    for i in jp.findPositionClassify():
        dict3[i[0]] = {i[1]:i[2]}
    c = json.dumps(dict3)
    json.dump(c,fp)
with open('F:\\py\\pythonsientific\\day05\\4.json','w',encoding='utf-8')as fp:
    dict4 = {}
    for i in jp.bingshuju():
        dict4[i[0]] = i[1]
    d = json.dumps(dict4)
    json.dump(d,fp)
with open('F:\\py\\pythonsientific\\day05\\5.json','w',encoding='utf-8')as fp:
    dict5 = {}
    for i in jp.sandiantu():
        dict5[i[1]] = i[2]
    e = json.dumps(dict5)
    json.dump(e,fp)
with open('F:\\py\\pythonsientific\\day05\\6.json','w',encoding='utf-8')as fp:
    list1 = []
    for i in jp.textfunc():
        list1.append(i[0])
    f = json.dumps(list1)
    json.dump(f,fp)
jp.close()

将获取的信息用图表的形式展现出来(一张画布,四个图表)

#引入需要的模块
import numpy as np
import matplotlib.pyplot as plt
import json
#用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
#用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False

figure = plt.figure()    #创建画布

#点线图--上海和北京不同城市的python薪资
subplot1 = figure.add_subplot(2,2,1)      #图标占位,2行2列第1个(下面的3幅图一样)

with open('2.json','r')as fp:     #打开文件
    a = json.load(fp)
    data = json.loads(a)
print(data)
list1 = []
list2 = []
list3 = []
list4 = []
list5 = []
list6 = []
list7 = []
for i in data.items():
    a = i[1]
    for j in a.items():
        b = j[0]
        if j[0]=='Python职位数据采集':
            list1.append(i)
        elif j[0]=='Java职位数据采集':
            list2.append(i)
        else:
            pass
print(list1)
print(list2)

for i in list1:
    a = i[0]
    for j in i[1].items():
        b = j[1]
        list3.append((a,b))
array2d = np.array(list3)
array2d = array2d.T
for i in list2:
    a = i[0]
    for j in i[1].items():
        b = j[1]
        list4.append((a,b))
array2e = np.array(list4)
array2e = array2e.T
print(array2d)
print(array2e)

for i in array2d[1]:
    for j in array2e[1]:
        if i == j:
            list5.append(i)
xdata = np.array(list5)
print(xdata)
for i in xdata:
    for j in array2d.T:
        if i==j[1]:
            list6.append(j[0])
for i in xdata:
    for j in array2e.T:
        if i==j[1]:
            list7.append(j[0])
ydata = np.array(list6).astype(np.float)
print(ydata)
zdata = np.array(list7).astype(np.float)
print(zdata)

subplot1.plot(xdata,ydata,'b-',label='python')
subplot1.plot(xdata,zdata,'r-',label='java')
subplot1.scatter(xdata,ydata,s=50,c='g',alpha=0.5)
subplot1.scatter(xdata,zdata,s=50,c='g',alpha=0.5)
subplot1.legend(loc='best')
#柱状图--python、Java、php三种语言的薪资
subplot2 = figure.add_subplot(2,2,2)
with open('3.json','r')as fp:
    a = json.load(fp)
    data = json.loads(a)
print(data)
lista = []
listb = []
listc = []
for i in data.items():
    lista.append(i[0])
    for j in i[1].items():
        listb.append(j[0])
        listc.append(j[1])
# print(lista)
# print(listb)
# print(listc)
xlabel = np.array(listc)
x = np.array(listb).astype(np.float)
y = np.array(lista).astype(np.float)
bars = plt.bar(x,y,width=0.3)    #width:柱子宽度      #返回的是bar柱子对象

subplot2.set_ylabel("salary/month")
subplot2.set_xlabel("position")
subplot2.set_xticks(x)
subplot2.set_xticklabels(xlabel)
subplot2.grid(linestyle='--')   #添加背景网格线
#设置颜色
i = 0
for bar in bars:
    bar.set_color('#'+str(111111 + i))
    i += 225540
    pass
for x,y in zip(x,y):
    subplot2.text(x,y+0.05,'{0}yuan/month'.format(y),ha='center',va='bottom')

#饼图--python语言5个城市的薪资占比
subplot3 = figure.add_subplot(2,2,3)
with open('4.json','r')as fp:
    a = json.load(fp)
    data = json.loads(a)
print(data)
listx = []
listy = []
i = 0
for j in data.items():
    if i<5:
        i += 1
        listx.append(j[0])
        listy.append(j[1])
# print(listx)
# print(listy)
result = np.array(listx).astype(np.float)/np.sum(np.array(listx).astype(np.float))
print(result)
labels = ['%s %.2f %%' %(y,np.float(x * 100)) for x,y in zip(result,np.array(listy))]
subplot3.pie(result,colors=['#008888','#006600','#FF0000','#00FF00','#0000FF'],labels=labels)

#散点图--不同语言不同城市的平均薪资
subplot4 = figure.add_subplot(2,2,4)
with open('5.json','r')as fp:
    a = json.load(fp)
    data = json.loads(a)
print(data)
listm = []
listn = []
for i in data.items():
    listm.append(i[0])
    listn.append(i[1])
x = np.array(listm)
y = np.array(listn)

subplot4.scatter(x,y,s=20,c='b',marker='*')    #s大小,c颜色,alpha透明度,marker点的形状默认o

plt.show()

最后结果:

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值