当我们拿到一份数据,并不是上来就是干,我们一定要先去理清一下我们的思路,
大体流程是:
导入相应的包,读取数据源。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv('./bj_luohu.csv')
整体了解数据
#查看前几条数据
df.head()
#查看描述
df.describe()
#查看各列数据
df.count() --6019条 比较干净
对我们的数据有了初步了解后,就可以确定我们要进行那些清洗的步骤了。主要从以下方面去清洗:
1、null值
2、重复值
3、异常值(主要是从业务逻辑上来判断)
#null值
df.drop(df[df['列名'].isnull()].index, inplace=True)
#重复值
df[df.duplicated()]
主要操作方式
A:删除 (异常值数据量不大)
B:填充
我们这份数据已经非常感觉,所以就不贴相应清洗代码了。
指标和维度的确立,是基于我们拿到了什么,都有什么价值而来。本文的分析维度有:
1、落户分数分布区间
2、落户年龄段分析
3、落户的人所属公司情况,排出前10
4、姓氏排名前10(纯属兴趣)
#开始分析
# 分析工具 python
# #分析点
# 1、落户分数分布区间
df.groupby('score',as_index=False).count()
#分桶 方便区间查看
bins_arr = np.arange(90,130,5)
bins = pd.cut(df['score'],bins_arr)
score_g = df['score'].groupby(bins).count()
score_g.index = [ str(x.left) +"~" + str(x.right) for x in score_g.index]
import matplotlib.pyplot as plt
#导入,解决中文乱码中文
plt.rcParams['font.sans-serif']='Simhei'
#做柱形图
#设置图片大小
plt.figure(figsize=(15,8),dpi=80)
score_g.plot(kind='bar',color='#f47983')
#设置网格线
plt.grid(alpha=0.7,linestyle='--')
#设置x标签的透明度
plt.xticks(rotation=45)
plt.title('积分各区间人数')
plt.xlabel('积分区间')
plt.ylabel('人数')
plt.show
# 2、落户年龄段分析
#新建age列
df['age'] = (pd.to_datetime('2020-3')-pd.to_datetime(df['birthday']))/pd.Timedelta('365 days')
df['age'].head()
bins_arr = np.arange(40,65,5)
bins = pd.cut(df['age'],bins_arr)
age_group = df['age'].groupby(bins).count()
age_group
age_group.index = [ str(x.left) +"~" + str(x.right) for x in age_group.index]
import matplotlib.pyplot as plt
#导入,解决中文乱码中文
plt.rcParams['font.sans-serif']='Simhei'
#做柱形图
#设置图片大小
plt.figure(figsize=(10,8),dpi=80)
age_group.plot(kind='bar',color='#96ce54')
#设置网格线
plt.grid(alpha=0.5,linestyle='--')
#设置x标签的透明度
plt.xticks(rotation=45)
plt.title('年龄各区间人数')
plt.xlabel('年龄区间')
plt.ylabel('人数')
# 3、落户的人所属公司情况,排出前10
company_group = df.groupby('company',as_index=False).count()[['company','id']]
# company_group.sort_values()
#重命名列
company_group.rename(columns={'id':'count'},inplace=True)
#排序
company_group = company_group.sort_values('count',ascending=False)
company_group[:10]
# 4、姓氏排名前10(纯属兴趣)
df.head()
#新建列
df['last name'] = [i[:1] for i in df['name']]
name_group = df.groupby('last name',as_index=False).count()[['last name','id']]
# company_group.sort_values()
#重命名列
name_group.rename(columns={'id':'count'},inplace=True)
#排序
name_group = name_group.sort_values('count',ascending=False)
top10_name = name_group[:10]
x = top10_name['last name']
y = top10_name['count']
plt.figure(figsize=(20,7),dpi=80)
top10_name.plot(kind='bar',color='#e29c45')
#设置x,y轴的刻度标签
plt.xticks(np.arange(len(x)),x)
plt.show()
经过数据处理之后,结果很快跃然纸上了。下面我们可以根据可视化的图表的初步结论。
根据图表分析,能得出:
大部分能够落户北京的人,分数段还是在90-100区间。
如果需要进一步分析 我们还可以看一下90-100区间,按2分为步长,看一下分布情况。
可以了解一下age列的大体情况,便于分区间处理
分组后得到的结果:
做可视化处理:
细分,以2为步长,看一下34-56区间的具体情况
以上,不难看出,这批落户人群,也是过了‘不惑’年龄之后得到落户的居多,所以大家不必心急,更上大部分人的节奏即可。
对公司进行处理后得到:
根据排名前10的公司不难看出,实力强大的公司会为落户提供一定保障,所以是否可以从选择一个好的公司开始,步步为营呢?