目录
1. 输入与输出、判断语句、循环语句
1.1 输入与输出
输入input()
输出print()
1.2 判断语句
if...else...
1.3循环语句
for ... in
while
2.数据类型:列表、元组、字典、集合、字符串
2.1列表(list):[]
三大基本操作:增加,删除,查改
增加:append()尾部添加,insert()指定位置增加,extend()增加多个元素
删除:pop()尾部删除,del a,del a[],remove()指定位置和指定元素
查改:a[1:5]
len()
列表不要求里面所有元素的数据类型一样
2.2元组(tuple): ()
一旦初始化,不能修改,即不能增加,不能删除个别元素(只能整个删除)
数组形式访问
2.3字典(dictionary):{}
key-value
pop
get
2.4集合(set): {}
集合的花括号里直接放元素,字典里放键值对
key的集合
add()
remove()
discard()
pop()交互式里删除第一个元素,文本模式下删除是无序的
clear()
2.5字符串
两种格式输出
1.print("pi:%.2f"%3.1415926)
2.print("pi:{:.2f}".format(3.1415926))
字符串拆分
a = "i love python"
x = a.split(" ")
a.find("python")
" ".join(x)
3.注释、引入模块/包和函数
3.1 注释
注释中有中文
# -- coding:utf-8--
3.2 引入模块/包
# 导入一个模块
import model_name
# 导入多个 模块
import model_name1,module_nema2
# 导入包中指定模块
from package_name import module_name
# 导入包中所有模块
from package_name import *
4.其他
题目:A+B
输入格式:有一系列的整数对 A 和 B,以空格分开。
输出格式:对于每个整数对 A 和 B,需要给出 A 和 B 的和。
while(True):
try:
line = input()
a = line.split()
print(int(a[0])+int(a[1]))
except:
break
split()语法:
str.split(str="",num=string.count(str))
参数
- str – 分隔符,默认所有的空字符,包括空格、换行(\n)、制表符(\t)等
- num – 分割次数。默认为-1,即分隔所有
返回值
返回分割后的字符串列表
5.python文件IO
open函数,可以新建一个文件
f=open('C:\\Users\\dwz19\\Desktop\\test.txt','r')
f.close()
f=open(r'C:\Users\dwz19\Desktop\test.txt','r')
f.read()#只读了一遍,不会回到原点
f.readline()#一行一行读
f.readlines()#整个读完以后形成一个列表
改进版写法
with open(r'C:\Users\dwz19\Desktop\test.txt','r') as f:
print(f.read())
#a是追加,w是重写
with open('test.txt','a') as f:
print(f.write("好好学习\n"))
os模块
os.getcwd()
os.listdir()
os.mkdir()
os.path() 模块主要用于获取文件的属性
json模块
with open('test2.json','w') as f:
print(f.write('123\n'))
json模块提供四个模块:dumps、dump、loads、load
dumps将数据类型转变成字符串,dump将数据类型转变成字符串,然后存储在文件中
loads将字符串转变成数据类型,load把文件打开把字符串变成数据类型
引用https://www.cnblogs.com/momoyan/p/9145478.html
import json
#dumps把list转化为字符串,然后写入文件
a=[1,2,3,4,5,6]
b=json.dumps(a)
with open('test3.json','w') as f:
json.dump(b,f)
#load把文件打开把字符串变成数据类型
with open('test3.json','r') as f:
h=json.load(f)
如何制作一个数据集
数据集里德东西
学号 姓名 成绩
1 a 10
2 b 20
3 c 30
with open('....','r') as f:
a=f.readlines()
a
['学号 姓名 成绩\n', '1 a 10\n', '2 b 20\n', '3 c 30']
for i in range(0,3):
print(a[i].split())
['学号', '姓名', '成绩']
['1', 'a', '10']
['2', 'b', '20']
for i in range(0,3):
print(a[i].split()[2])
成绩
10
20
7.python函数和模块
python中,strings、tuples和numbers是不可更改的对象
list、dict是可以修改的对象
传不可变对象实例(拷贝)
def hanshu(a):
a+=1
print('a=',a)
c=3
hanshu(c)
print('c=',c)
打印出
a=4
c=3
传可变对象实例(引用)
def SA(c):
c[0] = 0
print(c)
a=[1,2,3]
SA(a)
打印出
a=[0,2,3]
一般情况下,我们不知道可以从Excel中读取了多少个数据。
当函数参数不可知,需要写一个可边长参数的函数
元组变长参数,参数名前面有一个*
字典变长参数,参数名前面有两个*
参考:https://www.jianshu.com/p/fe0eb1e90bb4
return 返回多个值的类型是元组
dir()不带参数时,返回当前范围内的变量、方法和定义的类型列表
dir()带参数时,返回参数的属性、方法列表
8.类和魔法方法第一部分 python的类
self代表类的实例,而非类
类是不能直接使用方法和属性的
继承用()表示
多继承遇到相同的方法,顺序是从左到右
9.类和魔法方法第二部分 python魔法方法及简单的类和专业讲解
import os
import datetime
import numpy as np
class data():
def __init__(self,path):
self.path=path
self.open_file()
def open_file(self):
with open(self.path,'r') as f:
self.list = []
for i in f.readlines():
self.list.append(i.split(','))#把数据整理成二维数组形式
#print(self.list)
del self.list[0]#把第一行抬头删去
#print(self.list)
def print_col(self,col):
assert isinstance(col,int),'您需要输入一个整数'#断言
temp_list = [i[col] for i in self.list]
return temp_list
#print(temp_list)
#实现统计功能
def unique(self,a_list):
temp_list = []
for i in a_list:
if i in temp_list:
pass
else:
temp_list.append(i)
return temp_list
def all_len(self):
for i in range(len(self.list[0])):
print(i,':',len(self.unique(self.print_col(i))))
if __name__ == '__main__':
#建立数据的路径
print(os.getcwd())
path = os.path.join(os.getcwd(),'code\data\id6.csv')
print(path)
a = data(path)
a.all_len()
#a.print_col(0)
10.正则表达式
re.match 从起始位置开始匹配
re.search 扫描整个字符串返回第一个成功的匹配
re.match和re.search如果成功匹配返回的是一个函数,如果要查看需要使用.group()
re.compile 生成一个正则表达式的对象
findall 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表
match和search是匹配一次findall匹配所有
import re
a='123dsfgd123fsdfd123fsffsf456'
b='dsfgd'
print(re.search(b,a).group())
正则表达式修饰符-可选标志不同的匹配原则
11.常见ide介绍和常见错误排查
快捷键
ctrl+z 返回上一步
ctrl+shift+z 前进一步
shift+Enter 直接跳转到下一行
ctrl+/注释
tab缩进
shift+tab取消缩进
ctrl+r替换
ctrl+f查找
ctrl+shift+f整个工程查找
ctrl+Numpad+展开
ctrl+Numpad-折叠
ctrl+shift+/-展开/折叠全部代码块
pycharm里左下角有个structure,左侧底部有todo
常见错误排查
一、TypeError:类型错误,对象用来表示值的类型非预期类型时发生的错误
二、AttributeError:属性错误,特性引用和赋值失败时会引发属性错误
三、NameError:试图访问的变量名不存在。
四、SyntaxError:语法错误,代码形式错误
五、KeyError:在读取字典中的key和value时,如果key不存在,就会触发KeyError错误。
六、IndexError:索引错误,使用的索引不存在,常索引超出序列范围,序列中没有此索引(index)
七、IndentationError:缩进错误
处理异常
i=0
try:
10/i
except ZeroDivisionError:
print('baocuo')
else:
print(10/i)
try…except…finally
无论except发生了什么,都要执行finally
11.常见的数据类型
1.0.8以上的是高相关性
0.5~0.8相关
0.3~0.5代码可用
0.3以下不相关了
线性相关-----皮尔逊相关性
独立性分析能提炼非线性相关性
对于数值类数据
数据归一:神经网络,线性回归等必须要做,影响精度比较大,决策树不一定要做
(x-min)/(max-min)
均值为0,标准差为1的正态分布
(x-mean)/std
数据的分布最好整成正态分布的,例如金融贷款小额数据比较多,大额的数据比较少,取个log把数据整成正态分布的
对于字符串数据
eg.编码
小说,教材,传记
0,1,2
三者相互之间距离不相等
使用one-hot编码
100,010,001
三者之间距离相等
解决不同寓意距离不同的问题,使用one-hot编码
eg.
small,mid,large
这个时候使用one-hot编码就不太合适
1,2,3更合理点
引入外部数据
20,22,25更好一些
对于数据为nan
1.数据量少,对结果影响不大,直接删除
2.填充,均值,中值,差值,上一个最近,下一个最近
3.推理
4.nan当成不可能实现的情况
在结构化数据里有多少列数据就有多少维
怎么升维,怎么降维
升维,特征工程,核方法
降维。
PCA,无监督学习,删除不重要的。可以理解为方差,如果一个数据从头到尾变化不大,认为信息量不大,可以被删除。如果变化量比较大,可以认为被保留。
LCA,有监督学习。f(x)=y,如果y变x变留下,如果y变x不变删除。
TSNE,多维数据映射成一维数据
13.常见数据分析方法
13.1 对比分析
序列(横向)对比(不同时期同一标准的结果的对比)自比
纵向对比(不同地区,不同情况下的对比)他比
联合对比(序列和纵向的结合)
13.2 结构分析
多角度分析
顺序分析
拆分效果
13.3 同期群分析
13.4 漏斗分析
时间
节点
流量
13.5 聚类分析
13.6 相关分析
陷阱:
中国GDP每年上升
海平面每年上升
盲目去理解数据之间的关系
14.numpy和pandas简介
Numpy:array和matrix
Pandas:Series(一维)DataFrame(高维)
numpy的使用
a[0,4:2:-2]#a的第0行,从后往前隔两个人
np.matmul(a,a)
a.cumsum()#数组元素进行累加
np.concatenate([a,a],axis=0)#整合数组,在axis=0的维度上整合
np.where(a>15,0,2)#a中的元素,如果大于15,赋值为0,如果不是赋值为2
pandas的使用
data={'id':['jack','Bob','jyz'],'age':[1,2,3],'score':[10,20,30]}
a=pd.DataFrame(data)
a.index
a.columns
#查看列
a['id']
a['age']
a['score']
#查看行
a[0]
#切片
a.iloc[0,0]
a.iloc[0,0:3]
a.iloc[1]
a.loc[1,'age']
a.loc[1]
15. 简单数据处理流程
1.查看一下数据简单的概况
2.处理nan数据
数值型的处理
dropna(axis=0,how='any')
how='any'#把这行和列全删除
how='all'#如果这行都是nan才全部删除
drop_duplicates()#删除重复的数据
dropna和fillna都要重新赋值
data=data.dropna(-999)
data.dropna(-999,inplace=True)
data=data.fillna(method='bfill')#用下面的值替换
method='ffill'#用上面的值替换
object类型的处理
one-hot,label
one-hot
pd.get_dummies(data.meter)
data.jion(pd.get_dummies(data.meter))
label
encode = {col : index for index, col in enumerate(data['primary_use'].unique())}
encode = data['primary_use'].value_counts().to_dict()
print(encode)
print(data['primary_use'].map(encode))