Python 数据分析 git 工具使用 & flask学习

git工具使用

  • 1. git
  • 2. gitee 免密登录
  • 3. pycharm 上使用git
  • 4. 绘制数据看板前的预热(给数据/数据接口在前端页面进行渲染)
    • 后端渲染:
    • 前端渲染:
    • 利用echars 绘制图像(数据写死的)
    • 利用echars 绘制图像(数据通过自己写的数据接口导入)
  • 5.补充:vs code 好用的插件

1. git

软件控制管理 ------> 版本控制 ------> 管理产品文件(代码、文档、脚本、设计稿等)的各个历史版本

1990s —> CVS / VSS —> 锁定模式

2000 —> Subversion —> SVN —> 合并模式 —> 中央服务器

2005 —> Git —> 去中心化的版本控制系统 —> 分布式版本控制系统
Unix —> Oracle
服务器操作系统:Linux —> Linus Torvalds —> 1991 —> Minix
BitKeeper —> Git

Bash —> Linux系统的人机交互环境(壳程序 - 人机接口),命令跟Windows命令行提示符相差很远。

Bash命令:

ls - list directory contents —> 列出文件夹下的内容 —> %ls
-l / -a

pwd - print working directory —> 打印当前工作目录 —> %pwd

cd - change directory —> 切换目录

mkdir - make directory —> 创建文件夹
-p —> --parents

touch —> 创建空文件或者修改文件的最后访问时间

clear —> 清除屏幕上的输出

cat —> 查看文件的内容
-n —> 给每一行添加行号

使用Git

git init —> 将一个普通的文件夹变成版本控制的仓库

git status —> 查看状态(工作区、暂存区、本地仓库是否同步)

git add —> 将文件从工作区同步到暂存区

如果第一次使用Git,再做第一次提交前要配置用户名和邮箱

git config --global user.email “[email protected]

git config --global user.name “jackfrued”

git commit -m “…” —> 提交,将暂存区同步到本地仓库

git log —> 查看提交日志(历史)

git restore —> 用暂存区的内容恢复工作区

git reset —> 重置版本

  • –hard:让工作区、暂存区、仓库保持同步
  • –mixed:让仓库和暂存区重置,但工作区保持不变
  • –soft:让仓库重置,暂存区和工作区保持不变

git reflog —> 查看到所有的提交日志(历史和未来)

Python 数据分析 git 工具使用 & flask学习_第1张图片

Git私服 ---->

GitHub:全球最大的代码托管平台(相当于是Git服务器,可以同步文件)

国内:

  • 码云 —> gitee.com
  • coding.net
  • 行云

git remote add origin 服务器仓库地址 —> 添加远端仓库(服务器)

git remote -v —> 查看远端仓库(服务器)

git remote rmeove origin —> 删除远端仓库

git push -u origin master —> 将本地的master分支上推到服务器

git clone 仓库地址 —> 克隆(下载)项目

git pull —> 从远端仓库(服务器)下拉文件

工作成果有冲突如何解决???
1. git pull ---> 将服务器上的代码拿下来 ---> CONFLICT ---> merge conflict
2. git diff ---> 查看有冲突的代码
3. 当面协商解决冲突代码,重新本地提交(git add / git commit)
4. git push ---> 解决冲突以后重新push到服务器

git 基本操作简易

2. gitee 免密登录

参考链接
桌面右键–> Git Bush Here

–> ssh-keygen -t rsa -C “[email protected]” 命令。连续3次回车

–> cd ~/.ssh

–> ls

–> cat id_rsa.pub

–> 复制公钥到这里
Python 数据分析 git 工具使用 & flask学习_第2张图片
测试是否成功:
git clone [email protected]:four-wings-act-recklessly/heiheihei.git

弹出:Are you sure you want to continue connecting (yes/no/[fingerprint])?

选择 yes

如果没有让输入密码即为成功

3. pycharm 上使用git

从版本控制系统获取代码
Python 数据分析 git 工具使用 & flask学习_第3张图片
点击上图按钮,粘贴项目 ssh 路径(做过免密登录的前提条件下)到 git 选项框 开始clone;或者也可以先右键 -->Git Bush here --> git clone ‘ssh路径’ 先把工程弄下来再放到pycharm中

先创建虚拟环境:注意虚拟环境路径最好是: ./工程名/venv
Python 数据分析 git 工具使用 & flask学习_第4张图片
.gitignore文件

.idea

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

虚拟环境创建好之后导入库

pip install flask
pip install pymysql
pip install freeze
pip freeze > requirements.txt
注意后面导入新库的时候都需要执行这句:pip freeze > requirements.txt

pip install requests
pip freeze > requirements.txt

4. 绘制数据看板前的预热(给数据/数据接口在前端页面进行渲染)

后端渲染:

在服务器端把动态页面生成出来,然后把渲染好的HTML页面给到浏览器。
后端渲染的方式在服务器并发访问量较大的时候,会增加服务器的开销,导致服务器效率低下,响应较慢。

from flask import Flask

app = Flask(__name__)

@app.route('/test') #可以写成 @app.route('/') 我这里不这样写,因为这部分笔记是后来补充的,不能和已经有的@app.route('/')一样
def show_index():
    books = [
        "Python1",
        "Python2",
        "Python3",
        "Python4",
        "Python5",
        "Python6"
    ]
    content = '

hello ,world!

'
content += '
'
content += f'

今天推荐阅读的书籍是:

'
content += '
    ' for book in books: content += f'
  • 《{book}》
  • '
    content += '
'
return content if __name__ == '__main__': app.run(host='0.0.0.0', port=8000, debug=True)

Python 数据分析 git 工具使用 & flask学习_第5张图片

前端渲染:

前端渲染︰不在服务器端渲染页面,服务器只负责提供数据,渲染页面的操作交给浏览器中的JavaScript来完成。

前端渲染也称为前后端分离的开发,后端开发者不需要有前端知识,因为他们只需要把提供数据的服务做好;同理,前端开发者也不需要有任何后端的知识,他们只需要调用后端提供的数据接口获取数据,
然后通过JavaScript将动态内容渲染到页面上。

下图是相关文件需要移动到新的位置
Python 数据分析 git 工具使用 & flask学习_第6张图片


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页title>
head>
<body>

<h1>
    <ul>
    <li>{
    { jitang }}li>
    ul>
h1>
<hr>
<p>今天推荐阅读的书籍:p>
<ul>
    <li>{
    { book }}li>
ul>
<img src="/static/images/guido.jpg" width="150">
body>
html>

静态页面运行时,不能直接点运行

http://127.0.0.1:8000/static/html/index.html

改进:main.py 加入重定向之后可以直接访问了

import random
import requests
from flask import Flask, redirect

app = Flask(__name__)


# http://127.0.0.1:8000/
@app.route('/')
def show_index():
	# 请求首页,重定向到 /static/html/index.html
    return redirect('/static/html/index.html')

if __name__ == '__main__':
    app.run(port=8000, debug=True)

下一步前端请求自己写的接口,申请数据渲染

main.py

import random
import requests
from flask import Flask, redirect

app = Flask(__name__)


# http://127.0.0.1:8000/
@app.route('/')
def show_index():
    # 请求首页,重定向到 /static/html/index.html
    return redirect('/static/html/index.html')
@app.route('/api/recs')
def get_recommendations():
    books = [
        "Python1",
        "Python2",
        "Python3",
        "Python4",
        "Python5",
        "Python6"
    ]
    n = random.randint(2, 5)
    selected_books = random.sample(books, n)

    resp = requests.get('http://api.tianapi.com/txapi/dujitang/index?key=d116541b64b5ec7f0b93996ec485a7c3')
    jitang = '今天没有毒鸡汤'
    if resp.status_code == 200:
        result = resp.json()
        if result['code'] == 200:
            jitang = result['newslist'][0]['content']
    return {
     'books':selected_books,'jitang':jitang}

if __name__ == '__main__':
    app.run(port=8000, debug=True)

index.html


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页title>
head>
<body>

<div id="app">
   <h3>{
    { jitang }}h3>
<hr>
<p>今天推荐阅读的书籍:p>
<ul>
    <li v-for="book in books">{
    { book }}li>
ul> 
div>

<img src="/static/images/guido.jpg" width="150">
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js">script>
<script>
    let app = new Vue({
      
        el:'#app',
        data:{
      
            jitang:'',
            books:[]
        },
        created:function(){
      
            //Promise 对象
            fetch('/api/recs')
            .then(resp => resp.json())
            .then(json=>{
      
                this.jitang = json.jitang
                this.books = json.books
            })
        }
    })
script>
body>
html>

打开浏览器刷新

http://127.0.0.1:8000/static/html/index.html

利用echars 绘制图像(数据写死的)


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页title>
    <style>
        #main {
      
            width: 400px;
            height: 300px;
            border: 1px solid black;
        }
    style>
head>
<body>

<div id="app">
   <h3>{
    { jitang }}h3>
<hr>
<p>今天推荐阅读的书籍:p>
<ul>
    <li v-for="book in books">{
    { book }}li>
ul> 
div>

<div id="main">div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js">script>
<script>
    let app = new Vue({
      
        el:'#app',
        data:{
      
            jitang:'',
            books:[]
        },
        created:function(){
      
            //Promise 对象
            fetch('/api/recs')
            .then(resp => resp.json())
            .then(json=>{
      
                this.jitang = json.jitang
                this.books = json.books
            })
        }
    })
script>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.0/echarts.min.js">script>
<script>
    //初始化绘图使用的div标签
    let myChart =echarts.init(document.querySelector('#main'))
    //
    let option = {
      
            //图例
            legend: {
      
                data: ['A组销量','B组销量']
            },
            //x
            xAxis: {
      
                data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
            },
            //y
            yAxis: {
      },
            //数据系列
            series: [{
      
                name: 'A组销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            },
            {
      
                name: 'B组销量',
                type: 'bar',
                data: [5, 23, 26, 19, 8, 20]
            }
            ]
        }
        myChart.setOption(option)
script>
body>
html>

output:
Python 数据分析 git 工具使用 & flask学习_第7张图片

利用echars 绘制图像(数据通过自己写的数据接口导入)

main.py

import random

import requests
from flask import Flask, redirect

app = Flask(__name__)


@app.route('/')
def show_index():
    # 请求首页,重定向到/static/html/index.html
    return redirect('/static/html/index.html')


@app.route('/api/sales')
def get_sales_data():
    group_a = [random.randint(5, 50) for _ in range(6)]
    group_b = [random.randint(5, 50) for _ in range(6)]
    return {
     
        'legend': ['销售A组', '销售B组'],
        'xData': ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子'],
        'yData': [group_a, group_b]
    }


@app.route('/api/recs')
def get_recommendations():
    books = [
        'Python从入门到实践',
        'MySQL必知必会',
        '数据思维',
        '人工智能导论',
        'PyTorch实战',
        '利用Python做数据分析'
    ]
    n = random.randint(2, 5)
    selected_books = random.sample(books, n)
    # 通过request请求三方服务获取毒鸡汤数据
    resp = requests.get('http://api.tianapi.com/txapi/dujitang/index?key=d116541b64b5ec7f0b93996ec485a7c3')
    jitang = '今天没有毒鸡汤'
    if resp.status_code == 200:
        result = resp.json()
        if result['code'] == 200:
            jitang = result['newslist'][0]['content']
    return {
     'books': selected_books, 'jitang': jitang}


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug=True)

index.py


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页title>
    <style>
        #main {
      
            width: 400px;
            height: 300px;
            border: 1px solid black;
        }
    style>
head>
<body>
    
    <div id="app">
        <h3>{
    { jitang }}h3>
        <hr>
        <p>今天推荐阅读的书籍是:p>
        <ul>
            <li v-for="book in books">{
    { book }}li>
        ul>
    div>
    <div id="main">div>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js">script>
    <script>
        // JavaScript
        let app = new Vue({
      
            el: '#app',
            data: {
      
                jitang: '',
                books: []
            },
            created() {
      
                fetch('/api/recs')
                    .then(resp => resp.json())
                    .then(json => {
      
                        this.jitang = json.jitang
                        this.books = json.books
                    })
            }
        })
    script>
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.0/echarts.min.js">script>
    <script>
        // 初始化绘图使用的div标签(初始化绘图用的画布对象)
        let myChart = echarts.init(document.querySelector('#main'))
        // 创建图表选项对象(绘图时需要使用的数组)
        let option = {
      
            // 图例
            legend: {
      
                data: []
            },
            // x轴
            xAxis: {
      
                data: []
            },
            // y轴
            yAxis: {
      },
            // 数据系列
            series: [
                {
      
                    name: '',
                    type: 'bar',
                    data: []
                },
                {
      
                    name: '',
                    type: 'bar',
                    data: []
                }
            ]
        }

        function refreshData() {
      
            // 发起获取数据的异步请求
            fetch('/api/sales')
                .then(resp => resp.json())
                .then(json => {
      
                    option.legend.data = json.legend
                    option.xAxis.data = json.xData
                    for (let i = 0; i < option.series.length; ++i) {
      
                        option.series[i].name = json.legend[i]
                        option.series[i].data = json.yData[i]
                    }
                    // 数据准备就绪,将数据渲染到echarts图表上
                    myChart.setOption(option)
                    // 5秒钟以后再次调用这个函数
                    setTimeout(refreshData, 5000)
                })
        }

        refreshData()
    script>
body>
html>

output:
Python 数据分析 git 工具使用 & flask学习_第8张图片

数据接口:

http://127.0.0.1:8000/api/sales
Python 数据分析 git 工具使用 & flask学习_第9张图片

5.补充:vs code 好用的插件

Python 数据分析 git 工具使用 & flask学习_第10张图片
在vscode 上编辑代码
Python 数据分析 git 工具使用 & flask学习_第11张图片
找到改文件,拖到VS code 中
Python 数据分析 git 工具使用 & flask学习_第12张图片
之后就可以编辑了,pycham可以同步
Python 数据分析 git 工具使用 & flask学习_第13张图片
作业:

1.连数据库画折线图

2,数据库里建表,所有内容均从数据库里读出来,销售组,类别,销售信息

你可能感兴趣的:(python培训内容及作业,git,flask)