代码一定要练的习,多写写就会了
模块安装
1.pandas模块安装
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple seaborn
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyter
大纲
Plain Text
8.案例一
选工作(实际案例1.csv)
1.数据收集、查看数据
1.拿到数据先看数据每列数据情况
df.info()
2.数据预处理
1.数据清洗
1.重复值处理
df.duplicated() 查看重复值
df.drop_duplicates() 删除重复值
2.缺失值处理
df.isnull() 查看缺失值
df.dropna() 删除缺失值
3.异常值处理
df.describe() 查看最大最小值是否正常
df[ df[‘列名’]>条件 ] 条件筛选
4.格式处理
1.work_loc处理
1.替换
df[‘列名1’].str.repalce(‘a’,’b’)
2.拆分
df[‘列名1’].str.split(‘ ‘,expend=True,)
3.合并
pd.concat()
2.格式处理
1.合并列内容
df[‘列名’].map(str)
方法则会将两项合并数据先统一转换为字符型数据做,再合并
2.频数分布
分类错乱
df.value_counts
3.归类
df[‘列名’].loc[df[‘列名’]==’a b c’]=’A’
3.格式整理
1.重置索引
df.reset_index(drop=True,inplace= True)
2.删除多余列
df.drop([‘列名1’,’列名2’],axis=1,inplace=True)
3.修正列名
df.rename(columns={0:’work_city’}, inplace = True)
3.数据分析
1.分析的问题:
1.数据分析师岗位的整体薪酬如何?——————————————薪酬分布
2.数据分析师岗位对工作经验的要求如何?——————————工作经验分布
3.不同的工作经验的薪酬分布情况?——————————————工作经验和薪酬的关系
4.哪些城市对数据分析师的需求更多?————————————城市分布
5.不同城市的薪酬分布情况?——————————————————城市和薪酬的关系
与薪酬、工作经验、城市这三个参数相关
2.描述性统计特征x
0.各种视图应用场景:
1.条形图能展示分类数据的频数,也能对比差异;
2.饼状图则能更直观的呈现出数据所占整体的比例结构情况
3.直方图呈现的是数据的频数和整体情况,
4.箱型图则能直观的反映数据离散的分布情况。
1.薪酬分布
1.数据的基本特征
df.describe()
数据分析师被公司提供的最低薪酬大约集中在6000元左右
数据分析师被公司提供的最高薪酬大约集中在10000元左右
2.创建平均值
mean = (min + max )/2
df['新列名'] = (df['列名1'] + df['列名2'])/2
查看前几行
df.head()
单位转化
df['列名'] = df['列名']/1000
3.查看频数
a = df['列名']value_counts()
4.直方图可视化
设置画布大小
fig,ax = plt.subplots()
fig.set_size_inches(10,12)
sns.distplot(df['列名'],kde=False,color='#6c80d1')
5.结论
真正极低薪酬的人数,要少于极高薪酬的人数
2.工作经验分布
1.查看频数
b = df['列名']value_counts()
2.分析数据类型
1.series类型
2.找到x,y轴的参数
3.s.index
s.values
2.条形图可视化
设置文字
sns.set(font='Source Han Sans CN')
sns.barplot(x=gongzuo.index,y=gongzuo.values,palette=['#6c80d1', '#a795f1', '#51aae9','#7dcc90'])
3.结论
招的人最多的就是萌新,过来才是1-3年的,而对于3-5年的,招得相比较而言就更少,当然5年以上的
3.工作经验和薪酬的关系
1.查看不同工作经验的薪资情况
c = df[df['列名']=='无经验']
c.describe()
2.箱型图可视化
sns.boxplot(x= '列名', y = '列名',data = df,
palette=['#6c80d1', '#a795f1', '#51aae9',
'#7dcc90'])
3.结论
从“无经验”到“1-3”年,薪资的上升不是很大(两个箱体的高度相差不大),
但当经验“1-3”变成“3-5”,和“3-5”变到“5年以上”时,
整体薪资的涨幅还是很多的(箱体的高度相差很多)
4.城市分布
1.频数分布
d = df['列名']value_counts()
df = df.head(10)
2.条形图可视化
sns.barplot(x= workcity10.index, y = workcity10.values)
3.结论:
南方比北方提供的数据分析师岗位更多
5.城市和薪酬的关系
1.选取城市
e = df[df['列名'].isin(['深圳','杭州','北京','上海','南京','广州'])]
2.查看每个城市描述信息
f = df[df['列名']=='数据名']
3.箱型图可视化
fig,ax = plt.subplots()
fig.set_size_inches(10,12)
sns.boxplot(x='工作地点',y='平均工资',data=chengshi_xinzi)
结论:
北京平均薪酬的中位数最高,约18k-20k;
其次是上海约15k-17k;
广州深圳则在9k-11k之间;
六个城市中,杭州南京偏低约7k-8k之间。
待遇最好的城市是北京,其次是上海,
而对该岗位需求量最大的深圳
(之前的频数分布表得出:深圳 559第一,杭州第二111)反而薪酬集中在10k左右
完整代码,尝试先对着大纲写再看完整代码
Plain Text
import pandas as pd
# 变量名 赋值 调用pandas模块 的read_csv文件 文件路径
df = pd.read_csv(‘/Users/jianjidiannao/Downloads/数据分析/实际案例1.csv’)
df
# 变量名 是可以任意设置的
# 命名规范:
# 1.不能以数字开头
# 2.小驼峰法则
# 3.不能是函数名
# 4.不能以中文命名
# df 是 dataframe
# s 是 seriese
# pandas 是python 处理excel表格的模块
df.info()
df[ df.duplicated() ]
# 找到重复的值
df1 = df.drop_duplicates()
df1
df1 [ df1.isnull().values ]
# 查看缺失值
df2 = df1.dropna()
df2
df2.describe()
df3= df2[df2[‘最低薪资’] >0]
df3
df3.describe()
df3[‘工作地点’] = df3[‘工作地点’].str.replace(‘-‘,’ ‘)
df3
df4 = df3[‘工作地点’].str.split(‘ ‘,expand=True)
df4
df5 = pd.concat([df4,df3],axis=1)
df5
df5[‘工作经验’] = df5[‘工作经验初’].map(str) + ‘-‘ + df5[‘工作经验末’].map(str)
df5
df5[‘工作经验’].value_counts()
df5[‘工作经验’].loc[df5[‘工作经验’]==’5-0’]=’五年以上’
df5[‘工作经验’].loc[df5[‘工作经验’]==’5-10’]=’五年以上’
df5[‘工作经验’].loc[df5[‘工作经验’]==’1-0’]=’1-3’
df5[‘工作经验’].loc[df5[‘工作经验’]==’2-0’]=’1-3’
df5[‘工作经验’].loc[df5[‘工作经验’]==’3-0’]=’3-5’
df5[‘工作经验’].loc[df5[‘工作经验’]==’0-0’]=’无经验’
df5[‘工作经验’].value_counts()
df5
df5.reset_index(drop=True,inplace=True)
df5.drop([1,2,’工作地点’,’工作经验初’,’工作经验末’],axis=1,inplace=True)
df5
df5.rename(columns={0:’工作地点’},inplace=True)
df5
十种数据可视化图表
Plain Text
s十种图例
1.直线图
s.plot.line()
df.plot(x=’列名1’,y=’列名2’)
2.条形图
df.plot.bar(x=’列名1’,y=’列名2’)
3.水平条形图
df.plot.barh(x=’列名1’,y=’列名2’)
4.饼图
s.plot.pie()
5.散点图
df.plot.scatter(x=’列名1’,y=’列名2’)
6.六角箱图
1.创建数据
df=pd.DataFrame(np.random.randn(1000,2),columns=[‘x’,’y’])
randn 标准正态分布数据 离0越近 出现概率越大,反之
2.对比散点图
df.plot.scatter(x=’列名1’,y=’列名2’)
df.plot.hexbin(x=’列名1’,y=’列名2’,gridsize=8)
7.直方图
s.plot.hist()
某个区间的数值所出现的频数
8.密度图
1.创建数据
s=pd.Series(
np.random.randn(1000))
2.两种方法
s.plot.kde()
s.plot.density()
概率的密度分布
3.举例
从数值随机取一个值,求这个值落在区间[1,2]的概率
区间的面积/整的面积(面积等于1) = 概率
9.箱型图
1.创建数据
df = pd.DataFrame(
np.random.rand(10,2),
columns=[‘A’,’B’]
)
10行2列的数据
2.df.plot.box()
分为数、最大值、超出或低出1.5倍就是异常值
10.面积图
df.plot.area()
可以直观的看到各个面积大小之间关系,看到哪个数据贡献更大
设置图表
Plain Text
38.plt-style
0.设置图例名称
plt.plot(‘数据1’,’数据2’,label=’名称’)
plt.legend()
1. plt.figure(
facecolor=’white’, #边边颜色
figsize =(6,6), #默认6*4 ,背景长宽比例
dpi = 100 #每个比例是多少像素
)
2.标题、x、y轴、标题
设置字体
plt.rcParams[‘font.family’] = [‘Arial Unicode MS’] #mac
plt.rcParams[‘font.sns-serif’] = [‘SimHei’] #win
plt.rcParams[‘axes.unicode_minus’] = False
plt.title(‘我是标题’,fontsize=24,color=’r’)
plt.xlabel(‘X轴’,fontsize=24,color=’g’)
plt.ylabel(‘Y轴’,fontsize=24,color=’b’,rotation=0,labelpad=30)
fontsize是大小,color是颜色,rotation是旋转方向,labelpad是Y轴与旁边线的距离
3.设置x、y长度
plt.xlim([-1,5])
plt.ylim([0,20])
4.设置x、y刻度间隔
plt.gca().xaxis.set_major_locator(plt.MultipleLocator(2)) #主刻度
plt.gca().xaxis.set_minor_locator(plt.MultipleLocator(0.5)) #次刻度
gca 获取当前坐标系、 x轴 设置 主 定位器 多重定位器
5.设置x,y刻度大小
plt.xticks(fontsize=20) #x轴
plt.yticks(fontsize=20) #y轴
5.设置网格
plt.grid(color=’y’)
39.oo-style(object oriented)
面向对象绘图
0.设置图例名称
fig,ax = plt.subplots(facecolor=’white’)
ax.plot(‘数据1’,’数据2’,label=’名称’)
ax.legend()
1.设置纸图
fig,ax = plt.subplots(
facecolor=’white’, #边边颜色
figsize =(6,6), #背景长宽比例
dpi = 100 #每个比例是多少像素
)
2.标题、x、y轴
ax.set_title(‘我是标题’,fontsize=24,color=’r’)
ax.set_xlabel(‘X轴’,fontsize=24,color=’g’)
ax.set_ylabel(‘Y轴’,fontsize=24,color=’b’,rotation=0,labelpad=30)
3.设置x、y长度、新增刻度参数
ax.set_xlim([-1,5],fontsize=24)
ax.set_ylim([0,20],fontsize=24)
ax.tick_params(labelsize=20)
4. 设置x、y刻度间隔
ax.xaxis.set_major_locator(plt.MultipleLocator(2)) #主刻度
ax.xaxis.set_manor_locator(plt.MultipleLocator(0.5)) #次刻度
5.设置网格
ax.grid(color=’y’)
设置图表代码
Plain Text
df = pd.DataFrame({
‘A’:[1,2,3,4,5],
‘D’:list(‘强仔真的棒’),
‘E’:list(‘是不是真的’),
},index=[‘a’,’b’,’c’,’d’,’e’])
df[‘B’] = df[‘A’] ** 2
df[‘C’] = df[‘A’]+df[‘B’]
df[‘F’] = df[‘D’]+df[‘E’]
df
fig,ax = plt.subplots(facecolor= ‘white’)
ax.set_title(‘我是标题’,fontsize=40,color=’r’)
ax.set_xlabel(‘X轴’,fontsize=24,color=’g’)
ax.set_ylabel(‘y轴’,fontsize=24,color=’b’,rotation=0,labelpad=30)
ax.set_xlim([-1,5])
ax.set_ylim([0,25])
ax.xaxis.set_major_locator(plt.MultipleLocator(2))
ax.xaxis.set_minor_locator(plt.MultipleLocator(0.5))
ax.yaxis.set_major_locator(plt.MultipleLocator(10))
ax.yaxis.set_minor_locator(plt.MultipleLocator(2))
ax.plot(df[‘A’],df[‘B’])
plt.figure(facecolor=’white’,
figsize=(6,4),
dpi =100)
plt.rcParams[‘font.family’] = [‘Arial Unicode MS’]
plt.rcParams[‘axes.unicode_minus’] = False
plt.title(‘我是标题’,fontsize=40,color=’r’)
plt.xlabel(‘X轴’,fontsize=24,color=’g’,labelpad=30)
plt.ylabel(‘y轴’,fontsize=24,color=’b’,rotation=0,labelpad=30)
plt.xlim([-1,5])
plt.ylim([0,25])
plt.gca().xaxis.set_major_locator(plt.MultipleLocator(2))
plt.gca().xaxis.set_minor_locator(plt.MultipleLocator(0.5))
plt.gca().yaxis.set_major_locator(plt.MultipleLocator(10))
plt.gca().yaxis.set_minor_locator(plt.MultipleLocator(2))
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.grid(color=’y’)
plt.plot(df[‘A’],df[‘B’])