数据读取
1 # encoding:utf-8 2 #2020年广州深圳广东招聘信息分析 3 import pandas as pd 4 import numpy as np 5 from pandas import DataFrame 6 data = pd.read_csv( 7 r"C:\Users\22392\PycharmProjects\数据分析\数据\zp_info.csv",encoding='utf-8', 8 engine='python') 9 #输出数据信息 10 print(data.info())
运行结果:
<class 'pandas.core.frame.DataFrame'> RangeIndex: 28571 entries, 0 to 28570 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 position 28571 non-null object 1 region 28571 non-null object 2 experience 27983 non-null object 3 education 28559 non-null object 4 number 25781 non-null object 5 age 28570 non-null object 6 new_time 28570 non-null object 7 wage 28571 non-null object 8 company 28571 non-null object 9 trade 28570 non-null object 10 nature 28534 non-null object 11 scale 28568 non-null object dtypes: object(12) memory usage: 2.6+ MB
打印列名以及相应的缺失值个数
1 for columname in data.columns: 2 if data[columname].count() != len(data): 3 loc = data[columname][data[columname].isnull().values==True].index.tolist() 4 print('列名:"{}", 有{}个缺失值'.format(columname,len(loc)))
运行结果:
列名:"experience", 有588个缺失值 列名:"education", 有12个缺失值 列名:"number", 有2790个缺失值 列名:"age", 有1个缺失值 列名:"new_time", 有1个缺失值 列名:"trade", 有1个缺失值 列名:"nature", 有37个缺失值 列名:"scale", 有3个缺失值
填充缺失值为“unknow”
data1=data.fillna("unknow") #输出填充后的空值信息 print(data1.isnull().any()) #打印数据 print(data1)
结果:
position False region False experience False education False number False age False new_time False wage False company False trade False nature False scale False dtype: bool position region experience ... trade nature scale 0 库房打包工人 深圳市/龙岗区 1年以下 ... 互联网/电子商务 民营 20人以下 1 生产工 广州市/白云区 无经验 ... 家具/家电/工艺品/玩具 民营 20人以下 2 收件数据专岗 深圳市/罗湖区 无经验 ... 金融(银行/保险) 股份制企业 100-499人 3 办公室客服文员 广州市/荔湾区 不限 ... 房地产开发 民营 100-499人 4 客服实习生 广州市/荔湾区 不限 ... 建筑与工程 民营 100-499人 ... ... ... ... ... ... ... ... 28566 算法工程师 广东-东莞 1年以上经验 ... 机械/设备/技工 民营企业 500-1000人 28567 行政主管 广东-东莞 不限经验 ... 建筑/房地产 民营企业 50-200人 28568 人事行政主管 广东-东莞 5年以上经验 ... 机械/设备/技工 民营企业 50-200人 28569 仓储主管 广东-东莞 1年以上经验 ... 机械/设备/技工 民营企业 1000人以上 28570 审计专员 广东-东莞 1年以上经验 ... 机械/设备/技工 民营企业 500-1000人 [28571 rows x 12 columns] Process finished with exit code 0
公司招聘的职业的需求排名
代码:
job0=(data1.loc[:,["trade"]]).value_counts() print(job0.head(20))
运行结果:前20名
C:\Users\22392\PycharmProjects\数据分析\venv\Scripts\python.exe C:/Users/22392/PycharmProjects/数据分析/职位2.py trade 互联网/电子商务 4116 金融(银行/保险) 2081 其他行业 1833 医疗/美容/保健/卫生 1595 建筑/房地产/物业/装潢 1562 物业管理/商业中心 1399 餐饮/娱乐/休闲 1370 中介服务/家政服务 1036 教育/培训 894 教育/培训/学术/科研 875 交通/运输/物流 703 汽车/摩托车/零配件 551 批发/零售 546 批发零售 539 专业服务/财会/法律 522 电子/半导体/集成电路 516 机械/设备/技工 503 金融(投资/证券 449 服装/纺织/皮革 447 消费品(食/饮/烟酒) 438 dtype: int64
图形化柱状图 前15名
import matplotlib.pyplot as plt from matplotlib import font_manager #解决中文报错 from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False #横坐标 lstx=[] #纵坐标 lsty=[] for x,y in zip(job0[0:15].index,job0[0:15]): lstx.append(((str(x)[2:-3]).split("/"))[0]) lsty.append(y) plt.figure(figsize=(20,10),dpi = 150) my_font = font_manager.FontProperties(fname=r'C:\Windows\Fonts\STKAITI.TTF',size =10) plt.bar(lstx,lsty,width=0.5) plt.xticks(range(len(lstx)),lstx,fontproperties=my_font) for a,b in zip(lstx,lsty): #柱子上的数字显示 plt.text(a,b,'%.0f'%b,ha='center',va='bottom',fontsize=12) plt.show()
图形化结果
加权(人数*职业)公司招聘职业需求
数据清洗,整理公司招聘职位类别 以及人数 写入job.csv文件中
job=(data1.loc[:,["trade","number"]]).value_counts() import csv f = open('job.csv','w',encoding='utf-8') csv_writer = csv.writer(f) csv_writer.writerow(["trade","number","all_number"]) for (x,y) in zip((job.index)[:50],job[:50]): lst=[] lst.append(x[0]) #对需求人数x[1]做规范化处理,unkonw=1,若干人=2 ,以及平均人数,以此来加权 lst2=[] lst2=re.split("人|招聘|数|-|:",str(x[1])) #去除空值 while '' in lst2: lst2.remove('') z = lst2[0] if lst2[0] == 'unknow': z = "1" elif lst2[0]=='若干': z = "2" elif len(lst2)==2: print(lst2) z = (int(lst2[0])+int(lst2[1]))//2 lst.append(z) lst.append(str(y)) csv_writer.writerow(lst) f.close()
job.csv中数据
jobdata = pd.read_csv(
r"job.csv",encoding='utf-8',
engine='python')
print(jobdata.info())
job.csv中的数据信息
<class 'pandas.core.frame.DataFrame'> RangeIndex: 50 entries, 0 to 49 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 trade 50 non-null object 1 number 50 non-null int64 2 all_number 50 non-null int64 dtypes: int64(2), object(1) memory usage: 1.3+ KB