?文件下载: 用于博客系列文章pandans的学习文件.zip
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
第一步: 批量处理数据
??面临的是一个和之前不一样的情况,有好多个文件要操作.
- 查看数据的样子
- 批量读取文件, os模块,获取文件列表
- for循环依次读取,
- 当你有一大堆的DataFrame想要保存的时候,可以用容器型数据.这里我们用字典保存数据.
import os
os.listdir('lagou_copy')
'''
['.DS_Store',
'beijing.csv',
'changsha.csv',
'chengdu.csv',
'chongqing.csv',
'foshan.csv',
'guangzhou.csv',
'hangzhou.csv',
'nanjing.csv',
'shanghai.csv',
'shenzhen.csv',
'suzhou.csv',
'tianjin.csv',
'wuhan.csv',
'xiamen.csv',
'xian.csv',
'zhengzhou.csv',
'修改记录.txt']
'''
file_name_list = []
for filename in os.listdir('lagou_copy'):
if filename[-4:] == '.csv':
file_name_list.append(filename)
file_name_list
'''
['beijing.csv',
'changsha.csv',
'chengdu.csv',
'chongqing.csv',
'foshan.csv',
'guangzhou.csv',
'hangzhou.csv',
'nanjing.csv',
'shanghai.csv',
'shenzhen.csv',
'suzhou.csv',
'tianjin.csv',
'wuhan.csv',
'xiamen.csv',
'xian.csv',
'zhengzhou.csv']
'''
lagou_dict = {}
for filename in file_name_list:
key = filename[:-4]
value = pd.read_csv('lagou_copy/'+filename)
lagou_dict[key] = value
lagou_dict.keys()
'''
dict_keys(['zhengzhou', 'xiamen', 'foshan', 'xian', 'changsha', 'wuhan', 'shenzhen', 'hangzhou', 'suzhou', 'guangzhou', 'chongqing', 'chengdu', 'shanghai', 'beijing', 'nanjing', 'tianjin'])
'''
lagou_dict['suzhou']
for key in lagou_dict:
print(key)
lagou_dict[key].drop(columns='Unnamed: 0',inplace=True)
lagou_dict['zhengzhou']
city_num = pd.Series()
for key in lagou_dict:
value = lagou_dict[key].shape[0]
city_num[key] = value
city_num.sort_values(ascending=False)
'''
beijing 450
shanghai 435
shenzhen 262
guangzhou 177
hangzhou 145
chengdu 46
wuhan 45
nanjing 30
changsha 16
xiamen 14
xian 12
foshan 10
zhengzhou 9
chongqing 8
suzhou 8
tianjin 7
dtype: int64
'''
lagou_dict_30 = {}
for city in lagou_dict:
if lagou_dict[city].shape[0] >= 30:
lagou_dict_30[city] = lagou_dict[city]
lagou_dict_30.keys()
'''
dict_keys(['wuhan', 'shenzhen', 'hangzhou', 'guangzhou', 'chengdu', 'shanghai', 'beijing', 'nanjing'])
'''
for city in lagou_dict_30:
print(city)
print(lagou_dict_30[city].isnull().sum())
print('-'*30)
'''
wuhan
标题 0
城市 3
地点 1
薪资待遇 3
岗位要求 0
名称 0
级别 0
岗位技能 0
短评 0
dtype: int64
------------------------------
shenzhen
标题 0
城市 0
公司地点 0
薪资待遇 0
工位要求 0
公司名称 0
公司级别 0
岗位技能 0
公司短评 0
dtype: int64
------------------------------
hangzhou
标题 0
城市 0
公司地点 0
薪资待遇 0
工位要求 0
公司名称 0
公司级别 0
岗位技能 0
公司短评 0
dtype: int64
------------------------------
guangzhou
标题 0
城市 0
公司地点 0
薪资待遇 0
工位要求 0
公司名称 0
公司级别 0
岗位技能 0
公司短评 0
dtype: int64
------------------------------
chengdu
标题 0
城市 0
公司地点 0
薪资待遇 0
工位要求 0
公司名称 0
公司级别 0
岗位技能 1
公司短评 0
dtype: int64
------------------------------
shanghai
标题 0
城市 0
公司地点 0
薪资待遇 0
工位要求 0
公司名称 0
公司级别 0
岗位技能 1
公司短评 0
dtype: int64
------------------------------
beijing
标题 0
公司地点 0
薪资待遇 0
工位要求 0
公司名称 0
公司级别 0
岗位技能 1
公司短评 0
dtype: int64
------------------------------
nanjing
标题 0
城市 2
公司地点 1
薪资待遇 2
工位要求 0
公司名称 1
公司级别 0
岗位技能 0
公司短评 0
dtype: int64
------------------------------
'''
for key in lagou_dict_30:
if '城市' in lagou_dict_30[key].columns:
lagou_dict_30[key].城市.fillna(lagou_dict_30[key].城市.mode()[0],inplace=True)
第二步:合并数据
df = pd.DataFrame()
for key in lagou_dict_30:
df = df.append(lagou_dict_30[key] , ignore_index=True,sort=False)
for key in lagou_dict_30:
print(key)
print(lagou_dict_30[key].columns)
print('-'*30)
'''
wuhan
Index(['标题', '城市', '地点', '薪资待遇', '岗位要求', '名称', '级别', '岗位技能', '短评'], dtype='object')
------------------------------
shenzhen
Index(['标题', '城市', '公司地点', '薪资待遇', '工位要求', '公司名称', '公司级别', '岗位技能', '公司短评'], dtype='object')
------------------------------
hangzhou
Index(['标题', '城市', '公司地点', '薪资待遇', '工位要求', '公司名称', '公司级别', '岗位技能', '公司短评'], dtype='object')
------------------------------
guangzhou
Index(['标题', '城市', '公司地点', '薪资待遇', '工位要求', '公司名称', '公司级别', '岗位技能', '公司短评'], dtype='object')
------------------------------
chengdu
Index(['标题', '城市', '公司地点', '薪资待遇', '工位要求', '公司名称', '公司级别', '岗位技能', '公司短评'], dtype='object')
------------------------------
shanghai
Index(['标题', '城市', '公司地点', '薪资待遇', '工位要求', '公司名称', '公司级别', '岗位技能', '公司短评'], dtype='object')
------------------------------
beijing
Index(['标题', '公司地点', '薪资待遇', '工位要求', '公司名称', '公司级别', '岗位技能', '公司短评'], dtype='object')
------------------------------
nanjing
Index(['标题', '城市', '公司地点', '薪资待遇', '工位要求', '公司名称', '公司级别', '岗位技能', '公司短评'], dtype='object')
------------------------------
'''
d = {'地点':'公司地点','岗位要求':'工位要求','名称':'公司名称',
'级别':'公司级别','短评':'公司短评'}
lagou_dict_30['wuhan'].rename(columns=d,inplace=True)
df = pd.DataFrame()
for key in lagou_dict_30:
df = df.append(lagou_dict_30[key] , ignore_index=True,sort=False)
第三步:简单了解数据
df.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1590 entries, 0 to 1589
Data columns (total 9 columns):
标题 1590 non-null object
城市 1140 non-null object
公司地点 1588 non-null object
薪资待遇 1585 non-null object
工位要求 1590 non-null object
公司名称 1589 non-null object
公司级别 1590 non-null object
岗位技能 1587 non-null object
公司短评 1590 non-null object
dtypes: object(9)
memory usage: 111.9+ KB
'''
df[df.城市.isnull()]
df.城市.fillna('北京',inplace=True)
df.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1590 entries, 0 to 1589
Data columns (total 9 columns):
标题 1590 non-null object
城市 1590 non-null object
公司地点 1588 non-null object
薪资待遇 1585 non-null object
工位要求 1590 non-null object
公司名称 1589 non-null object
公司级别 1590 non-null object
岗位技能 1587 non-null object
公司短评 1590 non-null object
dtypes: object(9)
memory usage: 111.9+ KB
'''
df[df.isnull().sum(axis=1) > 0]
df.describe()
进一步处理数据
df.公司地点 = df.公司地点.str.replace('[','').str.replace(']','')
t = df[~(df.工位要求.str.contains('k') | df.工位要求.str.contains('K')) ]
df.loc[t.index, '工位要求'] = ["8k-16k ",'6k-8k ','6k-9k '] + df.loc[t.index, '工位要求']
df[['薪资','经验要求','临时','学历']] = df.工位要求.str.split(' ',expand=True)
df.drop(columns=['薪资待遇','工位要求','临时'],inplace=True)
t2 = df.薪资.str.replace('k','000').str.replace('K','000')
df[['最低薪资','最高薪资']] = t2.str.split('-',expand=True)
df.最低薪资 = df.最低薪资.astype('int')
df.最高薪资 = df.最高薪资.astype('int')
df['平均薪资'] = (df.最低薪资 + df.最高薪资)//2
df.pop('薪资')
df[['公司类型','融资阶段','公司规模']] = df.公司级别.str.split(' / ',expand=True)
df.pop('公司级别')
df = df[['标题','城市','公司名称','公司地点','公司类型',
'融资阶段','公司规模','经验要求','学历',
'最低薪资','最高薪资','平均薪资',
'岗位技能','公司短评']]
第四步:数据统计分析
df.城市.value_counts()
'''
北京 450
上海 435
深圳 262
广州 177
杭州 145
成都 46
武汉 45
南京 30
Name: 城市, dtype: int64
'''
plt.style.use("seaborn")
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df.城市.value_counts().plot(kind='bar');
def bar(column):
"""传入列名,绘制柱状图"""
return df[column].value_counts().plot(kind='bar');
bar('融资阶段');
df[['最低薪资','平均薪资','最高薪资']].plot(kind='kde')
plt.xlim(-10000,100000);
分组统计
??不同类别的薪资情况
df.groupby('城市').mean()
df.groupby(by='城市').mean().sort_values(by ='平均薪资' ,ascending=False)
df.groupby('城市')['平均薪资'].agg(['max','min','median','mean'])
def group_salary(column):
return df.groupby(column).mean().sort_values(by ='平均薪资' ,ascending=False)
group_salary('融资阶段')
|