Python 数据分析day_1:认识Notebook,及NumPy , Pandas 和 Matplotlib基本使用方法
python 数据分析 day2 数组的运算及矩阵
python 数据分析 day3 矩阵及利用线性回归处理boston数据集
python 数据分析 day4 pandas 之 Series
python 数据分析day4 Pandas 之 DataFrame
1. 二维数组创建
2. 字典创建
3. JSON创建
4. 读取Excel或CSV文件创建
读取CSV文件
读取Excel文件
5. 读数据库(MySQL)创建
形状
维度
行索引(标签)
列索引(标签)
所有的值—> 二维数组
元素的个数
3.1汇总方法
info()方法
head() / tail()方法
describe()方法
3.2处理索引
set_index() / reset_index()方法:设置索引/重置索引,两个相当于是逆操作。
设置索引(用指定的列充当索引)
多级索引
重置索引 (相当于是set_index方法的逆操作)
reindex()方法:调整索引的顺序。
调整列索引
调整行索引
wps的的官网下载网站(wps下载电脑版旧版本安装教程)
rename()方法:修改索引的名字。
给列索引(标签)改名字
给行索(标签)引改名字
1.索引和切片
获取指定的列
或者
获取多个列(通过花式索引)
获取行
获取多个行(通过花式索引)
切片操作
获取指定单元格的值
修改单元格的值
2.数据筛选
布尔索引
数据集:
& – 与 – 而且
| – 或 – 或者
非 – 变反
query()方法
使用query方法通过指定的表达式筛选数据
filter()方法
数据准备
筛选指定的列,类似于花式索引
筛选以字母e结尾的列
筛选以字母e结尾的行
筛选行索引中有bbi的行
补充:添加一列/行
添加列
添加一行:两种方式(列表,字典)
随机抽样
随机抽样(指定样本数量)
随机抽样(指定样本的比例)
练习:科比投篮数据分析
数据准备
科比使用得最多的投篮动作(action_type + combined_shot_type)是什么?
科比职业生涯交手最多的队伍是哪支球队?
科比职业生涯总得分(不包括罚篮)是多少?
三. 重塑数据
1.merge函数 (详细请看此网站)
merge函数的参数
left – 左表
right – 右表
how – 连接方式(inner / outer / left / right)
on – 连表字段(left_on / right_on)
获取数据:
将学生表和学院表合并:
练习1:查询学生的姓名、课程的名称和考试成绩。
查询学生表
查询记录表wps office 的官方的下载的网站怎么找
查询课程表
合表:
选课记录表和学生表合并成临时表
临时表和课程表合并
提取结果:
方法一:花式索引直接提取
方法二:通过reindex调整索引获得需要的列
output:
练习2:查询每个学生的姓名和选课的数量。(连接时需要外连接,需要使用pd.groupby())
先合表(student_df,record_df)外连接(因为有人没选课,使用内连接会导致改数据缺失),空值用0 填充 (否则计算课程数量时会导致数据缺失)
分组求课程数量和
2.concat函数
用concat函数拼接多个DataFrame的数据
ignore_index=True表示忽略原来的索引
axis参数的默认值是0,表示在0轴上进行拼接
数据准备:三个表
小宝剑大药房(高新店)2018年销售数据
表格 1购药时间社保卡号商品编码商品名称销售数量应收金额实收金额2018-03-05 星期六0010077400828236701清热解毒口服液12824.642018-03-07 星期一0010077400828236701清热解毒口服液51401122018-03-09 星期三0010079843728236701清热解毒口服液61681402018-03-15 星期二0010031328528236701清热解毒口服液25649.282018-03-15 星期二00100703428236701清热解毒口服液25649.282018-03-15 星期二0010712328236701清热解毒口服液51401122018-03-20 星期日0011668828236701清热解毒口服液61681402018-03-22 星期二0010066351928236701清热解毒口服液12828 小宝剑大药房(犀浦店)2018年销售数据
表格 1购药时间社保卡号商品编码商品名称销售数量应收金额实收金额2018-04-07 星期四0011652628236701清热解毒口服液61681402018-04-13 星期三0011005128236701清热解毒口服液256562018-04-22 星期五0010344628236701清热解毒口服液61681402018-05-01 星期日0010070313828236701清热解毒口服液61681402018-05-05 星期四0010031328528236701清热解毒口服液51401122018-05-05 星期四0010070343428236701清热解毒口服液25649.282018-05-05 星期四0010073660228236701清热解毒口服液12824.64 小宝剑大药房(新津店)2018年销售数据
表格 1购药时间社保卡号商品编码商品名称销售数量应收金额实收金额2018-01-01 星期五001616528236701强力VC银翘片682.8692018-01-02 星期六001616528236701清热解毒口服液12824.642018-01-06 星期三0012602828236701感康216.8152018-01-11 星期一0010070343428236701三九感冒灵128282018-01-15 星期五00101554328236701三九感冒灵82242082018-01-20 星期三0013389528236701三九感冒灵128282018-01-31 星期日00101464928236701三九感冒灵256562018-02-17 星期三0011177328236701三九感冒灵5149131.122018-02-22 星期一0010065687828236701三九感冒灵129.826.22 读取三个表中数据
使用concat 将三个表的数据汇总为一个表
方法一:
购药时间社保卡号商品编码商品名称销售数量应收金额实收金额02018-03-05 星期六10077400828236701清热解毒口服液128.024.6412018-03-07 星期一10077400828236701清热解毒口服液5140.0112.0022018-03-09 星期三10079843728236701清热解毒口服液6168.0140.0032018-03-15 星期二10031328528236701清热解毒口服液256.049.2842018-03-15 星期二100703428236701清热解毒口服液256.049.2852018-03-15 星期二10712328236701清热解毒口服液5140.0112.0062018-03-20 星期日11668828236701清热解毒口服液6168.0140.0072018-03-22 星期二10066351928236701清热解毒口服液128.028.0082018-04-07 星期四11652628236701清热解毒口服液6168.0140.0092018-04-13 星期三11005128236701清热解毒口服液256.056.00102018-04-22 星期五10344628236701清热解毒口服液6168.0140.00112018-05-01 星期日10070313828236701清热解毒口服液6168.0140.00122018-05-05 星期四10031328528236701清热解毒口服液5140.0112.00132018-05-05 星期四10070343428236701清热解毒口服液256.049.28142018-05-05 星期四10073660228236701清热解毒口服液128.024.64152018-01-01 星期五1616528236701强力VC银翘片682.869.00162018-01-02 星期六1616528236701清热解毒口服液128.024.64172018-01-06 星期三12602828236701感康216.815.00182018-01-11 星期一10070343428236701三九感冒灵128.028.00192018-01-15 星期五101554328236701三九感冒灵8224.0208.00202018-01-20 星期三13389528236701三九感冒灵128.028.00212018-01-31 星期日101464928236701三九感冒灵256.056.00222018-02-17 星期三11177328236701三九感冒灵5149.0131.12232018-02-22 星期一10065687828236701三九感冒灵129.826.22
方法二:这种方法更好(需要掌握)
1.数据清洗
数据准备
df
缺失值处理 —> dropna() / fillna()
dropna() : 删除有缺失值的数据
axis=0 —> 默认 —> 遇到空值就删除对应的行
axis=1 —> 遇到空值就删除对应的列
把DataFrame中所有的空值都处理成0
只处理某一列的空值
重复值处理 —> duplicated() / drop_duplicates()
duplicated()方法会返回一系列的布尔值表示是否重复,True:无重复;False:有重复
drop_duplicates可以删除重复值,默认保留第一项
练习:找主管不包括老板(先获取mgr的索引(无重复),然后根据索引找到主管)
1.获取mgr的索引
方法一:unique()方法 先去掉空值,转成int类型,再去重
方法二:drop_duplicates() 方法 先取mgr字段的值,再去重
使用’keep’参数,重复值的选择行为
可以改变。值’first’保留每一个的第一次出现
重复条目的集合。keep的默认值是’first’
方法三:先根据mgr字段对DataFrame做去重,然后再获取mgr字段的值
方法四:(方法三的分解动作)
先找到重复的元素,获取它们的索引
根据重复元素的索引删除这些行,再获取不重复的数据
2.用花式索引的方式找出主管
异常值处理(用指定的值替换掉原来的值 replace())
练习:
读取2018年北京积分落户数据
查看公司名字有“华为”的公司
通过replace方法指定正则表达式将“北京华为技术研究所”和“华为技术北京研究所”统一替换为“华为”
2.wps的的官网最新的下载的地方是多少数据删除
使用drop方法删除指定的行或列
index指定行索引,columns指定列索引
删除行
数据:
方法一:根据index这一索引列来删除行(注意drop()中的inde是参数列索引 )
方法二:根据eno删除列
删除列
用Python中删除字典键值对的方式删除列(注意删除后就真的删除了)
或者:pop() 能达到同样的效果(注意删除后就真的删除了)
或者:使用drop方法删除指定的行或列(注意删除后就真的删除了)
output:
误删除后想要恢复index列
reset_index()恢复列
或者:直接添加一列,再通过reindex()调整列的顺序
3.数据转换
apply() / transform() / applymap()方法
关于apply()和applymap()方法的区别请看这里
每个员工的工资增加1000元:(使用apply())
数据准备:
用开方乘以10的方法处理考试成绩:使用applymap()
使用transform方法将多个函数作用到数据上
字符串向量
核心操作:拆分 / 合并 / 匹配 / 替换 / 抽取
方法:大小写 / 转类型 / 格式化
数据准备
将数据序列中的字符串变成大写:
通常方法:apply()
字符串向量法:用字符串向量,再用字符串的相关方法解决
output:
0 APPLE
1 PITAYA
2 LITCHE
3 DURIAN
4 WAXBERRY
5 BLUEBERRY
dtype: object
其他练习:
补充:UUID方式产生数据ID的字段
在很多商业项目中,数据库表的主键不能够使用自增长编号,因为在有并发insert操作时,自增长编号的方式会影响性能。所以,很多产品中会选择使用UUID(Universal Unique IDentifier)的方式来产生数据的ID字段。
生成分布式环境(多机环境)下全局唯一标识符的算法比较多,现在的项目中用的比较多的Snowflake算法(雪花算法那)。
练习:读取拉勾网上招聘数据,找出数据分析岗位的平均工资是多少?
获取数据及查看信息:
取前三个数据用来观察
判断下_id列有无重复
方法一,获取不重复的数据,再获取数据量的大小
方法二:直接获取不重复的数据的数量
第一列没有用,设置’_id’为索引
筛选出数据分析的岗位:
从工资中抽取出工资的下限值和上限值
转成整数后,取上限值和下限值的平均值(axis=0),之后再取平均(axis=1)
时间日期向量
date, time, year, month, day, hour, minute, second, microsecond, nanosecond, dayofweek, dayofyear, weekofyear, daysinmonth, quarteris_xxxround() / ceil() / floor()
数据准备:
使用to_datetime()函数将字符串处理成时间日期
通过时间日期向量获取年份和月份
0 – 星期一, 1 – 星期二,……,6 – 星期日
python datetime模块的datetime库
将生日换算成年龄
1.获取描述性统计信息
练习1:计算每个城市的数据分析岗位平均薪资
知识点:groupby()方法
找到岗位名称的字符串向量中的包含‘数据分析’项的表
处理salary列,利用salary的str向量中的extract方法,通过正则表达式提取工资范围,求取均值作为新的salary列
根据城市分组,获取工资求均值
画图:
plt.text() 常用参数说明:
练习2:
知识点:分组聚合操作(# SAC —> Split – Aggregate – Combine)
数据准备:
数据替换(*处理数据常用方法,重要):
统计男女学生的人数(用性别分组再使用count聚合)
统计每个学院男女学生的人数(多级索引)
此时该数据序列的索引为:
使用agg()方法一次性执行多个聚合函数
数据准备:
enoenamejobmgrsalcommdno01359胡 一刀销售员3344.01800200.03012056乔 峰分析师7800.050001500.02023088李莫愁设计师2056.03500800.02033211张无忌程序员2056.032000.02043233丘 处机程序员2056.034000.02053244欧阳锋程序员3088.032000.02063251张翠山程序员2056.040000.02073344黄蓉销售主管7800.03000800.03083577杨过会计5566.022000.01093588朱九真会计5566.025000.010104466苗人凤销售员3344.025000.030115234郭靖出纳5566.020000.010125566宋远桥会计师7800.040001000.010137800张三丰总裁NaN90001200.020
maxminmeanptpdno10400020002675.000000200020900032004471.428571580030300018002433.3333331200
2.排序(sort_values() )和Top-N( nlargest() 和 nsmallest() )
排序算法看这里
排序:sort_values()
enoenamejobmgrsalcommdno137800张三丰总裁NaN90001200.02012056乔 峰分析师7800.050001500.02063251张翠山程序员2056.040000.020125566宋远桥会计师7800.040001000.01023088李莫愁设计师2056.03500800.02043233丘 处机程序员2056.034000.02033211张无忌程序员2056.032000.02053244欧阳锋程序员3088.032000.02073344黄蓉销售主管7800.03000800.03093588朱九真会计5566.025000.010104466苗人凤销售员3344.025000.03083577杨过会计5566.022000.010115234郭靖出纳5566.020000.01001359胡 一刀销售员3344.01800200.030
根据工资降序排列员工表获取前3名数据(这里使用 sort_values() )
Top-N:nlargest()和nsmallest()
透视表和交叉表
透视表:(根据A统计B)它根据一个或多个键对数据进行聚合,并根据行和列上的分组键将数据分配到各个矩形区域中
数据准备:
类别品牌等级A组B组0手机华为A类121手机华为B类242手机华为A类253手机小米B类354手机小米C类365电脑华为A类466电脑华为B类587电脑小米C类698电脑小米A类79
分组查看数据:
使用透视表查看数据:
A组B组类别手机1122电脑2232
透视表的另一种写法:
交叉表:是一种用于计算分组频率的特殊透视图,对数据进行汇总
数据准备:wps 的官网最新的下载入口是多少
类别产地名称数量价格0水果美国苹果55.81水果中国梨55.22水果中国草莓910.83蔬菜中国番茄33.54蔬菜新西兰黄瓜23.05肉类新西兰羊肉1013.16肉类美国牛肉820.5
使用交叉表对数据进行汇总
产地中国新西兰美国总计类别水果2013肉类0112蔬菜1102总计3227
指定统计的值使用交叉表进行汇总
产地中国新西兰美国总计类别水果140519肉类010818蔬菜3205总计17121342
练习1:视频网站运营数据分析。
找出点赞数在100000次以上的视频ID、标题和赞数
数据准备:
对上面的结果进行进行去重,并找出点赞数排前10名的视频信息
首先判断重复数量:
找到点赞数的前10名(nlargest() 或者 sort_values() + head():
nlargest() 方法:
sort_values() + head()方法:
注意这里要先排序,否则可能会把数量大的排除
video_idtitlelikes382737C2z4GqqS5EBTS (방탄소년단) ‘FAKE LOVE’ Official MV561382738547VYOjWnS4cMYChildish Gambino – This Is America (Official V…502345034708ffxKSjUwKdUAriana Grande – No Tears Left To Cry30940216181FlsCjmMhFmwYouTube Rewind: The Shape of 2017 | #YouTubeRe…30935443581kTlv5_Bs8awBTS (방탄소년단) ‘MIC Drop (Steve Aoki Remix)’ Offi…272929235080p8npDG2ulKQBTS (방탄소년단) LOVE YOURSELF 轉 Tear ‘Singularity’…270080022040OK3GJ0WIQ8sj-hope ‘Daydream (백일몽)’ MV267243149976ZfuNTqbHE8Marvel Studios’ Avengers: Infinity War Officia…262566139814aJOTlE1K90kMaroon 5 – Girls Like You ft. Cardi B24885652587TyHvyGVs42ULuis Fonsi, Demi Lovato – Échame La Culpa2376636
根据频道对数据分组,统计出每个频道播放数、赞数、踩数和评论数各自的总和
viewslikesdislikescomment_countchannel_title12 News856431704501MILLION Dance Studio1733477122066127685271theK (원더케이)703566670292084354977720th Century Fox48572239120401921395783372CELLOS20586911198120446……………ワーナー ブラザース 公式チャンネル755014156865581768圧倒的不審者の極み!29441973103782780杰威爾音樂 JVR Music9161284048510424746郭韋辰125944814영국남자 Korean Englishman5888201831725422142198 rows × 4 columns
方法二:利用透视表做
viewslikesdislikescomment_countchannel_title12 News856431704501MILLION Dance Studio1733477122066127685271theK (원더케이)703566670292084354977720th Century Fox48572239120401921395783372CELLOS20586911198120446……………ワーナー ブラザース 公式チャンネル755014156865581768圧倒的不審者の極み!29441973103782780杰威爾音樂 JVR Music9161284048510424746郭韋辰125944814영국남자 Korean Englishman5888201831725422142198 rows × 4 columns
根据上面的结果找出热门频道(“播放数+赞数+评论数”总和最高的前10名)
方法一:sort_values()
方法二:
结果:
[‘ibighit’,
‘Dude Perfect’,
‘jypentertainment’,
‘Marvel Entertainment’,
‘TheEllenShow’,
‘Jimmy Kimmel Live’,
‘WWE’,
‘MalumaVEVO’,
‘Ed Sheeran’,
‘The Tonight Show Starring Jimmy Fallon’]
练习2*:宽表和窄表的装换
数据准备:
useridusername01张三12李四23王五34赵大45孙二
useridusernamemonthuseridye0一月份11一月份22一月份33二月份24二月份45三月份36三月份5
useridusernamemonthye01张三一月份12李四一月份22李四二月份33王五一月份43王五三月份54赵大二月份65孙二三月份
窄表变宽表
month一月份三月份二月份username孙二060张三1000李四1008王五580赵大009
调整列索引:
month一月份二月份三月份username张三1000李四1080王五508赵大090孙二006
monthusername一月份二月份三月份0张三10001李四10802王五5083赵大0904孙二006
宽表变窄表
usernamemonthye0张三一月份101李四一月份102王五一月份53李四二月份84赵大二月份95王五三月份86孙二三月份6
数据分箱:将连续的数据分组到不同的箱子中(连续值的离散化)。
数据准备:
身高1001183.01002174.81003161.01004165.71005178.1……1496174.61497183.41498173.51499174.81500178.8500 rows × 1 columns
身高[140, 145)0[145, 150)4[150, 155)10[155, 160)29[160, 165)79[165, 170)132[170, 175)111[175, 180)94[180, 185)28[185, 190)10[190, 195)2[195, 200)1Name: 身高, dtype: int64
绘制直方图:
练习:2018年北京积分落户数据分析。
1.按照公司对数据进行分组,统计每个组的人数并按照人数的降序排列
2.按照落户积分将人员分组,统计每个组有多少人并绘制柱状图
3.将出生日期转化成年龄,统计不同年龄段有多少人并绘制柱状图
company
北京华为数字技术有限公司 137
中央电视台 73
北京首钢建设集团有限公司 57
百度在线网络技术(北京)有限公司 55
联想(北京)有限公司 48
中国民生银行股份有限公司 40
北京外企人力资源服务有限公司 39
国际商业机器(中国)投资有限公司 39
中国国际技术智力合作有限公司 29
华为技术有限公司北京研究所 27
Name: name, dtype: int64
北京华为数字技术有限公司 137
中央电视台 73
北京首钢建设集团有限公司 57
百度在线网络技术(北京)有限公司 55
联想(北京)有限公司 48
…
北京顶秀科技有限公司 1
北京车客家园网络科技发展有限公司 1
泛美(北京)生物制品有限公司 1
北京携程国际旅行社有限公司 1
北京中科物安科技有限公司 1
Name: company, Length: 3430, dtype: int64
(32, 60)