Python数据分析练习
练习一、
用lagou.csv中的数据完成下面的操作:
- 找出各大城市数据分析岗位的需求量并绘制柱状图
- 找出不同领域对数据分析的需求量的占比并绘制饼图
- 分析各个城市的薪资水平并绘制柱状图和折线图
df1 = lagou_df[lagou_df.positionName.str.contains('数据分析')]
df1
# 1. 找出各大城市数据分析岗位的需求量并绘制柱状图
ser = df1.city.value_counts()
ser.plot(kind='bar', width=0.8, color=np.random.rand(13, 3))
# 给柱子标数字并居中
for i in range(ser.size):
plt.text(i, ser[i]+5, str(ser[i]), ha='center')
# 改纵轴刻度
plt.yticks(np.arange(0, 501, 50))
# 改横轴字体角度
plt.xticks(rotation=30)
# 给x,y轴标识
plt.xlabel('')
plt.ylabel('招聘需求数量')
# 给图加网格线
plt.grid(axis='y', alpha=0.25)
plt.show()
# 2. 找出不同领域对数据分析的需求量的占比并绘制饼图
# 先处理industryField数据
inds = df1.industryField.str.split(r'[,, 丨, \s]', expand=True)[0] # expand参数是将分列后的结果转成DataFrame
df1['industryField'] = inds
# 画出甜甜圈
df1.industryField.value_counts().sort_values().nlargest(10).plot(kind='pie', autopct='%.1f%%', pctdistance=0.8, wedgeprops={'width': 0.4, 'edgecolor': 'white'})
plt.ylabel('')
plt.show()
# 3. 分析各个城市的薪资水平并绘制柱状图和折线图
sal_df = np.round(df1.groupby('city').salary.mean(), 1)
sal_df.plot(kind='bar')
sal_df.plot(kind='line', color='red', marker='o')
plt.yticks(np.arange(5, 26, 5))
plt.show()
练习二、
df1 = pd.DataFrame({
"类别": ["手机", "手机", "手机", "手机", "手机", "电脑", "电脑", "电脑", "电脑"],
"品牌": ["华为", "华为", "华为", "小米", "小米", "华为", "华为", "小米", "小米"],
"等级": ["A类", "B类", "A类", "B类", "C类", "A类", "B类", "C类", "A类"],
"A组": [1, 2, 2, 3, 3, 4, 5, 6, 7],
"B组": [2, 4, 5, 5, 6, 6, 8, 9, 9]
})
df1
# 用上面的数据完成以下任务。
# 任务1:A组手机和电脑各卖出多少台
# 任务2:A组不同品牌的手机和电脑各卖出多少台
# 任务3:不同品牌的手机和电脑,A组和B组各卖出多少台
# 任务1:A组手机和电脑各卖出多少台
df1.groupby('类别').A组.sum()
# 任务2:A组不同品牌的手机和电脑各卖出多少台
df1.groupby(['类别', '品牌']).A组.sum()
# 任务3:不同品牌的手机和电脑,A组和B组各卖出多少台
pd.pivot_table(df1, index='类别', columns='品牌', values=['A组', 'B组'], aggfunc=sum)
练习三、
读取2018年北京积分落户数据,完成下面的操作。
-
根据company将落户人员分组,统计每个公司有多少积分落户人员?
-
根据年龄将落户人员分组,统计每个年龄段有多少人(建议5岁一个年龄段)?
-
根据落户积分将落户人员分组,统计每个积分段有多少人?
beijing_df = pd.read_csv(r'C:\Users\wby\Desktop\data\csv\2018年北京积分落户数据.csv')
beijing_df
beijing_df.info()
# 1. 根据company将落户人员分组,统计每个公司有多少积分落户人员?
beijing_df['company'].value_counts()[:10]
# 2. 根据年龄将落户人员分组,统计每个年龄段有多少人(建议5岁一个年龄段)?
from datetime import datetime
curr_date = datetime(2018, 1, 1)
(curr_date - pd.to_datetime(beijing_df.birthday)).dt.days // 365
beijing_df['age'] = (curr_date - pd.to_datetime(beijing_df.birthday)).dt.days // 365
beijing_df
min_age, max_age = beijing_df.age.min(), beijing_df.age.max()
bins = np.arange(min_age, max_age + 5, 5)
cate = pd.cut(beijing_df.age, bins, right=False)
beijing_df.groupby(cate).name.count()
# 3. 根据落户积分将落户人员分组,统计每个积分段有多少人?(和上题同理,分箱操作)
min_score, max_score = beijing_df.score.min(), beijing_df.score.max()
bins = np.arange(min_score, max_score + 1, 5)
cate = pd.cut(beijing_df.score, bins , right=False)
beijing_df.groupby(cate).name.count()