本文目录
python新手关于爬虫的简单例子
以下代码调试通过:
# coding=utf-8import urllibdef getHtml(url): page = urllib.urlopen(url) html = page.read() return html***隐藏网址***print html
运行效果:
python简单的函数定义和用法实例
python简单的函数定义和用法实例这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下具体分析如下:这里定义了一个温度转换的函数及其用法。 def convertTemp(temp, scale): if scale == "c": return (temp - 32.0) * (5.0/9.0) elif scale == "f": return temp * 9.0/5.0 + 32temp = int(input("Enter a temperature: "))scale = input("Enter the scale to convert to: ")converted = convertTemp(temp, scale)print("The converted temp is: " + str(converted))希望本文所述对大家的Python程序设计有所帮助。
Python数据分析案例-药店销售数据分析
最近学习了Python数据分析的一些基础知识,就找了一个药品数据分析的小项目来练一下手。
数据分析的目的:
本篇文章中,假设以朝阳医院2018年销售数据为例,目的是了解朝阳医院在2018年里的销售情况,通过对朝阳区医院的药品销售数据的分析,了解朝阳医院的患者的月均消费次数,月均消费金额、客单价以及消费趋势、需求量前几位的药品等。
数据分析基本过程包括:获取数据、数据清洗、构建模型、数据可视化以及消费趋势分析。
数据准备
数据是存在Excel中的,可以使用pandas的Excel文件读取函数将数据读取到内存中,这里需要注意的是文件名和Excel中的sheet页的名字。读取完数据后可以对数据进行预览和查看一些基本信息。
获取数据:朝阳医院2018年销售数据.xlsx(非真实数据) 提取码: 6xm2
导入原始数据
数据准备
数据是存在Excel中的,可以使用pandas的Excel文件读取函数将数据读取到内存中,这里需要注意的是文件名和Excel中的sheet页的名字。读取完数据后可以对数据进行预览和查看一些基本信息。
获取数据:朝阳医院2018年销售数据.xlsx(非真实数据) 提取码: 6xm2
导入原始数据
数据清洗
数据清洗过程包括:选择子集、列名重命名、缺失数据处理、数据类型转换、数据排序及异常值处理
(1)选择子集
在我们获取到的数据中,可能数据量非常庞大,并不是每一列都有价值都需要分析,这时候就需要从整个数据中选取合适的子集进行分析,这样能从数据中获取最大价值。在本次案例中不需要选取子集,暂时可以忽略这一步。
(2)列重命名
在数据分析过程中,有些列名和数据容易混淆或产生歧义,不利于数据分析,这时候需要把列名换成容易理解的名称,可以采用rename函数实现:
(3)缺失值处理
获取的数据中很有可能存在缺失值,通过查看基本信息可以推测“购药时间”和“社保卡号”这两列存在缺失值,如果不处理这些缺失值会干扰后面的数据分析结果。
缺失数据常用的处理方式为删除含有缺失数据的记录或者利用算法去补全缺失数据。
在本次案例中为求方便,直接使用dropna函数删除缺失数据,具体如下:
(4)数据类型转换
在导入数据时为了防止导入不进来,会强制所有数据都是object类型,但实际数据分析过程中“销售数量”,“应收金额”,“实收金额”,这些列需要浮点型(float)数据,“销售时间”需要改成时间格式,因此需要对数据类型进行转换。
可以使用astype()函数转为浮点型数据:
在“销售时间”这一列数据中存在星期这样的数据,但在数据分析过程中不需要用到,因此要把销售时间列中日期和星期使用split函数进行分割,分割后的时间,返回的是Series数据类型:
此时时间是没有按顺序排列的,所以还是需要排序一下,排序之后索引会被打乱,所以也需要重置一下索引。
其中by:表示按哪一列进行排序,ascending=True表示升序排列,ascending=False表示降序排列
先查看数据的描述统计信息
通过描述统计信息可以看到,“销售数量”、“应收金额”、“实收金额”这三列数据的最小值出现了负数,这明显不符合常理,数据中存在异常值的干扰,因此要对数据进一步处理,以排除异常值的影响:
数据清洗完成后,需要利用数据构建模型(就是计算相应的业务指标),并用可视化的方式呈现结果。
月均消费次数 = 总消费次数 / 月份数(同一天内,同一个人所有消费算作一次消费)
月均消费金额 = 总消费金额 / 月份数
客单价 = 总消费金额 / 总消费次数
从结果可以看出,每天消费总额差异较大,除了个别天出现比较大笔的消费,大部分人消费情况维持在1000-2000元以内。
接下来,我销售时间先聚合再按月分组进行分析:
结果显示,7月消费金额最少,这是因为7月份的数据不完整,所以不具参考价值。
1月、4月、5月和6月的月消费金额差异不大.
2月和3月的消费金额迅速降低,这可能是2月和3月处于春节期间,大部分人都回家过年的原因。
d. 分析药品销售情况
对“商品名称”和“销售数量”这两列数据进行聚合为Series形式,方便后面统计,并按降序排序:
截取销售数量最多的前十种药品,并用条形图展示结果:
结论:对于销售量排在前几位的药品,医院应该时刻关注,保证药品不会短缺而影响患者。得到销售数量最多的前十种药品的信息,这些信息也会有助于加强医院对药房的管理。
每天的消费金额分布情况:一横轴为时间,纵轴为实收金额画散点图。
结论: 从散点图可以看出,每天消费金额在500以下的占绝大多数,个别天存在消费金额很大的情况。
《/article》
python实现TSP问题的案例
import math from os import path import numpy as np import matplotlib.pyplot as plt class TSPInstance: ’’’ 设计一个类,实现从文件读入一个旅行商问题的实例 文件格式为: city number best known tour length list of city position (index x y) best known tour (city index starts from 1) 以文件01eil51.txt为例: 第一行51为城市数 第二行426为最优解的路径长度 第三行开始的51行为各个城市的序号、x坐标和y坐标 最后是最优解的访问城市系列(注意里面城市序号从1开始,而python的sequence是从0开始) Eil51Tour.png是最优解的城市访问顺序图 ’’’ def __init__(self, file_name): ’’’ 从文件file_name读入旅行商问题的数据 ’’’ self.file_name=file_name a= open(file_name) # 城市数量 self.city_num = a.readline() # 返回坐标 51行,3列 self.city = np.zeros((int(self.city_num), 3)) # x坐标 self.x = np.zeros(int(self.city_num)) # y坐标 self.y = np.zeros(int(self.city_num)) # 城市ID self.id = np.zeros(int(self.city_num)) b = a.readlines() for i, content in enumerate(b): if i in range(1, 52 ): # 单行赋值 self.city = content.strip(’\n’).split(’ ’) self.x self.y for i, content in enumerate(b): if i in range(53, 104): self.id = content.strip(’\n’) @property def citynum(self): ’’’ 返回城市数 ’’’ return self.city_num @property def optimalval(self): ’’’ 返回最优路径长度 ’’’ c = 0 i = 1 s = open(self.file_name) str = s.readlines() for content in str: if i == 2: c = content i = i + 1 return c @property def optimaltour(self): ’’’ 返回最优路径 ’’’ tour = np.array(self.id) return tour def __getitem__(self, n): ’’’ 返回城市n的坐标,由x和y构成的tuple:(x,y) ’’’ (x, y) = (self.x) return (x, y) def get_distance(self, n, m): ’’’ 返回城市n、m间的整数距离(四舍五入) ’’’ u=int(self.x) v=int(self.y) dis = math.sqrt(pow(u,2) + pow(v,2)) return int(dis+0.5) def evaluate(self, tour): ’’’ 返回访问系列tour所对应的路径程度 ’’’ dis = 0 for i in range(50): dis += self.get_distance(int(tour)) dis += self.get_distance(int(tour)) return dis def plot_tour(self, tour): ’’’ 画出访问系列tour所对应的路径路 ’’’ for i in range(51): x0,y0 = self.__getitem__(i) plt.scatter(int(x0),int(y0),s=10,c=’c’) #记住坐标点的画法 for i in range(len(tour)-1): x1,y1 = self.__getitem__(int(tour)) x,y = self.__getitem__(int(tour)) plt.plot(,c=’b’) x2,y2 = self.__getitem__(int(tour)) x3,y3 = self.__getitem__(int(tour)) plt.plot(,c=’b’) plt.xlabel(’x label’) plt.ylabel(’y label’) plt.title("City access sequence diagram") plt.plot() plt.show() if __name__ == "__main__": file_name = path.dirname(__file__) + "/1.txt" instance = TSPInstance(file_name) print(instance.citynum) print(instance.evaluate(instance.optimaltour)) print(instance.optimaltour) print(instance.__getitem__(2)) print(instance.get_distance(0, 1)) instance.plot_tour(instance.optimaltour) ’’’ output: 51 426 (49.0, 49.0) 14 ’’’其实解决TSP问题有很多方法,比如模拟退火算法,贪心算法,回溯算法等等。希望各位博友可以把你们的解决方法出现在评论区。