01 数据思维导论
数据分析师是内容逻辑导向,不是美感导向
数据分析流程图
- 数据表达的几种形式及意义:
分析图表
动态交互
商业智能
-
南丁格尔玫瑰图
是一种圆形的直方图。南丁格尔自己常昵称这类图为鸡冠花图(coxcomb),并且用以表达军医院季节性的死亡率。 -
旭日图
旭日图也称为太阳图,是一种圆环镶接图。图中每个级别的数据通过1个圆环表示,离原点越近代表圆环级别越高,最内层的圆表示层次结构的顶级,然后一层一层去看数据的占比情况,越往外,级别越低,且分类越细。其本质是树状关系,因此也被称为极坐标下的矩形树图。它既能像饼图一样表现局部和整体的占比,又能像矩形树图一样表现层级关系。
一些作图网站和工具:
https://d3js.org/
https://www.informationisbeautifulawards.com/
用数据改变未来的核心——找到一个正确且落地的数据工作流,并不断迭代,完善它!
- Python语言
- 分析工具运用:Numpy / Pandas / GIS
- 数据表达:matplotlib / geoplotlib / Seaborn / Bokeh / gephi
- 数据思维:算法 / 项目实战
02 Python语言入门
【2.1】 变量及数据类型
Python标准数据类型:Numbers数字,String字符串,List列表,Tuple元祖,Dict字典
- Numbers数字分为:int整型,long长整型,float浮点型,complex复数
- String字符串由数字、字母、下划线组成的一串字符,用于表示文本的数据类型
注:一定用英文标点符号,单引号('') 和双引号("")一样,三引号(''' '''或""" """)可以表示多行字符串
- bool布尔型:True,False,用于做判断True实际值是1,False实际值是0
- List列表,支持字符,数字,字符串以包含列表(即嵌套),用
[]
标识,有序对象 - Tuple元祖,用
()
标识,不能二次赋值,可以理解成不可变的列表(只读列表),有序对象 - Dict字典,用
{}
标识,由索引(key)和它对应的值value组成,无序对象
数据类型转换方法
type()函数,用于查看数据类型
- int(x)函数:将x转为整数,如果是四舍五入则是round(x)函数
- float(x)函数:将x转为浮点数
- str(x)函数:将x转为字符串
变量
什么是变量? —— 方程式“=”左边的,就是变量
1、给变量赋值即创建该变量,并且同时赋予该变量
① 变量名
② 变量类型
等号(=)用来给变量赋值
2、变量命名规则:
① 变量名第一个字符必须是字母(大小写均可)或者下划线(“_”),不能数字开头;
② 变量名不能和常用功能性名字重合,例如print,if,for
③ 不要有空格
运算符
- 算数运算符
加+
减-
乘*
除/
取模%
(返回除法的余数)
取整除数//
幂方**
- 比较运算符
等于==
不等于!=
大于>
小于<
- 逻辑运算符
and
:且or
:或not
:非
bool()函数:将值转换为布尔型,其中只有以下情况bool()返回False:0, 0.0, None,‘’, [] , {}
- 成员运算符
in
:在not in
:不在
(用于列表、字符串、字典等)
注释
单行注释 #
多行注释 ''' '''
【2.2】序列及其通用操作
序列分类:可变序列list,不可变序列tuple、str
加号 + 是列表连接运算符,星号 * 是重复操作
print(lst1+lst2) # "+":序列的链接
print(lst1*3,lst2*2) # "*":序列重复
- 索引从0开始,eg lst[2]中,下标索引是2,指向lst的第3个值
- 索引
-1
代表最后一个值 - 切片可以理解成列表的值区间,且是一个左闭右开区间,例如lst[2:5]代表的区间是:索引2的值 - 索引4的值
- 步长:
List[i:j:n]
代表:索引i - 索引j,以n为步长 - 序列的基本内置全局函数:
len( ) 列表元素个数
max( ),min( ),sum( ) 返回列表的最大值、最小值、求和,这三个函数都只针对数字的list
.index(obj)方法:从列表中找出某个值第一个匹配项的索引位置
.count(obj)方法:计算值的出现次数
生成器
- range()是生成器,指向了一个范围
- range(5)代表指向了0,1,2,3,4这几个值
- range(2,5)代表指向了2,3,4这几个值
- range(0,10,2)代表指向了0,2,4,6,8这几个值,最后的2代表步长
通过list()函数生成列表
lst = list(range(5))
print(lst)
常用函数:
- list.append() 添加元素
- 添加多个元素用.extend()方法:用新列表扩展原来的列表,注意和append()方法的区别
- .remove方法:移除列表中某个值的第一个匹配项
- del语句:删除list的相应索引值
- .clear():移除所有值
- .insert(i,m)方法:在索引i处插入m
- .copy()方法:复制一个新的列表,指向两个列表
- .sort()方法:排序,默认升序排序/字母顺序,参数reverse:反向排序,针对数字
函数sorted():排序并复制
元祖tuple :不可变的“列表”
- 可以不加括号
tup3 = "a", "b", "c", "d"
- 元组中只包含一个元素时,需要在元素后面添加逗号
tup4 = (50,)
- 索引、切片和list一样
- 元祖不能单独删除内部元素(不可变性),但可以del语句来删除整个元祖
- tuple()函数:将列表转换为元组
转义字符:\
\n:空行
输出文件路径的方法:
print("C:\\Users\\23937\\Desktop")
print("C:/Users/23937/Desktop")
print(r"C:\Users\23937\Desktop") # r:去转义
字符串常用功能
- str.replace(old,new,count):修改字符串,count:更换几个
- str.split(obj):拆分字符串,生成列表,obj:分隔符
- str.join():连接字符串,对象为列表
- str.startswith(“str”) 判断是否以“str”开头;str.endswith (“str”) 判断是否以“str”结尾
- st.upper() 全部大写 st.lower() 全部小写
st.swapcase() 大小写互换 st.capitalize() 首字母大写 - st.isnumeric() 如果st 只包含数字则返回 True,否则返回 False
st.isalpha() 如果st 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False - st.rstrip() 删除字符末尾的空格
格式化字符:在字符串中插入变量
“%s is 好人” %name
%s 表示我们这里要插入一个变量(字符串),%name代表这里我们插入name
- i/s/f分别代表插入字符串的源数据类型:整型/字符型/浮点型
- 输出2位小数:
%.2f
,此处是四舍五入
%i
不四舍五入,直接切掉小数部分 %+i
显示正号,负号根据数字直接显示
空格和正号只能显示一个- 科学计数法
%e %E
%g
小数位数少的时候自动识别用浮点数,数据复杂的时候自动识别用科学计数法
更强大的格式化方法.format
print("{}{}{}".format('a','b','c'),'\n',
"{0}{1}{2}{0}".format('a','b','c'),'\n')
{}和{0}的区别:都是占位符,后者有了明确指定
print("{:f}".format(4.123),'\n',
"{:.2f}".format(4.123),'\n',
"{:e}".format(4.123),'\n',
"{:.0f}".format(99.9),'\n',
"{:%}".format(4.123),'\n',
"{:d}".format(10))
4.123000
4.12
4.123000e+00
100
412.300000%
10
【2.3】字典映射
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:
)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({}
)中
- 键必须是唯一的,但值则不必
- 键值对,一定共同出现,不能只有一个
- 不允许同一个键出现两次:创建时如果同一个键被赋值两次,后一个值会被记住
- key必须是字符串,value则可以是任意对象:数值,字符串,序列,字典
- 序列有顺序,是一个无序集合
- .clear() 清空词典所有条目
- del dic 删除词典
- 添加/修改元素:dic[‘键’] = ‘值’
- dict()由序列生成一个字典,嵌套序列,可以是list或者tuple
- dic1 = dict.fromkeys(keys, 统一值) keys为一个列表,直接生成一个字典
- dict1.update(dict2)方法:更新/合并一个字典,把第二个字典合并到第一个字典,改变了第一个字典 (赋值时会同时更新)
- 通过.copy()方法,复制一个新的字典 (不会同时更新)
- len():查看字典元素个数
- in / not in :判断是否包含,这里的判断对象是key
- .get(key)方法:直接查看key的value,如果没有相应key则返回None,添加print参数可以多返回一个值
- .keys()方法:输出字典所有key,注意这里的输出内容格式是视图,可以用list()得到key的列表,类似range()
- .values()方法:输出字典所有values,原理同.keys()方法
- .items()方法:输出字典所有items(元素,即键值对) 可结合for函数遍历