您的位置:首页 > 其它

数据分析入门基础知识——学习笔记

2018-11-26 22:30 465 查看
  1. 认识数据与了解数据分析过程
  2. 描述统计学基础
  3. python基础中的基础操作

1.认识数据与了解数据分析过程
(1)认识数据
现实世界中的数据是多种多样的,已不再单纯是数字了,比如图像、音频、视频等可直接作为数据源。学生的成绩单中的各科分数是定量数据(quantitative),性别男女是分类数据(label、Categorical)。
几只狗狗、几份报纸、是离散型数据,而身高、体重是连续性数据。成绩等级A+、A-、B+、B-是定序变量,有一定的顺序性; 再如狗狗品种:沙皮狗、牧羊犬、二哈等是定类变量,无顺序性。
综上,数据可以按下图简单分类:

(2)数据分析过程(步骤):
数据获取–>数据预处理(清洗等)–>提问(根据数据能提什么问题?)–>特征工程(分析数据背后隐藏的秘密)–>得出结论或做出预测–>结果分享(报告、PPT等形式)
2. 描述统计学基础
通常在分析数值型数据时,我们经常关心以下四个方面:
Centor(集中趋势)、Spread(离散程度)、Shape(数据维度、大小、数据分布形状)、Outliers(异常值、离群值)
(1)集中趋势
均值中位数(先排序)、四分数众数(可以有多个)
并不是均值就能更好的描述数据的集中趋势。
(2)离散程度
方差(累计量)、标准差(消除方差的平方所引起的量纲的平方),表示数据的稳定程度,var越小,数据稳定性越好。
此外还有最值极差来看数据的离散情况(全距),最大值与最小值的差距,最值是否为异常值等。
变异系数(CV):标准差/均值:用来客观比较两组数据的离散程度
(3)Shape(数据分布)
*高斯分布(正态分布)
指数分布
相关性连续数据的统计量,范围:[-1,1]
pearson相关性系数 (类似于夹角余弦):
公式:pearson=(x11-xmean)(y11-ymean)+(x21-xmean)(y21-ymean)/[sqrt((x11-xmean)^2+ (y11-ymean)^2)+ sqrt((x21-xmean)^2 +(y21-ymean)^2))]
其中x=transpose([x11,x21]);y=transpose([y11,y21]);

*描述数据混乱程度的统计量
信息熵定义:Entropy(datasets)=Σpilog2pi
熵越大,数据越混乱,越不稳定。

*卡方分类型数据间相关性的统计量,yes or not


上面第一个表格为调查的110名男同胞和90名女同胞的化妆情况;第二个表格是假设化妆与性别无关(即性别与化妆师独立分布,不带任何“有色眼镜”)时的情况(一半一半),于是卡方公式可按下式计算:

查卡方表,若卡方数值越大,则说明“不相关”的概率越小,即本例中的化妆与性别是相关的。
(4)Outliers
去除或修改数据的异常值(数据清洗)是进行分析数据之前的必要步骤。
3. python基础中的基础操作及jupyter notebook的快捷键
(1)读取csv文件、excel文件

import pandas as pd
csv_data=pd.read_csv(r'文件名.csv')  #r的作用可帮助解决文件路径中含有中文时出错的情况
excel_data0=pd.read_excel(r'文件名.xlsx',sheet_name=0)

(2)查看数据的基本信息

data.info() #查看数据类型、大小、样本数目,列名、是否有NaN
data.head()#查看前5行数据(0-4)
data.tail() #查看后5行数据
data.columns#查看列名(属性)有哪些,均为str类型
data.describe()#查看描述性统计信息,总数、最值、均值、标准差、四分数等等
dfdata.isnull().sum() #查看数据缺失个数
dfdata[column].fillna(dfdata[column].mean(), inplace=True) #用列平均值填充该列的缺失值
#返回数据最大值、最小值所在的行(只返回第一次遇到最小/大值的索引)
dfdata[column].argmax()
dfdata[column].argmin()
#返回某列数据满足某个条件的索引值
dfdata[dfdata['year'] == 2018].index.tolist()
dfdata[dfdata['TEMP'] > 20].index.tolist()





这里只截取了前几列数据
(3)dataFrame类型数据操作:增、删、改、查
DataFrame的增删改查基本操作https://blog.csdn.net/zutsoft/article/details/51483710
增加一列数据
import pandas as pd
df_lianjia = pd.read_csv(‘lianjia.csv’)
df_lianjia.head()

比如我们想要增加一列房屋单价的特征PerPrice=Price/Size
只需要:
df_lianjia[‘PerPrice’]= df_lianjia[‘Price’]/df_lianjia[‘Size’]
df_lianjia.head()

(4)将列名中的空格字符替换成下划线(字符串替换)

data.columns = [c.replace(' ','_') for c in data.columns]
(data.columns查看所有列名(特征)

【notebook 快捷键】
shift + Enter 运行当前code cell 或Markdown cell
Alt + Enter 运行当期cell 并在下方插入新的cell
多行注释(多行选中取消注释):【ctrl + /】
(Spider编辑器的多行注释和多行注释取消为:【ctrl + 1】)
在代码行前面加 %% time ,可以直接打印代码运行时间
(5)将分类变量的数值改为字符串(1:Spring; 2:Summer; 3:Autumn; 4:Winter)——使用.map({‘原字符串’:‘新字符串’})

上面的表格为上海市2010-2015年的PM2.5数据的前5行,‘season’季节用1,2,3,4分别代替(这样也方便后面处理),不过这里练习下如何将1,2,3,4改成对应的季节。

Shanghai_data['season'] = Shanghai_data['season'].map({1:'Spring',2:'Summer',3:'Autumn',4:'Winter'})
Shanghai_data['season']

(6)字符串回顾

字符串一旦给定,不能修改(列表可以任意替换其中的元素进行修改)
如str=‘I am not a good girl!’
str[3] = ’ ’ 这行代码是错的!,不能再赋值给str
但可以应用字符串中的元素。

  • .join() 函数——join 将一个列表作为参数,返回一个由分隔符字符串连接列表元素组成的字符串
  • 如‘\n’.join([‘Please’, “don’t”, ‘go’])
    返回
    Please
    don’t
    go
  • 注意:列表各个元素之间要有逗号,且上面列表中的元素必须是字符串,
    如 name=[‘Please’, “don’t”, ‘go’ ,12]会出错:TypeError: sequence item 2: expected str instance, int found
    (7)print的三种输出:

print(“The number of row in this dataset is: %d” % len(df.index))
print("The number of row in this dataset is: “, len(Sdf.index))
print(” The number of row in this dataset is: {} ".format(len(df.index)))
(8)groupby用法:
个人理解这个函数主要就是:
先进行分组(比如grade rating: ‘good’的数据100条,‘very good’的数据有35条,‘bad’的数据有56条;grades有80分、90分…),可以按照‘grade rating’ 归类(聚合)然后计算’good’对应的grades均值,‘very good’的均值、‘bad’的均值(最值)等。
返回的数据类型为series(同时相当于字典和数组,有索引,有值,还可以对值进行数学运算),使用**.to_frame()**即可转成dataframe类型
下面是例子

import pandas as pd
df = pd.DataFrame({'key1':['a','a','b','b','c'],'data1':[90,85,70,78,98],'key2':['good','good','bad','bad','excellent'],'data2':[1.0,2.3,5.6,7.0,19]})
grouped1 = df['data1'].groupby(df['key1']).mean().sort_values(ascending=False)
group1 = grouped1.to_frame()
grouped2 = df['data2'].groupby(df['key2']).mean().sort_values(ascending=False)
group2 = grouped2.to_frame()

下面是上面程序的运行结果:

以上所有内容是我最近两天的学习笔记,内容杂乱。。。。写一遍,就记一遍吧。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐