利用Python进行数据分析(学习笔记)

第壹章 准备工作

1.1 本书内容

1.1.1 什么类型的数据

1.2 为何利用Python进行数据分析

1.2.1 Python作为胶水

1.2.2 解决“双语言”难题

1.2.3 为何不使用Python

1.3 重要的Python库

1.3.1 NumPy

1.3.2 pandas

1.3.3 matplotlib

1.3.4 IPython与Jupyter

1.3.5 SciPy

1.3.6 scikit-learn

1.3.7 statsmodels

1.4 安装与设置

1.4.1 Windows

1.4.2 Apple(OS X和macOS)

1.4.3 GNU/Linux14

1.4.4 安装及更新Python包

1.4.5 Python 2和Python 3

1.4.6 集成开发环境和文本编辑器

1.5 社区和会议

1.6 快速浏览本书

1.6.1 代码示例

1.6.2 示例数据

1.6.3导入约定

1.6.4术语

第2章 Python语言基础、IPython及Jupyter notebook

2.1 Python解释器

2.2 IPython基础

2.2.1 运行IPython命令行

2.2.2 运行 Jupyter notebook

2.2.3 Tab补全

2.2.4 内省

2.2.5 %run命令

2.2.6 执行剪贴板中的程序

2.2.7 终端快捷键

2.2.8 关于魔术命令

2.2.9 matplotlib集成

2.3 Python语言基础

[Python3 基本数据类型](Python3 基本数据类型 | 菜鸟教程

- 字符串截取


str = '0123456789'
print(str[0:3:-1])    截取第一位到第三位的字符
print(str[:])      截取字符串的全部字符
print(str[6:])     截取第七个字符到结尾
print(str[:-3])    截取从头开始到倒数第三个字符之前
print(str[2])      截取第三个字符
print(str[-1])     截取倒数第一个字符
print(str[::-1])   创造一个与原字符串顺序相反的字符串
print(str[-3:-1])  截取倒数第三位与倒数第一位之前的字符
print(str[-3:])    截取倒数第三位到结尾
print(str[:-5:-3]) 逆序截取,每个两位取值

- python 数字逆序输出


# 方法一
numStr = input('请输入一串数字:\n')
len=numStr.__len__()
while len !=0:
        print(numStr[len-1],end='')
        len -= 1
# 方法二
numStr = input('请输入一串数字:\n')
print(numStr[::-1])

2.3.1 语言语义

2.3.2 标量类型

2.3.3 控制流

第3章 内建数据结构、函数及文件

3.1 数据结构和序列

3.1.1 元组

3.1.2 列表

3.1.3 内建序列函数

3.1.4 字典

链接:

[Python中dict字典使用方法](Python中dict字典使用方法_python dict values_dev_zyx的博客-CSDN博客

[Python字典及基本操作](http://c.biancheng.net/view/2212.html)

3.1.5集合

3.1.6 列表、集合和字典的推导式

3.2 函数

3.2.1 命名空间、作用域和本地函数

3.2.2 返回多个值

3.2.3 函数是对象

3.2.4 匿名(Lambda)函数

3.2.5 柯里化:部分参数应用

3.2.6 生成器

3.2.7 错误和异常处理

3.3 文件与操作系统

3.3.1 字节与Unicode文件

3.4 本章小结

第4章 NumPy基础:数组与向量化计算

4.1 NumPy ndarray:多维数组对象

4.1.1 生成ndarray

4.1.2 ndarray的数据类型

4.1.3 NumPy数组算术

4.1.4 基础索引与切片

4.1.5 布尔索引

4.1.6 神奇索引

4.1.7 数组转置和换轴

4.2 通用函数:快速的逐元素数组函数

4.3 使用数组进行面向数组编程

4.3.1 将条件逻辑作为数组操作

4.3.2 数学和统计方法

4.3.3 布尔值数组的方法

4.3.4 排序

4.3.5 唯1值与其他集合逻辑

4.4 使用数组进行文件输入和输出

4.5 线性代数

4.6 伪随机数生成

4.7 示例:随机漫步

4.7.1 一次性模拟多次随机漫步

4.8 本章小结

第5章 pandas入门

5.1 pandas数据结构介绍

5.1.1 Series

5.1.2 DataFrame

- 创建DataFrame


import pandas as pd
# 方法1:字典创建
data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
f1 = pd.DataFrame(data)
# 这是定义一个 DataFrame 对象的常用方法——使用 dict 定义
f2 = pd.DataFrame(data,columns=['name','price','marks'])
# 在 DataFrame 中,columns 跟字典键相比,有一个明显不同,就是其顺序可以被规定
f3 = pd.DataFrame(data,columns=['name','marks','price'],index=['a','b','c'])
# DataFrame 数据的索引也能够自定义
data2 = {'lang':{'first':'python','second':'java'},'price':{'first':5000,'second':2000}}
f4 = pd.DataFrame(data2)
# DataFrame 的方法,除了上面的之外,还可以使用“字典套字典”的方式

# 方法2:列表创建
data3 = [[1,2,3,4],['a','b','c','d']]
f5 = pd.DataFrame(data3,columns=list('ABCD'),index=list('ab'))

# 方法3:单个元素的字典直接转DataFrame
# 3.1:键值为index
data4 = {"name":"xiaoming","age":18,"sex":"male"}
f6 = pd.DataFrame(pd.Series(data4),columns=["Value"])
f7 = pd.DataFrame.from_dict(data4,orient="index")
# 3.2:键值为column
f8 = pd.DataFrame.from_dict(data4,orient="index").T
f9 = pd.DataFrame(data4,index=[0])

- 查看属性和常用方法


import pandas as pd
data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
f1 = pd.DataFrame(data)
f1.columns    查看列
f1.index      查看索引
f1.dtypes     查看每列的数据类型
f1.info()     查看各列的数据类型
f1.shape      查看行列的大小
f1.size       查看总计有多少个单元格
len(f1)       查看行数
f1.head()   返回前几行
f1.tail()   返回后几行
f1.rename(columns={'price':'rank'},inplace=True)   修改列名
f1.replace({200:250})     替换值
f1['rank'].replace({3:4}) 指定列替换
f1['rank'].value_counts() 查看指定列中元素的计数
f1.sort_values(by=['name','rank'],ascending=[False,True])  依据指定列进行排序,默认是升序
f1.describe()             查看描述性统计的相关信息
f1.describe(include='all')查看描述性统计的相关信息
f1['rank'].sum()          对指定列进行运算,max/min/mean/sum/std

- axis(轴使用的说明)、增加删除数据列的操作


import pandas as pd
data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
f1 = pd.DataFrame(data)
f1['class'] = 1        增加列,每次只能增加1列
f1.loc[3] = ['tencent',400,2,6]  增加index为3的一行数据
del f1['price']        删除price列
f1.drop(labels='name',inplace=True,axis=1)  删除name列
f1 = f1.drop(2,axis=0) 删除index=2的一行数据

- 缺失值和文本字符串的处理


# 缺失值
data = {"name":['google','baidu','yahoo',None,'tencent'],
        "marks":[100,200,300,400,None],
        "price":[1,2,3,None,4]}
f1 = pd.DataFrame(data)
pd.isnull(f1)           返回所有数据的检测结果
pd.isnull(f1['price'])  返回某列数据的检测结果
f1.dropna(axis=0,how="any",thresh=None,subset=['name','price'],inplace=False)
# any:如果存在任何NA则放弃该标签
# all:如果所有的值为NA,才放弃该标签
# thresh=n,保留至少有n个非NA数据(行列依据指定的来)
# subset:在某些列的子集中选择出现缺失值的列删除,不在子集中的出现缺失值的列不删除
# inplace:筛选过缺失值的新数据是存在副本还是直接在原数据修改
f1.fillna(value=-1)     用-1填充缺失值
len(f1.loc[(f1['price'].isnull(),'price')])  查看某列缺失值的个数
# 文本数据(字符串)处理
f2 = pd.Series(['A','B','C','Aaba','Baca','CABA','dog','cat'])
f2.str.strip()          去除收尾空格
f2.str.upper()          转为大写
f2[f2.str.strip().str.endswith("a")]
f1['name'].str.split(" ")  对指定列数据进行分割
f1['name'].str.split(" ",expand=True) 使用expand方法,把分割出来的数据单独生成一列
f1['name'].str[:3]      使用[]对字符串进行切片提取

- 索引设置和索引提取数据(loc / iloc)


data = {"name":['google','baidu','yahoo',None,'tencent'],
        "marks":[100,200,300,400,None],
        "num":['S1','S2','S3','S4','S5'],
        "price":[1,2,3,None,4]}
f1 = pd.DataFrame(data)
# 索引
# set_index设置多重索引
f2 = f1.set_index(keys=['name','marks','num','price'],append=False,drop=False)
# append=False(是否将原索引保存)
# drop=False(是否保留转换为索引的原数据)
# sort_index 将索引进行排序
f1.sort_index(na_position="last",inplace=True)
# 切片(slicers)对多重索引操作
f1.loc[(slice(0,2),['google'],slice(None)),:]
# 使用idx替代slicers
idx=pd.IndexSlice
f1.loc[idx[0:500,['google'],['marks','price']],idx['price']]
# reset_index 还原索引
f3 = f2.reset_index(drop=True)
# 索引提取(loc和iloc)
# .loc-显示索引,依据名字(标签)进行索引
f1.loc[0]                   提取index名字为0的数据
f1.loc[:5]                  提取索引名为5的行
f1.loc[{1,2,4}]             提取索引名为1,2,4的行
f1.loc[f1['price']>2]       筛选price>2的数据
f1.loc[:2,['name','price']] 选择前十行的指定两列数据
# .iloc-隐式索引,依据位置查找数据
f1.iloc[2:5]                此处2:5是索引,左闭右开的原则
f1.iloc[[1,2,4]]            提取index为1,2,4的行
f1.iloc[:2,[0,1]]           提取前2行,指定索引为0,1的两列数据
f1.iloc[[0],f1.columns.get_loc('name')]  使用get_loc获取索引

- 数据的查询、修改和分组计算


data = {"name":['google','baidu','yahoo','baidu','google'],
        "marks":[100,200,300,400,None],
        "num":['S1','S2','S3','S4','S5'],
        "price":[1,2,3,None,4]}
f1 = pd.DataFrame(data)
# 数据查询(过滤)
f1[(f1['marks']>200)|(f1['price']>1)]  条件为或
f1[(f1['marks']>200)&(f1['price']>1)]  条件为和
f1.loc[(f1['marks']>200)&(f1['price']>1)]
f1[~(f1['marks']>200)&(f1['price']>1)] ~代表给定条件相反的数据
# 修改
f1.loc[f1['name'] == 'baidu','name']='Baidu'  只是修改了值,并未修改数据类型
f1['name'] = f1['name'].map({'baidu':'Baidu'})
# 分组计算
f1.groupby("name").size()              分组查看每组大小
f1.groupby("name").groups              查询每个组下数据索引
len(f1.groupby("name"))                查询每个小组的总数
# 统计计算
f1.groupby("name")['price'].sum()      单个统计量
f1.groupby("name")['price'].agg([np.min,np.max,np.mean,np.std]) 多个统计量
f1.groupby("name").agg([np.min,np.max,np.mean,np.std])          对所有列求相同统计量
f1.groupby("name").agg({'price':np.mean,'marks':[np.size,np.mean]})不同列求不同统计量
# 标准化数据
z_score=lambda s:(s-s.mean())/s.std()  先定义标准化函数
f1[['price','marks']].transform(z_score)  标准化数据不同有缺失,处理之前要把缺失值填充为0
# 过滤分组数据
f1.groupby("name").filter(lambda g:len(g)>1) 过滤掉记录有1的数据
f1.groupby("name").filter(lambda g:len(g)>1)['name'].value_counts().min()  验证过滤出来的数据是否正确
f1.groupby("name").filter(lambda g:g['marks'].mean()>100)                  过滤指定条件的数据

- 表连接和数据透视表


data = {"name":['google','baidu','yahoo','baidu','google'],
        "marks":[100,200,300,400,None],
        "num":['S1','S2','S3','S2','S3'],
        "price":[1,2,3,None,4]}
data2 = {"name":['google','baidu'],
        "marks":[100,500],
        "num":['S1','S2'],
        "price":[1,4]}
data3 = {"name":['google','baidu'],
         "country":['USA','China']}
f1 = pd.DataFrame(data,)
f2 = pd.DataFrame(data2)
f3 = pd.DataFrame(data3)
# 表连接
pd.concat([f1,f2])                               数据拼接
pd.merge(f1,f3,on='name')                        主键相同进行内连接
pd.merge(f1,f3,on=['name','name'])               多个主键进行内连接
pd.merge(f1,f3,how='left',on=['name','name'])    多个主键进行左连接
pd.merge(f1,f3,how='right',on=['name','name'])   多个主键进行右连接
pd.merge(f1,f3,left_index=True,right_index=True) 两表无主键,使用index进行连接
pd.merge(left,right,left_on=['key1','key2'],right_on=['key3','key4'])  复合主键连接
pd.merge(left,right,left_index=True,right_on=['key3','key4'])          仅一表有主键,内连接
# 数据透视
pd.pivot_table(f1,values=['price','marks'],columns=['name'],aggfunc=[np.mean,np.max])
pd.crosstab(f1['name'],f1['num'],margins=True) 计算因子的频率,margin=True会加一个合计

- dataFrame转array方法


#方法1
pd.read_excel(fileName).values
#方法2
np.array(pd.read_excel(fileName))

5.1.3 索引对象

5.2 基本功能

5.2.1 重建索引136

5.2.2 轴向上删除条目138

5.2.3 索引、选择与过滤140

5.2.4 整数索引144

5.2.5 算术和数据对齐145

5.2.6 函数应用和映射150

5.2.7 排序和排名152

5.2.8 含有重复标签的轴索引155

5.3 描述性统计的概述与计算

5.3.1 相关性和协方差159

5.3.2 唯1值、计数和成员属性161

5.4 本章小结

第6章 数据载入、存储及文件格式

6.1 文本格式数据的读写

6.1.1 分块读入文本文件

- 用pandas读取xls文件


# 方法一:read_excel
import pandas as pd
path=r'D:\iMajorSkill\dataSets\defaultofcreditcardclients2.xls'
data=pd.read_excel(path)
# 方法二:read_table
dataset=pd.read_table(filePath,sep=' ',header=0)
# sep指定分隔符,header=0代表首行为表头
# 方法三:网络读取
import pandas as pd 
data_url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv" 
#填写url读取 
df = pd.read_csv(data_url)

- 导出文件


data.to_csv(filepath, encoding = 'utf-8', index = False)
#index=False表示导出时去掉行名称,如果数据中含有中文,一般encoding指定为‘utf-8’
data.to_excel("output.xlsx")

6.1.2 将数据写入文本格式

6.1.3 使用分隔格式

6.1.4 JSON数据

6.1.5 XML和HTML:网络抓取

6.2 二进制格式

6.2.1 使用HDF5格式

6.2.2 读取Microsoft Excel文件

6.3 与Web API交互

6.4 与数据库交互

6.5 本章小结

第7章 数据清洗与准备

7.1 处理缺失值

连接:[缺失值处理python实现](https://blog.csdn.net/weixin_42902413/article/details/87856623)

7.1.1 过滤缺失值189

7.1.2 补全缺失值191

7.2 数据转换

7.2.1 删除重复值194

7.2.2 使用函数或映射进行数据转换195

7.2.3 替代值197

7.2.4 重命名轴索引198

7.2.5 离散化和分箱199

7.2.6 检测和过滤异常值202

7.2.7 置换和随机抽样203

7.2.8 计算指标/虚拟变量204

7.3 字符串操作

7.3.1 字符串对象方法


val = '赵,钱,孙,李,周,吴,郑,王,冯,陈,褚,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,姜,戚,谢,邹,喻,柏,水,窦,章,云,苏,潘,葛,奚,范,彭,郎,鲁,韦,昌,马,苗,凤,花,方,俞,任,袁,柳,酆,鲍,史,唐,费,廉,岑,薛,雷,贺,倪,汤,滕,殷,罗,毕,郝,邬,安,常,乐,于,时,傅,皮,卞,齐,康,伍,余,元,卜,顾,孟,平,黄,和,穆,萧,尹,姚,邵,湛,汪,祁,毛,禹,狄,米,贝,明,臧,计,伏,成,戴,谈,宋,茅,庞,熊,纪,舒,屈,项,祝,董,梁,杜,阮,蓝,闵,席,季,麻,强,贾,路,娄,危,江,童,颜,郭,梅,盛,林,刁,钟,徐,邱,骆,高,夏,蔡,田,樊,胡,凌,霍,虞,万,支,柯,昝,管,卢,莫,经,房,裘,缪,干,解,应,宗,丁,宣,贲,邓,郁,单,杭,洪,包,诸,左,石,崔,吉,钮,龚,程,嵇,邢,滑,裴,陆,荣,翁,荀,羊,於,惠,甄,曲,家,封,芮,羿,储,靳,汲,邴,糜,松,井,段,富,巫,乌,焦,巴,弓,牧,隗,山,谷,车,侯,宓,蓬,全,郗,班,仰,秋,仲,伊,宫,宁,仇,栾,暴,甘,钭,厉,戎,祖,武,符,刘,景,詹,束,龙,叶,幸,司,韶,郜,黎,蓟,薄,印,宿,白,怀,蒲,邰,从,鄂,索,咸,籍,赖,卓,蔺,屠,蒙,池,乔,阴,郁,胥,能,苍,双,闻,莘,党,翟,谭,贡,劳,逄,姬,申,扶,堵,冉,宰,郦,雍,却,璩,桑,桂,濮,牛,寿,通,边,扈,燕,冀,郏,浦,尚,农,温,别,庄,晏,柴,瞿,阎,充,慕,连,茹,习,宦,艾,鱼,容,向,古,易,慎,戈,廖,庾,,暨,居,衡,步,都,耿,满,弘,匡,国,文,寇,广,禄,阙,东,欧,殳,沃,利,蔚,越,夔,隆,师,巩,厍,聂,晁,勾,敖,融,冷,訾,辛,阚,那,简,饶,空,曾,毋,沙,乜,养,鞠,须,丰,巢,关,蒯,相,查,后,荆,红,游,竺,权,逯,盖,益,桓,公,万俟,司马,上官,欧阳,夏侯,诸葛,闻人,东方,赫连,皇甫,尉迟,公羊,澹台,公冶,宗政,濮阳,淳于,单于,太叔,申屠,公孙,仲孙,轩辕,令狐,钟离,宇文,长孙,慕容,鲜于,闾丘,司徒,司空,丌官,司寇,仉督,子车,颛孙,端木,巫马,公西,漆雕,乐正,壤驷,公良,拓跋,夹谷,宰父,谷梁,晋楚,闫法,汝鄢,涂钦,段干,百里,东郭,南门,呼延,归海,羊舌,微生,岳帅,缑亢,况郈,有琴,梁丘,左丘,东门,西门,商牟,佘佴,伯赏,南宫,墨哈,谯笪,年爱,阳佟,第五,言福'
val.split(', ')
# strip用于清除空格
pieces = [x.strip() for x in val.split(', ')]
'屠' in val
val.index('屠')
val.find('屠')
val.count(",")
val.replace(', ','::')

7.3.2 正则表达式

7.3.3 pandas中的向量化字符串函数

7.4 本章小结

第8章 数据规整:连接、联合与重塑

8.1 分层索引

8.1.1重排序和层级排序

8.1.2 按层级进行汇总统计

8.1.3 使用DataFrame的列进行索引

8.2 联合与合并数据集

8.2.1 数据库风格的DataFrame连接

8.2.2 根据索引合并

8.2.3 沿轴向连接

8.2.4 联合重叠数据

8.3 重塑和透视

8.3.1 使用多层索引进行重塑

8.3.2 将“长”透视为“宽”

8.3.3 将“宽”透视为“长”

8.4 本章小结

第9章 绘图与可视化

9.1 简明matplotlib API入门


import matplotlib.pyplot as plt
import numpy as np
data = np.arange(10)
plt.plot(data)

9.1.1 图片与子图


fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
_ = ax1.hist(np.random.randn(100),bins=20,color='k',alpha=0.3)
ax2.scatter(np.arange(30),np.arange(30)+3*np.random.randn(30))
ax3.plot(np.random.randn(50).cumsum(),'k--')

fig,axes = plt.subplots(2,3)
axes[0,2]

9.1.1.1 调整子图周围的间距

9.1.2 颜色、标记和线类型

9.1.3 刻度、标签和图例

9.1.3.2 添加图例


from numpy.random import randn
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(randn(1000).cumsum(),'k',label='one')
ax.plot(randn(1000).cumsum(),'k--',label='two')
ax.plot(randn(1000).cumsum(),'k.',label='three')
ax.legend(loc='best')

9.1.4 注释与子图加工


from datetime import datetime
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
data = pd.read_csv('examples/spx.csv', index_col=0, parse_dates=True)
spx = data['SPX']
spx.plot(ax=ax, style='k-')
crisis_data = [
    (datetime(2007, 10, 11), 'Peak of bull market'),
    (datetime(2008, 3, 12), 'Bear Stearns Fails'),
    (datetime(2008, 9, 15), 'Lehman Bankruptcy')
]
for date, label in crisis_data:
    ax.annotate(label, xy=(date, spx.asof(date) + 75),
                xytext=(date, spx.asof(date) + 225),
                arrowprops=dict(facecolor='black',  
                  headwidth=4,
                  width=2,
                              headlength=4),
                horizontalalignment='left', verticalalignment='top')
# 放大2007年~2010年
ax.set_xlim(['1/1/2007', '1/1/2011'])
ax.set_ylim([600, 1800])
ax.set_title('Important dates in the 2008-2009 financial crisis')

9.1.5 将图片保存到文件

9.1.6 matplotlib设置

9.2 使用pandas和seaborn绘图

9.2.1 折线图

9.2.2 柱状图

9.2.3 直方图和密度图

9.2.4 散点图或点图

9.2.5 分面网格和分类数据

9.3 其他Python可视化工具

9.4 本章小结

第壹0章 数据聚合与分组操作

10.1 GroupBy机制


df = pd.DataFrame(
{
'hotel' : ['W酒店','万豪','洲际','希尔顿','桔子水晶','皇冠假日','和颐','香格里拉','丽思卡尔顿','喜来登酒店','万怡酒店','JW万豪','迪士尼乐园酒店','上海玩具总动员酒店','万丽酒店','铂尔曼酒店','威斯汀酒店','凯悦酒店','君悦大酒店','威斯汀大饭店','四季酒店','希尔顿逸林酒店','索菲特大酒店','上海柏悦酒店','凯宾斯基','艾美酒店','诺富特酒店','英迪格酒店','豪生酒店','豪生大酒店','宝格丽酒店','瑞吉酒店','华尔道夫酒店','温德姆酒店','安达仕酒店','温德姆至尊豪廷酒店','文华东方酒店','上海半岛酒店','艾迪逊酒店','美爵酒店','嘉里大酒店','朗廷酒店','上海日航饭店','上海和平饭店','丽笙酒店','豪华精选酒店','安缦酒店','开元名都大酒店','万达瑞华酒店','禧玥酒店','千禧海鸥大酒店','费尔蒙酒店','雅诗阁','君亭设计酒店','康得思酒店','新世界酒店','富豪金丰酒店','宏安瑞士大酒店','上海花园饭店','富豪环球东亚酒店','臻品之选酒店','星河湾酒店','上海粤海酒店','丽呈酒店','维景国际大酒店','东隅酒店','北京华侨大厦','世纪金源大饭店','世纪金源香山商旅酒店','雅乐轩酒店','唐拉雅秀酒店','马哥孛罗大酒店','奥克伍德华庭酒店','北京名人国际大酒店','北京东升凯莱酒店','美居酒店','华美达','亚朵酒店','亚朵轻居酒店','亚朵S酒店','希尔顿欢朋酒店','希尔顿花园酒店','喜来登由由酒店','CitiGo欢阁酒店','漫心酒店','凯悦嘉轩酒店','开元大酒店','开元曼居精选酒店','美豪酒店','美豪丽致酒店','凯悦嘉寓酒店','书香世家酒店','君亭酒店','富豪东亚酒店','富豪会展公寓酒店','素柏','桔子酒店','麗枫酒店','维也纳酒店','锦江都城','柏曼酒店','秋果简居酒店','秋果酒店','秋果公寓','北京京伦饭店','斯维登度假公寓','柏高酒店','康铂酒店','如家精选酒店','智选假日酒店','锦江之星品尚','宜必思酒店','全季酒店','如家商旅酒店','智尚酒店','喆啡酒店','维也纳国际酒店','宜必思尚品酒店','汉庭优佳酒店','希岸酒店','星程酒店','如家睿柏','非繁城品酒店','Q加','如家快捷酒店','锦江之星','汉庭酒店','7天连锁酒店','格林豪泰','莫泰168','7天优品酒店','布丁酒店','布丁严选酒店','海友酒店','维也纳3好酒店','易佰连锁酒店','城市便捷酒店','速8酒店','怡莱酒店','尚客精选优酒店','尚客优酒店','尚客优快捷酒店','IU酒店','云上四季连锁酒店','如家派柏','贝壳酒店','格林联盟','如家驿居酒店','百时快捷酒店','青树皮酒店','精途酒店','骏怡连锁酒店','榴莲小星酒店','华驿酒店','华驿精选酒店','欣燕都连锁酒店','便宜居连锁酒店','驿家365连锁','金广快捷酒店'], 
'rating' : ['W酒店','万豪','洲际','希尔顿','桔子水晶','皇冠假日','和颐','香格里拉','丽思卡尔顿','喜来登酒店','万怡酒店','JW万豪','迪士尼乐园酒店','上海玩具总动员酒店','万丽酒店','铂尔曼酒店','威斯汀酒店','凯悦酒店','君悦大酒店','威斯汀大饭店','四季酒店','希尔顿逸林酒店','索菲特大酒店','上海柏悦酒店','凯宾斯基','艾美酒店','诺富特酒店','英迪格酒店','豪生酒店','豪生大酒店','宝格丽酒店','瑞吉酒店','华尔道夫酒店','温德姆酒店','安达仕酒店','温德姆至尊豪廷酒店','文华东方酒店','上海半岛酒店','艾迪逊酒店','美爵酒店','嘉里大酒店','朗廷酒店','上海日航饭店','上海和平饭店','丽笙酒店','豪华精选酒店','安缦酒店','开元名都大酒店','万达瑞华酒店','禧玥酒店','千禧海鸥大酒店','费尔蒙酒店','雅诗阁','君亭设计酒店','康得思酒店','新世界酒店','富豪金丰酒店','宏安瑞士大酒店','上海花园饭店','富豪环球东亚酒店','臻品之选酒店','星河湾酒店','上海粤海酒店','丽呈酒店','维景国际大酒店','东隅酒店','北京华侨大厦','世纪金源大饭店','世纪金源香山商旅酒店','雅乐轩酒店','唐拉雅秀酒店','马哥孛罗大酒店','奥克伍德华庭酒店','北京名人国际大酒店','北京东升凯莱酒店','美居酒店','华美达','亚朵酒店','亚朵轻居酒店','亚朵S酒店','希尔顿欢朋酒店','希尔顿花园酒店','喜来登由由酒店','CitiGo欢阁酒店','漫心酒店','凯悦嘉轩酒店','开元大酒店','开元曼居精选酒店','美豪酒店','美豪丽致酒店','凯悦嘉寓酒店','书香世家酒店','君亭酒店','富豪东亚酒店','富豪会展公寓酒店','素柏','桔子酒店','麗枫酒店','维也纳酒店','锦江都城','柏曼酒店','秋果简居酒店','秋果酒店','秋果公寓','北京京伦饭店','斯维登度假公寓','柏高酒店','康铂酒店','如家精选酒店','智选假日酒店','锦江之星品尚','宜必思酒店','全季酒店','如家商旅酒店','智尚酒店','喆啡酒店','维也纳国际酒店','宜必思尚品酒店','汉庭优佳酒店','希岸酒店','星程酒店','如家睿柏','非繁城品酒店','Q加','如家快捷酒店','锦江之星','汉庭酒店','7天连锁酒店','格林豪泰','莫泰168','7天优品酒店','布丁酒店','布丁严选酒店','海友酒店','维也纳3好酒店','易佰连锁酒店','城市便捷酒店','速8酒店','怡莱酒店','尚客精选优酒店','尚客优酒店','尚客优快捷酒店','IU酒店','云上四季连锁酒店','如家派柏','贝壳酒店','格林联盟','如家驿居酒店','百时快捷酒店','青树皮酒店','精途酒店','骏怡连锁酒店','榴莲小星酒店','华驿酒店','华驿精选酒店','欣燕都连锁酒店','便宜居连锁酒店','驿家365连锁','金广快捷酒店']
}
)
df.groupby(['rating'])['hotel'].count()

10.1.1 遍历各分组

10.1.2 选择一列或所有列的子集

10.1.3 使用字典和Series分组

10.1.4 使用函数分组

10.1.5 根据索引层级分组

10.2 数据聚合

10.2.1 逐列及多函数应用

10.2.2 返回不含行索引的聚合数据

10.3 应用:通用拆分-应用-联合

10.3.1 压缩分组键

10.3.2 分位数与桶分析

10.3.3 示例:使用指定分组值填充缺失值

10.3.4 示例:随机采样与排列

10.3.5 示例:分组加权平均和相关性

10.3.6 示例:逐组线性回归

10.4 数据透视表与交叉表

10.4.1 交叉表:crosstab

10.5 本章小结

第壹1章 时间序列

11.1 日期和时间数据的类型及工具303

11.1.1 字符串与datetime互相转换305

- 日期格式


import datetime
datetime.datetime.now().isocalendar()
(2020,13,6)返回参数分别是年,第几周,星期几

11.2 时间序列基础

11.2.1 索引、选择、子集

11.2.2 含有重复索引的时间序列

11.3 日期范围、频率和移位

11.3.1 生成日期范围

11.3.2 频率和日期偏置

11.3.3 移位(前向和后向)日期

```python

import pandas as pd

date_list = [str(x)[:10] for x in pd.Series(pd.date_range('6/1/2020',periods=6,freq='M'))]

date_list

```

11.4 时区处理

11.4.1 时区的本地化和转换

11.4.2 时区感知时间戳对象的操作

11.4.3 不同时区间的操作

11.5 时间区间和区间算术

11.5.1 区间频率转换

11.5.2 季度区间频率

11.5.3 将时间戳转换为区间(以及逆转换)

11.5.4 从数组生成PeriodIndex

11.6 重新采样与频率转换

11.6.1 向下采样

11.6.2 向上采样与插值

11.6.3 使用区间进行重新采样

11.7 移动窗口函数

11.7.1 指数加权函数

11.7.2 二元移动窗口函数

11.7.3 用户自定义的移动窗口函数

11.8 本章小结

第壹2章 高阶pandas

12.1 分类数据

12.1.1 背景和目标

12.1.2 pandas中的Categorical类型

12.1.3 使用Categorical对象进行计算

12.1.4 分类方法

12.2 高阶GroupBy应用

12.2.1 分组转换和“展开”GroupBy

12.2.2 分组的时间重新采样

12.3 方法链技术

12.3.1 pipe方法

12.4 本章小结

第壹3章 Python建模库介绍

13.1 pandas与建模代码的结合

13.2 使用Patsy创建模型描述

13.2.1 Patsy公式中的数据转换

13.2.2 分类数据与Patsy

13.3 statsmodels介绍

13.3.1 评估线性模型

13.3.2 评估时间序列处理

13.4 scikit-learn介绍

13.5 继续你的教育

第壹4章 数据分析示例

14.1 从Bitly获取1.USA.gov数据

14.1.1 纯Python时区计数

14.1.2 使用pandas进行时区计数

14.2 MovieLens 1M数据集

14.2.1 测量评价分歧

14.3 美国1880~2010年的婴儿名字

14.3.1分析名字趋势

14.4 美国农业部食品数据库

14.5 2012年联邦选举委员会数据库

14.5.1 按职业和雇主的捐献统计

14.5.2 捐赠金额分桶

14.5.3 按州进行捐赠统计

14.6 本章小结

附录A 高阶NumPy

附录B 更多IPython系统相关内容

附录C python常用算法包官方文档

[XGBoost官方文档](https://xgboost.readthedocs.io/en/latest/)

附录D 常用功能

  • 查看根目录下的文件


import os
for root,dirs,files in os.walk(os.getcwd()):
    for file in files:
        path = os.path.join(root,file)
        stats = os.stat(path)
        print(path,stats.st_size)
  • 创建文件夹


 import os
os.makedirs(path, mode=0o777)
  • 压缩文件夹
tar -cvf name.tar /path/to/directory
  • 查看文件夹下特定文件
[f for f in os.listdir('folder/') if f.lower().endswith("pmml")]
  • 把文件移动到新的文件夹

1.list1=[0,1,2,3,4,5,6,7,8,9]中随机选3个数字(不放回)求和为20,这样的组合有多少个。


# 解法一
# 解法二
# 解法三

2.开发一个函数Year100d(year),输入年,返回该年第100天的日期。



附录E 画图

Python 如何画出漂亮的地图?

你可能感兴趣的:(python,数据分析,学习)