代码一定要练的习,多写写就会了

模块安装
1.pandas模块安装

  1. 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)

  1. 3.数据分析
  2. 1.分析的问题:
  3. 1.数据分析师岗位的整体薪酬如何?——————————————薪酬分布
  4. 2.数据分析师岗位对工作经验的要求如何?——————————工作经验分布
  5. 3.不同的工作经验的薪酬分布情况?——————————————工作经验和薪酬的关系
  6. 4.哪些城市对数据分析师的需求更多?————————————城市分布
  7. 5.不同城市的薪酬分布情况?——————————————————城市和薪酬的关系
  8. 与薪酬、工作经验、城市这三个参数相关
  9. 2.描述性统计特征x
  10. 0.各种视图应用场景:
  11. 1.条形图能展示分类数据的频数,也能对比差异;
  12. 2.饼状图则能更直观的呈现出数据所占整体的比例结构情况
  13. 3.直方图呈现的是数据的频数和整体情况,
  14. 4.箱型图则能直观的反映数据离散的分布情况。
  15. 1.薪酬分布
  16. 1.数据的基本特征
  17. df.describe()
  18. 数据分析师被公司提供的最低薪酬大约集中在6000元左右
  19. 数据分析师被公司提供的最高薪酬大约集中在10000元左右
  20. 2.创建平均值
  21. mean = (min + max )/2
  22. df['新列名'] = (df['列名1'] + df['列名2'])/2
  23. 查看前几行
  24. df.head()
  25. 单位转化
  26. df['列名'] = df['列名']/1000
  27. 3.查看频数
  28. a = df['列名']value_counts()
  29. 4.直方图可视化
  30. 设置画布大小
  31. fig,ax = plt.subplots()
  32. fig.set_size_inches(10,12)
  33. sns.distplot(df['列名'],kde=False,color='#6c80d1')
  34. 5.结论
  35. 真正极低薪酬的人数,要少于极高薪酬的人数
  36. 2.工作经验分布
  37. 1.查看频数
  38. b = df['列名']value_counts()
  39. 2.分析数据类型
  40. 1.series类型
  41. 2.找到x,y轴的参数
  42. 3.s.index
  43. s.values
  44. 2.条形图可视化
  45. 设置文字
  46. sns.set(font='Source Han Sans CN')
  47. sns.barplot(x=gongzuo.index,y=gongzuo.values,palette=['#6c80d1', '#a795f1', '#51aae9','#7dcc90'])
  48. 3.结论
  49. 招的人最多的就是萌新,过来才是1-3年的,而对于3-5年的,招得相比较而言就更少,当然5年以上的
  50. 3.工作经验和薪酬的关系
  51. 1.查看不同工作经验的薪资情况
  52. c = df[df['列名']=='无经验']
  53. c.describe()
  54. 2.箱型图可视化
  55. sns.boxplot(x= '列名', y = '列名',data = df,
  56. palette=['#6c80d1', '#a795f1', '#51aae9',
  57. '#7dcc90'])
  58. 3.结论
  59. 从“无经验”到“1-3”年,薪资的上升不是很大(两个箱体的高度相差不大),
  60. 但当经验“1-3”变成“3-5”,和“3-5”变到“5年以上”时,
  61. 整体薪资的涨幅还是很多的(箱体的高度相差很多)
  62. 4.城市分布
  63. 1.频数分布
  64. d = df['列名']value_counts()
  65. df = df.head(10)
  66. 2.条形图可视化
  67. sns.barplot(x= workcity10.index, y = workcity10.values)
  68. 3.结论:
  69. 南方比北方提供的数据分析师岗位更多
  70. 5.城市和薪酬的关系
  71. 1.选取城市
  72. e = df[df['列名'].isin(['深圳','杭州','北京','上海','南京','广州'])]
  73. 2.查看每个城市描述信息
  74. f = df[df['列名']=='数据名']
  75. 3.箱型图可视化
  76. fig,ax = plt.subplots()
  77. fig.set_size_inches(10,12)
  78. sns.boxplot(x='工作地点',y='平均工资',data=chengshi_xinzi)
  79. 结论:
  80. 北京平均薪酬的中位数最高,约18k-20k
  81. 其次是上海约15k-17k
  82. 广州深圳则在9k-11k之间;
  83. 六个城市中,杭州南京偏低约7k-8k之间。
  84. 待遇最好的城市是北京,其次是上海,
  85. 而对该岗位需求量最大的深圳
  86. (之前的频数分布表得出:深圳 559第一,杭州第二111)反而薪酬集中在10k左右

实际案例.csv

完整代码,尝试先对着大纲写再看完整代码

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’])