爱美容
当前位置: 首页 美容百科

数据分析的方法及步骤(数据分析之数据载入及初步观察)

时间:2023-06-29 作者: 小编 阅读量: 1 栏目名: 美容百科

了解一下’.tsv’和’.csv’的不同,如何加载这两个数据集?read_csv和read_table区别在于默认分隔符的不同,read_table的默认分隔符为"\t",可通过sep参数调整TSV与CSV的区别:1)从名称上即可知道,TSV是用制表符作为字段值的分隔符;CSV是用半角逗号(’,’)作为字段值的分隔符;2)IANA规定的标准TSV格式,字段值之中是不允许出现制表符的。

第一章:第一节数据载入及初步观察

通过对实际数据的探索,掌握python常用的数据分析操作

数据下载

本次课程使用的数据来源于Kaggle:数据集下载 https://www.kaggle.com/c/titanic/overview

导入工具包

import pandas as pdimport numpy as np#本人使用Anaconda集成的python开发环境,不需要再安装相应包,如果需要安装可以使用 pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple 安装pandas 将自动安装numpy123

导入数据使用相对路径载入数据

train_df=pd.read_csv("train.csv")train_df.head(5)12

使用绝对路径载入数据

我使用安装Anaconda的服务器进行操作,所以我并不知道上传的数据文件的真实路径需要使用一些命令来查看当前目录

方法1

使用os包

import osos.getcwd()12

方法2

使用ipython的魔术方法

!pwd1

上述两种方法都可以使用,但是os.getcwd()可直接用于参数传递,所以我选择方法1

train_df=pd.read_csv(os.getcwd() '/train.csv')train_df.head(5)123

思考

知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下’.tsv’和’.csv’的不同,如何加载这两个数据集?read_csv和read_table区别在于默认分隔符的不同,read_table的默认分隔符为"\t",可通过sep参数调整

TSV与CSV的区别:1)从名称上即可知道,TSV是用制表符(Tab,’\t’)作为字段值的分隔符;CSV是用半角逗号(’,’)作为字段值的分隔符;2)IANA规定的标准TSV格式,字段值之中是不允许出现制表符的。

每1000行为一个数据模块,逐块读取

df_chunk=pd.read_csv("train.csv",chunksize=1000)1

DataFrame 对于大数据的读取、操作需要消耗大量的内存、IO,分块读取可以减少资源消耗,提高效率

将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]

#方法1train_df=pd.read_csv("train.csv",names=['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口'],index_col="乘客ID")#方法2df1=pd.read_csv('train.csv')df1.rename(columns={'Survived':'是否幸存', 'Pclass':'仓位等级', 'name':'姓名'}, inplace = True)#另一种修改列名的方法,可以修改部分或者全部df1.head()#方法3df2=pd.read_csv('train.csv')df2.columns=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口']#该方法的新列名必须要与原列名一一对应df2.head()1234567891011

初步观察

导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等

查看数据的基本信息

train_df.info()'''<class 'pandas.core.frame.DataFrame'>Index: 892 entries, PassengerId to 891Data columns (total 11 columns):是否幸存892 non-null object乘客等级(1/2/3等舱位)892 non-null object乘客姓名892 non-null object性别892 non-null object年龄715 non-null object堂兄弟/妹个数 892 non-null object父母与小孩个数 892 non-null object船票信息892 non-null object票价892 non-null object客舱205 non-null object登船港口890 non-null objectdtypes: object(11)memory usage: 83.6KB'''12345678910111213141516171819

观察表格前10行的数据和后15行的数据前10行

train_df.head(10)train_df.iloc[:10,:]12

后15行

train_df.tail(15)train_df.iloc[-15:,:]12

判断数据是否为空,为空的地方返回True,其余地方返回False

train_df.isnull()1

保存数据

将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv

train_df.to_csv("train_chinese.csv",sep=',',encoding='utf-8')12

知道你的数据叫什么任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子

#写入代码Se1=pd.Series({'a':1,'b':2,'c':3})Se1#Seriesdf_1=pd.DataFrame({'a':[1,2],'b':[3,4],'c':[5,6]})df_1#DataFrame12345

任务二:根据上节课的方法载入"train.csv"文件

df=pd.read_csv("train.csv")1

任务三:查看DataFrame数据的每列的项

df.columns'''Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp','Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],dtype='object')'''123456

任务四:查看"cabin"这列的所有项 [有多种方法]

df['Cabin'].head(3)df.Cabin.head(3)df.loc[:,"Cabin"].head(3)df.iloc[:,10].head(3)df.ix[:,"Cabin"].head(3)12345

任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

test_1=pd.read_csv("test_1.csv")test_1.head()12

任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素

df.drop(['PassengerId','Name','Age','Ticket'],axis=1)#设置inplace=True,则永久删除上述几列12

对比任务五和任务六,是不是使用了不一样的方法(函数),如果使用一样的函数如何完成上面的不同的要求呢?可以使用索引的方式实现drop功能

df.loc[:,['Survived','Pclass','Sex','SibSp','Parch','Fare','Cabin','Embarked']]1

筛选的逻辑任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

df[df['age']<10]1

任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

midage=df[(df['age']>10)&(df['age']<50)]1

任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来

midage.reset_index(drop = True)#重新设置索引因为切片可能会造成索引缺失midage.loc[100,['Pclass','Sex']]midage.loc[[100],['Pclass','Sex']]#两种显示效果不一样1234

任务四:将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

midage.loc[[100,105,108],['Pclass','Name','Sex']]12

任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

midage.iloc[[100,105,108],[2,3,4]]1

探索性数据分析导入numpy、pandas包和数据

import numpy as npimport pandas as pddf1=pd.read_csv("train_chinese.csv")123

任务一:利用Pandas对示例数据进行排序,要求升序

#生成示例数据a=pd.DataFrame(np.arange(8).reshape(2,4),index=[2,1],columns=['d','c','b','a'])#构建的DataFrame中的数据根据某一列,升序排列a.sort_value(by='a',ascending=True)#让行索引升序排序a.sort_index()#让列索引升序排序a.sort_index(axis=1)#让列索引降序排序a.sort_index(axis=1,ascending=False)#让任选两列数据同时降序排序a.sort_values(by=['a', 'c'])123456789101112

任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从这个数据中你可以分析出什么?

df1.sort_values(by=['票价','年龄'],ascending=False).head(20)1

排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例,那么我们后面是不是可以进一步分析一下票价和存活之间的关系,年龄和存活之间的关系呢?当你开始发现数据之间的关系了,数据分析就开始了。

年龄

df1['年龄']=df1['年龄'].map(lambda x: float(x))df1.sort_values(by='年龄',ascending=True).head(20)df1.sort_values(by='年龄',ascending=False).head(20)123

票价

df1['票价']=df1['票价'].map(lambda x: float(x))df1.sort_values(by='票价',ascending=False)12

#写下你的思考#数据中年龄排序出现按9>80>8>74…的情况,因为“年龄”列的数据目前的类型为字符串类型,需要手动转化为float类型#年龄越小存活概率越高,年龄越大存活概率越低

任务三:利用Pandas进行算术计算,计算两个DataFrame数据相加结果

frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3), columns=['a', 'b', 'c'], index=['one', 'two', 'three'])frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3), columns=['a', 'e', 'c'], index=['first', 'one', 'two', 'second'])#加frame1_aframe1_b#减frame1_a - frame1_b#乘frame1_a * frame1_b#除frame1_a / frame1_bframe1_a.div(frame1_b)123456789101112131415

任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?

#代码def jiatingrenshu(x,y):return int(x) int(y)df1['家族人数']=df1.apply(lambda x:jiatingrenshu(x['堂兄弟/妹个数'],x['父母与小孩个数']),axis=1)max(df1['家族人数'])12345

任务五:学会使用Pandas describe()函数查看数据基本统计信息

frame2 = pd.DataFrame([[1.4, np.nan],[7.1, -4.5],[np.nan, np.nan],[0.75, -1.3]], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])frame2.describe()"""onetwocount3.0000002.000000mean3.083333-2.900000std3.4936852.262742min0.750000-4.50000025%1.075000-3.70000050%1.400000-2.90000075%4.250000-2.100000max7.100000-1.300000"""1234567891011121314151617

任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?

df1['票价'].describe()'''count891.000000mean32.204208std49.693429min0.00000025%7.91040050%14.45420075%31.000000max512.329200Name: 票价, dtype: float64'''#最贵的票价高达512#有人使用免费票#75%的人购买的票价小于总体样本的均值123456789101112131415

总结

对于导入的数据一定要注意其数据类型,因类型的限制可能很多统计指标无法实现

    推荐阅读
  • 听觉的秘密(听觉世界里的潜规则)

    鸡尾酒会效应说起大脑的能力强,至今,大脑在处理声音方面的一个功能还在让所有科学家惊叹,这个功能的神奇机制至今也还是个谜。这种功能有个有趣的名字,叫做“鸡尾酒会效应”。动物也展现鸡尾酒会效应最近的研究发现,很多动物的听觉系统也具有这种鸡尾酒会效应的功能,例如鸟儿们经常群集一起,叽叽喳喳开大会,但它们往往只是回应自己伴侣的叫声,显然它们能够从嘈杂的叽喳声中分辨出伴侣的声音。

  • 淄博环保供热第一供热分公司供暖范围在哪?

    淄博环保供热第一供热分公司供暖范围在哪?供暖小常识之暖气不热的具体排气方法:每个暖气片上都有一个手动排气阀,用户可轻轻拧松手动排气阀,听到排气声立即停止扭动排气阀,若见有稳定水流流出可将排气阀轻轻拧紧。排过气后,若暖气片还是不热,应请专业人员查明原因,帮助解决问题,切不可盲目放水。

  • 窗帘是什么材质 高精密窗帘是什么材质

    透明类的丝质面料,手感柔软、纹路流畅,用做窗帘,既浪漫又高雅。丝质窗帘最大的特点也是最明显的缺点就是价格昂贵,难以清洗。古代太后或皇后临朝听政,殿上用竹帘遮隔,则称为垂帘听政。

  • 普惠性幼儿园能否增加收费项目(普惠性幼儿园覆盖率将超过80)

    普惠性幼儿园覆盖率将超过80日前,陕西省教育厅和陕西省发改委联合印发了《陕西省教育事业发展“十四五”规划》,其中明确提出要强化学前教育规划建设,将新增公办园300所,公办园占比和公办园在园幼儿占比保持50%以上,普惠性幼儿园覆盖。

  • 林清玄人生感言(承担是生命里最美的东西)

    更令人赞叹的是,那个煮面的老板还边与顾客聊着闲天。对于孩子突如其来的谈话,我感到莞尔,并且立即坦然承认,我一定输给卖面的人。他们不用言语,而以动作表达了对生命的承担。在古印度人传统的观念里,认为只要是两条河交会的地方一定是圣地,这是千年智慧累积所得到的结论。当然,在我们以神圣的心面对世界时,自己就有了承担,也就成为值得敬佩的人之一。事实上,所有的比较都是一种执著。

  • 白花蛇舌草的功效与作用(白花蛇舌草的功效与作用效)

    白花蛇舌草一年生小草本,生于潮湿的田边、沟边、路旁和草地。白花蛇舌草药材全体扭成团块,灰绿色至灰棕色。白花蛇舌草补充信息:炮制:取原药材除去杂质,抢水洗净,稍润,切段,干燥。白花蛇舌草适合人群:孕妇慎用白花蛇舌草的功效和作用白花蛇舌草味苦、微甘,性微寒;入肺、肝、胃经;具有清热利湿,解毒抗癌的功效;主治肺热喘咳,咽喉肿痛,湿热黄疸,热淋涩痛,水肿,痢疾肠炎,肠痈,痈肿疮疡,毒蛇咬伤,癌肿。

  • 苏州西站长途汽车站停运通知(苏州市区79班汽车客运班线停班)

    苏州汽车客运总站表示,将给因台风造成停班班次的旅客办理免费退票。昆山客运中心站正密切关注“利奇马”的走向及发展趋势,动态调整班次开行方案并及时通知广大旅客相关停班信息,确保旅客安全出行。有去机场、高铁站、火车站换乘的旅客请适当增加出行时间,以免受台风影响耽误行程。如因天气原因导致班次停运,乘车人可在当天携带本人身份证持车票到车站窗口办理全额退票。

  • 二氧化碳用途(二氧化碳的用途)

    二氧化碳是我们很熟悉的一种气体,大量的二氧化碳会导致温室效应的加剧。学过生物的同学都知道,植物的光合作用是需要二氧化碳作为原料的。在很多农场里面,也会放置产生二氧化碳的仪器,提高农作物的产量。二氧化碳灭火器可用于扑灭图书、重要仪器的失火,因为扑灭后没有任何的残留物质。其实这种效果都是由人为用干冰造成的。以及人工降雨也都会用到二氧化碳等,用途广泛。

  • 桂林社保卡要自己去银行办吗(桂林社保卡要自己去银行办吗现在)

    制卡人1寸白底免冠深色上衣证件纸质彩色照片1张。如委托代办,需提供受委托人的居民身份证原件。填写社会保障卡制卡申领表。社会保障卡启用1.办理条件本统筹区已领取社会保障卡,但未激活社保功能的参保人员。广西区内转入已经持有社会保障卡的参保人员。

  • tvb五花是谁(深扒TVB五朵金花)

    根据港媒报道,杨怡与胡定欣在剧组拍摄期间已经有了两女相争的苗头。根据当时报道,吴卓羲公开表示,自己与徐子珊仅拍摄了一天电视剧,便成为了男女朋友,使得二人被视为最佳荧幕情侣。在此期间,黄宗泽与五花们合作过多部作品,荧幕情侣也是组合了一对又一对。此外,同样家庭事业双丰收的还有勤恳劳模杨怡。然而,现实生活中,与杨怡定情的却是在剧中饰演马国明弟弟的罗仲谦。杨怡仍然认定罗仲谦,并于2016年10月于英国完婚。