python 은 어떻게 사이트 데 이 터 를 기어 오 르 고 데이터 시각 화 를 합 니까?

머리말
python 직위 와 관련 된 데이터 정 보 를 추출 하고 추출 한 데 이 터 를 csv 각종 파일 에 저장 한 다음 에 csv 파일 관련 필드 의 데 이 터 를 세척 하고 데이터 시각 화 전시,막대 그래프 전시,직사 도 전시,어 클 라 우 드 전시 등 을 포함 하여 시각 화 된 데이터 에 따라 진일보 한 분석 을 한다.나머지 분석 과 전시 독자 가 스스로 발휘 하고 확장 할 수 있 는 것 은 각종 분석 과 서로 다른 저장 방식 등 을 포함한다.
1.기어 오 르 기 및 분석 관련 의존 가방
Python 버 전:Python 3.6요청:다운로드 페이지math:위로
  • time:일시 정지
  • pandas:데이터 분석 및 csv 파일 로 저장
  • matplotlib:그림 그리 기pyecharts:그림 그리 기통계 모델 링wordcloud,scipy,jieba:중국어 단어 구름 생 성
    pylab:그림 을 설정 하면 중국 어 를 표시 할 수 있 습 니 다상기 설치 또는 사용 과정 에서 독자 가 설치 또는 가 져 오기 실패 등 문제 에 부 딪 힐 수 있 습 니 다.자체 바 이 두 는 가방 에 의존 하 는 적당 한 버 전 을 선택 하 십시오.
    2.웹 페이지 구조 분석
    Chrome 을 통 해'python 엔지니어'를 검색 한 다음 에 오른쪽 단 추 를 누 르 면 검사 또는 F12 를 클릭 하고 검사 기능 으로 웹 소스 코드 를 봅 니 다.다음 페이지 를 누 르 면 브 라 우 저의 검색 표시 줄 의 url 이 변 하지 않 습 니 다.이것 은 체크 망 이 반 파충류 체 제 를 만 들 었 기 때 문 입 니 다.직위 정 보 는 소스 코드 가 아니 라 JSON 파일 에 저장 되 어 있 기 때문에 저 희 는 JSON 을 직접 다운로드 합 니 다.사전 방법 으로 데 이 터 를 직접 읽 습 니 다.원 하 는 python 직위 와 관련 된 정 보 를 얻 을 수 있 습 니 다.

    기어 오 르 려 는 python 엔지니어 직위 정 보 는 다음 과 같 습 니 다.

    우리 가 원 하 는 데 이 터 를 얻 기 위해 서 우 리 는 프로그램 으로 브 라 우 저 를 모 의 하여 웹 페이지 를 조회 해 야 합 니 다.그래서 우 리 는 기어 오 르 는 과정 에서 머리 정 보 를 추가 합 니 다.머리 정보 도 우리 가 웹 페이지 를 분석 함으로써 얻 은 것 입 니 다.웹 페이지 를 통 해 우 리 는 이 요청 의 머리 정 보 를 알 고 요청 한 정보 와 요청 방식 은 POST 요청 입 니 다.이렇게 하면 우 리 는 이 url 이 우리 가 생각 하 는 데 이 터 를 받 아 진일보 한 처 리 를 요청 할 수 있다.

    웹 페이지 정보 코드 는 다음 과 같 습 니 다.
    
    import requests
    
    url = ' https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
    
    
    def get_json(url, num):
     """
         url   requests                   ,
     :return:
     """
     url1 = 'https://www.lagou.com/jobs/list_python%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88?labelWords=&fromSearch=true&suginput='
     headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
      'Host': 'www.lagou.com',
      'Referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput=',
      'X-Anit-Forge-Code': '0',
      'X-Anit-Forge-Token': 'None',
      'X-Requested-With': 'XMLHttpRequest'
     }
     data = {
      'first': 'true',
      'pn': num,
      'kd': 'python   '}
     s = requests.Session()
     print('  session:', s, '

    ') s.get(url=url1, headers=headers, timeout=3) cookie = s.cookies print(' cookie:', cookie, '

    ') res = requests.post(url, headers=headers, data=data, cookies=cookie, timeout=3) res.raise_for_status() res.encoding = 'utf-8' page_data = res.json() print(' :', page_data, '

    ') return page_data print(get_json(url, 1))
    검색 을 통 해 우 리 는 각 페이지 에 15 개의 직위 가 표시 되 고 최대 30 페이지 가 표시 되 는 것 을 알 수 있 습 니 다.웹 소스 코드 를 분석 한 결과 JSON 을 통 해 총 직위 수 를 읽 을 수 있 고 전체 직위 수 와 각 페이지 에 표 시 될 직위 수 를 계산 할 수 있 습 니 다.우 리 는 총 몇 페이지 가 있 는 지 계산 한 다음 에 페이지 에 따라 올 라 가 마지막 으로 직위 정 보 를 모 아 CSV 형식의 파일 에 기록 할 수 있 습 니 다.
    프로그램 실행 결 과 는 그림 과 같 습 니 다.

    모든 python 관련 직위 정 보 는 다음 과 같 습 니 다.

    3.데이터 세척 후 입고
    데이터 청 소 는 사실 많은 부분 을 차지 할 수 있 습 니 다.우 리 는 여기 서 간단 한 데이터 분석 만 한 후에 입고 합 니 다.체크 망 에 python 관련 직위 를 입력 하면 18988 개가 됩 니 다.당신 은 업무 중의 수요 에 따라 입고 할 필드 를 선택 하고 일부 필드 를 진일보 한 선별 할 수 있 습 니 다.예 를 들 어 우 리 는 직무 명칭 에서 인턴 인 일자 리 를 제거 할 수 있 습 니 다.지정 한 필드 구역 이 우리 가 지정 한 지역 에 있 는 직위 를 걸 러 내 고 필드 임금 의 평균 치 를 얻 으 며 최저 치 와 차액 의 4 분 의 1 을 평균치 로 하 는 등 수요 에 따라 자 유 롭 게 발휘 할 수 있 습 니 다.
    
    import pandas as pd
    import matplotlib.pyplot as plt
    import statsmodels.api as sm
    from wordcloud import WordCloud
    from scipy.misc import imread
    from imageio import imread
    import jieba
    from pylab import mpl
    
    #   matplotlib      
    mpl.rcParams['font.sans-serif'] = ['SimHei'] #       
    mpl.rcParams['axes.unicode_minus'] = False #          '-'        
    #     
    df = pd.read_csv('Python_development_engineer.csv', encoding='utf-8')
    
    #       ,       
    # df.drop(df[df['    '].str.contains('  ')].index, inplace=True)
    # print(df.describe())
    
    
    #   csv            ,                ,       
    pattern = '\d+'
    # print(df['    '], '


    ') # print(df[' '].str.findall(pattern)) df[' '] = df[' '].str.findall(pattern) print(type(df[' ']), '


    ') avg_work_year = [] count = 0 for i in df[' ']: # print(' ',i) # ' ' ' ', , 0 if len(i) == 0: avg_work_year.append(0) # print('nihao') count += 1 # , elif len(i) == 1: # print('hello world') avg_work_year.append(int(''.join(i))) count += 1 # else: num_list = [int(j) for j in i] avg_year = sum(num_list) / 2 avg_work_year.append(avg_year) count += 1 print(count) df['avg_work_year'] = avg_work_year # , 25%, df['salary'] = df[' '].str.findall(pattern) # avg_salary_list = [] for k in df['salary']: int_list = [int(n) for n in k] avg_salary = int_list[0] + (int_list[1] - int_list[0]) / 4 avg_salary_list.append(avg_salary) df[' '] = avg_salary_list # df.to_csv('python.csv', index=False)
    4.데이터 시각 화 전시
    다음은 데이터 에 대한 시각 화 전시 입 니 다.일부 보기 로 만 시각 화 된 전 시 를 합 니 다.만약 에 독자 가 다른 필드 에 대해 보 여 주 려 고 하고 서로 다른 보기 유형 으로 보 여 주 려 면 스스로 발휘 하 십시오.주:아래 코드 에 도 입 된 모듈 은 마지막 완성 코드 를 보십시오.
    1.python 임금 의 주파수 직사 도 를 그리고 저장 합 니 다.
    인터넷 업계 python 엔지니어 와 관련 된 일자리 의 보편적 인 임금 의 한 부분 구간 이 어느 범위 에 있 는 지 보고 싶다 면 우 리 는 matplotlib 라 이브 러 리 를 통 해 csv 파일 에 저 장 된 데 이 터 를 시각 적 으로 전시 할 수 있 습 니 다.그러면 우 리 는 데이터 의 한 부분 추 세 를 더욱 직관 적 으로 볼 수 있 습 니 다.
    
    #   python           
    plt.hist(df['  '],bins=8,facecolor='#ff6700',edgecolor='blue') # bins        
    plt.xlabel('  (  /  )')
    plt.ylabel('  /  ')
    plt.title('python     ')
    plt.savefig('python    .jpg')
    plt.show()
    실행 결 과 는 다음 과 같 습 니 다.

    2.python 관련 직위 의 지리 적 위치 떡 모양 그림 그리 기
    지리 python 직위 의 지리 적 위치 분 부 를 통 해 우 리 는 IT 업계 의 주요 집중 지부 가 어떤 도시 에 있 는 지 대체적으로 알 수 있다.그러면 우리 가 지역 을 선택 하여 선택 적 인 취업 을 하 는 데 유리 하고 더 많은 면접 기 회 를 얻 을 수 있다.매개 변 수 는 스스로 디 버 깅 하거나 수요 에 따라 추가 할 수 있다.
    
    #         
    city = df['  '].value_counts()
    print(type(city))
    # print(len(city))
    label = city.keys()
    print(label)
    city_list = []
    count = 0
    n = 1
    distance = []
    for i in city:
    
     city_list.append(i)
     print('    ', len(city_list))
     count += 1
     if count > 5:
      n += 0.1
      distance.append(n)
     else:
      distance.append(0)
    plt.pie(city_list, labels=label, labeldistance=1.2, autopct='%2.1f%%', pctdistance=0.6, shadow=True, explode=distance)
    plt.axis('equal') #        
    plt.legend(loc='upper left', bbox_to_anchor=(-0.1, 1))
    plt.savefig('python       .jpg')
    plt.show()
    실행 결 과 는 다음 과 같 습 니 다.

    3.pyechart 기반 도시 분포 막대 그래프 그리 기
    pycharts 는 python 에서 바 이 두 가 js 를 바탕 으로 개발 한 echarts 인 터 페 이 스 를 호출 하고 데이터 에 대해 각종 시각 화 작업 을 할 수 있 습 니 다.더 많은 데이터 시각 화 도형 전 시 는 echarts 홈 페이지 를 참고 할 수 있 습 니 다.pyecharts 기반 문 서 는 다음 과 같은 홈 페이지 를 참고 할 수 있 습 니 다.
    
    city = df['  '].value_counts()
    print(type(city))
    print(city)
    # print(len(city))
    
    keys = city.index #    keys = city.keys()
    values = city.values
    from pyecharts import Bar
    
    bar = Bar("python        ")
    bar.add("  ", keys, values)
    bar.print_echarts_options() #           ,       
    bar.render(path='a.html')
    실행 결 과 는 다음 과 같 습 니 다.

    4.python 복지 와 관련 된 단어 구름 그리 기
    단어 구름 그림 은 문자 구름 이 라 고도 부 르 는데 텍스트 데이터 에 나타 나 는 빈도 가 비교적 높 은 키 워드 를 시각 적 으로 돋 보이 게 하고'키워드 의 렌 더 링'을 형성 하면 구름 과 같은 컬러 그림 을 형성 하여 대량의 텍스트 정 보 를 걸 러 내 고 사람들 로 하여 금 텍스트 데이터 의 주요 표현 의 미 를 한눈 에 볼 수 있 게 한다.jieba 단어 와 단어 클 라 우 드 를 이용 하여 월 드 클 라 우 드(사용자 정의 배경)를 만 들 었 습 니 다.다음은 python 관련 직위 의 복지 에 대해 단어 클 라 우 드 를 보 여 주 었 습 니 다.대부분의 회사 의 복지 대우 가 어느 곳 에 집중 되 는 지 직관 적 으로 볼 수 있 습 니 다.
    
    #          
    text = ''
    for line in df['    ']:
     if len(eval(line)) == 0:
      continue
     else:
      for word in eval(line):
       # print(word)
       text += word
    
    cut_word = ','.join(jieba.cut(text))
    word_background = imread('  .jpg')
    cloud = WordCloud(
     font_path=r'C:\Windows\Fonts\simfang.ttf',
     background_color='black',
     mask=word_background,
     max_words=500,
     max_font_size=100,
     width=400,
     height=800
    
    )
    word_cloud = cloud.generate(cut_word)
    word_cloud.to_file('      .png')
    plt.imshow(word_cloud)
    plt.axis('off')
    plt.show()
    실행 결 과 는 다음 과 같 습 니 다.

    5.파충류 및 시각 화 완전 코드
    전체 코드 는 아래 에 있 습 니 다.코드 는 모두 테스트 가 정상적으로 실 행 될 수 있 습 니 다.관심 이 있 는 파트너 는 그 중의 사용 방법 을 시도 하고 이해 할 수 있 습 니 다.예 를 들 어 실행 이나 모듈 설치 등 실 패 는 댓 글 구역 에서 메 시 지 를 남 길 수 있 습 니 다.같이 해결 합 시다.
    도움 이 된다 면 좋아요 를 눌 러 보 세 요.오리지널 콘 텐 츠 전 재 는 출처 를 설명해 야 합 니 다!!!
    1.파충류 전체 코드
    우리 가 자주 한 사이트 에 ip 제한 을 요청 하 는 것 을 방지 하기 위해 서,우 리 는 각 페이지 를 오 른 후에 한 동안 자 는 것 을 선택 합 니 다.물론 당신 도 대리 등 다른 방식 으로 스스로 실현 할 수 있 습 니 다.
    
    import requests
    import math
    import time
    import pandas as pd
    
    
    def get_json(url, num):
     """
         url   requests                   ,
     :return:
     """
     url1 = 'https://www.lagou.com/jobs/list_python%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88?labelWords=&fromSearch=true&suginput='
     headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
      'Host': 'www.lagou.com',
      'Referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput=',
      'X-Anit-Forge-Code': '0',
      'X-Anit-Forge-Token': 'None',
      'X-Requested-With': 'XMLHttpRequest'
     }
     data = {
      'first': 'true',
      'pn': num,
      'kd': 'python   '}
     s = requests.Session()
     print('  session:', s, '

    ') s.get(url=url1, headers=headers, timeout=3) cookie = s.cookies print(' cookie:', cookie, '

    ') res = requests.post(url, headers=headers, data=data, cookies=cookie, timeout=3) res.raise_for_status() res.encoding = 'utf-8' page_data = res.json() print(' :', page_data, '

    ') return page_data def get_page_num(count): """ , , 30 , 15 :return: """ page_num = math.ceil(count / 15) if page_num > 30: return 30 else: return page_num def get_page_info(jobs_list): """ :param jobs_list: :return: """ page_info_list = [] for i in jobs_list: # job_info = [] job_info.append(i['companyFullName']) job_info.append(i['companyShortName']) job_info.append(i['companySize']) job_info.append(i['financeStage']) job_info.append(i['district']) job_info.append(i['positionName']) job_info.append(i['workYear']) job_info.append(i['education']) job_info.append(i['salary']) job_info.append(i['positionAdvantage']) job_info.append(i['industryField']) job_info.append(i['firstType']) job_info.append(i['companyLabelList']) job_info.append(i['secondType']) job_info.append(i['city']) page_info_list.append(job_info) return page_info_list def main(): url = ' https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false' first_page = get_json(url, 1) total_page_count = first_page['content']['positionResult']['totalCount'] num = get_page_num(total_page_count) total_info = [] time.sleep(10) print("python :{}, :{}".format(total_page_count, num)) for num in range(1, num + 1): # page_data = get_json(url, num) # json jobs_list = page_data['content']['positionResult']['result'] # python page_info = get_page_info(jobs_list) print(" python :%s" % page_info, '

    ') total_info += page_info print(' {} , {}'.format(num, len(total_info))) time.sleep(20) # data frame , csv df = pd.DataFrame(data=total_info, columns=[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']) # df.to_csv('Python_development_engineer.csv', index=False) print('python ') if __name__ == '__main__': main()
    2.시각 화 된 전체 코드
    데이터 시각 화 는 matplotlib,jieba,wordcloud,pyecharts,pylab,scipy 등 모듈 의 사용 과 관련 되 고 독자 들 은 각 모듈 의 사용 방법 과 그 중에서 관련 된 각종 매개 변 수 를 스스로 이해 할 수 있다.
    
    import pandas as pd
    import matplotlib.pyplot as plt
    import statsmodels.api as sm
    from wordcloud import WordCloud
    from scipy.misc import imread
    # from imageio import imread
    import jieba
    from pylab import mpl
    
    #   matplotlib      
    mpl.rcParams['font.sans-serif'] = ['SimHei'] #       
    mpl.rcParams['axes.unicode_minus'] = False #          '-'        
    #     
    df = pd.read_csv('Python_development_engineer.csv', encoding='utf-8')
    
    #       ,       
    # df.drop(df[df['    '].str.contains('  ')].index, inplace=True)
    # print(df.describe())
    
    
    #   csv            ,                ,       
    pattern = '\d+'
    # print(df['    '], '


    ') # print(df[' '].str.findall(pattern)) df[' '] = df[' '].str.findall(pattern) print(type(df[' ']), '


    ') avg_work_year = [] count = 0 for i in df[' ']: # print(' ',i) # ' ' ' ', , 0 if len(i) == 0: avg_work_year.append(0) # print('nihao') count += 1 # , elif len(i) == 1: # print('hello world') avg_work_year.append(int(''.join(i))) count += 1 # else: num_list = [int(j) for j in i] avg_year = sum(num_list) / 2 avg_work_year.append(avg_year) count += 1 print(count) df['avg_work_year'] = avg_work_year # , 25%, df['salary'] = df[' '].str.findall(pattern) # avg_salary_list = [] for k in df['salary']: int_list = [int(n) for n in k] avg_salary = int_list[0] + (int_list[1] - int_list[0]) / 4 avg_salary_list.append(avg_salary) df[' '] = avg_salary_list # df.to_csv('python.csv', index=False) """1、 python """ plt.hist(df[' '], bins=8, facecolor='#ff6700', edgecolor='blue') # bins plt.xlabel(' ( / )') plt.ylabel(' / ') plt.title('python ') plt.savefig('python .jpg') plt.show() """2、 """ city = df[' '].value_counts() print(type(city)) # print(len(city)) label = city.keys() print(label) city_list = [] count = 0 n = 1 distance = [] for i in city: city_list.append(i) print(' ', len(city_list)) count += 1 if count > 5: n += 0.1 distance.append(n) else: distance.append(0) plt.pie(city_list, labels=label, labeldistance=1.2, autopct='%2.1f%%', pctdistance=0.6, shadow=True, explode=distance) plt.axis('equal') # plt.legend(loc='upper left', bbox_to_anchor=(-0.1, 1)) plt.savefig('python .jpg') plt.show() """3、 """ text = '' for line in df[' ']: if len(eval(line)) == 0: continue else: for word in eval(line): # print(word) text += word cut_word = ','.join(jieba.cut(text)) word_background = imread(' .jpg') cloud = WordCloud( font_path=r'C:\Windows\Fonts\simfang.ttf', background_color='black', mask=word_background, max_words=500, max_font_size=100, width=400, height=800 ) word_cloud = cloud.generate(cut_word) word_cloud.to_file(' .png') plt.imshow(word_cloud) plt.axis('off') plt.show() """4、 pyechart """ city = df[' '].value_counts() print(type(city)) print(city) # print(len(city)) keys = city.index # keys = city.keys() values = city.values from pyecharts import Bar bar = Bar("python ") bar.add(" ", keys, values) bar.print_echarts_options() # , bar.render(path='a.html')
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기