简介

 import pandas as pd

 # 在数据挖掘前一个数据分析、筛选、清理的多功能工具
'''
pandas 可以读入excel、csv等文件;可以创建Series序列,DataFrame表格,日期数组data_range
'''

数据类型

 # 将excel文件,csv文件读取并转换为pandas的DataFrame
# df_score = pd.read_csv()
df_score = pd.read_excel('./score.xlsx')
# df_score.values #数据
# df_score.columns #列名
# print df_score.describe() #计算表的各项数据,count,mean,std,中位数等 # 创建一个默认索引从0开始的Series
s = pd.Series([1, 2, 3, 4, 5, 6])
# 创建自定义索引的数组,索引由index指定,和前面数组依次对应
s = pd.Series([1, 2, 3, 4, 5, 6], index=['a', 'b', 'c', 'd', 'e', 'f'], dtype=int)
# 使用字典创建一个DataFrame,字典的Key会自动成为列名,一个Key默认对应一列数据
df1 = pd.DataFrame({'math': [1, 2, 3, 4, 5], 'physic': [5, 6, 7, 8, 9]}, index=['a', 'b', 'c', 'd', 'e'])
'''
# df1.values 数据
# df1.head(2) 前两行数据
# df1.tail(2) 最后两行数据
# df1.index 索引
# df1.columns 列名
'''
# 生成从20180101开始的时间序列,peroids是增加量,默认增加单位是天D,H小时,s秒
dates = pd.date_range('', periods=10, freq='D')
# 创建使用时间索引的Series
# s = pd.Series(range(10),index=dates)
# 取出指定间隔的行数据
# s['2018-01-01':'2018-01-05']
# print dates

票房分析

 df_imdb = pd.read_csv('./IMDB.csv')

 # print df_imdb
# print df_imdb.columns
# df_imdb['Title'].head(5) #选出Title列的前五行
# df_imdb['Title'].tail(3)
# df_imdb.Title.head(3) #同[]的形式
# df_imdb['Revenue (Millions)'].max() #最大票房
# df_imdb['Revenue (Millions)'].idxmax() #最大票房的索引
# df_imdb[50:51]
# df_imdb[50:51]['Title']
# df_imdb[50:51]['Revenue (Millions)'] #取出50行,不包括51行
# 取出50-56行,收尾都包含,第一维度是行,第二维度是列
# df_imdb.loc[50:56,['Director','Year']]
# df_imdb[50:56].loc[:,'Director','Year']
# 取出1-5行(不包含第5行),2-4(不包含第4列)列的数据,使用整数索引操作,与numpy用法类似
# df_imdb.iloc[1:5,2:4]
# 统计Director列中不同导演出现的次数
# df_imdb['Director'].value_counts()
# 将票房大于5亿美元的电影选出来
# df_imdb[df_imdb['Revenue (Millions)']>500].Director
# df_imdb[df_imdb['Revenue (Millions)']>700]['Title']
# 将电影风格描述中含有Sci-Fi(科幻) 关键字的找出
# df_imdb[df_imdb['Genre'].str.contains('Sci-Fi')] # 将缺失数据(NaN)填充为0,也可以自己根据项目需求指定其他数据
# df_score.fillna(0)
# 将缺失数据的行移除(默认操作,可以使用axis=1指定删除列df_score.dropna(axis=1))
# 0删除行,1删除列
# df_score.dropna()
# 在DataFram中增加一列平均值avg,计算当前DataFram中每行的平均值作为avg的数据
# 前后赋值数据的行数要对应,axis=1表示按行计算,axis=0(默认值),表示按列计算
# df_score['avg'] = df_score.mean(axis=1)
# 按照性别分组并求和指定成绩
# df_score.iloc[:,4:7].groupby(u'性别').sum()
# df_score.loc[:,[u'音乐',u'性别']].groupby(u'性别').sum()
# 按照男女分组并绘图,bar柱状图,pie饼状图
# df_score[u'性别'].value_counts().plot(kind='bar')
# df_score[u'性别'].value_counts().plot(kind='pie')
# & 数学大于80且化学大于60
# df_score[(df_score[u'数学']>80) &(df_score[u'化学']>60) ] # 使用lambda,配合apply方法将日期中的指定年份或月份等提取出来
# apply函数会将lambda一次作用到数据集的每个元素
# datas = pd.Series(['20190901','20190902','20190903'])
# datas.apply(lambda x:x[0:4])
# datas.apply(lambda x:x[4:6]) # 创建一个数据的副本
# df_copy = df.copy()
# df_copy['R_Sum'] = df['SibSp']+df['Parch'] # 计算数学列的总和、平均值等,里面的字符串必须有同名函数
# df[u'数学'].agg(['sum','mean','max','std']) # pandas(Series、DataFrame)类型转换为numpy(array)类型
# df[u'数学'].values
# df.loc[:,[u'数学',u'化学']].values # 按照指定列的值排序,可指定正序倒序,默认正序
# df[u'数学'].sort_values()
# 按照索引排序
# df[u'数学'].sort_index()
# df[u'数学'].sort_values(ascending=False)
# 添加新列sum,值为每行总和,并倒序排列
# df['sum'] = df.sum(axis=1)
# df[u'sum'].sort_values(ascending=False) # 取出Embarked,Survived字段,按照两个字段顺序做层次分组,然后做计算总和
# r = df.loc[:,['Embarked','Survived']].groupby(['Embarked','Survived']).size()
# r.C
# r.C[1]
# r.Q
# r.Q[0]
# r.Q[1]
# r1 = df.loc[:,['Embarked','Survived']].groupby(['Survived','Embarked']).size()
# r2 = df.loc[:,['Embarked','Survived']].groupby('Embarked').size()
# r3 = df.loc[:,['Embarked','Survived']].groupby('Survived').size()

运行结果

"""
上面的运行结果 r
Embarked Survived
C 0 75
1 93
Q 0 47
1 30
S 0 427
1 217
dtype: int64 r.C结果
Survived
0 75
1 93
dtype: int64 r.C[1]结果
93 r1结果
Survived Embarked
0 C 75
Q 47
S 427
1 C 93
Q 30
S 217
dtype: int64 r2结果
Embarked
C 168
Q 77
S 644
dtype: int64 r3结果
Survived
0 549
1 342
dtype: int64
"""

  

标注:

'''
1.axis转换行列
2.DataFrame筛选一行或一列时会转化为Series类型,可以直接后面加[数字]直接进行选择,但Series不能使用DataFrame的方法(groupby等)
3.筛选出来的数据的索引仍是原索引,不会重新排列新索引
'''

  

统计拍片数前10的某导演,指导电影的总票房

 def piaofang():
director10 = df_imdb['Director'].value_counts().head(10)
# print director10.index[0]
revenues = 0
for d in director10.index:
print df_imdb[df_imdb['Director'] == d]['Revenue (Millions)'].sum() # piaofang() # df_imdb[df_imdb['Director']=='']['Revenue (Millions)'].sum()

票房分析

特征

'''
PassengerId:乘客的唯一标志
Survived:1获救,0死亡
Pclass:座舱等级 3最好,1最差
Name,Sex,Age,
SibSp:船上有没有兄弟姐妹
Parch:父母等直系亲属是否在船上
Ticket,
Fare:票价或消费
Cabin:座舱号
Embarked:从哪个港口登船
891
'''

  

导入类库

 import numpy as np
import matplotlib.pyplot as pt
import pandas as pd

准备数据

 titanic = pd.read_csv('./Titanic.csv')

 titanic.fillna(int(titanic[u'Age'].mean()))

测试代码

 # print titanic['Age']

 # print titanic[u'Age'].mean()
# print titanic.loc[:,u'Survived'].value_counts() #存活比例
# print titanic.loc[:,u'Survived'].count() #总人数 # print titanic.loc[:, u'Sex'].value_counts() #男女分类
# print titanic[titanic[u'Sex'] == u'male']['Survived'].value_counts() #男性生死分类 # print titanic.columns
# print titanic[titanic[u'Age'] <= 18][u'Survived'].value_counts()
# print titanic[(titanic[u'Age'] > 18) & (titanic[u'Age'] < 60)][u'Survived'].value_counts()
# print titanic[titanic[u'Age'] >= 60][u'Survived'].value_counts() # print titanic[u'Fare']
# print titanic[u'Fare'].max() #贫富差距
# print titanic[u'Fare'].min() # print titanic[u'Pclass'].value_counts()
# print titanic[u'Pclass'].value_counts()[1]
# print titanic[u'Pclass'].value_counts()[3] #座舱
# print titanic[titanic[u'Pclass'] == 1]['Survived'].value_counts()
# print titanic[titanic[u'Pclass'] == 3]['Survived'].value_counts() # print titanic[u'SibSp'].value_counts()
# print titanic[u'Parch'].value_counts() # print titanic[u'Embarked'].value_counts()

案例源码

 class Titanic(object):
def __init__(self):
self.data = titanic # 1.存活率是多少
def rate_survive(self):
survived = self.data.loc[:, 'Survived'].value_counts()[1]
death = self.data.loc[:, 'Survived'].value_counts()[0]
rate = float(survived) / (float(death) + float(survived))
print '总人数:{},存活人数:{},死亡人数:{}'.format(survived + death, survived, death)
return u'存活率:' + '%.2f' % rate # 2.哪个年龄段存活率最高
def max_survive(self):
age18_survived = self.data[self.data[u'Age'] <= 18][u'Survived'].value_counts()[1]
age18_death = self.data[self.data[u'Age'] <= 18][u'Survived'].value_counts()[0]
age18_rate = float(age18_survived) / (float(age18_survived) + float(age18_death)) age1860_survived = self.data[(self.data[u'Age'] > 18) & (self.data[u'Age'] < 60)][u'Survived'].value_counts()[1]
age1860_death = self.data[(self.data[u'Age'] > 18) & (self.data[u'Age'] < 60)][u'Survived'].value_counts()[0]
age1860_rate = float(age1860_survived) / (float(age1860_survived) + float(age1860_death)) age60_survived = self.data[self.data[u'Age'] >= 60][u'Survived'].value_counts()[1]
age60_death = self.data[self.data[u'Age'] >= 60][u'Survived'].value_counts()[0]
age60_rate = float(age60_survived) / (float(age60_survived) + float(age60_death)) rate = [age18_rate, age60_rate, age1860_rate]
age_data = ['18岁以下', '18-60岁', '60岁以上']
max_rate = max(rate)
age_range = age_data[rate.index(max(rate))]
return '存活率最高的年龄段是{},存活率为{}'.format(age_range, max_rate) # 3.女性存活率是否高于男性
def than_survive(self):
male_survied = self.data[self.data[u'Sex'] == u'male'][u'Survived'].value_counts()[1]
male_death = self.data[self.data[u'Sex'] == u'male'][u'Survived'].value_counts()[0]
rate_male = float(male_survied) / (float(male_survied) + float(male_death))
print '男性共有{}人,存活{}人,死亡{}人'.format(male_death + male_survied, male_survied, male_death)
female_survied = self.data[self.data[u'Sex'] == u'female'][u'Survived'].value_counts()[1]
female_death = self.data[self.data[u'Sex'] == u'female'][u'Survived'].value_counts()[0]
rate_female = float(female_survied) / (float(female_survied) + float(female_death))
print '女性共有{}人,存活{}人,死亡{}人'.format(female_death + female_survied, female_survied, female_death)
if rate_male > rate_female:
return u'男性存活率更高,存活率为:%.2f' % rate_male
else:
return u'女性存活率更高,存活率为:%.2f' % rate_female # 4.船上是否出现贫富差距
def poor_wealth(self):
max_wealth = self.data[u'Fare'].max()
max_poor = self.data[u'Fare'].min()
if max_wealth - max_poor > 500:
return '船上乘客最多消费了{},最少消费了{},存在贫富差距'.format(max_wealth, max_poor)
else:
return '船上乘客最多消费了{},最少消费了{},不存在贫富差距'.format(max_wealth, max_poor) # 5.头等舱乘客的存活率是否高于经济舱
def pclass_survive(self):
pclass1_survived = self.data[self.data[u'Pclass'] == 1]['Survived'].value_counts()[1]
pclass1_death = self.data[self.data[u'Pclass'] == 1]['Survived'].value_counts()[0]
pclass1_rate = float(pclass1_survived) / (float(pclass1_survived) + float(pclass1_death)) pclass3_survived = self.data[self.data[u'Pclass'] == 3]['Survived'].value_counts()[1]
pclass3_death = self.data[self.data[u'Pclass'] == 3]['Survived'].value_counts()[0]
pclass3_rate = float(pclass3_survived) / (float(pclass3_survived) + float(pclass3_death)) if pclass3_rate > pclass1_rate:
return '头等舱乘客存活率更高,存活率为{}'.format(pclass3_rate)
else:
return '经济舱乘客存活率更高,存活率为{}'.format(pclass1_rate) # 6.有亲属在船上乘客比率,有亲属是否会影响存活率
def family_survive(self):
has_family = self.data[(self.data[u'Parch'] != 0) | (self.data[u'SibSp'] != 0)][u'PassengerId'].count()
no_family = self.data[(self.data[u'Parch'] == 0) & (self.data[u'SibSp'] == 0)][u'PassengerId'].count()
rate_family = float(has_family) / (float(has_family) + float(no_family)) has_family_survived = \
self.data[(self.data[u'Parch'] != 0) | (self.data[u'SibSp'] != 0)][u'Survived'].value_counts()[1]
has_family_death = \
self.data[(self.data[u'Parch'] != 0) | (self.data[u'SibSp'] != 0)][u'Survived'].value_counts()[0]
has_family_rate = float(has_family_survived) / (float(has_family_survived) + float(has_family_death)) no_family_survived = \
self.data[(self.data[u'Parch'] == 0) & (self.data[u'SibSp'] == 0)][u'Survived'].value_counts()[1]
no_family_death = \
self.data[(self.data[u'Parch'] == 0) & (self.data[u'SibSp'] == 0)][u'Survived'].value_counts()[0]
no_family_rate = float(no_family_survived) / (float(no_family_survived) + float(no_family_death)) print '船上乘客中有亲属也在船上的有{}人,无亲属在船上的有{}人,有亲属在船上的乘客的比率为{}'.format(has_family, no_family, rate_family)
if has_family_rate > no_family_rate:
return '有亲属在船上的乘客存活率更高,存活率为{}'.format(has_family_rate)
else:
return '无亲属在船上的乘客存活率更高,存活率为{}'.format(no_family_rate) # 7.从哪个港口登船是否影响获救
def emarked_survive(self):
Embarked_S_survived = self.data[self.data[u'Embarked'] == 'S'][u'Survived'].value_counts()[1]
Embarked_S_death = self.data[self.data[u'Embarked'] == 'S'][u'Survived'].value_counts()[0]
Embarked_S_rate = float(Embarked_S_survived) / (float(Embarked_S_survived) + float(Embarked_S_death)) Embarked_C_survived = self.data[self.data[u'Embarked'] == 'C'][u'Survived'].value_counts()[1]
Embarked_C_death = self.data[self.data[u'Embarked'] == 'C'][u'Survived'].value_counts()[0]
Embarked_C_rate = float(Embarked_C_survived) / (float(Embarked_C_survived) + float(Embarked_C_death)) Embarked_Q_survived = self.data[self.data[u'Embarked'] == 'Q'][u'Survived'].value_counts()[1]
Embarked_Q_death = self.data[self.data[u'Embarked'] == 'Q'][u'Survived'].value_counts()[0]
Embarked_Q_rate = float(Embarked_Q_survived) / (float(Embarked_Q_survived) + float(Embarked_Q_death)) embarked = ['S港口', 'C港口', 'Q港口']
rate = [Embarked_S_rate, Embarked_C_rate, Embarked_Q_rate]
max_rate = max(rate)
return '{}存活率最大,为{}'.format(embarked[rate.index(max_rate)], max_rate) # 8.不同年龄段女性的获救率
def female_survive(self):
female18_survived = \
self.data[(self.data[u'Age'] <= 18) & (self.data[u'Sex'] == u'female')][u'Survived'].value_counts()[1]
female18_death = \
self.data[(self.data[u'Age'] <= 18) & (self.data[u'Sex'] == u'female')][u'Survived'].value_counts()[0]
female18_rate = float(female18_survived) / (float(female18_survived) + float(female18_death)) female1850_survived = \
self.data[(self.data[u'Age'] > 18) & (self.data[u'Age'] < 50) & (self.data[u'Sex'] == u'female')][
u'Survived'].value_counts()[1]
female1850_death = \
self.data[(self.data[u'Age'] > 18) & (self.data[u'Age'] < 50) & (self.data[u'Sex'] == u'female')][
u'Survived'].value_counts()[0]
female1850_rate = float(female1850_survived) / (float(female1850_survived) + float(female1850_death)) female50_survived = \
self.data[(self.data[u'Age'] >= 50) & (self.data[u'Sex'] == u'female')][u'Survived'].value_counts()[1]
female50_death = \
self.data[(self.data[u'Age'] >= 50) & (self.data[u'Sex'] == u'female')][u'Survived'].value_counts()[0]
female50_rate = float(female50_survived) / (float(female50_survived) + float(female50_death)) return '18岁以下女性存活率:{},18-50岁女性存活率:{},50岁以上女性存活率:{}'.format(female18_rate, female1850_rate, female50_rate) if __name__ == '__main__':
tt = Titanic()
# print tt.rate_survive()
# print tt.than_survive()
# print tt.max_survive()
# print tt.poor_wealth()
# print tt.pclass_survive()
# print tt.family_survive()
# print tt.emarked_survive()
print tt.female_survive()

DATA-->INFOMATION-->KNOWLEDGE-->WISDOM

数据-->信息-->知识-->智慧

爬虫-->数据库-->数据分析-->机器学习

  • 信息:通过某种方式组织和处理数据,分析数据间的关系,数据就有了意义
  • 知识:如果说数据是一个事实的集合,从中可以得出关于事实的结论。那么知识(Knowledge)就是信息的集合,它使信息变得有用。知识是对信息的应用,是一个对信息判断和确认的过程,这个过程结合了经验、上下文、诠释和反省。知识可以回答“如何?”的问题,可以帮助我们建模和仿真
  • 智慧:智慧可以简单的归纳为做正确判断和决定的能力,包括对知识的最佳使用。智慧可以回答“为什么”的问题。回到前面的例子,根据故障对客户的业务影响可以识别改进点

数据分析——pandas的更多相关文章

  1. 利用Python进行数据分析——pandas入门

    利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 ...

  2. Python数据分析--Pandas知识点(三)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...

  3. Python数据分析--Pandas知识点(二)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表 ...

  4. 利用Python进行数据分析-Pandas(第一部分)

    利用Python进行数据分析-Pandas: 在Pandas库中最重要的两个数据类型,分别是Series和DataFrame.如下的内容主要围绕这两个方面展开叙述! 在进行数据分析时,我们知道有两个基 ...

  5. python 数据分析--pandas

    接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利用pandas的DataFrames进行统计分析 ...

  6. Python数据分析Pandas库方法简介

    Pandas 入门 Pandas简介 背景:pandas是一个Python包,提供快速,灵活和富有表现力的数据结构,旨在使“关系”或“标记”数据的使用既简单又直观.它旨在成为在Python中进行实际, ...

  7. Python数据分析-Pandas(Series与DataFrame)

    Pandas介绍: pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的. Pandas的主要功能: 1)具备对其功能的数据结构DataFrame.Series 2)集成时间序 ...

  8. Python数据分析 Pandas模块 基础数据结构与简介(一)

    pandas 入门 简介 pandas 组成 = 数据面板 + 数据分析工具 poandas 把数组分为3类 一维矩阵:Series 把ndarray强大在可以存储任意数据类型可以专门处理时间数据 二 ...

  9. python之数据分析pandas

    做数据分析的同学大部分入门都是从excel开始的,excel也是微软office系列评价最高的一种工具. 但当数据量超过百万行的时候,excel就无能无力了,python第三方包pandas极大的扩展 ...

随机推荐

  1. 001 爬虫的基本概念以及urllib的request和parse

    1.http的请求方式: get请求 优点:比较便捷 缺点:不安全.长度有限制post请求 优点:比较安全.数据整体没有限制.可以上传文件putdelete(删除一些信息) 发送网络请求(可以带一定的 ...

  2. Docker-----常见问题

    docker中删除dead状态的容器 其现象如下:docker ps -a docker rm ytn删除时报错如下:解决方法: 先查出其进程,kill掉,在进行删除 查 ,复制上图白底部分,用以下命 ...

  3. Spring Cloud 2-Config 分布式配置中心(七)

    Spring Cloud  Config  1.github配置 2.服务端配置 pom.xml application.xml Application.java 3.配置和命名 1. 配置加载顺序 ...

  4. mac 安装和使用MongoDB

    安装 尝试一:手动命令安装尝试二:采用Homebrew尝试三:下载安装包使用安装尝试一:手动命令安装按照官网https://docs.mongodb.com/manual/tutorial/insta ...

  5. patch 28729262

    打补丁最后出个error OPatch found the word "error" in the stderr of the make command.Please look a ...

  6. 自定义QGraphicsItem

    简述: QGraphicsItem 是场景中 item 的基类.图形视图提供了一些典型形状的标准 item,例如:矩形 ( QGraphicsRectItem ).椭圆 ( QGraphicsElli ...

  7. Mongodb 安装错误汇总

    Failed to restart mongod.service: Unit mongod.service not found. 解决方法: Most probably unit mongodb.se ...

  8. 处理soapUI特殊返回报文 【原】

    String message ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + & ...

  9. 在js中获取上传图片的宽度和高度

    Html: <input type="file" id="MapUploadTd" onchange="getMapPictureSize(th ...

  10. java 常用工具类

    1. org.apache.commons.collections4包提供CollectionUtils.MapUtils.ListUtils.SetUtils等工具类: 2. org.apache. ...