KOTA ITO

All generations.

generate functionMon, 26 Dec 2022

X軸は10代、20代、30代、40代、50代、60代という、年齢です。Y軸は各年代における人気曲のランキングです。この折れ線グラフをスムーズな曲線にする。

# -*- coding: utf-8 -*- import pandas as pd import matplotlib.pyplot as plt import numpy as np df = pd.read_csv('data.csv') #df.set_index('date') #data = pd.read_csv('data.csv') #data.set_index('date') #plt.plot(data) #plt.plot(df) #plt.show() #画像を書き出す #fig = plt.figure() #fig.savefig('fig.png') #plt.show() #2枚のグラフを並べる #fig, ax1 = plt.subplots(2) #ax1[0].plot(df) #ax1[1].plot(df) #plt.show() #スムースにする #x = df.index #y = df['Ranking'] #plt.plot

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使って、Excelファイルの3列目に含まれる日付にしたがって、データを日付ごとのシートに分割する。

import openpyxl def separate(): wb = openpyxl.load_workbook('test.xlsx') ws = wb.worksheets[0] for row in range(2, ws.max_row + 1): date = ws.cell(row=row, column=3).value if date in wb.sheetnames: wb.copy_worksheet(wb[date]) wb.active = wb.sheetnames.index(date) wb.active.max_row += 1 else: wb.create_sheet(title=date) wb.active = wb.sheetnames.index(date) wb.active.append(ws[row]) wb.save('test_out.xlsx') if __name__ == '__main__': separate()

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使って、Excelファイルの3列目に含まれる日付で行をグルーピングして、日付ごとに新しいシートに格納する。

from openpyxl import load_workbook, Workbook wb = load_workbook('output.xlsx') ws = wb.active def add_sheet(wb, header, data): ws = wb.create_sheet(header) ws.append(['日付', '商品名', '数量']) for row in data: ws.append(row) def group_data(ws): data = {} for row in ws.rows: if row[0].value == '日付': continue row_data = [cell.value for cell in row] if row[0].value not in data: data[row[0].value] = [row_data] else: data[row[0].value].append(row_data) return data data = group_data(ws) for header, rows in data.items(): add_sheet(wb, header, rows

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使って、Excelファイルの3列目に含まれる日付にしたがって新しいシートを作成し、それらの日付が含まれる行をを新しいシートに格納する。

import openpyxl from openpyxl import Workbook def copy_sheet(data_set, sheet_name): wb = openpyxl.load_workbook(data_set) sheet = wb.active sheet['1:1'] for col in sheet['1:1']: for col_name in col: if col_name.value == sheet_name: col_num = col_name.col_idx break ws = wb.worksheets[0] wb.copy_worksheet(ws) ws.title = '2020-01-01' row_num = 1 for row in sheet.iter_rows(min_row=2, min_col=1, max_col=sheet.max_column): date = row[col_num-1].value if date == '2020-01-01': row_num = row_num + 1 for row_cell in row: ws.cell(row=

Python
View
generate functionFri, 16 Dec 2022

beautifulsoupを使って、WEBサイトの中の、 X-path ='//*[@id="rankingChart"]/tbody/tr[22]/td'の中にある文字列をすべて取得する

def get_rank(url, tag, attribute, attribute_name, index_start, index_end): html = urllib.request.urlopen(url).read() soup = BeautifulSoup(html, "html.parser") rank = [] for i in range(index_start, index_end): element = soup.select(tag)[i] rank.append(element[attribute]) return rank rank = get_rank(url, 'tr', 'class', '', 22, 27)

Python
View
generate functionFri, 16 Dec 2022

文字列の中から、「調査対象期間:」と「〜」に囲まれた日付の文字列だけを取得する

def get_date(date_str): start_index = date_str.find('調査対象期間:') end_index = date_str.find('〜') date_str_without_symbol = date_str[start_index + 6:end_index] date_list = date_str_without_symbol.split('/') date_list_with_zero = [] for date in date_list: if len(date) == 1: date_list_with_zero.append('0' + date) else: date_list_with_zero.append(date) return '-'.join(date_list_with_zero)

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使ってExcelファイルを開き、シートの3列目に含まれる日付でデータをグルーピングする。 グルーピングしたデータを別々のシートに分割する。シートの名前には日付を入れる。 最後に新しいエクセルファイルに保存する。

import openpyxl def split_excel(filepath): # Excelファイルを開く wb = openpyxl.load_workbook(filepath) # アクティブなシートを取得 ws = wb.active # 3列目のデータのみを取り出す dates = [cell.value for row in ws.iter_rows(min_row=2, max_col=3, max_row=ws.max_row) for cell in row] # 同じ日付のデータをまとめる grouped = {} for date in dates: if date not in grouped: grouped[date] = [] grouped[date].append(date) # 元のシートからデータを削除 ws.delete_rows(2, ws.max_row - 1) # 新しいシ

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使う。Excelファイルの3列目に含まれる日付でデータをグルーピングする。 グルーピングしたデータを別々のシートに分割する。シートの名前には日付を入れる。

import openpyxl #openpyxlを使う def openpyxlで開く(ファイル名): wb = openpyxl.load_workbook(ファイル名) return wb #読み込んだファイルを開く wb = openpyxlで開く('ファイル名.xlsx') ws = wb.active #3列目に日付が入っていることを確認 for i in range(2, ws.max_row + 1): print(ws.cell(row=i, column=3).value) #日付でグルーピング days = {} for i in range(2, ws.max_row + 1): date = ws.cell(row=i, column=3).value if not date in days: days[date] = [] days[date].append(i)

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使って、Excelファイルの一列目に'Japan'が含まれる行を全て抜き出す。次にそれらの行を新しいExcelファイルに格納する。

from openpyxl import load_workbook import openpyxl def filter(filename): wb = load_workbook(filename) print(wb.sheetnames) sheet = wb['Sheet1'] new_wb = openpyxl.Workbook() new_ws = new_wb.active new_ws.title = 'new' row_num = 0 for row in sheet.values: if row[0] == 'Japan': new_ws.append(row) new_wb.save('out.xlsx') filter('sample.xlsx')

Python
View
generate functionMon, 20 Mar 2023

beautiful soupで、//*[@id="rso"]/div[1]/div/div/div[1]/div/aに含まれるURL文字列を取得する。

from urllib.request import urlopen from bs4 import BeautifulSoup from urllib.error import HTTPError def get_url(url): try: html = urlopen(url) except HTTPError: return None try: bsObj = BeautifulSoup(html.read(), 'lxml') #bsObj = BeautifulSoup(html.read(), 'html.parser') except AttributeError: return None return bsObj.find("div", {"id": "rso"}).find("div", {"class":"g"}).find("div", {"class":"rc"}).find("a").get('href')

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使ってExcelファイルを開き、シートの3列目に含まれる日付でデータをグルーピングする。 グルーピングしたデータを別々のシートに分割する。シートの名前には日付を入れる。 最後に新しいエクセルファイルに保存する。

import datetime import openpyxl def split_data_by_date(file_name): wb = openpyxl.load_workbook(file_name) sheet = wb.active date_list = [] date_data = {} for row in sheet.iter_rows(min_row=1, max_row=sheet.max_row, min_col=3, max_col=3): if row[0].value not in date_list: date_list.append(row[0].value) date_data[row[0].value] = [] date_data[row[0].value].append(row) # new workbook new_wb = openpyxl.Workbook() new_wb.create_sheet(title='date list') new_sheet = new_wb.get_sheet_by_name('date list') for index, cell in enumerate(date_list): new_sheet.cell(row=index+1, column=1

Python
View
generate functionThu, 01 Dec 2022

wordcloudの背景色を黒に変更する。

# import wordcloud from wordcloud import WordCloud # textを取り込み、wordcloudを生成 fpath = "C:/Windows/Fonts/meiryo.ttc" wordcloud = WordCloud(background_color="black", font_path=fpath, width=900, height=500).generate(text) # 画像を表示 plt.figure(figsize=(15,12)) plt.imshow(wordcloud) plt.axis("off") plt.show()

Python
View
generate functionWed, 07 Dec 2022

pandasデータフレームから隣接行列を作成する。

def _make_adjacency_matrix(df, number, thres=0, normalize=False): num_max = df.shape[0] result = np.zeros((num_max, num_max), dtype=np.float32) for i in range(num_max): for j in range(num_max): result[i][j] = abs(df.iloc[i, number] - df.iloc[j, number]) result[result < thres] = 0 if normalize: result[result > 0] = 1 return result

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使って、Excelファイルの3列目に含まれる日付ごとに、データを別々のシートに分割する。シートの名前には日付を入れる。

from openpyxl import load_workbook wb = load_workbook(filename = 'sample.xlsx') ws = wb.active wbnew = Workbook() for row in ws.iter_rows(min_row=1, min_col=3, max_col=3): for cell in row: # ここでExcelのDate型をdatetime型に変換 date = datetime.datetime.strptime(cell.value, '%Y-%m-%d %H:%M:%S') # 日付ごとにシートを作成 wsnew = wbnew.create_sheet(index=0, title=date.strftime('%Y%m%d')) wsnew.append(ws['A1:C1']) for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=1, max_col

Python
View
generate functionFri, 16 Dec 2022

['\r\n\t\t\t実査日: 2022年8月20日\u3000調査対象期間:2022年8月13日~8月19日'] という文字列の中の、'調査対象期間:'という文字列と、'〜'に囲まれた、'2022年8月13日'という日付だけをテキストとして取得する。

import re # 実査日: 2022年8月20日 調査対象期間:2022年8月13日 ~ 8月19日 # ['\r\n\t\t\t実査日: 2022年8月20日\u3000調査対象期間:2022年8月13日~8月19日'] def get_exam_period(sentence): # 正規表現のコンパイル pattern = re.compile(r'調査対象期間:(.*)〜(.*)$') # 文字列から日付を抜き出す m = pattern.search(sentence) start = m.group(1)

Python
View
generate functionFri, 16 Dec 2022

beaurifulsoupを使って、WEBサイトの中の、 X-path '//*[@id="rankingChart"]/tbody/tr[22]/td' の中にある文字列を取得する

BASE_URL = 'https://www.credit-suisse.com/jp/ja/investment-services/research/regional-strategy/' def get_table_data(url, xpath): import requests from bs4 import BeautifulSoup source = requests.get(url) soup = BeautifulSoup(source.content, 'lxml') print(soup.select_one(xpath).get_text()) get_table_data(BASE_URL, '//*[@id="rankingChart"]/tbody/tr[22]/td')

Python
View
generate functionFri, 16 Dec 2022

['\r\n\t\t\t実査日: 2022年8月20日\u3000調査対象期間:2022年8月13日~8月19日'] という文字列の中の、'調査対象期間:'という文字列の後ろにある、'2022年8月13日'という日付だけをテキストとして取得する。

In [1]: S = '実査日: 2022年8月20日\u3000調査対象期間:2022年8月13日~8月19日' In [2]: S.find('調査対象期間:') Out[2]: 17 In [3]: S[17:].find(~') Out[3]: 14 In [4]: S[17+14:] Out[4]: '2022年8月13日'

Python
View
generate functionMon, 06 Feb 2023

# URL用のカントリーコードをリストとして取り出す。 import pandas as pd df_cc = pd.read_csv('220919_country_code.csv') # 2 charactersの列のみリスト化する import itertools country_list = df_cc['2 characters'].values.tolist() list(itertools.chain.from_iterable(country_list)) # print(country_list) # 存在しない国名をリストから削除する。 remove_list = ['af', 'ax', 'al', 'dz', 'as', 'ad', 'ao', 'ai', 'aq', 'ag', 'am', 'aw', 'az', 'bs', 'bh', 'bd', 'bb', 'bz', 'bj', 'bm', 'bt', 'bq', 'ba', 'bw', 'bv', 'io', 'bn', 'bf', 'bi', 'kh', 'cm', 'cv', 'ky', 'cf', 'td', 'cn', 'cx', 'cc', 'km', 'cg', 'cd', 'ck', 'ci', 'hr', 'cu', 'cw', 'cy', 'dj', 'dm', 'gq', 'er', 'et', 'fk', 'fo', 'fj', 'gf', 'pf', 'tf', 'ga', 'gm', 'ge', 'gh', 'gi', 'gl', 'gd', 'gp', 'gu', 'gg', 'gn', 'gw', 'gy', 'ht', 'hm', 'va', 'ir', 'iq', 'im', 'jm', 'je', 'jo', 'ke', 'ki', 'kp', 'kw', 'kg', 'la', 'lb', 'ls', 'lr', 'ly', 'li', 'mo', 'mk', 'mg', 'mw', 'mv', 'ml', 'mt', 'mh', 'mq', 'mr', 'mu', 'yt', 'fm', 'md', 'mc', 'mn', 'me', 'ms', 'mz', 'mm', 'na', 'nr', 'np', 'nc', 'ne', 'nu', 'nf', 'mp', 'om', 'pw', 'ps', 'pg', 'pn', 'pr', 'qa', 're', 'ru', 'rw', 'bl', 'sh', 'kn', 'lc', 'mf', 'pm', 'vc', 'ws', 'sm', 'st', 'sn', 'rs', 'sc', 'sl', 'sx', 'si', 'sb', 'so', 'gs', 'ss', 'lk', 'sd', 'sr', 'sj', 'sz', 'sy', 'tj', 'tz', 'tl', 'tg', 'tk', 'to', 'tt', 'tn', 'tm', 'tc', 'tv', 'ug', 'um', 'uz', 'vu', 'vg', 'vi', 'wf', 'eh', 'ye', 'zm', 'zw'] country_list = [x for x in country_list if x not in remove_list] # print(country_list) # 取得したいチャートの日付を指定する d = '2022-11-17' # forループでURLリストを作成する urllist = [] for cc in country_list: urllist.append(f'https://charts.spotify.com/charts/view/regional-{cc}-weekly/{d}') # !pip install PySimpleGUI import chromedriver_binary from selenium import webdriver import time # ChromeのWebDriverを使用する driver = webdriver.Chrome() from selenium import webdriver #from selenium.webdriver.firefox.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options from selenium.common.exceptions import NoSuchElementException from bs4 import BeautifulSoup import pandas as pd import time import re import csv import PySimpleGUI as sg from webdriver_manager.chrome import ChromeDriverManager # def setup_class(cls): # cls.driver = webdriver.Chrome(ChromeDriverManager().install()) # download = f'/Users/hdymacuser/Documents/データ分析/2302_Spotify_Kaggle/spotify_chart_country_weekly' # options = webdriver.ChromeOptions() # options.add_experimental_option("prefs", {"download.default_directory": download }) # 乱数を発生させる from random import randint from time import sleep #Seleniumを使うための設定とSpotifyの画面への遷移 options = Options() options.add_argument('--headless') #options = webdriver.ChromeOptions() options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--start-fullscreen') options.add_argument('--disable-plugins') options.add_argument('--disable-extensions') options = webdriver.ChromeOptions() download = '/Users/hdymacuser/Documents/データ分析/2302_Spotify_Kaggle/spotify_chart_country_weekly' options.add_experimental_option("prefs", {"download.default_directory": download }) INTERVAL = 1.5 driver = webdriver.Chrome(options=options) driver.maximize_window() time.sleep(INTERVAL) # Spotifyにログインする from time import sleep # Initialize the Chrome webdriver # driver = webdriver.Chrome(driver_path, options=options) options.add_argument('--headless') driver = webdriver.Chrome(options=options) error_flg = False # ログインページを開く target_url = 'https://accounts.spotify.com/ja/login?continue=https%3A%2F%2Fcharts.spotify.com/login' driver.get(target_url) sleep(randint(2, 3)) driver.set_window_size(1920, 1080) driver.save_screenshot('screenshot_login.png') driver.find_element(By.ID, 'login-username').send_keys('islifeshort@hotmail.com') #USERNAME #password driver.find_element(By.ID, 'login-password').send_keys('#Atok1010') #PASSWORD driver.find_element(By.ID, 'login-button').click() sleep(randint(2, 3)) # ここのスリープがないとDLするページでエラーが起きるみたい driver.save_screenshot('screenshot_afterlogin.png') from selenium.webdriver.common.keys import Keys # forループで各URLのファイルをダウンロードしていく for u in urllist: driver.get(u) driver.set_window_size(1920, 1080) sleep(randint(4,7)) if u == 'https://charts.spotify.com/charts/view/regional-au-daily/2023-01-14': driver.save_screenshot('screenshot_dl_au.png') else: driver.save_screenshot('screenshot_dl.png') try: element = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div/main/div[2]/div[3]/div/div/a/button') driver.execute_script('arguments[0].click();', element) time.sleep(INTERVAL) except Exception: error_flg = True print(f'{u}でダウンロードダウンロードボタン押下時にエラーが発生しました。') import pandas as pd import os import glob # ディレクトリ変更 os.chdir('/Users/hdymacuser/Documents/データ分析/2302_Spotify_Kaggle/spotify_chart_country_weekly') df = pd.DataFrame(columns = []) for i in glob.glob(f"regional*{d}.csv"): # ここの日付を最新に修正すること! tmp = pd.read_csv(i) tmp['day'] = i df = pd.concat([df, tmp] ) print(df) # day列に入っているファイル名から日付を取り出す df2 = df['day'].str.extract(r'weekly-(.+).csv', expand=True) df2.rename(columns={0: 'yymmdd'}, inplace=True) print(df2) # day列に入っているファイル名から国名を取り出す df2_2 = df['day'].str.extract(r'regional-(.+)-weekly', expand=True) df2_2.rename(columns={0: 'country_code'}, inplace=True) print(df2_2) df3 = pd.concat([df, df2, df2_2], axis=1) print(df3) df4 = pd.merge(df3, df_cc, left_on='country_code', right_on='2 characters', how='left') print(df4) # 今日の日付を取得する import datetime t_delta = datetime.timedelta(hours=9) JST = datetime.timezone(t_delta, 'JST') now = datetime.datetime.now(JST) today = f'{now:%y-%m-%d}' today=str(today).replace('-','') df4.to_csv(f"/Users/hdymacuser/Documents/データ分析/2302_Spotify_Kaggle/merged_csv/{today}_SpotifyChart_weekly_{d}.csv", index=False, encoding='utf_8_sig')

# FOR LOOP for c in df_cc['2 characters']: # 取得したいチャートの日付を指定する d = '2022-11-17' # URLの作成 url = f'https://charts.spotify.com/charts/view/regional-{c}-weekly/{d}' print(url) # Seleniumを使うための設定とSpotifyの画面への遷移 options = Options() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--start-fullscreen') options.add_argument('--disable-plugins') options.add_argument('--disable-extensions') # Initialize the Chrome webdriver driver =

Python
View
generate functionFri, 16 Dec 2022

beautifulsoupを使って、X-path を’//*[@id="rankingChart"]/tbody/tr[22]/td'と指定し、文字列をすべて取得する

from bs4 import BeautifulSoup import requests from bs4 import BeautifulSoup import urllib.request from urllib.request import urlopen from bs4 import BeautifulSoup from urllib.parse import urljoin from urllib.parse import urlparse def get_title(url): html = urlopen(url) soup = BeautifulSoup(html, "html.parser") return soup.title.text def get_links(url): a = urlparse(url) base = a.scheme + "://" + a.netloc html = urlopen(url) soup = BeautifulSoup(html, "html.parser") links = [] for link in soup.find_all("a"): href = link.attrs["href"] if href.startswith("/"): url = base + href if url not in links: links.append(url) elif base in href: if href not in links

Python
View
generate functionFri, 16 Dec 2022

WEBサイトの中の、<table id="rankingChart">の最後の行をスクレイピングして、中にある文字列を取得する。

import requests from bs4 import BeautifulSoup def scrape_ranking_table(url): response = requests.get(url) parser = BeautifulSoup(response.text, "html.parser") ranking_table = parser.find("table", id="rankingChart") last_row = ranking_table.find_all("tr")[-1] return last_row.text scrape_ranking_table("https://www.melon.com/chart/index.htm")

Python
View
generate functionSun, 25 Dec 2022

SpotipyでAPIを使って、artist_related_artistsを上限の50まで取得して、結果をデータフレームに格納する。

import spotipy import pandas as pd spotify = spotipy.Spotify() def artist_related_artists(artist, limit=50): result = spotify.artist_related_artists(artist) artists = [] for item in result['artists']: artists.append([artist, item['name']]) return artists df = pd.DataFrame(artist_related_artists('Kendrick Lamar'), columns=['artist', 'related_artist'])

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使って、Excelファイルの一列目に'Japan'が含まれる行を全て抜き出す。次にそれらの行を新しいExcelファイルに格納する。 その後、3列目に含まれる日付で行をグルーピングして、日付ごとに新しいシートに格納する。

import openpyxl # open the input file in_file = openpyxl.load_workbook('test.xlsx') in_sheet = in_file.active # create a new file out_file = openpyxl.Workbook() out_sheet = out_file.active out_sheet.title = 'Japan' # copy data for row in in_sheet.rows: if row[0].value == 'Japan': out_sheet.append(row) # write the output file out_file.save('out.xlsx')

Python
View
generate functionWed, 14 Dec 2022

wikipediaのAPIから特定のページの閲覧者数を取得する

import requests import json def get_views(title): url = "https://ja.wikipedia.org/w/api.php" params = { 'action': 'query', 'format': 'json', 'titles': title, 'prop': 'info', 'inprop': 'url|talkid|watched|subjectid|readable|preload|displaytitle', 'uselang': 'user' } r = requests.get(url, params = params) data = json.loads(r.text) pages = data['query']['pages'] for key in pages: print(pages[key]['title']) print(pages[key]['views']) get_views('特定秘密保護法')

Python
View
generate functionWed, 18 Jan 2023

graph_from_pointで指定した座標から半径3000mの範囲の道路ネットワークを取得し、面積(平方メートル)を取得する

import osmnx as ox import networkx as nx def get_area(lat, lng): # construct a network from the point area = ox.graph_from_point((lat, lng), distance=3000, network_type='drive') # get the area in square meters area_m2 = ox.project_gdf(ox.graph_to_gdfs(area, edges=True)).unary_union.convex_hull.area return area_m2

Python
View
generate functionWed, 07 Dec 2022

pandasデータフレームから隣接行列を生成する。

import pandas as pd import numpy as np def func(df, v): matrix = df.pivot_table(index=v, columns=v, values='value', aggfunc=np.size) matrix.fillna(0, inplace=True) matrix = matrix.apply(lambda x: x/sum(x)) return matrix data = pd.DataFrame({'A':['a','a','b','b'], 'B':['c', 'd', 'c', 'd'], 'value':[1,1,1,1]}) func(data, 'A')

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使う。Excelファイルの3列目に含まれる日付でデータをグルーピングする。 グルーピングしたデータを別々のシートに分割する。シートの名前には日付を入れる。

import openpyxl # 日付を文字列で取得 def get_date(value): if value: return value.strftime("%Y/%m/%d") else: return "" # ws:ワークシート def grouping(ws): # グルーピングする列番号 target_column = 3 # グルーピングする日付のリスト target_dates = [] # グルーピングした行番号のリスト target_rows = [] # グルーピングしたデータを入れる辞書 dates_data = {} # 列数 col_size = ws.max_column # 行数 row_size = ws.max_row # 行ごとに、データがあれ

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使って、Excelファイルの3列目に含まれる日付ごとに、データを新しいシートに格納する。

# import openpyxl import openpyxl # open xlsx file datasheet = openpyxl.load_workbook('datasheet.xlsx') # create new workbook new_datasheet = openpyxl.Workbook() # get sheetnames sheet_names = datasheet.get_sheet_names() # create sheet new_datasheet.create_sheet(index = 0, title = 'new_sheet') # get sheet sheet = datasheet.get_sheet_by_name(sheet_names[0]) # get sheet new_sheet = new_datasheet.get_sheet_by_name('new_sheet') # get rows and cols rows = sheet.max_row cols = sheet.max_column # get first col for i in range(1, sheets.max_row + 1): if sheet.cell(row = i, column = 1).value != 'None': print(sheet.cell(row = i, column = 1).value

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使って、Excelファイルの3列目に含まれる日付にしたがって、データを週ごとのシートに分割する。

import openpyxl from datetime import datetime wb = openpyxl.load_workbook('file.xlsx') wb.worksheets[0].title = 'Sheet1' ws1 = wb.worksheets[0] ws_dict = {} for row in ws1['A1':'C20']: date = row[2].value date = datetime.strptime(str(date), '%Y-%m-%d') week = date.strftime('%Y-%W') if week not in ws_dict: ws_dict[week] = wb.create_sheet(title=week) for cell in row: ws_dict[week].append(cell.value) wb.save('output.xlsx')

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使う。Excelファイルの3列目に含まれる日付でデータをグルーピングする。 グルーピングしたデータを別々のシートに分割する。シートの名前には日付を入れる。

def group_by_date(filepath): book = openpyxl.load_workbook(filepath) sheet = book.active # get values of column C in sheet1 column_date = sheet['C'] column_date_values = [cell.value for cell in column_date] # remove None column_date_values = [value for value in column_date_values if value is not None] # convert datetime.date to datetime.datetime column_date_values = [datetime.datetime(value.year, value.month, value.day) for value in column_date_values] # convert datetime.datetime to str column_date_values = [str(value.date()) for value in column_date_values] # delete duplicate values column_date_values = set(column_date_values) # group data by date grouped_data = {} for date_value in column_date_values: grouped_data[date_value] = []

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使って、Excelファイルの3列目に含まれる日付で行をグルーピングして、日付ごとに新しいシートに格納する。

import datetime from openpyxl import load_workbook from openpyxl.styles import Font from openpyxl.utils import get_column_letter # ファイルの読み込み wb = load_workbook('sample.xlsx') sheet = wb['Sheet1'] # 日付を取得する dates = [] for cell in sheet['C']: if isinstance(cell.value, datetime.datetime): dates.append(cell.value) # 日付ごとにシートを分ける for date in dates: sheet_name = date.strftime('%Y-%m-%d') # シートがなければ作成 if wb.get_sheet_by_name(sheet_name) is None: wb.create_sheet(title=sheet_name) # シートにコピー w

Python
View
generate functionThu, 15 Dec 2022

openpyxlを使ってExcelファイルを開き、シートの3列目に含まれる日付でデータをグルーピングする。 グルーピングしたデータを別々のシートに分割する。シートの名前には日付を入れる。 最後に新しいエクセルファイルに保存する。

import openpyxl import datetime def split_sheet_by_date(excel_file_path, sheet_name): wb = openpyxl.load_workbook(excel_file_path) sheet = wb.get_sheet_by_name(sheet_name) date_max_col = sheet.max_column date_max_row = sheet.max_row date_list = [] for i in range(1, date_max_row + 1): date = sheet.cell(row = i, column = 3).value date_list.append(date) date_set = set(date_list) for date in date_set: wb.create_sheet(date) new_sheet = wb.get_sheet_by_name(date) for i in range(1, date_max_row + 1): if sheet.cell(row = i, column = 3).value == date: for j in range(1, date_max_

Python
View
generate functionFri, 16 Dec 2022

「調査(掲載ptは小数点第1で四捨五入)実査日:2022年12月3日 調査対象期間:2022年11月26日~12月2日」という文字列の中から、正規表現を使って、「調査対象期間:」と「〜」に囲まれた「2022年11月26日」という文字列を取得する。

import re def fetch_date(text): return re.search(r'調査対象期間:(.+?)〜', text).group(1) fetch_date('調査(掲載ptは小数点第1で四捨五入)実査日:2022年12月3日 調査対象期間:2022年11月26日〜12月2日')

Python
View

Questions about programming?Chat with your personal AI assistant