python答辩准备

jupyter(python课)

http://10.80.98.127:8080/tree/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%85%A5%E9%97%A8%EF%BC%88Python%EF%BC%89/%E7%AC%AC15%E5%91%A8%EF%BC%9A%E8%AF%BE%E7%A8%8B%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93

目录

实例-bitly_usagov(第15周)

.readline()

json.loads()

.get(x,0)

defaultdict的用法:

.items()

.sort()  和 .sorted()

计数器类Counter

most_common(n)函数 

.value_counts() 

.fillna() 函数

 .plot()

Series类型 

.dropna()函数

.split(str,num)函数

np.where() 

.str.contains()

.groupby()函数

.size()

.unstack()

.sum()

x.argsort() [n]

 .take()

stacked

.div(other,axis) 

知识点总结

数据类型

元组

列表

字典

set

enumerate() 函数

Numpy

np.arange(a,b,c)

np.random.randn(a,b)

np.empty()

np.zeros()

np.ones()

数组拼接

np.concatenate((a,b),axis=0)

Pandas 基础

 Pandas 数据处理

 Pandas 数据合并

.merge()

.concat()

Pandas 处理

.stack()

plt.rcParams[""]=

plt.legend()

plt.title()


实例-bitly_usagov(第15周)

# 获取数据集,读取第一行数据
path= "bitly_usagov/example.txt"
open(path).readline()

.readline()

readline()        只读取文件中的一行

read()             读取整个文件,将文件放入一个字符串变量中

readlines()      读取整个文件,将文件内容自动分析成列表

# 利用JSON第三方库读取该数据集,并将JSON格式数据存入数组
import json
path= "bitly_usagov/example.txt"
# 列表推导式
records= [json.loads(line) for line in open(path)]
records[1]

json.loads()

json.dumps()和json.loads()是json格式处理函数

json.dumps()是将python数据类型列表进行接送格式的转换(相当于把列表转化成字符串)

json.loads()是将json格式转化为python数据类型列表(相当于把字符串转化为列表)

这两个函数用于json文件的读或者写

# 用列表推导式取出一组时区,注意并非所有记录都有时区字段
time_zones = [rec["tz"] for rec in records if "tz" in rec]
time_zones[:10]

从records中一行一行读取数据,判断数据是否有“tz”参数。若有就读取“tz”内容,没有就为空

# 对时区进行计数,利用基本PYTHON方法
def get_counts(sequence):
    counts={} 
    for x in sequence:
        if x in counts: 
            counts[x] += 1 
        else: 
            counts[x] = 1 
    return counts 

一个计数函数,counts为字典,建议改成

counts[x]=counts.get(x,0)+1

.get(x,0)

0 为初始化是新增字符的对应数

# 利用自带基础库进行计算
from collections import defaultdict
def get_counts2(sequence):
    # 所有的值均会被初始化为0
    counts = defaultdict(int) 
    for x in sequence: 
        counts[x] += 1 
    return counts 

defaultdict的用法:

https://www.jianshu.com/p/bbd258f99fd3

defaultdict 是用于当key在字典里找不到时,会赋给这个key一个均值

counts = get_counts(time_zones)
print(counts["America/New_York"])
counts = get_counts2(time_zones)
print(counts["America/New_York"])
print(len(time_zones))

使用函数获得时区计数的字典 

总共有3440条数据,时区在美国、纽约的有1251条

# 得到前10位的时区和计数值
def top_counts(count_dict, n=10):
    value_key_pairs = [(count, tz) for tz, count in count_dict.items()] 
    value_key_pairs.sort() 
    return value_key_pairs[-n:]
top_counts(counts)

.items()

以列表方式获得字典的(键,值)

.sort()  和 .sorted()

.sort    直接对列表内容进行排序

.sorted    返回一个新的排序后的列表(之前的列表内容不变)

详细内容    https://mp.csdn.net/mp_blog/creation/editor/118118533

# Python标准库的使用
from collections import Counter
counts = Counter(time_zones)
counts.most_common(10)

计数器类Counter

根据列表内容进行计数,获得一个类似于字典的计数器

most_common(n)函数 

n为可选参数,表示数量最多的前n个元素;若n为空,则返回全部元素

返回一个列表(元素是元组)

若元素数量相同,则元素计数值,则按字母序列排序

# 利用Pandas对时区进行计数
from pandas import DataFrame, Series
import pandas as pd
import numpy as np
frame = DataFrame(records) 
frame.head(5)

将records列表转化为DataFrame表格

DataFrame表格可以使用Series的value_counts来计数

# 利用Series的value_counts方法计数
tz_counts = frame["tz"].value_counts()
tz_counts[:10]

.value_counts() 

.value_counts()函数通常在数据表的计数和排序中使用,它可以用来查看数据表中,指定列里有多少个不同的数据值,并计算每个不同值有在该列中的个数,同时还能根据需要进行排序。

value_counts(values,sort=True, ascending=False, normalize=False,bins=None,dropna=True)

以下均为默认

sort=True  表示进行排序

ascending=False  表示降序

normalize=False  表示不进行标准化(以比例呈现)

bins  表示分组区间

dropna=True  表示删除缺失值Nan

# 缺失数据的处理
clean_tz = frame["tz"].fillna("Missing")
clean_tz[clean_tz == ""] = "Unknown"
tz_counts = clean_tz.value_counts() 
tz_counts[:10]

.fillna() 函数

.fillna()是填充函数,可以填充数据表中缺失的内容。

详细内容:https://blog.csdn.net/weixin_39549734/article/details/81221276

将数据表中为空的数据填上“Missing”,再将为空的数据填上“Unknow”,再计数

%matplotlib inline  
tz_counts[:10].plot(kind='barh', rot=0)

 .plot()

将数据表可视化

kind = 'line','bar','barh','kde'

分别为折线图,垂直直方图📊,水平直方图,密度图

# 浏览器类型统计
results= Series([x.split()[0] for x in frame.a.dropna()])
results[:5]

Series类型 

Series可以由 Python列表、标量值、Python字典、nbarray、其他函数(range函数)构成

详细:https://blog.csdn.net/brucewong0516/article/details/79196902

.dropna()函数

清除带缺失值的行或列

axis:       default 0指行,1为列

how:       {‘any’, ‘all’}, default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的

thresh:    int,保留含有int个非空值的行

subset:   对特定的列进行缺失值删除处理

inplace:  这个很常见,True表示直接在原数据上更改

.split(str,num)函数

分隔函数

str 为分隔符(默认为所有的空字符)

num 为分割次数

# Windows用户统计,先删除无效数据
cframe = frame[frame.a.notnull()]
operating_system = np.where(cframe["a"].str.contains("Windows"),"Windows", "Not Windows")
operating_system[:5]

np.where() 

https://blog.csdn.net/zs15321583801/article/details/79645685

.str.contains()

字符串的模糊筛选

# 按照时区分组,统计不用类型的用户
by_tz_os = cframe.groupby(["tz",operating_system])
agg_counts = by_tz_os.size().unstack().fillna(0)
agg_counts[:10]

.groupby()函数

分组函数

根据“tz”和“windous”分组

.size()

统计矩阵元素个数,或矩阵某一维上的元素个数的函数。

numpy.size(a, axis=None) 
a:输入的矩阵 
axis:int型的可选参数,指定返回哪一维的元素个数。当没有指定时,返回整个矩阵的元素个数。

.unstack()

类似于将两层行索引的第二层变成列索引

# 最常出现的时区
indexer = agg_counts.sum(1).argsort()
indexer[:10]

.sum()

相加函数

x.argsort() [n]

将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y

n默认为大于0

当n小于0,将x中的元素从大到小排列,提取其对应的index(索引),然后输出到y

# 截取最后10行
count_subset = agg_counts.take(indexer)[-10:]
count_subset

 .take()

numpy.takeaindicesaxis = Noneout = Nonemode ='raise' 

沿轴取数组中的元素

如果a是一个numpy array,a.take(m,1)表示取每一行的第m个值;a.take(m,0)表示取第m行

count_subset.plot(kind='barh', stacked=True)

stacked

把直方图变成堆积直方图

默认为False

normed_subset = count_subset.div(count_subset.sum(1), axis=0)
normed_subset.plot(kind='barh',stacked=True) 

.div(other,axis) 

进行规格化,使各行的数和为1

other    为DataFrame或者面板

axis     决定规格化行或者列

知识点总结

数据类型

#tup为元组,元组的元素不能修改
tup = 4, 5, 6
print(tup)


#lst为列表
lst = [2, 3, 7, None]
print(lst)

#把元组列表化
lst_tup = list(tup)
print(lst_tup)
print(lst_tup[2])

#d1、empty_dict为字典
empty_dict = {}
d1 = {'a' : 'some value', 'b' : [1, 2, 3, 4]}
print(d1)

#a、b为set(不重复且无序的集合)
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7, 8}
print(a & b)
print(a | b)

#mapping为字典
some_list = ['foo', 'bar', 'baz']
mapping = {}
for i, v in enumerate(some_list):
    mapping[v] = i
mapping

strings = ['a', 'as', 'bat', 'car', 'dove', 'python']
[x.upper() for x in strings if len(x) > 2]

#return 返回的多个值会成为元组
a = 2
b = 1
def add(m, n):
    return m + n, m - n
print(add(a,b))

a = 2
b = 1
add=lambda x,y: x+y
print(add(a,b))

元组

https://www.runoob.com/python/python-tuples.html

列表

https://www.runoob.com/python/python-lists.html

字典

https://www.runoob.com/python/python-dictionary.html

set

https://blog.csdn.net/sinat_38682860/article/details/105223472

enumerate() 函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

https://www.runoob.com/python/python-func-enumerate.html

Numpy

import numpy as np
np.random.seed(100)

my_arr = np.arange(100)
print(my_arr)

data = np.random.randn(2, 3)
print(data)
print(data * 10)
print(data + data)
print(data.shape)
print(data.dtype)

#将list转化为array
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
print(arr2)

arr = np.arange(10)
print(arr)
print(arr[5])
print(arr[5:8])
print(arr[-10:-1])

arr = np.empty((3, 3))
print(arr)
arr = np.zeros((4, 4))
print(arr)
arr = np.ones((2, 2))
print(arr)

np.arange(a,b,c)

返回一个排列

a 为起点,默认为0

b 为终点,必须存在

c 为步长,默认为1

np.random.randn(a,b)

https://blog.csdn.net/u012149181/article/details/78913167

np.empty()

生成一个不为空的数组,数组内容是随机的

np.zeros()

生成值为0的数组

np.ones()

生成值为1的数组

数组拼接

a=np.array([[1,2,3],[4,5,6]])
b=np.array([[11,21,31],[7,8,9]])
np.concatenate((a,b),axis=0)

np.concatenate((a,b),axis=0)

当axis=0时,将列数相同的a、b数上下组合成为一个新的数组

当axis=1时,将行数相同的a、b数左右组合成为一个新的数组

Pandas 基础

import numpy as np
import pandas as pd

#用列表生成Series
obj1 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print(obj1)

#用字典生成Series
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
print(frame)

#用字典生成Series,并改变行列索引
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
                      index=['one', 'two', 'three', 'four',
                             'five', 'six'])
print(frame2)

print(frame2['state'])
print(frame2.year)
print(frame2.loc['three','state'])
print(frame2.iloc[2, [2, 3]])

#使用json.loads来将json格式转化为字典格式
#df = pd.read_csv('/examples/ex1.csv', encoding='utf-8')
obj = """
{"name": "Wes",
 "places_lived": ["United States", "Spain", "Germany"],
 "pet": null,
 "siblings": [{"name": "Scott", "age": 30, "pets": ["Zeus", "Zuko"]},
              {"name": "Katie", "age": 38,
               "pets": ["Sixes", "Stache", "Cisco"]}]
}
"""
import json
result = json.loads(obj)
result

 Pandas 数据处理

from numpy import nan as NA
data = pd.Series([1, NA, 3.5, NA, 7])
print(data)
print(data.dropna(how='all'))
print(data.fillna(0))

 Pandas 数据合并

left = pd.DataFrame([[1., 2.], [3., 4.], [5., 6.]],
                     index=['a', 'c', 'e'],
                     columns=['Ohio', 'Nevada'])
right = pd.DataFrame([[7., 8.], [9., 10.], [11., 12.], [5, 6]],
                      index=['b', 'c', 'd', 'e'],
                      columns=['Missouri', 'Alabama'])
print(left)
print(right)
pd.merge(left, right, left_on='Ohio', right_on='Missouri', how='left')
print(left.join(right))
print(pd.concat([left,right], axis=1, sort=True))
print(pd.concat([left,right], axis=0, sort=True))

.merge()

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=('_x', '_y'), copy=True, indicator=False,validate=None)

https://blog.csdn.net/brucewong0516/article/details/82707492

.concat()

对两个数据表进行纵向(横向)连接

axis=1 纵向

axis=0 横向

https://blog.csdn.net/weixin_39827585/article/details/111458249

Pandas 处理

import numpy as np
import pandas as pd

df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
                   'key2' : ['one', 'two', 'one', 'two', 'one'],
                   'data1' : np.random.randn(5),
                   'data2' : np.random.randn(5)})
print(df)
print(df.key2.value_counts())
print(df.groupby(['key1', 'key2']).mean())
by_occupation = df.pivot_table(('data1','data2'),
                                index='key1',
                                columns='key2', aggfunc='mean')
print(by_occupation.stack(1))

aggfunc='mean'. 计算均值

.stack()

类似于将两层列索引的第二层变成行索引

plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.plot(df['data1'])
plt.plot(df['data2'])
plt.legend(loc='best')
plt.title(u'中文乱码')

plt.rcParams[""]=

https://www.cnblogs.com/shuaishuaidefeizhu/p/14035247.html

plt.legend()

建立图例

https://blog.csdn.net/weixin_41950276/article/details/84259546

plt.title()

图形标题

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值