范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

PythonPandasMatplotlib初探数据分析

  大数据测试,说来进入这块领域也快2年半了。每天工作的内容是验证数据表的逻辑正确性。
  最近偶有所思,数据测试能否更进一步?如何利用已有技能对海量数据进行全面分析,找出数据质量问题或协助数据分析师发现逻辑漏洞?
  再或者,能否向数据分析师转型呢?想得很多,思绪有些杂乱。于是我冷静了下,不再空想。我先做点东西出来看看,再评估下自己是否有这个能力和资质。
  花了1个星期的时间,学习了 Python 的 Pandas 模块,按照学习示例一边学习一边实操,慢慢地感觉就来了。对 Pandas 有了基本的认知后,我在寻找一个突破点,我想我不能一直只是这样按照示例代码敲下去,毫无意义。
  我得将所学的 Pandas 知识结合公司现有的业务进行运用。刚开始至少能简单地开始对某张数据表的某个指标进行数据分析。于是我按照这样的想法对 test. test_resv001_room_daily_df   表的 number_of_room_nights 指标开始了数据分析的探索。
  1、hivesql数据准备  #test_sql select hotel_code_new        ,substr(stay_date,1,7) as stay_date       ,sum(number_of_room_nights) as room_nts     from test.test_resv001_room_daily_df     where dt="2021-08-31"     and hotel_code_new in("CNSZV002","CWH","CWSW","ESL","FIJ")     and resv_status in("CHECKED IN","CHECKED OUT")     and substr(stay_date,1,7) in ("2019-01","2019-02","2019-03","2019-04","2019-05","2019-06","2019-07","2019-08","2019-09","2019-10","2019-11","2019-12")     group by hotel_code_new,substr(stay_date,1,7)     order by hotel_code_new,substr(stay_date,1,7)
  hivesql内容说明:
  从上面的 hivesql 语句可以看出,这条 sql 的目的是查询出 hotel_code_new 为 "CNSZV002","CWH","CWSW","ESL","FIJ" 在2019年各个月份的 number_of_room_nights 指标总和,按照 hotel_code_new 和月份作分组和排序。
  2、代码实现  from impala.dbapi import connect import warnings import pandas as pd import matplotlib.pyplot as plt  hive_sql = test_sql#1中数据准备的hivesql语句  def hive_connect(sql):     warnings.filterwarnings("ignore")     config_hive_beta = {         "host": "10.7.89.01",  #hive的host地址         "port": 10000,    #hive的端口号         "user": "hive001",    #hive的username         "password": "hive001",    #hive的password         "database": "tmp",     #hive中需要查询的数据库名         "auth_mechanism": "PLAIN" #hive的hive-site.xml配置文件中获取     }     conn = connect(**config_hive_beta)     cursor = conn.cursor()     cursor.execute(sql)     hive_all_data = cursor.fetchall()     return hive_all_data  all_data = hive_connect(test_sql)  CNSZV002_dt = [] CWH_dt = [] CWSW_dt = [] ESL_dt = [] FIJ_dt = []  CNSZV002_data = [] CWH_data = [] CWSW_data = [] ESL_data = [] FIJ_data = [] for i in range(len(all_data)):     if all_data[i][0] == "CNSZV002":         CNSZV002_data.append(all_data[i][2])         CNSZV002_dt.append(all_data[i][1])     elif all_data[i][0] == "CWH":         CWH_data.append(all_data[i][2])         CWH_dt.append(all_data[i][1])     elif all_data[i][0] == "CWSW":         CWSW_data.append(all_data[i][2])         CWSW_dt.append(all_data[i][1])     elif all_data[i][0] == "ESL":         ESL_data.append(all_data[i][2])         ESL_dt.append(all_data[i][1])     elif all_data[i][0] == "FIJ":         FIJ_data.append(all_data[i][2])         FIJ_dt.append(all_data[i][1])  i0_a = pd.MultiIndex.from_tuples([("CNSZV002", x) for x in CNSZV002_dt], names=["dt", ""]) i0_b = pd.MultiIndex.from_tuples([("CWH", x) for x in CWH_dt], names=["dt", ""]) i0_c = pd.MultiIndex.from_tuples([("CWSW", x) for x in CWSW_dt], names=["dt", ""]) i0_d = pd.MultiIndex.from_tuples([("ESL", x) for x in ESL_dt], names=["dt", ""]) i0_e = pd.MultiIndex.from_tuples([("FIJ", x) for x in FIJ_dt], names=["dt", ""])  df0_a = pd.DataFrame(CNSZV002_data, index=i0_a) df0_b = pd.DataFrame(CWH_data, index=i0_b) df0_c = pd.DataFrame(CWSW_data, index=i0_c) df0_d = pd.DataFrame(ESL_data, index=i0_d) df0_e = pd.DataFrame(FIJ_data, index=i0_e) df = pd.concat([df0_a, df0_b, df0_c, df0_d, df0_e]) df = df.unstack("dt").fillna(0) df.columns = df.columns.droplevel() print(df)
  3、hive数据库all_data的数据结构查询结果  all_data = [("CNSZV002", "2019-06", 2353), ("CNSZV002", "2019-07", 2939), ("CNSZV002", "2019-08", 5148),              ("CNSZV002", "2019-09", 3850), ("CNSZV002", "2019-10", 4973), ("CNSZV002", "2019-11", 5467),              ("CNSZV002", "2019-12", 4742), ("CWH", "2019-01", 11023), ("CWH", "2019-02", 9824),              ("CWH", "2019-03", 13737), ("CWH", "2019-04", 14603), ("CWH", "2019-05", 14061), ("CWH", "2019-06", 12839),              ("CWH", "2019-07", 14638), ("CWH", "2019-08", 14457), ("CWH", "2019-09", 11648), ("CWH", "2019-10", 14387),              ("CWH", "2019-11", 13758), ("CWH", "2019-12", 11461), ("CWSW", "2019-01", 5914), ("CWSW", "2019-02", 4434),              ("CWSW", "2019-03", 6003), ("CWSW", "2019-04", 6611), ("CWSW", "2019-05", 6586), ("CWSW", "2019-06", 5840),             ("CWSW", "2019-07", 6624), ("CWSW", "2019-08", 7001), ("CWSW", "2019-09", 5792), ("CWSW", "2019-10", 6898),             ("CWSW", "2019-11", 6944), ("CWSW", "2019-12", 5404), ("ESL", "2019-01", 11008), ("ESL", "2019-02", 11605),              ("ESL", "2019-03", 14493), ("ESL", "2019-04", 12231), ("ESL", "2019-05", 13571), ("ESL", "2019-06", 12307),             ("ESL", "2019-07", 13777), ("ESL", "2019-08", 12866), ("ESL", "2019-09", 13276), ("ESL", "2019-10", 13223),              ("ESL", "2019-11", 14580), ("ESL", "2019-12", 13050), ("FIJ", "2019-01", 5855), ("FIJ", "2019-02", 2660),              ("FIJ", "2019-03", 3511), ("FIJ", "2019-04", 7763), ("FIJ", "2019-05", 7254), ("FIJ", "2019-06", 10641),              ("FIJ", "2019-07", 11297), ("FIJ", "2019-08", 11672), ("FIJ", "2019-09", 10737), ("FIJ", "2019-10", 11867),              ("FIJ", "2019-11", 10042), ("FIJ", "2019-12", 8412)]
  4、代码实现2中的print(df)输出结果  dt       CNSZV002      CWH    CWSW      ESL      FIJ                                                      2019-01       0.0  11023.0  5914.0  11008.0   5855.0 2019-02       0.0   9824.0  4434.0  11605.0   2660.0 2019-03       0.0  13737.0  6003.0  14493.0   3511.0 2019-04       0.0  14603.0  6611.0  12231.0   7763.0 2019-05       0.0  14061.0  6586.0  13571.0   7254.0 2019-06    2353.0  12839.0  5840.0  12307.0  10641.0 2019-07    2939.0  14638.0  6624.0  13777.0  11297.0 2019-08    5148.0  14457.0  7001.0  12866.0  11672.0 2019-09    3850.0  11648.0  5792.0  13276.0  10737.0 2019-10    4973.0  14387.0  6898.0  13223.0  11867.0 2019-11    5467.0  13758.0  6944.0  14580.0  10042.0 2019-12    4742.0  11461.0  5404.0  13050.0   8412.0
  手工校对通过,与 hivesql 输出结果一致。
  5、将dataframe数据结构的df数据使用plot生成趋势图  df = df.cumsum() plt.figure() df.plot() #df.plot(kind="bar")  plt.legend(loc="best") plt.show()
  调用df.plot()不带任何参数的趋势图如下:
  上述折线图表示:当前月份值及历史月份值的累加和。
  调用df.plot(kind="bar")时加上参数kind="bar"的趋势图如下:
  上述柱状图表示:当前月份值及历史月份值的累加和。
  两个图只是展示形式上的区别,都能在一定程度上体现2019年12个月份每个不同 hotel_code_new 当前月份与历史月份 number_of_room_nights 值的累加和的数据分布情况,可以说是一个简单的数据分析。
  6、将dataframe数据写入csv文件  #print(df)输出结果为dataframe数据类型 df.to_csv("room_nts.csv")
  room_nts.csv内容如下:
  7、读取csv文件中dataframe数据  room_nts = pd.read_csv("room_nts.csv") #print(room_nts)    Unnamed: 0  CNSZV002      CWH    CWSW      ESL      FIJ 0     2019-01       0.0  11023.0  5914.0  11008.0   5855.0 1     2019-02       0.0   9824.0  4434.0  11605.0   2660.0 2     2019-03       0.0  13737.0  6003.0  14493.0   3511.0 3     2019-04       0.0  14603.0  6611.0  12231.0   7763.0 4     2019-05       0.0  14061.0  6586.0  13571.0   7254.0 5     2019-06    2353.0  12839.0  5840.0  12307.0  10641.0 6     2019-07    2939.0  14638.0  6624.0  13777.0  11297.0 7     2019-08    5148.0  14457.0  7001.0  12866.0  11672.0 8     2019-09    3850.0  11648.0  5792.0  13276.0  10737.0 9     2019-10    4973.0  14387.0  6898.0  13223.0  11867.0 10    2019-11    5467.0  13758.0  6944.0  14580.0  10042.0 11    2019-12    4742.0  11461.0  5404.0  13050.0   8412.0
  8、将dataframe多维数据存储到excel中  df.to_excel("room_nts.xlsx", sheet_name="room_nts")
  room_nts.xlsx文件中sheet_name为room_nts的内容如下:
  9、从excel中读取dataframe多维数据  excel_read_result = pd.read_excel("room_nts.xlsx", sheet_name="room_nts", index_col=None, na_values=["NA"]) print(excel_read_result)    Unnamed: 0  CNSZV002    CWH  CWSW    ESL    FIJ 0     2019-01         0  11023  5914  11008   5855 1     2019-02         0   9824  4434  11605   2660 2     2019-03         0  13737  6003  14493   3511 3     2019-04         0  14603  6611  12231   7763 4     2019-05         0  14061  6586  13571   7254 5     2019-06      2353  12839  5840  12307  10641 6     2019-07      2939  14638  6624  13777  11297 7     2019-08      5148  14457  7001  12866  11672 8     2019-09      3850  11648  5792  13276  10737 9     2019-10      4973  14387  6898  13223  11867 10    2019-11      5467  13758  6944  14580  10042 11    2019-12      4742  11461  5404  13050   8412
  小结
  今天分享的数据分析内容比较基础,主要是将学到的技能与业务相结合的初步探索,后续还需要不断探索与学习,将学习到的技能加以思考并运用到实际项目业务中,如此方能走得更远。

光影交织,万物共生,华为P50Pocket折叠屏旗舰手机即将发布所有人都知道2018年的夏天是全网最美的夏天,草长燕飞,纸短情长。而2019年的夏天却是一个令很多人不愉快的季节。2019年的5月16日,美国正式将华为列入所谓的实体清单,此时我们罗永浩回归科技行业后将进军ARVRMR今日,罗永浩在其微博评论区表示回归后将打算做ARVRMR。在锤子科技手机业务尚未出售之前,罗永浩就秘密创建过一个VR团队,但是后续如何未知。2017年罗永浩明确表态下一个平台如果没折叠屏能复现天马行空的手机形态吗?不可否认,现在智能手机越来越无趣,外观设计愈发趋同,功能特性也八九不离十。很多人拿到手机,并非打量外观,而是第一时间装好App,发出带尾巴的状态分享出去。愈发成熟,逐步成为工业标品6个华为手机实用技巧,看完才知道,原来手机还能这么用哈喽!大家好,我是小易,欢迎来到我的知识分享站!手机里总是有很多实用技巧,而大多数人只知道极少常规的,今天小易就给大家分享6个华为手机实用技巧,看完才知道,原来手机还能这么用!(本华为Mate50Pro渲染图永远不言失败,没有麒麟依然比iPhone13强华为P50Pocket新品已经被曝光,这说明华为对于手机业务丝毫没有放弃,依然还是在按部就班的准备新品机型的发布工作。另外也有消息表明,华为Mate50Pro也在积极的研发和准备当华为将发布新款折叠屏手机,不只是模仿三星,还学习了小米华为官方社交媒体发布消息,12月23日将发布新款折叠屏手机P50Pocket。结合爆料消息来看,这是一款折叠屏手机。熟悉华为的朋友都知道,华为已经发布了多款折叠屏手机。华为Mate2021年荣耀20Pro主力机一周体验报告谈起荣耀20pro,当时我还是被dxo世界第二的标语吸引的。这部手机到手后我好奇2021年了把19年的它当主力机使用一周体验如何?不错本次体验报告的主角正是荣耀20pro。目前手上八年诚意之作的荣耀X30上手初体验,1499值不值?回顾8年,荣耀X系列始终如一,探索无止境,幸好百万90后用户的支持和陪伴。12月16日,八年诚意之作荣耀X30已经亮相。X系列一直以来都可谓是荣耀的主力担当,不仅仅是品质,更多的还极米x哈曼卡顿低音炮,一文看懂到底值不值得买随着生活水平的不断提高,客厅影音娱乐不再像以前一般单调乏味,人们更希望把自己的客厅打造成家庭影院和家庭K吧等丰富多元的休闲娱乐场所。除了客厅里的显示设备以外,优秀的音频设备依然是非从5999元跌至3799元,128GBIP68防水,经典iPhone跌至新低价手机厂商们发布新机的时候,上一代的旧机型往往仍然在市场中正常销售着,按理来说新一代手机发布之后旧机型会缺乏吸引力,但事实上有时候新机发布旧机型反而会卖得更好,因为旧机型基本都会随着折叠屏也有好手感,OPPOFindN带来舒适握持感因为折叠屏手机特殊的设计,重量和厚度都比普通手机有所增加,会一定程度上降低握持手感。刚发布的OPPOFindN在设计时十分注重握持手感,保证大屏体验的同时,也兼顾到日常使用握持手感
快充VS闪充!两种充电方式有什么区别?总算弄清楚了来源滨州日报滨州网随着手机的功能越来越强大每个人都成了机不离手的手机党不仅手机越来越智能化充电方式也更加方便快捷如今快充闪充的充电方式已成为各大手机品牌的标配两者虽仅有一字之差但本发布不到一年下跌1300元,12GB256GB,从高端市场跌至中端市场都说新年新气象,2022年终于到来了,不过这是阳历跨年,距离真正的农历春节还有一段时间,各大手机厂商都还没有放长假,其中部分手机厂商还在抓紧时间推出新一批旗舰手机,因为高通公司在去京东是要倒闭了吗?病毒期间这么坑消费者吗?(原创)昨天在京东买了食品,结果收到的时候包装袋都是坏的,漏我一身都是!快递小哥让我签收,然后赔付。我说这个食品连包装袋封口都是坏的,还卖那么贵!病毒期间,袋子坏的不敢吃了!我还是拒收了!记者发现电商达人也开始补税!年推广收入53万需补税13万2020年需要补税218527。7元,2021年需要补税127089。38元。这是一名自称京东联盟的电商达人在网上晒出的补税单。据他透露,这份补税通知来自京东联盟。他所贴出的补税通影音神器cool20pro是怎么征服2千元消费者?酷派影音神器cool20pro是怎么征服消费者?一起来看看Cool20Pro薄雾黑6GB128GB开箱真容。这款手机于2021年12月初发布,作为2千元手机市场的又一精品,倾注了酷像雷军一样的有钱人,会去这样的App里获取收益吗以前很火的一个段子,说比尔盖茨挣钱的速度超过捡钱的速度,所以比尔盖茨掉了一沓钱,他不会去捡。后来比尔盖茨辟谣。原话是捡钱又不耽误我挣钱,傻子才不会去捡。这一段话就应该解释了,雷军会氢能光伏芯片概念公司,投1。5亿研发氢燃料电池,股票已调整119天这是一家国内同时行驶在氢能光伏和半导体赛道上的新能源企业。2021年8月公司发出公告称,拟投资1。5亿元人民币设立全资子公司,研发氢能源燃料电池相关技术。目前该企业的净利润已经连续2022年五大技术趋势2022年即将到来,而科技界并没有停滞不前。岁末年初之时,我们总是趋向于总结过去展望未来。俯瞰2021年科学技术的发展和进步,我们可以预见到2022年科技趋势的到来加速消失。以下是日本电信巨头NTT计划在2025年大阪世博会上发布6G技术日经新闻1月1日消息,日本电信巨头NTT西部公司总裁小林充佳表示,NTT公司计划在2025年大阪世博会上发布目前开发中的试验性6G网络。据悉,NTT已开始设计6G网络的基础设施,细石墨烯在中国就是一个骗局?不过,尽管石墨烯的应用前景越来越被看好,另一种截然不同的说法也是斩钉截铁石墨烯在中国就是一个骗局。2015年3月,中科院重庆绿色智能技术研究院宣布推出一款名为影驰SETTLER的石美国主要社交网站领英关闭中国服务领英(LinkedIn)表示,由于运营环境越来越具挑战性以及更高的合规要求,将关闭在中国的职业网络服务。至此,美国的社交网络与中国完全断裂。微软旗下的领英表示,它将为中国市场提供一