python--第三方包的使用

1、json包

在python中使用json解析数据的时候,需要导入包的类型,使用json包解析json数据。

python 复制代码
import json
student_json='{"age":22,"clazz":"文科六班","gender":"女","id":"1500100001","name":"施笑槐"}'

#将一个json文件装换成python中的对象,返回的是python中的字典:
student_obj=json.loads(student_json)
print(student_obj)

#转换成一个字典,通过key来获取对应的value的值
print(student_obj["name"])


info={"age":22,"clazz":"文科六班","gender":"女","id":"1500100001","name":"施笑槐"}

#将python中的对象转换成json字符串,使用到的函数是dumps,ensure_ascii=False可以指定他的编码的方式
print(json.dumps(info,ensure_ascii=False))
2、pip命令的使用:

在python中下载第三方包需要执行的命令是:

python 复制代码
pip install 第三方包的名称


"""
    更新pip版本的命令:
        python.exe -m pip install --upgrade pip
    查看pip的命令:
    python语言是u用pip管理第三方包
    按照第三方包
    pip install pandas

    修改源方式
    1、临时修改
    pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

    2、永久修改源
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    pip install matplotlib

    清华:https://pypi.tuna.tsinghua.edu.cn/simple
    阿里云:http://mirrors.aliyun.com/pypi/simple/
    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
    华中理工大学:http://pypi.hustunique.com/
    山东理工大学:http://pypi.sdutlinux.org/
    豆瓣:http://pypi.douban.com/simple/
"""
3、在python中连接数据的包:pymysql
python 复制代码
# 安装的命令:
"""
    使用python连接mysql
"""
# pip install pymysql
import pymysql

# 连接数据库:
connect = pymysql.connect(
                            host="master",
                            port=3306,
                            user="root",
                            password="123456",
                            database="bigdata25")
#2、创建一个游标
curses=connect.cursor()
#3、编写sql
curses.execute("select  id,student,course,score from students")
#4、获取查询的所有的数据,输出的是一个元组:
stu = curses.fetchall()
print(stu)
#5、循环打印数据:
for stus in stu:
    print(stus[1])

#6、向数据库中插入数据:
curses.execute("insert into TableA values (4,'lisi','310111XXXXX5',19930501,'中国')")
#提交事务:
connect.commit()

#关闭连接:
connect.close()
python 复制代码
# 需求:将学生表中的数据写入到mysql中:
import pymysql
import json


# 1、读取数据:
file = open("D:\code\pythonProject\pythonProject\数据\students.json", mode="r", encoding="utf_8")
file1 = file.readlines()
# 2、使用函数推导式:
stu1 = [stu.strip() for stu in file1]
# 返回的数据类型是json格式的数据,所以需要对数据进行解析,需要导入json函数,返回的是一个列表:
info = [json.loads(stu2) for stu2 in stu1]

#测试,显示的是有数据
info1=[info2["id"] for info2 in info]
print(info1)

# 与MySQL建立连接
connect = pymysql.connect(
    host="master",
    port=3306,
    user="root",
    password="123456",
    database="bigdata25"
)

# 创建游标
cursor = connect.cursor()
# 编写sql语句:
# 首先创建一张学生表
"""
    此时需要注意的是如果表已经创建好,或者存在,此时在运行就会被报错,所以在创建表的时候需要加上if not exists
"""
#创建表:
cursor.execute("""
    create table if not exists stu(
        id varchar(20),
        name varchar(20),
        age int,
        clazz varchar(20),
        gender varchar(20)       
    )
""")
# 将数据循环写入放到
for stu3 in info:
    id = stu3["id"]
    name = stu3["name"]
    gender = stu3["gender"]
    clazz = stu3["clazz"]
    age = stu3["age"]
    #数据提取也是成功的:
    print(id,name,gender,clazz,age)
    #执行sql语句:
    cursor.execute(f" insert into stu values('{id}','{name}',{age},'{clazz}','{gender}')")

# 手动提交事务:
connect.commit()
# 关闭连接:
connect.close()
# 这里使用的是open,需要手动关闭连接
file.close()
4、pyspark
python 复制代码
from pyspark.sql import SparkSession

# 创建sparksession环境
spark = SparkSession.builder.master("local").appName("spark").getOrCreate()

# 读取数据:
stu = spark.read.format("json").load("D:\code\pythonProject\pythonProject\data\students.json")
# 统计班级的人数:
clazz_num = stu.groupBy("clazz").count()
stu.show()

# 保存数据:
clazz_num.write.format("csv").save("D:\code\pythonProject\pythonProject\data\clazz_num")
5、numpy:在数据分析中经常使用到的包,主要是用来科学计算的,numpy是一种专门用于矩阵计算的,科学计算的开源的python,主要是将python变成一种免费的更强大的matlab系统。
python 复制代码
# 下载:pip install numpy
import numpy as np
from numpy import random

# 创建一个多维矩阵
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array)
print(type(array))

# 矩阵的转至:
print(array.T)
# 1、向左反转:
print("向左翻转{}".format(np.fliplr(array)))
# 2、向右反转:
print("向右反转{}".format(np.fliplr(array)))

# 类型转换:
# 创建一个字符串矩阵:
array1 = np.array([["1", "2", "3"], ["4", "5", "6"]])
array2 = array1.astype("float_")
print(array1)
print(array2)

# 创建一个一维数组:
array3 = np.array([1, 2, 3, 4, 5])
# 使用切片取出里面的一些值:
array4 = array3[::2]
print(array4)

# 根据索引取出数据:需要注意的是索引的下标都是从0开始计算的:
# 一维数组:
array5 = np.array([1, 2, 3, 4, 5])
print("一维数组使用索引取出数据是:{}".format(array5[0]))

# 多维数组:使用二维数组举例:
array6 = np.array([[1, 2, 3], [4, 5, 6]])
print(array6)
print("二维数组使用索引取出数据是:{}".format(array6[0][0]))

# 在numpy中的切片:
# 第一种:取所有行的某一列
print("numpy中切片中取出数据:{}".format(array6[:, 1]))
# 第二种,前面控制的是行数,后面控制的列数:
"""
    原理:可以将前后都看一个列表,前面的控制的是行数,后面控制的列数
"""
print("numpy第一行中的第一个到最后一个数字:{}".format(array6[0, 1::]))

# 布尔值索引:
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(arr % 2 == 1)
# 需求:取出里面的奇数
arr = arr[arr % 2 == 1]
print(arr)

# 还可以代入公式计算
array7 = np.array([1, 2, 3, 4])
y = 2 * array7 + 1
print("代入公式计算后的结果是{}".format(y))

# 重构:重新改变它的形状,使用函数reshape
array8 = np.array([1, 2, 3, 4])
# 打印出该数组的结构
print(array8.shape)
# 重构,装化成一个2*2结构的数组
print(array8.reshape((2, 2)))

# numpy中的拼接:
# 分成横轴拼接、纵轴拼接
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[1, 2, 3], [4, 5, 6]])

# 1、横轴拼接:存放在一个数组中
print("numpy中横向拼接{}".format(np.vstack((arr1, arr2))))

# 2、纵轴拼接:
print("numpy中纵向拼接{}".format(np.hstack((arr1, arr2))))

# 对位运算:对应位置计算:
arr3 = np.array([[1, 2, 3], [4, 5, 6]])
arr4 = np.array([[1, 2, 3], [10, 20, 30]])
print(arr3 + arr4)
print(arr3 - arr4)
print(arr3 * arr4)
print(arr3 // arr4)
print(arr3 / arr4)
print(arr3 % arr4)

# 矩阵相乘,使用到的函数是dot
arr5 = np.array([[1, 2, 3], [4, 5, 6]])
arr6 = arr5.T
print(arr5.dot(arr6))

# 自然对数的使用:
arr5 = np.array([[1, 2, 3], [4, 5, 6]])
print("自然对数使用{}".format(np.log10(arr5)))

# 差分,计算相邻两个数之间的差值:diff
array9 = np.array([1, 2, 3, 4, 2, 2, 11, 3, 4])
print("指定两个数之间的差分{}".format(np.diff(array9)))
# 一个有方向的差分:
#按照纵轴方向计算差分,参数axis就默认是0,按照横轴方向计算差分,参数默认是1
array10 = np.array([[1, 2, 3], [4, 5, 6]])
print(np.diff(array10,axis=0))


array9 = np.array([1, 2, 3, 4, 2, 2, 11, 3, 4])
#求出最大值:
print(np.amax(array9))
print(np.amin(array9))
print(np.mean(array9))

"""
    1、amin:求出最小值
    2、amax:求出最大值
    3、percentile:返回中位数
    4、median:返回中位数
    5、average:返回平均值,可以设定权重,计算权重平均
    6、mean:返回平均值
    7、std:返回的是计算标准差
    8、var:计算方差
    9、exp:计算指数
"""

#生成标准正态分布的矩阵:
array11 = np.random.normal(size=(10,10))
print(array11)
"""
    1、生成二项分布的,产生5个服从二项分布B(5,0.5)的样本:random.binomial(n=5,p=0.5,size=5)
    2、均匀分布:产生5个服从均匀分布U[-1,1]的样本:random.unform(-1,1,5) 
"""
6、pandas:属于一种小数据的数据处理,兼备numpy的高性能数组计算,类似于spark计算系统,处理数量是有限的。
python 复制代码
# series是一种类似于一维数组的对象,有数据以及与之相关的数据标签组成,代表的是一个序列,相当于一列
# 可以通过字典字典构建对象series对象,series对象的索引也是可以修改的
import pandas as pd
import matplotlib.pyplot as plt

# 需要指定两个参数:分别是数据和索引
series = pd.Series(data=[1, 2, 3, 4, 5], index=[0, 1, 2, 3, 4])
print(series)
# 可以通过行号取出俩面的数字:
print(series[0])

# 构建一个dataframe:就是一个数据的一张表:
users = {"name": ["李四", "王五", "张三"], "age": [23, 24, 26]}
# 构建一个dataframe
user_df = pd.DataFrame(users)
print(user_df)

# 取数据:1、可以根据行名取出数据:
user_name = user_df["name"]
print(user_name)

# 布尔值索引:
print(user_df["age"] > 19)

# 删除列,是对原先的基础上进行操作的。
del user_df["age"]

# 使用pandas读取数据:
# read_csv:默认数据中的第一行作为列名,所以需要通过names指定对应的类名:
student = pd.read_csv("D:\code\pythonProject\pythonProject\data\students.txt",
                      # 指定分隔符 sep = ",",
                      names=["id", "name", "age", "sex", "clazz"],
                      encoding="utf-8")

print(student)
# 统计班级的人数
num = student.groupby("clazz")["id"].count()

# 取出前十和后十
print(student.head(10))
print(student.tail(10))

# 对数据进行过滤:
print(student[student["sex"] == "男"])

# 统计男生和女生的个数:使用函数value_count,进行分组求和
# student["sex"].value_counts().plot.pie()

"""
    bar  表示的是柱状图
    pie  表示的是饼状图
"""
#  plt.show()
print("pandas语法的基本使用" + "****")

"""
    1、pandas的语法的使用:
"""
# 1、选择字段进行处理:
student["age"] = student["age"] + 100
print(student)

# 2、选择表中多个字段:
print(student[["id", "name"]])

# 3、布尔值索引,也就是数据清洗的功能:
print(student[student["clazz"] == "文科一班"])

# 4、选择某一行数据:
print(student.loc[0])

# 5、分组聚合:求出每个班级的平均成绩:
student.groupby("clazz")["age"].mean()

# 统计每个班的人数:
stu = student["clazz"].value_counts().plot.bar()

# 设置文中的字体为微软雅黑
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.show()

# 6、表关联:
# 使用pandas读取数据:
print("使用pandas读取分数表中的数据")

score = pd.read_csv("../data/score.txt",
                    sep=',',
                    names=["id", "cid", "score"],
                    encoding="utf-8")
# 关联学生表和分数表:
stu_merge = pd.merge(student, score, on="id")
print(stu_merge)

# 此时在计算学生的总成绩,先进行分组,然后可以找出对应的字段进行操作
# 此时需要重置表的索引:重新将原先的列名再次设置成列名:
sum_score = stu_merge.groupby(["id", "name", "age"])["score"].sum().reset_index()
print(sum_score)

# 求出每个班级的平均分:
mean_score = stu_merge.groupby(["id", "name"])["score"].mean()
print(mean_score)

# 使用pandas将数据存储到文件中
"""
    1、to_csv:指定需要存储的路径
    2、header,不指定写入文件中就包含标题,4如果不想要包含表头,就需要将header设置成None
    3、sep是指定分隔符
"""
sum_score.to_csv("../data/sum_score.txt", header=None, sep=",")

# 使用pandas进行词频统计
lines = pd.read_csv("../data/words.txt", names=["line"], encoding="utf-8",sep="\t")


"""
    1、str:表示的是使用字符串处理列
    2、split:表示的是使用逗号进行切分列
    3、expand:表示的将split返回的结果转换成多列
    4、stack:表示的是将多列装换成多行
    5、value_counts():表示的是统计单词的数量
"""
word_count = lines["line"].str.split(",",expand=True).stack().value_counts().plot.bar()
#设置图标的标题:
plt.title("word的数量表:")
plt.ylabel("单词的数量")
plt.xlabel("单词的种类")
plt.show()
print(word_count)
7、notebook
python 复制代码
#pip install notebook
#启动notebook命令: jupyter-notebook
"""
在使用vscode的方式进行编写代码,需要将代码的后缀改成ipynb
"""
8、数据可视化:
1、matplotlib:
python 复制代码
# matplaotlib

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 创建一个figure的图层
# fig, ax = plt.subplots()
# 通过x与y轴确定坐标:
# ax.plot([1, 2, 3, 4], [1, 2, 4, 3])
# plt.show()

# 直接进行画图:
# plt.plot([1, 2, 3], [1, 2, 3])
# plt.show()

# 随机生成数据,数据的范围是在0-2之间:
x = np.linspace(0, 2, 100)
# 创建一个画布:
fig, ax = plt.subplots()

ax.plot(x, x, label="linear")  # 指定x轴与y轴的大小,label:指定线条的名称
ax.plot(x, x ** 2, label="quadratic")
ax.plot(x, x ** 3, label="cubic")
ax.set_xlabel(' x label')  # 设置横坐标的名称
ax.set_ylabel('y label')  # 设置轴坐标的名称
ax.set_title("simple plot")  # 设置画布的名称
ax.legend()  # 设置图标

plt.plot(x, np.sin(x), label="sinx")
plt.legend()
plt.show()
2、seaborn:
python 复制代码
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt



"""
    卸载python中已经安装的表:
    pip uninstall  包的名称

"""

# 使用色啊born绘制散点图:
x = np.linspace(0, 100, 100)
y = x ** 2
sns.jointplot(x=x, y=y)

x1 = np.linspace(0, 100, 100)
y1 = x ** 4
line = pd.DataFrame(
    {
        "x": x1,
        "y": y1
    }
)
sns.jointplot(x="x", y="y", data=line)
plt.show()

# 箱线图:判断数据是否存在离群值:boxplot
ages = [1, 2, 4, 5, 100, 29, 10]
sns.boxplot(x=ages)
plt.show()

# 直方图:
# 生成一个标准的正态分布图:
x2 = np.random.normal(size=10000)
sns.histplot(x=x2)
plt.show()


#壮壮图:
#sns.countplot(x=x2,data="students")


#核密度图
x3 = np.random.normal(size=10000)
sns.kdeplot(x=x3,fill=True,color="b")
plt.title("这是和密度图")
#设置他的语言的格式:微软黑体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()


#小提琴图:
sns.violinplot(x=ages)
plt.title("这是小提琴图")
plt.show()


#点对图:
x1 = np.linspace(0, 1, 100)
y1 = x ** 4
line = pd.DataFrame(
    {
        "x": x1,
        "y": y1
    }
)
sns.palplot(line)
plt.title("这是点对图")
plt.show()

#饼图:plot.pie()



"""
    画图的工具:
        matplotlib
        seaborn
        pyecharts(百度提供的一个画图工具)
"""
from pyecharts.charts import Bar

bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.render()
相关推荐
浊酒南街43 分钟前
决策树python实现代码1
python·算法·决策树
FreedomLeo12 小时前
Python机器学习笔记(十三、k均值聚类)
python·机器学习·kmeans·聚类
星光樱梦2 小时前
32. 线程、进程与协程
python
阿正的梦工坊2 小时前
深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
人工智能·pytorch·python
西猫雷婶2 小时前
python学opencv|读取图像(十九)使用cv2.rectangle()绘制矩形
开发语言·python·opencv
liuxin334455663 小时前
学籍管理系统:实现教育管理现代化
java·开发语言·前端·数据库·安全
海绵波波1073 小时前
flask后端开发(10):问答平台项目结构搭建
后端·python·flask
码农W3 小时前
QT--静态插件、动态插件
开发语言·qt
ke_wu3 小时前
结构型设计模式
开发语言·设计模式·组合模式·简单工厂模式·工厂方法模式·抽象工厂模式·装饰器模式
赵谨言3 小时前
基于python网络爬虫的搜索引擎设计
爬虫·python·搜索引擎